IPv6

IPV6 היא הגרסא הבאה של פרוטוקול האינטרנט, שכבר מתבשלת כמה שנים טובות.
השינוי המרכזי ביותר, והמוטיבציה הגדולה של השינוי נובעת מהבעיה המחריפה והולכת של חוסר בכתובות IP פנויות. בIPV4 – הגרסא הנוכחית, כל כתובת תופסת 4 בתים שהם 32 ביט, מה שאומר שיש 2 בחזקת 32 כתובות אפשריות שזה קצת יותר מארבע מיליארד כתובות אפשריות.
התקן של IPV4 נקבע ב1981, ארבע מיליארד כתובות נראו אז כמו הגזמה פראית, ואף אחד לא דימיין שבתוך כמה עשרות שנים יהיה צורך ביותר כתובות.
השוק התמודד עם המגבלה במספר כתובות הIP במספר צורות:

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

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

שני הפתרונות האלו (ועוד כמה פחות משמעותיים) הורידו את דחיפות הפיתרון האמיתי, שהוא מעבר לIPV6.

IPV6
השינוי המרכזי בIPV6 הוא הרחבת טווח הכתובות האפשריות. במקום 4 בתים לכתובת IPV4, יש לא פחות מ16 בתים בכתובת IPV6.
קצת מתמטיקה:
4 בתים הם 32 סיביות. 2 בחזקת 32 זה 4,294,967,296,
4 מיליארד כתובות בIPV4.
16 בתים הם 128 סיביות, 2 בחזקת 128 זה:
340,282,366,920,938,463,463,374,607,431,770,000,000
340 מיליארד מיליארד מיליארד מיליארד כתובות בIPV6.
אז תחום הכתובות של IPV6 יספיק להרבה הרבה זמן.

שיפורים נוספים בIPV6
IPV4 לא תוכנן להיות מאובטח בשום רמה, ובשלב מסויים הוגדר תקן IPSec, אבל גם אחרי שהוא הוגדר הוא היה אופציונלי ולא מחויב.
בIPV6 לעומת זאת, האבטחה מוגדרת כחובה, והיא בנויה בצורה יותר טובה.
למשל, בIPV4 – נתמכת הצפנה של תוכן ההודעות בלבד (payload), ובIPV6 נתמכת הצפנה של התוכן והכותרת (header).

שיפורים נוספים הם תמיכה מובנית בתעדוף תעבורה מסויימת (QOS), הגדרה אוטומטית (Auto-configuration), חבילות נתונים גדולות לשיפור ביצועים ברשתות שמעבירות הרבה מאוד מידע (JumboGrams, חבילות נתונים בIPV4 מוגבלות לגודל של 65535 בתים, בIPV6 לעומת זאת החבילות יכולות להגיע לגודל 4 ג'יגה לחבילה)

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

ייצוג טקסטואלי של כתובות IPV6
אנשים רגילים לכך שכתובת IP הן מהצורה המקובל של a.b.c.d, כאשר כל מספר הוא בן 0 ל255.
בIPV6 התמונה משתנה, במקום 4 קבוצות בין 0 ל255, פתאום יש לנו 8 קבוצות של 0 עד 65535, שמיוצגות בבסיס 16, ומופרדות על ידי נקודותיים.
למשך:
[code]
2001:0db8:0000:0000:0000:0000:1428:57ab
[/code]
יהיה לא נעים להקריא את זה בטלפון.
כדי לעזור קצת, הוגדר הקיצור הבא:
סדרת אפסים אחת בכתובת יכולה להתכווץ לצמד נקודותיים, ואפשר גם להתעלם מאפסים שפותחים קבוצה – מה שאומר שאת הכתובת הזו אפשר לכתוב גם כך:
[code]
2001:db8::1428:57ab
[/code]
קצת יותר טוב.

FireStats וIPV6.
עד גרסא 1.4, פיירסטטס מאכסן כתובות IP בתוך מחרוזת תווים, ולכן תומך גם בIPV4 וגם בIPV6.
אחד הפיצ'רים המבוקשים ביותר הוא היכולת להתעלם מטווח של כתובות IP.
עד 1.4, ניתן להוסיף כתובות מסויימות לרשימת ההתעלמות, אבל זה לא מספיק כשרוצים להתעלם מטווח שלם, למשל כדי לסנן את הספאם של מייקרוסופט.
כדי לתמוך בסינון לפי טווח כתובות, הכי טוב לשמור את כתובת הIP כמספר ולא כמחרוזת – כי אז אפשר לבדוק אם המספר נמצא בטווח בקלות.
אבל באיזה כתובות IP לתמוך?
אומנם 99% מהמשתמשים עובדים עם IPV4 בלבד, אבל אם אני אסתמך על זה, זה בעצם אומר שאני מבטל את התמיכה בIPV6, צולעת ככל שתהיה.
לא ממש רציתי לעשות את זה, ולכן החלטתי לתמוך בIPV6 גם אחרי המעבר משמירת כתובות טקסטאלית לשמירה מספרית.

אבל איך שומרים כתובת IPV6 בMySQL כמספר? הטיפוס המספרי הגדול ביותר בMySQL הוא BIGINT, שרוחבו 8 בתים, וסיכמנו כבר שכתובת IPV6 היא ברוחב 16 בתים.
הפתרון הוא להשתמש בשתי עמודות של BIGINT, אחת לחצי הימני של כתבות הIP והשניה לחצי השמאלי.
קצת מכוער, אבל זה המצב.
בעיה נוספת שצריכה התייחסות מיוחדת היא בעיית ההצגה והקליטה של כתובות IP.
כשמגיעה כתובת IP טקסטואלית למערכת, צריך להבין מאיזה גרסא היא, ולתרגם אותה לייצוג מספרי.
כשרוצים להציג כתובת IP מספרית, צריך לעשות את הפעולה ההפוכה ולהציג אותה בצורה הידידותית ביותר (IPV4 אם הכתובת המקורית היא בIPV4, אחרת IPV6).
מכיוון שהתמיכה בIPV6 בPHP די צולעת – קיימות פונקציות, אבל רק מגרסאות חדשות של PHP וגם אז הן לא נתמכות בכל מערכות ההפעלה – כתבתי את פונקציות ההמרה והזיהוי בעצמי.
אפשר לראות בתמונה טווח IPV6 ליד כתובת IPV4 בודדת:
firestats ipv6

קריאה נוספת:

IPv6: The Promise, The Problems, The Protocol
ווקיפדיה

השלמה אוטומטית משופרת בbash

איך מפעילים השלמה אוטומטית משופרת בbash?
ההגדרות של ההשלמה האוטומטית נמצאים בדביאן (ואולי בעוד מערכות) בקובץ /etc/bash_completion, כדי להפעיל אותן כתבו:

[code]
source /etc/bash_completion
[/code]

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

[code]
echo "source /etc/bash_completion" >> ~/.bashrc
[/code]

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

[code]
ls –[TAB]
[/code]

ותקבלו את רשימת הפרמטרים של ls.

שרת חדש

אם אתם קוראים את זה, הבלוג רץ על שרת חדש.
האח, הידד!
רובכם שמתם לב לריבוי התקלות בבלוג לאחרונה:
התקלות נבעו מעומס מוגבר על השרת הישן של hcoop, שעדיין משרת נאמנה את רוב משתמשי hcoop.
במהלך החודשים האחרונים, מנהלי המערכת בנו חווה חדשה שמאוכסנת בPeer1, שהוא אחד מספקי האכסון האיכותיים ביותר.
החווה מכילה מספר שרתים, ותוכל לשרת כמות הרבה יותר גדולה של משתמשים ממה שהמערכת הישנה סיפקה.
בשבוע האחרון התחלתי להעביר את האתרים שלי לחווה החדשה, והיום סיימתי ושיניתי את הגדרת הDNS בgodaddy שתצביע לשרתי הDNS החדשים. (מה שכבר נכנס לתוקף כשאתם קוראים את זה).
המעבר כלל העברה של firefang.net, שכולל שני בלוגים (הבלוג הזה והבלוג באנגלית), וכמובן של firestats.cc, שהוא סיפור הרבה יותר מורכב:
firestats.cc מריץ trac.
demo.firestats.cc מריץ בלוג וורדפרס, וכן התקנת הדגמה של FireStats.
blog.firestats.cc מריץ את הבלוג של FireStats.
svn.firestats.cc מריץ שרת apache וsvn.
files.firestats.cc מכיל את הקבצים להורדה של FireStats.
והרשימה ממשיכה וממשיכה.

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

קריאת מחשבות

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

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

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

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

האינטרנט הוא הרשת החברתית

גוגל יוצאים עם OpenSocial, API חדש שבא לחבר בין רשתות חברתיות שהיו סגורות בעבר לאפשר כתיבת ישומים חברתיים שירוצו על מגוון רשתות חברתיות.
השאלה היא למה בכלל צריך רשתות חברתיות?
כבר היום האינטרנט הוא מעין רשת חברתית, הבעיה המרכזית היא המגוון בצורת השמירה והגישה אל המידע שטמון בו.
ליותר ויותר אנשים יש היום אתר אישי, והמגמה הזו מתגברת מהר מאוד.
לא טבעי מאוד שאתר האישי יכיל גם מידע על מי החברים שלי, יאפשר להשאיר לי הודעות, וכו'?
לכאורה, כבר היום כל הדברים האלו אפשרים, למשל:
* אני מריץ שרת דואר שמאפשר לשלוח לי דוא"ל
* אני מריץ שרת Jabber שמאפשר לצ'וטט איתי
* הגרגרן שלי מספר את מי אני קורא.
העניין הוא שמדובר בשרותים שונים, ואין סטנדרט אחיד שיאפשר למישהו שמכיר רק את האתר שלי לשלוח לי הודעה, או לצ'וטט איתי, או לבדוק מה אני קורא או האם יש לי חברה. (כמובן בהנחה שאני מעוניין לחשוף את המידע).
רשתות חברתיות באות לתת מעין סטנדרט כזה, כל רשת בתוך עצמה:
כשאני נמצא ברשת מסויימת, קל לי לחפש אנשים ברשת, קל לי לשלוח הודעות לאנשים או לצ'וטט איתם, קל לי לראות את פרטי הפרופיל שלהם וכו', אבל ברגע שאני עובר לרשת אחרת הכל משתנה.
הממשק של הרשת החברתית מכתיב לי את צורת העבודה, ובנוסף אנשים מופיעים בכמה רשתות עם פרטים ברמת עדכון שונה ואני צריך לזכור שFooBar ברשת אחת הוא בעצם JohnDoh מרשת שניה.
הנסיון של גוגל לפתור את הבעיה הוא להפוך את צורת הגישה למידע שנשמר ברשתות החברתיות לסטנדרטית, ובכך לאפשר לכל אחד לכתוב ישומים שרצים מעל המידע שנשמר ברשתות החברתיות האלו, אבל הוא בא לפתור בעיה אחרת: איך נכתוב ישומים שירוצו על יותר מרשת חברתית אחת.
מה שאני מציע לעומת זאת זה לפזר את המידע עצמו מחדש: במקום שכולו ישב בשרתי פייסבוק, או בשרתי לינקדאין, הוא ישב במאות אלפי שרתים, ששייכים למאות אלפי אנשים שונים.
אם ניקח דוגמא טריויאלית: אין ספק לאף אחד שנפח ההודעות שעוברות בכל יום בדואר אלקטרוני רגיל הוא משמעותי הרבה הרבה יותר מנפח ההודעות שעובר בכל הרשתות החברתיות יחד. הסיבה לכך היא שמדובר בפרוטוקול וותיק ומקובל, ושעובד למעשה בשיטת P2P, בלי ליצור צוואר בקבוק בצורת אתר אחד שמחזיק את כל הדואר בעולם או שמאפשר לחפש את האימייל של אנשים לפי השם שלהם. במילים אחרות: סך נפח השמוש באימייל לא מוגבל על ידי העומס המקסימלי ששרת מסויים מסוגל לשאת, ובנוסף השימוש באימייל הוא חופשי לגמרי במובן שלא צריך להרשם במקום מרכזי כדי לשלוח ולקבל אימייל. (ולפני שאתם אומרים שצריך לפתוח חשבון אימיל בשרת: זה נכון, אבל אתם יכולים להריץ את השרת בעצמכם, אתם לא צריכים טובות מאף אחד).
נניח שהמידע שהיום אני חושף על עצמי ברשתות חברתיות היה מרוכז רק באתר שלי, בצורה סטנדרטית שתאפשר לתוכנות לתשאל את השרת שלי לגבי:
* כבר לא צריך לתחזק 30 פרופילים שונים ברשתות חברתיות שונות, הכל יהיה במקום
* פתאום ברור איפה נמצא המידע עלי: בשרת שלי (שמייצג אותי ברשת)
* פתאום יש לי שליטה על המידע שלי, אם אני מחליט להפסיק לפרסם משהו, אני לא תלוי בחסדים של ספק מסויים כדי למחוק את המידע.

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

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

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

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

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

מצא את הכתבה

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

the-marker.png

שנתיים

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

למה אני שונא סלולארים של מוטורולה

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

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

כתיבה של קבצים בRAZR2
RAZR2 הוא המכשיר החדש ביותר של מוטורולה, והוא מריץ לינוקס. לכאורה, הזדמנות פז למוטורולה להוציא תוכנה פחות מסריחה.
איכשהו, מוטורולה הצליחו ליצור באג בכתיבה של קבצים בשימוש בFileConnection.
הבאג ממש ביזארי, וגרם לכך שלפעמים קבצים שתכתבו לא יכתבו כמו שצריך למערכת הקבצים.
הבאג מופיע בעיקר כשוכתבים "הרבה" נתונים במכה, למשל:
[code lang="java"]
byte buf[] = new byte[20000]; // create buffer
for (int i = 0; i < buf.length; i++) buf[i] = (byte) i; // populate with some crap FileConnection conn = (FileConnection) Connector.open("file:///..."); // open file connection OutputStream out = conn.openOutputStream(); // open output stream out.write(buf); // write buffer to file // cleanup out.close(); conn.close(); conn = (FileConnection) Connector.open("file:///..."); // open file connection again InputStream in = conn.openInputStream(); // read, you are in for a surprise [/code] פתרון שעובד לבעיה המוזרה הזו הוא לכתוב את הקובץ בכמה חתיכות יותר קטנות, למשל: [code lang="java"] private void writeChunked(byte[] buffer, OutputStream out) throws IOException { final int MAX = 4096; int offset = 0; while (offset < buffer.length) { int chunkSize = (buffer.length - offset > MAX ? MAX : buffer.length – offset);
out.write(buffer, offset, chunkSize);
offset += chunkSize;
out.flush();
}
}
[/code]

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

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

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

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

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

התממשקות למחשב
מוטורולה עדיין לא הבינו שחיבור בממשק של מודם (פקודות AT) פס מהעולם, וישום הניהול שלהם – MIDWay (המשוקץ) מתחבר למכשיר ממש כאילו הוא מודם. מי שזוכר את המחלות של מודמים (מה הערוץ הCOM? מה הBaud rate? שיט, העכבר לא זז, שיט הCOM נתקע וצריך לאתחל את המחשב) ירגיש כמו בבית.
ההתקנה של ישומי ג'אווה היא ממש מציקה:
כדי להתקין, צריך לחפור בתפריטי המכשיר למצוא אפשרות נסתרת שמעבירה את המכשיר למצב טעינת ג'אווה, להפעיל אותה, ורק אז לחבר את הכבר נתונים (אם הוא היה מחובר כבר, צריך לנתק אותו! Serenity now!).
דבר מעצבן נוסף הוא שברגע שמחברים את המכשיר למחשב עם הכבל, ישום הג'אווה הפעיל – אם יש כזה, מושהה מיד ואי אפשר להריץ אותו.
למה? כי מוטורולה עושים כל מה שהם יכולים כדי לעלות למפתח הנואש על העצבים.

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

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

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

ComCast, and so it begins

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