ארכיון חודשי: ספטמבר 2013

האם DSL עוזר לתכנת ?

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

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

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

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

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

לאן פרל נעלמה אצלי ?

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

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

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

...
require 'zlib'
...
Zlib::GzipReader.open(file).each do |line|
...
end
...

הקוד עצמו לקח לי משהו כמו 40 שורות קוד בגלל שעשיתי את זה בדרך הקריאה, כולל אפשרות לדבג את הנעשה בקוד, ולא בדרך הקצרה לכתיבה (אשר היתה הופכת את זה בערך ל15-20 שורות קוד).

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

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

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

סקריפטים לא קשורים

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

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

אז אני מקווה שהקוד שלי יסייע גם לכם

בזיון השעון (או איך חברות סלולר דופקות את הלקוחות שלהן)

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

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

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

$ zdump -v Asia/Jerusalem | grep 2013 | grep Oct
Asia/Jerusalem  Sat Oct 26 22:59:59 2013 UTC = Sun Oct 27 01:59:59 2013 IDT isdst=1 gmtoff=10800
Asia/Jerusalem  Sat Oct 26 23:00:00 2013 UTC = Sun Oct 27 01:00:00 2013 IST isdst=0 gmtoff=7200

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

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