ארכיון חודשי: נובמבר 2011

כמה עולה תכנה חופשית – תשובה לדורון

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

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

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

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

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

הקשיים ביצירת תכנות טבעיות לאנדוראיד

"The greatest challenge to any thinker is stating the problem in a way that will allow a solution" — Bertrand Russell

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

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

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

שליחת הודעות עם d-bus

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

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

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

ד"א, לקח לי פחות זמן לממש את הbinding מאשר להבין למה המימוש שלי פשוט לא עובד.

ממשק גרפי לציטוטים חלק 2

display quotes

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

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

עוד שינויים גרפיים משמעותיים:הוספתי יכולת להעתיק את הציטוט ישירות ללוח הגזירים (Clipboard).  כמו כן, החלפתי את פקדי הכפתורים לBitBtn ומציג עכשיו איקונים (רק אם הסביבה מאפשרת להציג. כלומר אם בחרתם שלא יוצגו תמונות של כפתורים בסביבה הגרפית – KDE, Gnome וכו', אז הם לא יוצגו). האיקונים נלקחו באכזריות מאוסף Oxygen.

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

תכנונים לגרסה הבאה:

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

עוד רעיונות יתקבלו בברכה

ממשק גרפי לציטוטים

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

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

זהירות מחנויות ישראליות ברשת

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

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

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

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

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

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

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

עבודה עם /dev/random ו /dev/urandom

ישנם בעולם ה POSIX – בעיקר במערכות יוניקס 2 devices אשר מאפשרים לנו לקבל מספר כלשהו שיהיה בסיס לחישוב רנדומאלי (seed). ההבדל העיקרי בניהם הוא ש random הוא blocking, כלומר עד אשר לא אקבל תשובה אשאר "תקוע". בעוד ש urandom חוזר מייד, ולפעמים יביא מידע פחות איכותי (כלומר פחות רנדומאלי) לשימוש.

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

כתיבת watchdog פשוט עם רובי

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

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

עצור: עסקים קטנים בישראל

The first mistake in public business is the going into it
Ben Franklin

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

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

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

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

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

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

הרי מה שארוויח בשנה מההצעה האחרונה שקיבלתי, יהיה הרבה יותר מאלו אשר מנסים לרכוש את ה"עסק" שלי (כלומר אותי ובעיקר את הלקוחות שלי) עד עכשיו …

מוקדש כתמרור אזהרה

המחיר = חוויה ?

לפני מספר שבועות, הציעו לי לרכוש אפרטשייב "מדהים". לפני ששאלתי את המחיר, רציתי להריח אותו. כמעט הקאתי במקום, אז מייד אמרו לי "אבל זה אפטרשייב איכותי, הוא עולה 600 ש"ח". בחרתי בסוף באפטרשייב שעלה לי 80 ש"ח, אבל הריח לדעתי ממש טוב. מה שמדהים זה, שאנשים אומרים שאפשר לדעת את המחיר של האפטרשייב לפי הריח. אז זהו שאי אפשר. אני יכול למצוא אפטרשייב במחיר של 1,000 יורו, אבל ריח ביוב טוב יותר, ואני יכול למצוא ב50 ש"ח משהו שמריח טוב.

העניין הוא שהרבה מאוד אנשים מתרגמים את המחיר לאיכות. כלומר אם הם שילמו הרבה אז בהכרח הם קיבלו משהו איכותי יותר. בעולם ה"ריחות" זה השתרש ממש עמוק, ו"תודות" לאפל גם בעולם החפיצים. אני רואה חבר אשר מבין דבר ושניים בטכנולוגיה נופל בדיוק לבור הזה. הוא קיבל עסקה "משתלמת" מחברת סלולר. הוא ואשתו ידברו בניהם ב0 ש"ח בחודש, אבל רק אם הוא יקח אייפון. לפני שהיה לו איפון הוא שיחק איתו מספיק פעמים ותמיד אמר שהוא גרוע. אבל בגלל שעכשיו הוא שילם מספר רב של זוזים על מכשיר בינוני מטה, הוא פתאום מגלה "חוייה". הוא יושב מסביר לי כמה איפון יותר טוב. איך הוא מסביר ? "תראה כמה מהר התפריט זז". חצי שיחה הוא רק מגולל ימינה ושמאלה את האפליקציות שיש לו בשביל "להוכיח". הוא גם מראה לי תכנת פרקטלים שמצא ב"חינם אין כסף רק 0.99 אגורות" הסכום הוא כי אי אפשר לא למכור בחנויות האפל. אבל הוא מסביר שהמסך כל כך איכותי עד שאין צורך ב anti-aliasing עבור הגרפיקה. הדבר היחיד שאני מסכים איתו שהמסך של האיפון באמת איכותי, אבל זהו כאן אני מפסיק להסכים איתו… אח"כ הוא מסביר כי אפל שומרים טוב יותר על המשתמשים וכו' … (והבן אדם במקור משתמש לינוקס. לא סתם אובונטו, אלא ארצ', סלאק וכו'… ולפני זה היה איש סולאריס ואח"כ BSD הרבה שנים).

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

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