ארכיון חודשי: מרץ 2009

u-boot ב FreeRunner

בOpenMoko יש 2 מנהלי אתחול שניתן להתקין. בברירת מחדל מותקן u-boot, אבל אפשר גם להתקין את Qi. נכון לכתיבת פוסט זה לא ניסיתי את Qi ולכן לא אכתוב עליו.

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

בהתחלתי התקנתי כמה הפצות על הNAND של הטלפון עצמו, אבל התעוררתי מספיק מהר להבין "רגע זה זיכרון flash לכל דבר ועניין, לא בריא !". אז התחלתי להתקין על כרטיס ה micro SD (להלן "SD").

היות וקראתי ב1 בלילה את התעוד שיש בוויקי של OpenMoko בנושא, תרמתי לכאב ראש שהיה לי, אם כי הוא לא היה קשור בדיוועד לבעייה שהיתה לי.

בעיקרון צריך לחלק את ככרטיס ה SD , ל2 מחיצות:

  1. מחיצה קטנה לקרנל (8 מגה) שהיא vfat (או FAT 16 אם תרצו בלשון מיקרוסופט) – למי ששואל איך לעגן את זה בתוך המערכת קבצים, אז לא צריך, פשוט תזרקו לשם את הקרנל
  2. מערכת קבצים של ext2/3 [בהתאם לרצון שלכם] – רק אם ה u-boot שלכם מעודכן, אם הוא ישן יחסית יכול להיות שהוא לא יצליח לעבוד עם ext3, כי יש קרנלים שמשתמשים ב ext3 בתור מודול חיצוני ולא משתמשים בו בתמונת bzImage* שנוצרת.

* אם אתם לא מכירים את bzImage, אז זה אומר שמעולם לא קימפלתם קרנל בעצמכם , או שאתם משתמשים בשיטה של דביאן, מה שאומר שאתם לא צריכים לדאוג כל כך, כי הוא עושה לכם את העבודה…

חשבתי בזכות דורון ורם-און (כבר התקדמות כלשהי -> לחשוב) כי הבעיה שלי היתה בכך שהפכתי בין 2 המערכות קבצים, אבל זה לא שינה ל u-boot הוא המשיך לטעון את הקרנל עד למצב שהוא נתקע. אני חייב להגיד שהפכתי את המערכות קבצים בגלל שהייתי עייף ועבדתי בלילה [כאילו שיש מקום לתירוץ הזה]. מסתבר אבל שגם לינוקס וגם u-boot פחות רגישים למערכות קבצים האלו, והצליחו לעבוד אז זו לא היתה הבעיה שלי.

אתמול החלטתי להתלבש על הנושא יותר לעומק (אז גם הבנתי שהפכתי את המערכות קבצים) והתחלתי להציף את רשימת הדיוור של OpenMoko גם הישראלית, ואח"כ גם של הקהילה, וקיבלתי כמה תשובות מעניינות (אחרי שהקהילה העלתה משהו שברשימת דיוור הישראלית לא עלו). דבר ראשון מסתבר שבברירת מחדל u-boot טוען את ה SD בתור read-only במקום read write. דורון סיפק לי תמונה (לכל באי רשימת הדיוור) שמחליפה את u-boot [הגדרותיו] שיטען כמו שצריך (כלומר בתור read write) את ה SD בתור Dual Boot.

אבל לא חייבים את התמונה. אפשר במצב ה boot manager לעבוד עם usb ותוכנת מסוף סיריאלית כדוגמת minicom, neocon ועוד כמה וכמה. מהתוכנות אפשר לעבוד עם פקודות printenv ו setnev (שבטח תתקלו בהם בוויקי של OpenMoko באיזשהו שלב) בשביל לשנות את ההגדרה מ ro ל rw.

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

עוד על Cucumber

האתר Railscasts אשר מספק podcast על רובי ובעיקר על Rails, ומציג הדגמה שך עבודה עם Cucumber בשביל לכתוב בצורה טובה ויעילה יותר תוכנות מבוססות Rails.

חשוב להדגיש שה15 דקות של ה podcast, מציג עבודה שהיא מעט מתקדמת ב Rails, ואם אין לכם הרבה ניסיון (או בכלל) אולי תתקשו להבין מה הולך שם, אבל עדיין תראו את הכוח ברעיון של Cucumber.

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

אם תראו את הסרט, אתם תבינו (אני מקווה) גם למה, ואיפה המקום של בדיקות אוטומטיות ואיפה המקום של Cucumber.

בקשת עזרה – הגהה על מדריך התחלת עבודה עם Firebird בעברית

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

המדריך משוחרר תחת Creative Commons ייחוס זהה. המדריך עצמו מכיל כרגע 26 עמודים, ונכתב באמצעות OpenOffice 3.0.

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

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

תודה,

עידו

עידן המתודולוגיות

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

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

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

ישנם כמה מתודולוגיות שמוכרות לכולם כדוגמת Don't Repeat yourself (או DRY בקיצור), ויש את Keep It Simple Stupid (או KISS בקיצור), אבל יש מתודולוגיה לא מוכרת (לי לפחות, עד לפני שבוע) בשם BDD. פירוש ראשי התיבות BDD הוא Behavior Driven Development. הרעיון הוא ממש כמו שכתבתי עליו כאן, אומר שבמקום לדבר ולפתח בצורה טכנית בה יש הפרדה בין אנשים טכניים למנהלים, אנשי מכירות וכו', אפשר לעשות דברים בשפת ביניים כלשהי. הרעיון של BDD מגיע מקבוצת מתודולוגיות נפוצה (בעיקר בשם, פחות בהבנה) של Agile Software Development אשר מנסה לספק גישה שקרובה יותר לתחום הקואצ'ינג שהפך להיות פופולרי במיוחד, אשר מספק כלים שאם עובדים איתם, אנחנו אמורים לפתח קוד טוב ואיכותי בצורה מהירה עם כמה שפחות "התברברות" על בעיות. הגישה דורשת התמודדות עם צוותים, עבודה יחידנית, ויכולת להיות גמישים. הגמישות נובעת מכך שמפתחים תוך כדי, ולא מתעקבים על תכנון מוקדם (כדוגמת ספסיפיקציה). אני אישית לוקח כל מיני דברים מהמתודולוגיה, אבל יש כל מיני דברים אשר אינם מתאימים לי ולכן אני משאיר אותם בצד.

ה BDD בא ואומר בתוך מתודולוגית ה Agile, שאם כולם יצליחו לדבר בשפה אחת וכל אחד יוכל לקחת את זה לכיוון שלו (כלומר מתכנתים יוכלו לכתוב קוד מבוסס על ההוראות של ההנהלה ואנשי המכירות), אנשי המכירות ישתמשו בשפה בשביל לספק ללקוחות מידע טוב ואמין אשר מבוסס על מה שהמפתחים אמרו והמנהלים ידעו מה מתרחש בכל צד ואיך הדברים מתנהלים תוך שימוש באותה שפה בדיוק. גישה זו, מביאה מימוש של עוד מתודולוגיה בשם DDD או Domain Driven Design, אשר אומר בדיוק את מה שתארתי -> פיתוח שפה אחידה לנישות שונות של אותו נושא.

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

מלפפון למנהלים

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

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

המבנה המוסכם של Cucumber  נקרא Buisiness Readdable DSL כאשר הפירוש של DSL הוא Domain Specific Language. הגישה של DSL אומרת שבמקום שתהיה לנו צורה כללית לתאר כל דבר, אנחנו יוצרים מבנה לתאר ולעבוד עם דברים ספציפיים.

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

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

  1. Given – התחלת הפעולה. בד"כ נועד בשביל לאתחל דברים, כך שלמעט למשל משתמש וסיסמה, לא נהוג לבצע פעולות שדורשות התערבות המשתמש.
  2. When – תאור הפעולות עצמם שאנחנו רוצם לבדוק. כאן כבר אפשר לספק התערבות משתמש, ובעצם כל מה שאנחנו רוצים לקבל בשביל שהבדיקה שלנו תעבוד.
  3. Then – הסיכום של הפעולה ובדיקה בעצם האם השגנו את המטרה. כלומר האם הפעולות של Given+When סיפקו את התוצאה הרצויה (או לא).

לעוד מידע ניתן לגשת לאתר הפרויקט או ב GitHub.

דוגמאות של שימוש בכלי ניתן למצוא כאן.

Things that bother me a lot in Firebird SQL

After I received a lot of heat about my post regarding why I find MySQL to be so bad (part I) – (mostly behind the scenes), I decided to also write something about Firebird SQL.

The first time I worked with Interbase was back in 2002, when I started working in a new work place where I needed to get into an existing Delphi + PHP code. The main database engine there was Interbase 6.1 and I have upgraded it to 6.5. All that was running on RedHat 7.3 Linux server, and a Windows 2000 desktops. Naturally, the database and Apache+PHP ran on Linux.

Interbase was the first database I had experience with that I actually felt was serious enough to work with. However, we had a lot of problems with it. There was no usage of RAID or shadow databases to the working copy of Interbase, and the hard-drive that was in use, had bad sectors, where some of the database data actually existed. So the first thing I have learned about Interbase was how to recover data rather then how to actually work with it.

Since then, I always monitored and tested the Firebird database – the main open source development off-shoot of Interbase 6.1.

After several problems with MySQL databases on production servers (costing money to my clients due to documented problems with the database), I started looking for an alternative for the development of my tools – in cases where I can decide what is the database that is involved (usually when the customer does not care, as long as it works). So I'm playing again with few "demo" apps that I write using Firebird SQL, and I really enjoy working on it.

That's my foreword about Firebird/Interbase (because they are not that familiar to people).

Now to my original intention: להמשיך לקרוא

לזרוס 0.9.26.2 שוחררה

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

בין השינויים:

  • תמיכה ב FPC 2.2.2
  • שיכתוב של TPen
  • שינוי צלמית האפליקציה עכשיו ניתנת לשינוי בהגדרות הפרוייקט
  • כל האפשרויות תחת Tools מוזגו לחלון אחד
  • בגרסת Windows, המידע על צלמית האפליקציה, גרסת האפליקציה וה Manifest של ComCtrls (שנוסף ב WinXP) מוזגו להיות תחת קובץ rc אחד.
  • קבצי lrs עכשיו ניתנים לשיחזור ואין צורך לשמור אותם ב version control. בברירת מחדל, האפשרות הזו כבויה, אך ניתן לשנות אותה בProject -> roject Options -> Miscellaneous -> save .lrs file in the output directory
    חשוב להדגיש כי לבנייה על ידי שימוש ישיר של FPC עדיין צריך את הקובץ.

את רשימת השינויים המלאה ניתן למצוא כאן.

גרסה חדשה ניתנת להורדה כאן.

חובת ההוכחה היא של מיקרוסופט (IE8)

מיקרוסופט שיחררה את IE 8 לאחרונה, והרבה תקוות נגוזו להן מייד.

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

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

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

ואם אתם דואגים למשתמש הפשוט, הוא יעבוד רק עם כלים שיעבדו בשבילו – קרי Firefox, Opera, Safari, Google Chrom וכו'. אם IE לא יצליח להציג אתרים, אז אנשים פשוט יעזבו אותו, ולכן המאבק בתקנים צריך להגיע מבוני האתרים ולא מהמשתמשים.

הרץ החופשי כבר הוכיח את עצמו

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

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

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

טלפון לחברת אורנג' (עוד לפני התשובה ברשימת הדיוור) גילתה לי 2 דברים חשובים:

  1. יש להם תקלה ארצית במכשור שלהם
  2. יש בעיית רישום של החשבון שלי אצלהם

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

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

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

צעד קטן לאופן מוקו צעד גדול לעידו

החל מאתמול בערב אני גאה להיות בעלים של המחשב כף היד עם יכולות (?) סלולריות בשם OpenMoko בגרסת ה Free Runner שלו. ובכן רם-און אמר הרבה דברים על המחשב, ודורון אמר אפילו יותר, ועכשיו תורי לדבר בתור בעלים של מכשיר שכזה 🙂

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

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

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

בשביל לעבוד עם התקשורת מבוססת usb ב arch linux צריך לבצע את הדבר הבא:

התקינו תוכנה בשם hwdetect אם לא עשיתם את זה כבר (אני למשל התקנתי אותה במיוחד), ותקראו בוויקי של arch איך עובדים איתו (או באמצעות man טוב באותה מידה).

עכשיו אתם יכולים לרשום את הפקודה:

ifconfig usb0 192.168.0.200

אבל כאן לי לפחות יש בעיה. הרשת הפנימית אצלי בבית היא על

192.168.0.0./32

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

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

route add 192.168.0.202 usb0

ועכשיו אחרי בדיקה שבאמת הוא מזהה את usb0 בתור הדרך ל 192.168.0.202 אתם יכולים בשימחה ובכיף להתחבר ב ssh למכשיר.

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

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

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

עבודה עם HTTParty

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

הטיפ מראה איך לממש 2 דברים:

  1. עבודה עם HTTParty
  2. השני הוא הדגמה איך לתרגם טקסטים בצורה פשוטה תוך שימוש ב Google Translate.
1 #!/usr/bin/env ruby
2
3 require 'rubygems'
4 require 'httparty'
5
6 class GoogleApi
7   include HTTParty
8   base_uri 'ajax.googleapis.com'
9
10   def self.translate(string="", to="", from="iw")
11     get("/ajax/services/language/translate", :query => {:langpair => "#{from}|#{to}", :q => string, :v => 1.0})
12   end
13 end
14
15 GoogleApi.translate("שלום עולם", "en")

השתמשנו ב GoogleApi.translate בשביל לבצע תרגום בשבילנו. התוצאה שזה נתן היא זו:

{"responseData"=>{"translatedText"=>"Hello World"}, "responseDetails"=>nil, "responseStatus"=>200}

כמו שאפשר לראות, מאוד פשוט לבצע פעולות REST עם HTTParty ולקבל תוצאות.

את התיעוד עבור Google Translate ניתן למצוא כאן.

ביצוע Binding שמי במסדי נתונים

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

קודם כל מהו bind ? ובכן bind זו דרך להוסיף תוכן חיצוני לשאילתות שלנו, כאשר מסד הנתונים יודע להבין שמדובר בערך חיצוני ולכן הוא מבצע פעולת escaping על המידע בשביל שלא יתרחש sql inection.

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

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

Rails 2.3

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

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

השינוי העיקרי של Rails 2.3 הוא בכך שהעבירו כמעט כל רכיב REST ב Rails לעבוד עם Rack במקום השימוש במודול ה CGI הרגיל. זה מתחיל מ script/server אשר עכשיו יכול להתממשק לכל רכיב Rack בעצם, אבל זה הרבה יותר מזה, כי גם ה dispatcher וגם העבודה עם עוגיות ו session עברו להשתמש ב Rack. העבירו הרבה רכיבים להיות תוכניות תיווך (middleware) , מעבודה על הנעילות דרך ActiveRecord (הכלי שמספק לנו ORM) וזה חילחל עד לכל הרכיבים שמתעסקים בrender כדוגמת עבודה עם XML, JSON, HTML וכו'. להמשיך לקרוא

Why I find MySQL to be so bad

MySQL is the most used Open Source database engine. I have personally used it for almost 10 years. I worked with versions 3.x, 4.x and 5.x of MySQL, but I also used other database engines, some of them handling the same "data-set size" as MySQL, while others have been smaller databases (mostly Desktop based databases such as SQLite, MS-Access and Paradox).

This is the first part of my complaint about MySQL and why I dislike it. להמשיך לקרוא

השוואה בין PosgreSQL לבין Firebird SQL

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

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

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

את ההשוואה ניתן למצוא כאן.

Rack

כאשר עובדים עם HTTP דינמי, ישנם כמה דרכים לבצע את אותם המשימות.

דרך ראשונה היא ליישם את CGI (או את FastCGI או את scgi וכו'), דרך שנייה היא לספק כלים טבעיים בשפת התכנות לעשות את אותו הדבר בדיוק. גם רובי וגם פיתון מספקים כלים טבעיים בשפה בשביל לדבר ב HTTP.

ברובי יש לנו את הכלי שנקרא Rack.

הדוגמא הפשוטה ביותר לעבוד איתו היא בצורה הבאה: להמשיך לקרוא

missing feature in all* package managers

One of the most needed feature that I find missing in packge managers (dpkg, rpm, pacman, gem**, cpan, fppkg etc) is the ability to install more than one version of a package, and create an alternative entry for it or a script that knows how to handle the execution of different versions.

Why do I require such feature you must ask yourself (or want to ask me) ? well lets imagine the following scenario:

You are working on a program with a specific version of a library/tool/compiler/something, and in the next few months, a new version of that thing will arrive, and for now there are beta and rc's on that thing. You wish to make sure that your program works with the new version, but you do not want to move to a new unstable version, or you wish to continue support older versions.

The idea I have will help us work better in such cases. The renaming of a package name does not always helps in such cases (installing in the same directories, conflict of things that they both provide etc..), however knowingly managing different version of the same thing, can help us overcome such issues, and still have the result that we wish to have.

What do you think ?

* All package managers known to me (and me alone)

** gem does support installing multiple versions, but not the way I want it.

הקרב של מריוס

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

לאחרונה החליט מריוס לקרוא תיגר על 2 דברים:

  1. עבודה עם Internet Explorer
  2. עבודה עם Windows בכלל

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

כלכלת הקוד הפתוח

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

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

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

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

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

עוד פעם בעיות עם MySQL

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

אני מפתח כרגע אפליקציה מבוססת web באמצעות rails ו MySQL. במהלך הסערה בסופ"ש האחרון היו לי הרבה הפסקות חשמל,  וכמה תוכנות הפסיקו להגיב כמו שצריך בשל כך, ולכן התקנתי מחדש את המחשב, הפעם עם הפצה אחרת.

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

כאן מתחילה הבעיה. ניסיתי לשחזר את טבלאות של MySQL, ולמזלי עשיתי גיבוי ב3 רמות: להמשיך לקרוא

‎(x)SWAG

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

הפרוייקט התחיל בתקופה ש BBS היה הדבר החם ו Internet היה מאוד לא נפוץ ולכן היה צריך מאגרי מידע בשולחן העבודה שלנו. אותם מאגרי מידע בנושא תכנות היו כולם על שפת פסקל והכילו מגוון עצום של נושאים: תכנות טקסטואלי, תכנות גרפי, עבודה עם מסדי נתונים, עבודה עם 32 ביט,  DPMI ועוד המון נושאים שונים (57 במספר). כאשר דלפי 1 ו2 נכנסו לעולם, אז גם הם נכנסו למאגרים. ב29 בנובמבר 1997 , שוחרר העדכון האחרון, ומאז יש אתר אינטרנט שמחזיק את המאגר בשביל לעזור לאנשים, וגם בזכות הערך הרב של לשמור מידע ישן. כאשר גיליתי את המאגר הזה בתחילת שנות ה90 באיזשהו BBS, התחלתי להיכנס בצורה טובה יותר לשפת פסקל, ולמדתי ממנו הרבה מאוד בכלל על עולם המחשבים ולא רק על שפת פסקל (פסיקות, הבנתי בזכות זה קצת את אסמבלר ועוד).

לאחרונה היה דיון בפורום של FreePascal להחיות את הפרוייקט, ונבנה גם אתר פרוייקט תחת Sourceforge בשם XSWAG שזה אומר Extended SourceWare Archive Group. אני מקווה שבפועל הפרוייקט יחזור לחיים ויכיל הרבה ידע שמסתובב כיום בעולם, ויותאם לזמנים של היום.