ארכיון חודשי: אוקטובר 2011

שוק מול טכנולוגיה

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

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

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

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

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

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

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

ביומטריה – הדרך לגזול ממכם עוד כסף לטובת מיזם כושל

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

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

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

מהם הדגשים שצריך בעת תכנון סביבה גרפית ?

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

כיום יש מספר סביבות גרפיות שצריך לקחת בחשבון: אתרי ווב, שולחן עבודה, טלפון סלולרי ("חכם") ומחשבי לוח (למינהם). כל אחד מהם דורש גישה שונה. ואם זה לא מספיק חמור, אז כל סביבה גרפית מכילה הוראות עיצוביות משל עצמה, שלרוב אינם דומות למערכת אחרת. כלומר משהו שנכתב עבור גנום 3, לא זהה בהוראות העיצוביות לגנום 2, שלא דומה ל KDE או Windows וכו' … גם בWindows ההוראות האלו משתנות לפי כל גרסת מערכת (מאז 95, כבר נכתבו מספר מדריכים של מיקרוסופט בנושא, אחד לסביבות ה95, אחד לסביבות הXP אחד לvista ואחד ל7 ובקרוב גם ל8).

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

פונקציות אנונימיות בתכנות פרוצדורלי

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

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

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

...
type
  TMyProc = reference to procedure(x: Integer);
...
 procedure call(const proc: TProc);
  begin
    proc(42);
  end;

  var
    proc: TProc;
  begin
    proc := procedure(a: Integer)
    begin
      Button1.Caption := IntToStr(a)
    end;
    call(proc)
  end;
...

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

מספר טיפים לעבודה עם vim

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

אבידה גדולה לעולם הטכנולוגיה

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

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

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

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

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

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

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

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

סתם שתקבלו קצת קנה מידה

מי משתמש לי בswap ?

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

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

#!/bin/sh
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
  PID=`echo $DIR | cut -d / -f 3`
  PROGNAME=`ps -p $PID -o comm --no-headers`
  for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'` ; do
    let SUM=$SUM+$SWAP
  done
  if [ $SUM != 0 ]; then
    echo "PID=$PID - Swap used: $SUM - ($PROGNAME)"
  fi
  let OVERALL=$OVERALL+$SUM
  SUM=0

done
echo "Overall swap used: $OVERALL"

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

טכנולוגיה מול שיווק

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

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

עבודה עם קבצים זמניים ברובי

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

השימוש בה מאוד פשוט:

tmp = Tempfile.new('prefix')
...

מה שקיבלנו זה בעצם instance מסוג IO שנפתח לכתיבה בשם רנדומאלי כלשהו, אשר מתחיל עם המילה prefix.
נגיד ואנחנו רוצים לתת לקובץ סיומת בנוסף אבל:

tmp = Tempfile.new(['prefix', 'sufix'])
...

ועכשיו הקובץ יתחיל בשם prefix, אחריו יהיה שם רנדומאלי כלשהו, ובסוף הוא יסתיים עם suffix.

ללמוד שפת תכנות חדשה

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

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

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

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

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

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

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

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