גוגל תמונות כמנוע ליצירת רקעים לשולחן העבודה

גיליתי שאני צריך מתאם HDMI DVI , וניסיתי להבין בדיוק איך הוא אמור להראות כדי שאני לא אקנה את המתאם הלא נכון.
חיפוש בגוגל תמונות הביא תמונה, וקניתי מה שרציתי באמזון.

אחרי כמה שעות הסתכלתי במקרה שוב במסך תוצאות החיפוש וראיתי שהוא פשוט יפה.
אז הנה אתגר:
תמצאו עוד חיפושים שמביאים תוצאות אסתטיות בגוגל תמונות, שיהיו מספיק יפות בשביל להיות רקע לשולחן עבודה כמו זו (קליק לתמונה המלאה) :

כל העניין די מגניב, וחשבתי אפילו לכתוב תוכנית קטנה שמרנדרת את התוצאות חיפוש של גוגל כדי להפיק רקעים על פי דרישה :).

AWS

מסיבות היסטוריות, תמיד העדפתי את החומרה שלי אמיתית ולא וירטואלית.
בחודש האחרון יצא לי להתנסות בעבודה עם AWS – הלו הוא שרותי הווב של אמזון (Amazon Web Services) שכולל בין היתר את:

  • EC2 – הענן האלסטי של אמזון, שמאפשר להקצות מכונות וירטואליות על פי דרישה, שמריצות מה שבא לכם.
  • S3 – שרות אחסון הנתונים הוותיק של אמזון
  • RDS – שרותי בסיס נתונים, למעשה מכונת MySQL בניהול של אמזון, שכולל גם שרותי גיבוי, Read replica, סנאפ-שוטים של הנתונים ועוד.

מכונה וירטואלית בEC2 כוללת שטח אכסון מקומי (הרדיסקים לצורך העניין).
בעבר – מערכת הקבצים של המכונה ישבה על הדיסקים האלו. הImage של מערכות בשיטה הזו נקרא Instance store image, ואוכסנו בS3 – שרות איכסון הנתונים של אמזון.

אחת התכונות של הדיסקים המקומיים היא שכשהמכונה מוקצה מקבלים דיסקים ריקים, וכשהמכונה משוחררת (Terminated) המידע על הדיסקים האלו אובד לתמיד.
הדבר הזה גרם לקשיים אמיתיים להריץ בסיס נתונים על EC2, עד שאמזון פיתחו את הEBS (Elastic block store):
הEBS דומה במהות שלו למערכת איכסון מרכזית שמקצה דיסקים למכונות קצה, ולכן ביצועי הקריאה/כתיבה שלו תלויים בעומס עליו. במילים אחרות – אתם עשויים לסבול מביצועי קריאה/כתיבה ירודים כי משתמשים אחרים מתפרעים.
אם חשובים לכם ביצועי הIO, ואתם מוכנים לספוג אובדן של הנתונים אם המכונה משוחררת, שווה לההשתמש בדיסקים המקומיים, תקבלו ביצועיי IO צפויים יותר ובנוסף לא יהיה לכם תשלום לפי נפח הIO שאתם מבצעים (בניגוד לשימוש בEBS).
אפשר כמובן להגדיר אותם בתצורת  RAID-0 כדי לשפר את הביצועים

היתרון המרכזי ביותר לVolume של EBS הוא שמחזור החיים שלו נפרד מזה של המכונה אליה הוא מחובר: אם המכונה שאליה הוא מחובר משוחררת, הוא ממשיך להתקיים בנפרד ואפשר לחבר אותו למכונה אחרת (אבל רק לאחת בו זמנית כמובן).

EBS שמאפשר הקצאה של "דיסק" בצורה דינמית, וחיבור שלו למכונה בצורה דינאמית. בנוסף אפשר כמובן לשמור את מערכת הקבצים (root) של המכונה שם. Image כזה נקרא EBS Image, והוא עדיף ברוב הבחינות על הImage הוותיק יותר.
גם מכונות מבוססות EBS כוללות דיסקים מקומיים שתכלו לנצל אם תרצו (מה שאומר לפעמים שצריך לפרמט אותם).

אחד היתרונות המהותיים ביותר של ספקי ענן על פני ספק שרתים קלאסי הוא הזמן הנדרש כדי לקבל מכונה חדשה:

בספק קלאסי, מדובר בדרך כלל בכמה ימים לכל הפחות, שבהם הוא יזמין חומרה חדשה לפי דרישתכם, יתקין עליה מערכת הפעלה ויספק את המכונה.
בEC2, התהליך לוקח דקות, ואתם לא צריכים לשלוח אימייל לאף אחד, ניתן להקצות את המכונה מממשק הניהול של AWS, או בשימוש בSDK בשפה המועדפת עליכם.
מכיוון שהתהליך הוא כל כך אוטומטי, יש כמה דברים שאין לכם עליהם שליטה:
קודם כל, מאפייני החומרה מוגבלים למספר מצומצם של סוגי מכונות, ואתם צריכים לבחור את סוג המתאים ביותר.
בנוסף, המכונה תקבל כתובת IP פנימית וחיצונית שונה בכל שתקצו אותה, ושם המכונה יהיה מגעיל במיוחד (איזה חרא שמבוסס על כתובת הIP הפנימית).
אם אתם מגיעים כמוני מחוות שרתים קלאסית, זה יהיה מעצבן במיוחד. הצורך לשלוט על השם של מכונה הוא טריויאלי וחיוני במקרים רבים.

כשמקצים מכונה בEC2, חוץ מהפרטים הרגילים של סוג המכונה, איפה היא תהיה, על איזה אימג' היא תתבסס וכו' – אפשר גם להעביר מידע כללי כלשהו למכונה, שיהיה זמין לה על פי דרישה.
ספציפית אפשר להעביר למכונה את שם ההוסט שאנו רוצים שהיא תקבל, ואולי גם כל מני פרטים שיעזרו למכונה להגדיר את עצמה לפי הצורך בעליה הראשונה.
אם משתמשים בVPC – הלו הוא ענן וירטואלי פרטי, מקבלים כמה יתרונות, קודם כל אפשר לשלוט על תצורת הרשת של המכונות לחלוטין, מה שאומר שתוכלו לבחור כתובות IP, סאבנטים, שרת DNS וכו'.
כדי לשלוט גם על שם ההוסט של המכונה, המכונה מעדכנת DNS פנימי בשם ובכתובת הIP שלה (הDNS הוא מכונה וירטואלית בעצמו בתוך הVPC שלכם). מכיוון שכל המכונות שלכם מוגדרות להשתמש בDNS הזה, שם ההוסט החדש יהיה מוכר לכל המכונות האחרות אוטומטית ברגע שהמכונה עולה ומעדכנת את הDNS.

כל המכונות הוירטואליות שלי מבוססות על אותו IMAGE, למרות שהן מסוגים שונים ומשונים, יש לי שם:

  • מכונות DNS
  • מכונות Memcached
  • מכונות WEB
  • מכונות Gearman
  • מכונת HAProxy
  • ועוד

אז איך יתכן שכל המכונות מבוססות על אותו IMAGE?
כאמור, כשאני מקצה מכונה אני מעביר לה את ה"סוג" שלה בUSER-DATA.
כשהמכונה עולה, היא מעבירה את הסוג שלה לשרת תצורה מרכזי מסוג Puppet, שאומר למכונה מה לעשות כדי להפוך למה שהיא אמורה להפוך.
אפשר למלא כמה פוסטים רק על Puppet (ואפילו כתבתי עליו כבר פעם), אבל הפעם אני לא ארחיב.

כאשר יש לכם מערכת אלסטית של שרתים, שבה שרתים יכולים לבוא וללכת לפי דרישה – נוצרת בעיה של ניהול. למשל, אם תרצו להפעיל מחדש את כל שרתי האפ'אצי במכונות הWEB – איך תעשו את זה? בתור התחלה, איך תדעו בכלל איזה שרתים הם מכונות WEB ומה הכתובות שלהם?
אם תרצו לברר מה הגרסא של חבילה מסויימת בכל השרתים, איך תדעו מה כל השרתים?
פתרון אחד הוא  לנהל בסיס נתונים מרכזי שישמור מידע על השרתים. הפתרון הזה עובד, אבל הוא בעייתי : צריך לתחזק אותו, ויש לשים לב במיוחד למה קורה כשמכונה משוחררת.

פתרון אלטרנטיבי הוא להשתמש במערכת Marionette collective:
קונספטואלית, mcollective  היא נטולת שרת מרכזי.
יש שרת הודעות כללי (Message queue) מסוג ActiveMQ שמשמש לתקשורת בין המכונות. פלאגינים מיוחדים בשם Agents רצים על המכונות, ומאפשרים ביצוע פעולות שונות ומשונות עליהם.
הפעולות יכולות להיות מסוננות לפי "עובדות" שהמכונות יודעות על עצמן, במילים אחרות – מכונת WEB, שיודעת היא מכונת WEB, לא תבצע פעולה שמיועדת למכונת Gearman.
ההתקנה של MCollective היא לא מאוד מסובכת, ומה שיפה זה שהActiveMQ עובד, כל מכונה שעולה אוטומטית זמינה דרך הMCollective (כמובן – היא צריכה להריץ את השרת של MCollective, אבל כל זה חלק מהIMAGE הבסיסי.
שווה מאוד לראות את הסרטונים באתר של Mcollective כדי להבין במה מדובר.

אם לסכם, אני מרוצה מהמערכת שקמתי באמזון, ובגדול מהגמישות שנובעת מהתשתיות של אמזון.
יש לי עדיין לדאוג לכל העניין של איזורי הזמינות, גיבויים שוטפים וכו'.

אם תהיה דרישה, אולי אני אכתוב עוד כמה פוסטים שמפרטים לגבי חלקים ספציפיים מהתצורה שלי בAWS.

אינטרנט ללא הגבלה – לחצי יום בחודש

בעקבות הגעת NGN לאיזור שלי, שדרגתי את מהירות האינטרנט שלי ל15 מגה-ביט, באימייל "חוזה" שקיבלתי מבזק בין לאומי – ספק האינטרנט שלי – ראיתי את ההברקה הבאה:

@ גלישה ללא הגבלת זמן במהירות של עד 15.00 מס"ש קצב הורדה ו- 800 קס"ש קצב העלאה בהיקף העברת נתונים(הורדה והעלאה) של עד 65 ג'יגה בייט (GB) בחודש שירות ("מסגרת החבילה").

העברת נתונים של עד 65 ג'יגה בייט לחודש. בואו נחשב רגע, 15 מגה-ביט זה 1.875 מגה בייט לשניה, או 6.7 ג'גה לשעה – או 162 ג'יגה בייט ליום.
במילים אחרות, בזק מקציבים לי הורדה רציפה של בערך חצי יום במהירות מקסימלית, ואז אני יכול לסגור את המחשב וללכת לים עד סוף החודש.
חשבתי לתומי שזו טעות, הרי זו הגבלה מטופשת בעליל – והתקשרתי אליהם.
הנציגה המסכנה לא ידעה מאיפה נפלתי לה, "אין שום הגבלה" היא חזרה ואמרה והקריאה לי את תנאי החוזה (המהירות, המחיר וההתחייבות)
אם אין הגבלה, הקשתי – למה כתוב שיש באימייל הרשמי ששלחת לי שמותר לי להוריד רצוף חצי יום בחודש?
"אני אשלח לך אימייל חדש שבו לא יהיה כתוב", אמרה הנציגה.
הסכמתי בשימחה, וכשהגיע האימייל החדש כמובן זה עדיין היה שם.
שלחתי לה אותו חזרה, והיא הלכה לבדוק את זה מול הבכירים במשמרת.
היא חזרה ובשורה בפיה : "לא אוכפים את זה".
"אם לא אוכפים את זה, למה זה כתוב?", שאלתי,
אה, זו הנחיה מלמעלה.
טוב, כמובן שמציגת שרות לקוחות לא ציפיתי ליותר מדי, הרי היא לא באמת יכולה לשנות דברים כאלו.

פניתי לפניות הציבור של בזק Pniot@bezeqint.co.il (אל תטרחו עם הפורם באתר שלהם, הוא מגביל אתכם לשבע תווים לפניה).
קיבלתי תגובה, פרשתי את הטענה שלי – ואז כלום.
אחרי כמה שבועות, שלחתי עוד אימייל, ותהיתי אם הם מתעלמים.
אחרי כמה שבועות, עוד אימייל.
לבסוף חזרו אלי, טלפונית, ואחרי שיחה די מתישה שלא הגיעה לשום מקום מיוחד וכללה רמזים שהם שקלו לבטל את ההגבלה, קיבלתי את זה באימייל הסיכום:

  • בהתייחס לטענתך בדבר מסגרת תעבורת הנתונים בחבילה נבקש לציין, כי בזק בינלאומי, שהינה ספקית האינטרנט המובילה בישראל והאחרונה מבין כל הספקיות האינטרנט בארץ לבצע מהלך זה, בפועל טרם אכפה את המגבלה על השימוש בשירותים המצוינת במכתב ההצטרפות.
  • יצוין, מטרתה של מגבלה זו, הינה לאפשר לבזק בינלאומי לשמור על אפשרות לשלוט בחריגות קיצוניות בנפחי התעבורה ובכך ליישם מדיניות שימוש הוגן בשירותיה (fair usage policy), כמקובל בארץ ובעולם.
  • על אף האמור לעיל וכפי שסוכם בשיחתנו הטלפונית, לפנים משורת הדין ולמען שביעות רצונך, ככל שמסגרת תעבורת הנתונים תוחל בעניינך, תינתן לך האפשרות לבטל את שירותי הגלישה המסופקים לך על ידי בזק בינלאומי ללא תשלום יתרת חודשי ההתחייבות הנותרים בחבילה וזאת בתוך 30 יום מיום תחילת אכיפת המסגרת.
    יובהר, כי האמור בסעיף 4 לעיל תקף אך ורק ביחס לחבילה המוזכרת בסעיף 1 לעיל.
    ככל שיעלה הצורך לנצל את האמור בסעיף 4 לעיל, עליך לציין בפני נציגי החברה כי הנך זכאי למחווה שירותית זו בהתאם למספר פניה X.

אז בקיצור, "כולם עושים את זה, אנחנו האחרונים, ובכלל – אנחנו לא אוכפים את זה. אה  – וקח דג : אם נאכוף את זה תוכל לצאת מההתחייבות כג'סטה שירותית מיוחדת"

אבל מה הם אומרים בעצם: "לשמור על אפשרות לשלוט בחריגות קיצוניות בנפחי התעבורה"?
מה שהם אומרים זה "אם יהיה לנו עומס חריג על הרשת, נוכל לדפוק משתמשיים כבדים".
התגובה שלי לזה: תקנו עוד רוחב פס לפני שיהיה לכם עומס חריג. המשתמשים הכבדים משלמים לכם את רוב הכסף שמשלם את המשכורות שלכם. הם לא טפילים, הם לא עלוקות – הם לקוחות חשובים.
אם כל המשתמשים היו משתמשים קלים, כולם היו משתמשים בחבילה של מגה וחצי (ואז היה לוקח להם שליש חודש להוריד 65 גיגה).

אז קודם כל, לידיעתכם.
דבר שני, אם זה מפריע לכם, תתלוננו.
אם אם יקבלו מספיק תלונות אולי הם יבטלו את זה.

סקלה

בפוסט הקודם דיברתי על הצורך שלי בצפיה של סרטוני יוטיוב על האייפד כשאני לא מחובר, ועל הפתרון שלי – שמבוסס על כמה סקריפטים שקושרים ביחד את הלוגיקה הבאה:

  1. הבא מהAPI של יוטיוב פיד RSS רלוונטי
  2. חלץ ממנו URLים של סרטונים
  3. הורד את הסרטונים עצמם מיוטיוב עם youtube-dl
  4. קודד את הסרטונים לפורמט של אייפד עם HandBreak
  5. צור פיד RSS שמאפשר להוריד את הקבצים המקודדים

ברגע שהתהליך הזה קיים, מה שנשאר זה לרשום את הפיד החדש בITunes, ומאותו רגע הוא מוריד אוטומטית את הסרטונים לצפייה אוף ליין.

לאחרונה שמעתי יותר ויותר על סקלה, סקלה היא שפה יחסית חדשה (הופיעה ב2003).
אז מה התכונות של סקלה?

  • שפה סטטית, הקומפיילר יגיד לכם כשיש לכם שגיאות טיפוס (בניגוד לשפות דינמיות כמו PHP, פייתון וכו')
  • מבוססת על הJVM, סקלה מתקמפלת לבייט-קוד
  • מאפשרת גישה מלאה ונוחה לתשתיות וספריות של ג'אווה. אם יש לכם קוד ג'אווה תוכלו להשתמש בו בקלות מסקלה
  • הקוד בסקלה הוא הרבה יותר קומפקטי מג'אווה
  • תומכת בתכנות פונקציונלי, פונקציות הן אזרחיות מהשורה הראשונה, אפשר להעביר פונקציות כפרמטר וליצור פונקציות אנונימות בצורה מאוד אלגנטית.
  • תומכת במודל הActors, שהוא מודל שבו "שחקנים" שונים מתקשרים אחד עם השני על ידי שליחת הודעות, ולא חולקים שום State. המודל הזה חוסך לא מעט בעיות שנובעות ממיקבול גבוה
  • תמיכה בסקריפטים, אפשר להריץ קוד כסקריפט בלי לקמפל אותו מראש (למרות שכמובן אפשר לקמפל).

יש עוד כמה תכונות מעניינות לסקלה, אבל אני לא באמת מכיר את השפה לעומק עדיין.

החלטתי ללמוד סקלה, וכדי לעשות את זה כתבתי מחדש את הסקריפטים הקודמים כתוכנית סקלה אחת  וגם שיפרתי אותם על הדרך לתמוך בכמה ערוצי יוטיוב.
עשיתי את זה עם vim, ישירות על השרת – ובלי לקמפל, ממש כמו כתיבה של סקריפט.
אני בטוח שדוגמאות הקוד שלי יכולות להיות יותר אלגנטיות, אבל זה מה שיש לבינתיים 🙂
אז זה הmain של הסקריפט:


object YoutubeRSS
{
val downloader = new Downloader
def main(args: Array[String])
{
deleteOldFiles
regenerateFeeds
Source.fromFile("channels").getLines.foreach(x =>; process(x trim) )
downloader ! Stop
}
//...
}

התוכנית מפעילה כמה פונקציות ואז קוראת שורות מקובץ,  ועל כל שורה מפעילה את הפונקציה process.
לבסוף היא שולחת הודעת Stop לActor של הDownloader.
אפשר לשים מיד לב לכמה דברים:

  • כשמצהירים על object, זה בעצם סינגלטון.
  • אין נקודה-פסיק בסוף שורה, בסקלה זה אופציונלי.
  • לא חייבים להשתמש בסוגריים כשקוראים לפונקציה בלי פרמטרים (למעשה, אם יש לפונקציה פרמטר בודד – אפשר בדרך כלל לוותר על הסוגריים גם אז)
  • בסקלה כמעט כל דבר חוקי כשם של פונקציה, סימן קריאה היא פונקציה די נפוצה בהרבה ספריות.

הנה עוד קצת מהתוכנית:


object Conf
{
val YOUTUBE_CHANNEL_URL = "http://gdata.youtube.com/feeds/api/users/%s/uploads"
val YOUTUBE_PROFILE_URL = "http://gdata.youtube.com/feeds/api/users/%s"
val BIN_DIR = "/home/omry/youtube-rss-2/bin"
val DOWNLOAD_DIR = "/home/omry/youtube-rss-2/download"
val RSS_WEB_DIR="/home/omry/www/youtube-rss.firefang.net"
val RSS_BASE_URL="http://youtube-rss.firefang.net"
val DELETE_OLDER=14
}

object YoutubeRSS
{
//...
def process(channel : String)
{
println("Processing channel " + channel)
updateFeed(channel)
val url = Conf.YOUTUBE_CHANNEL_URL.format(channel)
val rss = Source.fromURL(url).mkString
val xml = XML.loadString(rss)
val entries = xml\"entry";
entries foreach(download(_,channel))
println("Done processing " + channel)
}
}

הקונפיגורציה כרגע היא ישירות בקוד בתוך אובייקט Conf.
שימו לב לאלגנטיות של הבאת הנתונים מהURL ובעיקר של פרסור הXML,
השורה הפשוטה

val entries = xml\"entry";

מחזירה רשימה של entries מתוך הXML (שהוא פיד רסס).

עוד קצת קוד מהפונקציה שמכינה את קובץ הRSS הסופי:


new File(dir).listFiles.
sortBy(_.lastModified).reverse.
filter(_.getName().endsWith(".mp4")).
map(file => file.substring(dir.length + 1)).
foreach(file =>
{
val f = new File(dir,file)
val entry = new SyndEntryImpl()
//..

הקוד פה מקבל (עם API של ג'אווה) את רשימת הקבצים בספריה, ממיין אותן לפי תאריך שינוי, הופך את הסדר, מפעיל פילטר שמשאיר רק קבצי mp4, מפעיל פוקציית map שמורידה את הספריה משם הקובץ ולבסוף מפעיל קוד כל סטרינג.

קצת על הפעלת תהליכים חיצוניים:
מי שניסה להפעיל פרוסס חיצוני מג'אווה בוודאי זוכר שזו לא חוויה מרנינה, צריך שני Threadים שיקראו את הפלט של התהליך (אחד לפלט סטנדרטי ואחד לשגיאה סטנדרטי) ובאופן כללי זה די מסורבל.
בסקלה (2.9 ומעלה) זה הרבה יותר פשוט:

// Run process
"ls -l"!
// Run process and get output into string:
val output = "ls -l"!!
// Run process from a list of arguments
val fname = List("youtube-dl", "--get-filename","-o","download/"+channel+"/%(uploader)s-%(stitle)s.%(ext)s",link.toString)!!

הרבה יותר נחמד מבג'אווה.

אפשר להוריד את הכל מפה.

בשורה התחתונה, בינתיים אני אוהב את סקלה, ונראה לי שאני אתחיל להשתמש בה באופן יותר קבוע.

העולם כרשת

פאול באטלר – מתמחה בפייסבוק – קנה לו קצת תהילה כשרינדר את הגרף החברתי של פייסבוק במערכת קורדינטות גאוגרפיות לפי המיקום של המשתמשים, כשכל שני חברים מתוך דגימה של עשרה מליון משתמשים אקראיים בפייסבוק מצויירת כקו.
התוצאה מרשימה מאוד, ולמעשה מציירת את המפה של רוב העולם.

(לחצו כדי לקבל תמונה ברזולוציה גבוהה).

בזק בינלאומי – האנטי וירוס שחזר מהכפור

בזק בין לאומי החליטו לצ'פר אותי באנטי וירוס בלי שאני אבקש.

הכל היה טוב ויפה כי על עוד לא ידעתי על זה, עד שהבחנתי בתקלות תקשורת מוזרות. פורטים שהיו לי חסומים בתקשורת החוצה, והקש ששבר את גב הגמל: שגיאה בSVN CHECKOUT מהשרת שלי.

אחרי שבזבזתי איזה שעה בלנסות להבין מה נשבר בשרת וגיליתי שהכל נראה תקין ועובד – בדקתי דרך נטוויז'ן ודרך שרת אחר בחו"ל ובשני במקרים זה עבר.
כאן כבר היה לי ברור שמישהו שבזק בין לאומי אשמים.

ניסיתי לדבר איתם בצ'אט בתמיכה, ולא הגיבו אז התקשרתי.
למזלי נפלתי על נציג שלא הניח שאני לא יודע על מה אני מדבר, הוא שינה את הניתוב שלי כך שאני לא אעבור דרך האנטי-וירוס שלהם, עשיתי ריסטרט למודם והנה זה פלא, הכל בסדר.

בזבזתי עוד עשר דקות בלבטל את האנטי וירוס בשרות הלקוחות (מסתבר שלא שילמתי עליו, זה היה צ'ופר מכל הלב!), ואני מקווה שזה סוף הסאגה הזו.

בקיצור, לקוחות בינ"ל, זהירות.

להצביע בארנק

לפני כמה שבועות xmarks, החברה לסינכרון סימניות הודיעה שהיא סוגרת את שעריה מחוסר כסף.
החברה סיפקה שרות שימושי של סינכרון סימניות בין דפדפנים שונים בחינם, מתוך הנחה שהתבררה כשגויה שהם יצליחו לעשות כסף מבסיס הנתונים של הסימניות.
אני אישית לא השתמשתי בxmarks (ומאז נראה שכל מני דברים קורים שאולי יצילו את החברה), אבל האפיזודה הזו גרמה לי לחשוב:

יש כמה שירותים חינמיים שאני כן משתמש בהם, ואני די אתעצב אם הם יופסקו פתאום.
שרות כזה לדוגמא הוא lastpass, שמשמש אותי נאמנה כבר כמה חודשים מאז הפוסט על התורכים.

לlastpass יש שירות פרימיום ב12$ לשנה שנותן כל מיני פיצ'רים כמו תמיכה בסלולריים מסויימים וכו'.
למרות שאני לא ממש צריך את הפיצ'רים המיוחדים שמקבלים בפרימיום, החלטתי לשלם על השירות.
הסיבה היא – כמובן – שאני לא רוצה שlastpass ילכו בדרכו של הדודו, או של הxmarks.

אני קורא לכולכם, אם יש שירות שאתם אוהבים – תראו למפתחים את אהבתכם עם כרטיס האשראי או חשבון הפייפאל שלכם.

StartSSL

כשהגדרתי את הדואר באייפד, גיליתי שאפל לא ממש מסתדרים עם החתימה הדיגיטלית המצ'וקמקת שהתקנתי בשרת הדואר – ופצחתי בחיפוש אחר מקור לחתימה זולה.
מצאתי את StartSSL, חברה שמספקת חתימות דיגיטליות במחירים נמוכים במיוחד שמתחילים ב.. חינם.
כן, אפשר לקבל מStartSSL חתימה דיגיטלית לשרת שלכם, בין אם זה שרת דואר, ווב, ג'אבר ועוד – ללא תשלום.
חוץ מזה שמחיר הוא ללא תחרות, האתר שלהם די מקל על כל התהליך, וכולל מידע רב והנחיות שפשוט עובדות.
במהלך התקנת החתימה בשרת הדואר (דבר שלא מתועד אצלם באתר) נתקלתי בקשיים – ולמרבה הפלא קיבלתי תשובות מועילות כשפניתי לתמיכה שלהם (ואני מזכיר – בתור לקוח לא משלם).
כל הדפדפנים העיקריים תומכים בהם, ולא נתקלתי בבעיות מיוחדות בגלישה לאתר שמוצפן עם החתימה שלהם, או בשימוש בדואר IMAP וSMTP שמוצפן עם החתימה (כולל כאמור ממכשירים ניידים של אפל – אייפון ואייפד).

את הכסף הם עושים מחתימות מאומתות ברמה זו או אחרת, החל באימות זהות אישי ב$50, וכלה בחתימה מסוג Extended validation – אלו שנותנות את הריבוע הירוק הענק בדפדפן – שנמצאת כרגע במבצע ועולה $150 לשנתיים (בווריסיין חתימה כזו עולה כ2695$).
עכשיו – 50$ לאימות זהות זה מעט מאוד יחסית לשאר התעשיה, ומפתה לחשוב שהם לא בודקים כמו שצריך.
אתמול התחלתי תהליך אימות זהות כזה – כשהמטרה היא להשיג חתימה דיגיטלית מלאה לface.com, והרושם שלי בינתיים הוא שהם בודקים מאוד ברצינות ולא מחפפים.
ואנקדוטה קטנה: בזמן החלפת האימיילים עם נציגי החברה, סיפרתי להם שאין עלי את תעודת הזהות כי היא גדולה מדי ורוב הישראלים לא מסתובבים איתה. בתגובה נאמר לי בחיוך שהם חברה ישראלית שממוקמת באילת ושעל פי חוק אני אמור להסתובב עם הת"ז :).
אני ממליץ בחום לנסות אותם למי שרוצה לארגן SSL בשרת ולא בא לו לשלשל לארנק של ווריסיין סכומים מופרכים.

סן פרנסיסקו, Inception ומהירות הורדה מטורפת

השקט שהשתרר בבלוג לא נובע משתקנות שפקדה אותי, אלא מזה שבשבועות האחרונים אני נמצא בארצות הברית במסגרת העבודה ולא היה לי יותר מדי זמן לנשום.
אני נמצא באיזור סאן פרנסיסקו (פאלו אלטו), ואני אשאר פה בשבועיים הקרובים.
הייתי רוצה להרחיב על מה אני עושה פה, אבל לצערי אני לא יכול בשלב זה, אולי עוד כמה חודשים.
יש לי רק ממצא אחד להציג בינתיים:
Downloading at 15.5MB/Sec

אציין שזו קצת רמאות:
יש לי בלפטופ חיבור של 100 מגה ביט, והמהירות הזו היא בלתי אפשרית והיתה רגעית (המקסימום הוא 12.5MB/SEC), מצד שני – אני חותם שאם אני אנסה עם חיבור ג'יגביט אני אעבור את המהירות הזו בקלות.

ברגעים אלו אני נמצא בסן פרנסיסקו, בסטארבק כלשהו ליד יוניון סקוור.
סיימתי לראות את Inception בIMAX לפני כמה שעות.
ראיתי אותו כבר לפני שבוע, והחלטתי שאני צריך לראות אותו שוב.
לא התכוונתי שזה יקרה כל כך מוקדם, אבל חבר הזמין אותי להצטרף אליו כשהוא שמע שאני בעיר.

הסרט הזה הוא כנראה הסרט הכי טוב ב2010, וזה מעניין כי הסרט הכי טוב של 2009 היה כנראה האביר האפל – כשמה שמשותף לשניהם זה כמובן ששניהם בוימו על ידי כריסטופן נולן.
הסרט הזה עושה למטאריקס מה שהמצאת המחסנית עשתה למדעי המחשב, ואת זה תבינו רק אחרי שתראו את הסרט (אבל רק אם מחסנית בשבילכם היא יותר מאשר מקום לשים בו כדורים).
בקיצור, מומלץ בחום – ולבוא מרוכזים :).

אחרי הסרט הלכנו לאכול במסעדה קוריאנית בשם Brothers, היה מצויין.

לא חושב שאכלתי אי פעם אוכל קוריאני, מישהו מכיר מסעדה קוריאנית בארץ  (רצוי כזו שלא תבייש את הפירמה)?

סן פרנסיסקו היא כנראה העיר המועדפת עלי בארצות הברית,וזה מעניין כי באופן לא מתוכנן היא גם העיר בחו"ל שיצא לי לבקר בה הכי הרבה פעמים.
בשבוע שעבר עשיתי לקולגה שזו הפעם הראשונה שלו בעיר את הסיבוב הרגיל של החוף הצפוני, פיר הדייגים, אופניים בסיבוב על גשר הזהב ואל סולסליטו וחזרה במעבורת.
היה יום טוב.
היום עדיין לא נגמר, אבל הוא באווירה הרבה יותר רגועה מבחינתי.
פעם ראשונה שאני כותב פוסט בבלוג תוך ישיבה בסטרבקס. (למעשה היום היתה הפעם הראשונה שביקרתי בסטארבקס – יש להם קפה שמזכיר את הקפה בארץ, ונראה שבכל הסניפים יש אינטרנט ותנאים לשימוש בלפטופ).

המזג אוויר פה מעולה, אפילו קריר לפעמים.
למעשה, זה הקיץ הכי קר באיזור מזה זמן רב – מה שמסתדר עם הטירוף שהולך בארץ (כל החום הזה צריך ללכת לאנשהו, נכון?)
אם הכל ילך לפי התוכניות, אני אשוב למדינתנו המהבילה בעוד כשבועיים, אשאר בארץ כשבוע ואחזור לפה לעוד כמה שבועות.
ריבוי הטיסות בקונטיננטל כבר הביא אותי לרמת כסף בנוסע המתמיד, אולי נתחיל לראות שדרוגים אקראיים בקרוב.

עד כאן עידכונינו.

סיסמאות, תורכים וLastPass

נפתח בווידוי:
היסטורית, נטיתי ואני עדיין נוטה לזלזל בכל החוקים שמעמיסים על משתמשים כדי להקשיח את הסיסמא שלהם.
כשאני נתקל בהוראות בחירת סיסמא כמו : "בחר סיסמא עם שמונה תווים, עם לפחות מספר אחד, אות גדולה אחת לפחות וסימן מיוחד אחד לפחות, ולא כזו שהשתמשת בה בשנה האחרונה" אני חש שינאה עזה כלפי האתר שמכריח אותי לבחור סיסמא שאני לא יכול לזכור.

כן, גם אני משתמש באותה סיסמא (עד כדי שינויים קטנים כדי לענות על דרישות מעצבנות) ברוב האתרים.
למעשה מדי שנה שנתיים אני מחליף את הסיסמא הראשית שלי, ואז כשאני בא להכנס לאתר אני מנסה להעריך כמה זמן אני מכיר אותו ואיזו מהסיסמאות הקבועות שלי עשויה להתאים. בדרך כלל אני מצליח לנחש בסופו של דבר.

אומנם לאתרים הבאמת חשובים, בנקים, פייפאל וכו' יש לי סיסמאות יחודיות (וכמובן גם לחשבון הדואר שלי, ואגב גם שרתים – אני לא משתמש בסיסמא הקבועה שנתפסת אצלי כקלה מדי עבור שרתים).

אני לא לבד, ולדעתי רוב רובם של המשתמשים נוהגים כמוני – כלומר משתמשים בסיסמא אחת עבור רוב האתרים, ואולי אפילו עבור חשבון האימייל שלהם.
בגלל זה הנזק הפוטנציאלי שיכול לגרום האקר תורכי משועמם ונחוש למשתמש ישראלי תמים וממוצע יכול להיות די גדול, למשל:

  • התחזות : בפייסבוק, בבלוגים או באתרים אחרים. אם הסיסמא הקבועה שלכם היא גם הסיסמא של האימייל – אכלתם פלפל (במילים אחרות, גם אם אתם לא עושים כלום בעקבות הפוסט הזה – לפחות את זה תתקנו, בפקודה!). פריצה לאימייל היא מסוכנת לא רק בגלל הסכנה לחדירה לפרטיות ולהתחזות – אלא גם כי היא מאפשרת שחזור סיסמא במרבית האתרים שאתם רשומים אליהם.
  • גניבת כסף דרך חשבון בנק (לא מאוד סביר, כי רוב הבנקים לא יאפשרו שימוש בסיסמא קלה שלא משתנה תדיר, ובנוסף הם נאצים בכל הנוגע לשחזור סיסמא).
  • גניבת שרותים דרך אתרים שמחזיקים בפרטי כרטיס האשראי שלכם : זה כבר די סביר, מי שמגלה את הסיסמא שלכם ל10BIS יכול להזמין פיצות בלי להזין מחדש את פרטי כרטיס האשראי. למעשה אם האתר עלוב במיוחד הוא גם יכול להשיג את מספר כרטיס האשראי דרך ממשק המשתמש ומשם הדרך אל האושר מובטחת.

בעבר כבר נכוותי קלות מסיסמאות קלות מדי כשאיזה בוט ניחש סיסמא של משתמש חדש בשרת (לפני שהוא הספיק לעשות להכנס בפעם הראשונה ולשנות אותה), וכמובן שהפקתי לקחים ושיניתי כמה הרגלים (פרטים בפוסט המלונקק).

שלשום ארז וולף פרסם בבלוגו We CMS שהוא מצא רשימת סיסמאות של ישראלים מסתובבת באיזה פורום טורקי, ושהרשימה נלקחה מאתר ישראלי גדול בעל אבטחה מפוקפקת ששמר את הסיסמאות שלו כטקסט צח (או בלעז – Clear text).

פונקציות גיבוב לערבול סיסמאות

מתכנתים עם אחריות מינימלית לעולם ירגישו אי נוחות עזה כשהם מתכננים מערכת שבה סיסמאות המשתמש נשמרות כטקסט צח. הפרקטיקה המקובלת היא להעביר את הסיסמא דרך פונקציית גיבוב חד כיוונית (MD5 או SHA למשל), שמבטיחה שיהיה קשה עד בלתי אפשרי לנחש את הסיסמא על בסיס התוצאה של הפונקציה.
למעשה, מכיוון שהפונקציות האלו מסוגלות להעביר נתונים באורך כלשהו לתוצאה באורך קבוע, עקרון שובך היונים מבטיח לנו שיש אין סוף קלטים שיובילו לפלט מסויים (כי יש אין סוף פלטים ומספר סופי אם כי עצום של פלטים אפשריים).

המשמעות של זה היא שגם אם האקר שם את ידו על רשימת גיבובים כזו, ומצליח למצוא סיסמא כלשהי שהגיבוב שלה מתאים לשורה בטבלא, הוא עדיין לא יודע מה הסיסמא האמיתית של המשתמש.
האקרים משתמשים בטבלאות עצומות הנקראות טבלאות קשת בענן (נשבע לכם) ששומרות את הגיבובים של סיסמאות נפוצות עבור פונקציה מסויימת, למשל MD5. (אי אפשר לשמור את כל האפשרויות כי יש 2 בחזקת 128 כאלו, ואין מספיק כוננים קשיחים בעולם בשביל לשמור את זה). בכל אופן, המחמירים מוסיפים "מלח" לתבשיל לפני שהם מבשלים אותו, כלומר במקום להכניס את הסיסמא ישירות לMD5 הם מוסיפים לה איזשהו קבוע סודי, מה שגורם לMD5 להוציא פלט אחר (בכך למעשה הם ממציאים גרסא פרטים של MD5).
מי שקצת מעורה באבטחת מידע בוודאי נע באי נוחות למראה המילה "סודי" במשפט הקודם, העניין הוא שהאקר ששם ידו על רשימת הסיסמאות המגובבות שהיא בהחלט סודית עלול לשים את ידו גם על המלח הסודי באותה הזדמנות. לכן אני אישית רואה במלח פתרון וודו שלא באמת עוזר למשהו.

בכל מקרה, אתרים רבים נכתבו על ידי ילדים קטנים, אנשים בוגרים אך מוגבלים נפשית או מפתחים חסרי אחריות והם שומרים את הסיסמא שלהם כטקסט נקי, מה שאומר שבהגדרה מי שמצליח לפרוץ אליהם יכול לשים את ידו על סיסמאות קבועות רבות בלי להתאמץ כלל.
למעשה, לטעון שאתר מסויים הוא מאובטח זו חתיכת טענה, כמעט לכל אתר יש חולשות אבטחה ולכן חשוב מאוד מאוד לא לשמור סיסמאות בצורה לא אחראית שכזו כי הסיכוי שהאתר יפרץ בשלב זה או אחר הוא כמעט 100%, וחשוב להקטין מראש את הנזק הפונציאלי האפשרי למקרה הזה – לכשיגיע.
אחת הדרכים הקלות ביותר לזהות אתרים כאלו היא כדלקמן:

בקשו מהאתר החשוד לשחזר את הסיסמא, אם הוא שולח לכם את הסיסמא הישנה שלכם באימייל : מזל טוב, מצאתם אתר שנכתב על ידי דגנרטים חסרי אחריות!
הדרך היחידה שבה הוא יכול לעשות את זה היא אם הוא שומר את הסיסמא כטקסט צח.
מה שרוב האתרים יעשו יהיה לשלוח לכם לינק שיאפשר להם לשנות סיסמא באתר, הבדל קטן אך חשוב.

אגב, היום בבוקר גיליתי ש10BIS שומר את הסיסמאות כטקסט נקי, בצ'אט עם נציג שרות נאמר לי ש"האתר מאובטח על ידי קוד אמריקאי".
כמעט השפרצתי קולה מהנחיריים על המסך כשקראתי את זה, והבהרתי בעדינות לנציג החביב אך חסר המושג שכדאי לפתור את זה בכל זאת.

לעניינינו

היום בבוקר פורסם בYNet שהאתר המסויים הוא לא אחר מאשר Homeless; עבר זמן רב מאוד מאז שהשתמשתי בו לאחרונה ולא זכרתי את הסיסמא.
בפרוצדורה הרגילה של אתרים שאני לא זוכר את הסיסמא שלהם, בדקתי את הסיסמא הקבועה הנוכחית ולמרבה אי הנוחות, הצלחתי להכנס.

מה שאומר שלפחות בתאוריה, הסיסמא הקבועה שלי מסתובבת אצל לועסי הרחת-לקום.

אין ספק שזו סיבה להחליף את הסיסמא הקבועה, אבל במה?
אפשר להגריל סיסמא קבועה חדשה, אבל הגיע הזמן לשנות הרגלים – ולו כי אתרים רבים כתובים בחוסר אחריות מוחלט.

הפתרון

מנהל סיסמאות טוב, שיאפשר לכם לעבוד עם סיסמא שונה לכל אתר, וידרוש מכם לזכור סיסמא אחת בלבד.
זכרתי שחייב להיות אחד טוב כזה, וזכרתי גם שסטיב גיבסון המליץ על משהו בSecurity Now. בבדיקה מסתבר שבדיוק היה פרק על האבטחה של פתרון בשם LastPass. למעשה עדיין לא שמעתי את האפיזודה הרלוונטית (אני אגיע לזה כשאני אסיים לשמוע את הספר הנוכחי – Under the dome של סטיבן קינג) – אבל ההערות של הפרק שכנעו אותי לנסות.

LastPass

לאסט-פאס מגיע עם פלאגינים לכל הדפדפנים הרלוונטיים, ומאפשר להם לסנכרן את הסיסמאות בין מחשבים שונים ודפדפנים שונים על אותו מחשב.
הסיסמאות מוצפנות על המחשב שלכם עם סיסמאת המאסטר שבחרתם, והמפתח הפרטי שלכם לעולם לא נשלח לשרת.
כמובן – בסיס הנתונים שמכיל את הסיסמאות המוצפנות נשלח לשרת ומשמש כגיבוי וכאן מאפשר עבודה נוחה עם כמה מחשבים.

התחלתי להשתמש בו היום בבוקר, וסך הכל החוויה נעימה ודי אינטואיטיבית.
רשימת הפיצ'רים מרשימה למדי, וכוללת יבוא אטומטי של הסיסמאות הקיימות מהדפדפן שלכם, יצירת סיסמאות חזקות (עדיין תצטרכו לעבור אתר אתר ולשנות סיסמא), שמירת כרטיסי אשראי מאובטחת, תמיכה ביוביקי (אני בהחלט צריך לבדוק את זה) ועוד.

החיסרון היחיד הוא שהיא לא משוחררת ברשיון קוד פתוח, אבל לדעתי זה חיסרון קטן שמתגמד לעומת הערך הגדול שהתוכנה הזו מספקת.
ניסיתי את לאסט-פאס בפיירפוקס כל היום ובכרום במשך זמן קצר ונראה שהיא עובדת היטב.

אני ממליץ בחום לנסות את LastPass (בחינם, יש שרות פרמיום ב12$ לשנה שמוסיף תמיכה בטלפונים חכמים ועוד כל מני דברים חביבים אך לא הכרחיים לרוב האנשים). גם אם החברה נעלמת – יש אפשרות ליצא את הסיסמאות שלכם לקובץ CSV (או ישירות לתוך מנהל הסיסמאות של פיירפוקס).

הנה סירטון קצרצר שמדגים את הפעילות הבסיסית: