28 באוק׳ 2007

GWT - Google Web Toolkit


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

פרטים נוספים: http://code.google.com/webtoolkit

21 באוק׳ 2007

מפה וצמצם - MapReduce


בקורס באלגוריתמים, סיבוכיות או מבנה נתונים למדנו על כל מיני שיטות לייעל את החישובים שלנו, במו איך למיין מערך ב (nlog(n או איך לעשות חיפוש בינרי, או איך לעשות שליפה ב (1)O בממוצע.
כל אלה, כבודם במקומם מונח ויש להם חשיבות ראשונה במעלה אצל כל מהנדס תוכנה.
אבל החיים מלמדים אותנו שלפעמים לא די בכך. לפעמים אנו נתקלים במשימות חישוביות שלא ניתן למצוא להן פתרון יעיל יותר וכאשר צריך לעשות חישוב על נתונים מרובים זה יכול לקחת שנים.
אז למה לדבר בחשאיות? הבה נפצח בדוגמה הבאה: נתונה קבוצה של מסמכים (עמודי אינטרנט לדוגמא) ועליכם לסרוק את המסמכים ולספור עבור כל מילה, כמה פעמים היא מופיעה בסך כל המסמכים, למשל המלה "ראשון" כמה פעמים היא נמצאת בכל המסמכים ביחד. אז מה עושים? כנראה שאין דרך טובה יותר מאשר פשוט לסרוק את כולם ולספור אחד אחד. כן, אין מה לעשות. הסיבוכיות של דבר כזה היא לא רעה, (O(n אם יש קצת מזל, אבל במחשבה שניה, אם אוסף המסמכים הוא "כל האינטרנט" אז יש לנו בעיה, יוסטון. איך אפשר לסרוק את כל המסמכים של האינטרנט? עד שנספיק לסרוק את כל מה שאנחנו חושבים שיש באינטרנט היום, כשנסיים כבר חצי מהאינטרנט ישתנה.
אז מה עושים? ממקבלים!
הפתרון הוא מקבול הבעיה. מחלקים את העבודה בין מאות או אלפי מחשבים, כל אחד עושה חלק קטן מהעבודה ובסופו של דבר מדווח תוצאות לבסיס האם, אשר עושה סיכום ומחזיר תשובה.
כבר בפוסט הקודם אמרתי שבגוגל אוהבים למקבל דברים, אז הנה עוד דוגמה למקבול של העניינים.
רגע, רגע, רגע, רק שניה אחת, מה אתה בא לטעון ש"בגוגל המציאו את המיקבול"? וודאי שלא, בגוגל לא המציאו את המקבול, ברור שעשו את זה בעולם המחשבים עוד הרבה לפני גוגל, עוד כשלארי וסרגיי היו בשא"שים , אבל מה שכן המציאו בגוגל זו שיטה מאוד פשוטה למקבל תוכניות.
כל אחד יכול למקבל, אבל מי שאי פעם יצא לו לכתוב תוכנית שרצה על cluster ענק של מחשבים, מבין שיש בזה לא מעט בעיות. הבעיה הראשונה היא למצוא את האלגוריתם המתאים כך שהעבודה תחולק באופן יעיל, שלא יקרה שיש מכונות שטוחנות CPU בזמן שאחרות סתם יושבות ומחכות. הבעיה השניה היא תקשורת מעל הרשת - לא להעמיס את הרשת יותר מידי כדי שלא יהיו צווארי בקבוק, לא לאבד נתונים ברשת, לשלוח את מה שצריך, אבל רק את מה שצריך, לכווץ את הנתונים לפני השליחה ועוד. ומה עושים אם אחד המחשבים מתרסק? בדרך כלל כשכותבים תכנה למחשב בודד ניתן להתחמק מהבעיה עם התרוץ של אם המחשב התרסק כנראה שיש למשתמש בעיות יותר דחופות כעת ובכלל, מה הסיכוי שזה יקרה? אולם כאשר מריצים תוכנית על אלפי מחשבים יש סיכוי גבוה מאוד שלפחות אחד הדיסקים יתרסק או שסתם איזשהו מחשב יקבל חום וצרבת. אז איך יודעים שאחד מהם מת ולא מחכים לו לעד? ואיך משחזרים את הנתונים שלו? כל אלה ועוד הן בעיות אמיתיות ולא פשוטות שכל מי שכתב תוכנה שרצה באופן מבוזר צריך לקחת בחשבון, ובלי שום קשר בכלל למה צריכה הותכנה לעשות, כלומר האם צריך לספור מילים במסמכים או לעשות משהו אחר. ולמי פתרונים?
בגוגל הבינו שיש פה איזושהי בעיה כללית שדורשת פתרון כללי ואבסטרקטי ולכן המציאו את הפתרון שנקרא MapReduce או בעברית מפה (מלשון למפות) וצמצם.
הפתרון של גוגל הוא פלטפורמה לכתיבת תכניות מקביליות. הפלטפורמה דואגת לפתור לך את כל הבעיות הכלליות, דוגמת תקשורת, סנכרון, מחשבים שנופלים שחזור אינפורמציה, נסיון חוזר ועוד, ומה שאתה צריך לעשות זה רק להגדיר את הבעיה הספציפית שלך שאתה רוצה לפתור, ובמקרה שלנו ספירת מילים. איך עושים את זה? מסתבר שניתן למדל בעיות כאלה לשני שלבים: שלב המיפוי ושלב הצמצום. בדוגמה שלנו שלב המיפוי יהיה כדלהלנצ'יק: חלק את כל המסמכים שווה בשווה בין כל המחשבים. כל מחשב יספור כמה פעמים מופיעה כל מילה. זהו, זה כל המיפוי. עכשיו בשלב הצמצום כל אחד מדווח על ממצאיו ויש מישהו שמסכם את המספרים. זה כל שלב הצמצום. זה כל כך פשוט שאתם בטח שואלים את עצמכם, רגע, נראה שחסר כאן משהו, אבל לא, לא חסר כאן כלום, זה כל הסיפור וזו הגאונות שבעניין, הפלטפורמה דואגת לכל העניינים מסביב ומה שנותר לכם לעשות זה רק להגדיר את לב הבעיה.

בואו נדבר תכל"ס - באיזו שפה כותבים דבר כזה? זה פשוט - ב ++C. רוצים דוגמא?



#include "mapreduce/mapreduce.h"
// User's map function
class WordCounter : public Mapper {
public:
 virtual void Map(const MapInput& input) {
  const string& text = input.value();
  const int n = text.size();
  for (int i = 0; i < n; ) {
   // Skip past leading whitespace
   while ((i < n) && isspace(text[i]))
   i++;
   // Find word end
   int start = i;
   while ((i < n) && !isspace(text[i]))
   i++;
   if (start < i)
   Emit(text.substr(start,i-start),"1");
  }
 }
};
REGISTER_MAPPER(WordCounter);

// User's reduce function
class Adder : public Reducer {
 virtual void Reduce(ReduceInput* input) {
  // Iterate over all entries with the
  // same key and add the values
  int64 value = 0;
  while (!input->done()) {
   value += StringToInt(input->value());
   input->NextValue();
  }
  // Emit sum for input->key()
  Emit(IntToString(value));
 }
};
REGISTER_REDUCER(Adder);

int main(int argc, char** argv) {
 ParseCommandLineFlags(argc, argv);
 MapReduceSpecification spec;
 // Store list of input files into "spec"
 for (int i = 1; i < argc; i++) {
  MapReduceInput* input = spec.add_input();
  input->set_format("text");
  input->set_filepattern(argv[i]);
  input->set_mapper_class("WordCounter");
 }
 // Specify the output files:
 // /gfs/test/freq-00000-of-00100
 // /gfs/test/freq-00001-of-00100
 // ...
 MapReduceOutput* out = spec.output();
 out->set_filebase("/gfs/test/freq");
 out->set_num_tasks(100);
 out->set_format("text");
 out->set_reducer_class("Adder");
 // Optional: do partial sums within map
 // tasks to save network bandwidth
 out->set_combiner_class("Adder");
 // Tuning parameters: use at most 2000
 // machines and 100 MB of memory per task
 spec.set_machines(2000);
 spec.set_map_megabytes(100);
 spec.set_reduce_megabytes(100);
 // Now run it
 MapReduceResult result;
 if (!MapReduce(spec, &result)) abort();
 // Done: 'result' structure contains info
 // about counters, time taken, number of
 // machines used, etc.
 return 0;
}


בהתחלה מגדירים את ה Mapper ולאחר מכן את ה Reducer וכותבים main קטן שמחלק את העבודה ביניהם ומתחיל את כל התהליך.

כל מה שכתבתי כאן אינו סוד מדינה. תוכלו למצוא מאמר מלא עם עוד הרבה הסברים כאן: http://labs.google.com/papers/mapreduce.html

אז איך זה לעבוד בגוגל?


אנשים שואלים אותי "איך זה לעבוד בגוגל?"
ואני עונה "תראה זה... תשמע זה... זה בדיוק..."
ואחרי שעניתי על השאלה הזו כבר כמה עשרות פעמים והבנתי שכמו שאומרים אצלנו it doesn't scale החלטתי שיותר קל לכתוב בלוג.
אז היר יו גו - בלוג בעברית, עם קורטוב לועזית, על החיים בגוגל, לפחות מהזווית שלי. להנאתכם.

תשובה אחת שאני לפעמים נותן זה "בשביל אנשים שאוהבים תכנה, זה כמו ילד בחנות צעצועים - יש כל כך הרבה במה לשחק!"
אז אני מודה שזה קצת גיקי ושתכנה זו בסה"כ עבודה ושלא אמורים להנות מזה, אבל מסתבר שאני שייך לקבוצה קצת ביישנית, קצת מופנמת, שלא שומעים עליה בחדשות ורק לפעמים הם מדברים בקול רם בבלוגים, אבל יש קבוצה כזו של אנשים שאוהבים תוכנה. אנשים סקרנים שאוהבים ללמוד דברים חדשים ומקבלים קיק מללמוד שפה חדשה (ולא טבעית) או לקרוא על איזה מנגנון מתוחכם לטיפול ב exceptions או משהו דומה. כן כן, יצאתי מהארון באופן רשמי - אני רן ואני אוהב תוכנה! (ואתם במקהלה "we love you, Ran")

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

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

ומה אתם עושים שם בכלל?

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

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

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

מאיפה מגיעים הפרוייקטים?
יש כאלה שמגיעים "מלמעלה", כלומר פונים אלינו ואומרים "צריך מוצר כזה וכזה - אתם מעוניינים לפתח אותו בחיפה?" ואנחנו מחליטים אם מעניין אותנו או לא.
ויש כאלה שמגיעים "מלמטה", כלומר אחד מאיתנו מעלה איזה רעיון, בד"כ הוא מתחיל בעבודה של 20% עליו ואם זה עושה הגיון זה הופך לפרוייקט אמיתי וגדול. אני, למשל התחלתי בפרוייקט בתחום של פרסומות, ואז אחד החבר'ה הציע רעיון מגניב לפרוייקט חדש בתחום חדש ושונה, עבדתי על הרעיון שלו יחד אתו ב 20% שלי (כלומר יום בשבוע שבו אני עושה מה שמעניין אותי) ואחרי שהצלחנו לעשות demo משכנע זה הפך לפרוייקט מלא, ועכשיו הצטרפו אלינו עוד כמה אנשים שנדלקו מהרעיון וכולנו עובדים עליו full time.

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

12 באוק׳ 2007

ומה אתם עושים על האסלה שלכם?


כשהייתי בצבא היה לי מפקד שתמיד היה מתחיל את המסדר שלו בשרותים. הוא היה אומר "לך לשרותים, תראה איך הם נראים, רחרח אותם - הם יגידו לך כך מה שאתה צריך לדעת על הפלוגה".
אז... נשאיר את הסיפורים מהפלמ"ח בצד ונחזור לשנת 2007. אולי בגללו אני מקפיד, בכל פעם שאני מגיע לראיון עבודה בחברה חדשה (וזה לא יקרה בקרוב), ללכת גם לשרותים, אפילו אם אני לא באמת צריך.
אני בהחלט זוכר את הפעם הראשונה שהלכתי לשרותים בגוגל... זה היה במטה החברה במאונטיין ויאו, קליפורניה. היתה זו שעת בין הערביים, גלים התנפצו על סלעי החוף, השחפים חזרו מהים לקראת שנת הלילה שלהם, דולפינים ליהטטו במימי המפרץ הזהוב למולי, האווירה היתה קסומה ונדמה כאילו כל היקום היה שם באותו רגע רק בשבילי... או - יותר נכון, הייתי לחוץ מהתחת כיוון שהייתי באמצע סדרה של ראיונות מתישים שלקחה יום שלם, התחילה במיגרנה והסתיימה בהתמוטטות עצבים (אבל בסוף עברתי ;-), אבל הביקור בשרותים היה רגע של קסם. רגע קצר, אמנם (עשיתי פיפי) אבל קסום. למעשה, מאז, בכל פעם שיצא לי לסוע שוב למטה החברה, הקפדתי ללכת לאותו תא שרותים בדיוק ולהשתין שם עוד פעם אחת לזכר הימים הטובים שהיו לנו יחד, גם אם אותו תא לא היה התא הקרוב ביותר וגם אם הייתי צריך לצעוד אליו 10 דקות (ממש גדול שם), לעולם לא אכזבתי אותו.
אז מה כל כך מעניין בשרותים, אתם בוודאי תוהים? אולי זה הבידה החשמלי שגם יודע לחמם את האסלה? אולי זה הפן (fan, לא fun) שהבידה עושה אחרי השטיפה? אולי זה השלט הרחוק שיש לכל בידה? או אולי זה זרם המים שניתן לשליטה - קדמי, אחורי, טמפרטורה, עוצמה, פולסים וכו? לא ולא, לא ולא, זה לא זה בכלל (זוכרים? עשיתי רק פיפי).
הסוד הוא בגוגליות. כן כן, גוגליות - זה מונח פנימי שמעיד על כך שאדם או חפץ הוא בעל תכונה המכונה גוגלי. אף אחד לא ממש יודע מה זה גוגלי (אני מבטיח לברר ולכתוב בהמשך), אבל כולם מניחים שזה משהו טוב, אולי בגלל שיש בזה את שורש החברה.
ולמה אני אומר שהשרותים הם גוגלים? אני לא מתכוון לפתיחות - אין שם שום פתיחות - יש מחיצות, ויש שרותי גברים, נשים, אז לא זה העניין. אני מדבר על משהו שנקרא "בדיקות על האסלה" (teasing on the toilet או בקיצור TOTT). מה העניין של TOTT? העניין הוא כזה - כל שבוע מתפרסם פרק חדש של TOTT ומחולק לכל תאי השרותים (בארה"ב, בישראל ובכל העולם). כל פרק הוא בעצם דף נייר בודד, משהו שאפשר לקרוא בחמש דקות, ומלמד אותך קצת על איך עושים בדיקות תוכנה בגוגל. יש פרקים שמציגים כלי בדיקות חדשים, יש פרקים שמציגים שיטות עבודה, או סתם טיפים קטנים ושימושיים למתכנת שכותב לעצמו את בדיקות היחידה (unit testing), שזה בעצם כולם - כולם כותבים בדיקות. יש פרקים ממש מרתקים, כאלה שאני יוצא מהשרותים עם תחושת סיפוק גדולה לא רק ממה שיצא, אלא גם ממה שנכנס ;-) יש גם פרקים, איך נאמר, קצת פחות מרתקים, אבל ככה זה בחיים.
בעצם בגוגל דואגים שננצל היטב את הזמן, אפילו בשרותים - צריך לנצל היטב את ה down time של המהנדסים היטב. ברור שאם לא נוח לכם עם המחשבה אתם לא חייבים לקרוא (אין מבחן בסוף), אבל אני באופן אישי חובב גדול של מקביליות. זה אומר שתמיד כשאני מכין פסטה, קודם כל אני חותך את הבצל ומטגן אותו, כך שבזמן שהבצל מיטגן לאיטו על האש, אני קולף את העגבנית ומכין את שאר המצרכים; כמובן שהבישול של הפסטה עצמה גם כן קורה במקביל לרוטב, אבל זה כבר עניין של תזמון עדין כיוון שאסור שהפסטה תחכה לרוטב - זה יעשה אותה רכה ודביקה. אז כמו בפסטה, כך זם בשרותים (לא הרך והדביק - המקביליות). אני תמיד דואג להריץ איזו קומפילציה לפני שאני הולך להתפנות. ואם אני כבר מתפנה, אני נהנה למקבל בשלישית ע"י קריאת פרק מהנה של TOTT.

9 באוק׳ 2007

20%


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

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

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

איך בוחרים פרוייקט 20%?
אז קודם כל, 20% זו כמובן לא חובה, זו זכות. אתם יכולים לעבוד רק על פרוייקט אחד בלבד, כמובן. אבל הרבה גוגלרים מנצלים את ההזדמנות ולוקחים פרוייקט.
יש בחברה לוח מודעות וירטואלי שבו יש רשימה ארוכה של פרוייקטים שמחפשים עוד contributors ("תורמים", אבל
בעברית איט ג'אסט דאסנ'ט סאונד רייט), אז אפשר פשוט לבחור את אחד הפרוייקטים שמעניינים אותך משם.
אפשר גם פשוט להמציא פרוייקט. יש לא מעט גוגלרים שהיה להם רעיון נפלא והם פשוט התחילו לעבוד עליו ב 20% שלהם. לפעמים זה נגמר בכלום, ולפעמים זה הפך לפרוייקט גדול. Gmail הוא דוגמה לפרוייקט שהתחיל ב 20% וצמח לפרוייקט אמיתי. למעשה גם אני עובד עכשיו על פרוייקט שהתחיל ב 20% ואחרי שהצגנו אותו לכמה אנשים והם התלהבו זה הפך לפרוייקט אמיתי.
עוד דרך ל 20%: אני משתמש הרבה ב Google Reader. באיזשהו שלב מצאתי שם משהו שהוא ספק באג, ספק פיצ'ר שחסר. פתחתי באג בכלי הפנימי של החברה לניהול באגים והם ענו לי שהם עמוסים ולא יכולים לפתור את זה עכשיו, אבל שאם אני רוצה, אני מוזמן לעשות את זה בעצמי. בהתחלה קצת התבאסתי כי חשבתי שזו פשוט הדרך המנומסת שלהם להגיד שזה לא מעניין אותם, אבל אז הבנתי שזה בכלל לא כך - הם באמת היו מעוניינים שאני אעזור להם וגם עזרו לי לעזור להם. הפשלתי שרוולי וניגשתי לעסק. זו היתה חוויה נפלאה. עבדתי על מוצר שאני ועוד איזה כמה מליונים משתמשים בו יום יום (שלא לומר מכורים אליו), הוספתי פיצ'ר חדש די בקלות (יש להם אחלה דיזיין - מאוד קל ללמוד אותו) והיום אני משתמש בו כל הזמן (וכנראה שגם אתם :-)

רוצים לקרוא עוד? הנה סיפור דומה לשלי (אנגלית)

7 באוק׳ 2007

Emacs? vi?


זה כנראה עניין דתי...
מכירים את מלחמות הגיקים בין linux ל windows?
אז יש יותר גרוע מזה: מלחמות הסופר גיקים בין vi ל emacs.
אם תשאלו גוגלר איזה אדיטור (orech) אהוב עליו במיוחד אתם עלולים לקבל כמה תשובות מעניינות, שכל אחת בפני עצמה היא נושא למחקר אנתרופולוגי-סוציולוגי-תאולוגי ולפעמים אף פלאנתולוגי מעניין במיוחד.
יש שיענו vi כאילו דההה, בנסיון להראות קול על ידי שימוש בז'רגון שהיה עדכני לפני איזה 10 שנים.
יש שיענו emacs, מה, יש אדיטור אחר בכלל? בליווי נחרת זילזול מעליבה.
אז זה כנראה תלוי אם אתם מעדיפים את הרצף ESC+: או שאתם דוקא מעדיפים CTRL+x CTRL+f k q v וכו'...

ושלא תחשבו שהמצאנו את זה כאן; המלחמה הזו היא NIH. לקהיליית המתכנתים היוניקסים יש עבר עשיר בנושא: http://en.wikipedia.org/wiki/Editor_war

ובמה אני משתמש, תשאלו? עם זאת שאני כל פעם נפעם מחדש כשמשתמש vi מראה לי איך הוא עושה search and replace עם ביטויים רגולריים מהגיהנום, ואני מתפעל מזריזות הידיים של משתמש emacs כאשר הוא מדגים לי לחיצה סימולטנית על עשרה מקשים שונים כדי לשמור קובץ (הוא בטוח משתמש ביותר מ 10 אצבעות), אני באופן אישי מסתפק ב eclipse שלי...




2 באוק׳ 2007

כמה מסכים אתם צריכים?

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

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

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