ארכיון חודשי: אוגוסט 2010

קצת טיפים לתכנות ברובי

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

חיפוש מספר בטווח:

a = 1
b = '9'
(a..b.to_i).include? 5
#=> true

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

קבלת ה pid שלי (אני מציג 2 דרכים):

puts $$
puts Process.pid

הדרך הראשונה היא דרך ה"פרל", והשנייה היא יותר object oriented.
קבל ה pid של אבא (או שלי, אם אני האבא של עצמי):

puts Process.ppid

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

Process.euid = 0 # you shell be root user (if you are allowed)
Process.egid = 0 # you shell be root group (if you are allowed)

זה כמובן חשוב אם אנחנו מריצים תהליך כroot (למשל) ורוצים להיות משתמש אחר, בד"כ nobody כלשהו.

משחקי חתול ועכבר של signals:

 # The victim
trap('KILL'){ # Yes only proc is allowed, and there is no support for block
  puts "Ouch, that's hurt! Goodbye cruel world !"
}
trap(3) {
  puts "I'm not quitting this stupid execution !"
}

# The killer
Process.kill(9, pid) # signal number. if you pass it as string, it will add SIG before 9
Process.kill('QUIT', pid) # signal name... Lower case will add SIG before quit

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

מדוע FPC וLazarus צריכים לעניין גם אנשי קוד פתוח

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

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

בין ויואלדי לבטהובן

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

למשל עם ויואלדי ביצירה המוכרת ביותר שלו: 4 עונות (שזה 4 חלקים -> כל חלק זו עונה אחרת), מצליח לתת לנו את התחושה של חורף במוזיקה, ואת התחושה של אביב וכו'… אם מקשיבים באמת למוזיקה כמעט אפשר להבין למה הוא קרא לזה 4 עונות. אבל זה לא כל העניין. הוא מצליח להשתמש במוטיבים חוזרים בכל העונות, רק שיתאימו לכל עונה ועונה בהתאם למה שהיא מייצגת.

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

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

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

מוקדש כחומר למחשבה גם (אם לא בעיקר) לנושאים אחרים.

אז תהנו מסוף הקיץ, עם קצת מוזיקה של ויואלדי.

n900 – עכשיו גם אני

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

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

  • ישראל לא קיימת כאיזור זמן. לבנון קיימת, ירדן קיימת, מצריים קיימת, אבל ישראל ? לא ! אז מה עושים ? בוחרים את ארה"ב בהתחלה (אח"כ משנים לבריטניה בשביל לעבוד במטרים וכו') ובמקום בחירה אוטומטית של זמנים, עושים בחירה ידנית, בוחרים את ישראל מהמפה עצמה מכוונים בכוח את השעון והתאריך, ויש !
  • אם תנסו להגדיר פרופילי wifi, תגלו שסתם בזבזתם זמן. הרשת שהוא מגלה כרגע והחלטתם להתחבר אליה לא משתמשת בהגדרות ששמתם מראש. אבל אחרי שהתחברתם פעם ראשונה הוא זוכר את הסיסמאות וכו'. אז אל תגדירו פרופילי רשת, חבל על הזמן שלכם (לפחות לפני השדרוג firmware לא בדקתי אחרי).
  • אתם חייבים אינטרנט בשביל להשתדרג, ובניגוד למוקו (אחד הדברים שאני מוצא את המוקו טוב יותר לשם שינוי), אי אפשר לעשות ip forwarding לn900 ולכן או אינטרנט סלולרי (אין לי 3g וגם אם היה זה סתם יקר)או wifi בלבד. אשמח לגלות שפספסתי משהו וכן אפשר.
  • האקסולמטר שלו בברירת מחדל כבוי. אין לי מושג איך מדליקים אותו. אשמח לעזרה בנושא.
  • זה לא אופן מוקו וזה לא אנדרואיד. אפילו אל תנסו לדמיין שהוא קרוב לאיפון כי אני מבטיח שתשלמו על זה  (הרבה כסף – על האיפון כמובן).

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

* זהירות קצת סרקסטיות והומור מוזר, אם לא הבנתם זה בסדר, כנראה שמשהו אצלי לא תקין 🙂

ייצוא/ייבוא מ/אל גליון אלקטרוני ומסד נתונים שלכם

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

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

הספרייה תומכת בצורה טבעית (כלומר מימוש עצמי של הקבצים) בפורמטים הבאים:

  • Excel 2.x
  • Excel 3.0
  • Excel 5.0 (Excel 5.0 and 95)
  • Excel 8.0 (Excel 97, 2000, XP and 2003)
  • Microsoft OOXML
  • OpenDocument
  • CSV

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

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

הספרייה עצמה יודעת גם לתמוך בעברית וערבית בהתאם למה שכל פורמט מאפשר.

אז איך מייצאים מידע אתם בטח שואלים, אז הנה קטע קוד נחמד בנושא: להמשיך לקרוא

כסף כסף כסף, שורף לי את קצה היד …

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

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

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

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

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

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

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

טיפים לעבודה בmongodb חלק ראשון

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

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

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

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

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

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

FreePBX != Asterisk וטלפון ספציפי לא מייצג את יכולות המרכזייה !

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

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

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

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

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

באסטריסק יש הרבה דרכים להעביר שיחות מערוץ אחד לשני (זה מה שפעולת Transfer עושה בסופו של דבר), אבל אם בחרת בגישה מסויימת שהיא לא מתאימה לך, מדוע אתה מתעקש להתלונן במקום לשנות את השיטה ? למשל אני יכול לכתוב תוכנית באמצעות AMI אשר תבדוק האם ערוץ מסויים למעלה או לא, ובהתאם לזה תעביר לערוץ ערוץ אחר. אני יכול להשתמש בשיטות ה"רגילות" של אסטריסק להעברה, או להשתמש בfeature codes להגדיר בדיוק את זה. הרעיון ש"כל מרכזייה לא מאפשרת להעביר שיחה אם שלוחה תפוסה" היא גישה שגויה מהיסוד שלה, היות ושאר המרכזיות לא ניתנות לתכנות. אסטריסק היא סוג של פריימוורק משל עצמו עבור ניהול שיחות טלפון במשרד (בגלל זה המרכזייה מוגדרת כ PBX בניגוד למרכזיות אשר לא נועדו להיות במשרד).

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

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

אבולוציה של שפת תכנות

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

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

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

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

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

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

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

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

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

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

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

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

אורקל מול גוגל

"כאשר 2 פילים רבים, זה הדשא שסובל" – משפט אפריקאי

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

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

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

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

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

העניין הוא שסאן לפני המכירה שלהם לאורקל, עוד הספיקו לפתוח את SDK וה JRE שלהם כקוד פתוח (רישיון GPL), אבל אם גוגל מעוניינים לספק יכולת פיתוח מסחרי על Android, אז הם לא יכולים להתבסס על GPL, והסיבה למימוש משל עצמם לגישה של Java נועד לפתור את הבעיה הזו.

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

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

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

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