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

I did it my way …

ביום כיפור האחרון יצא לי לעבוד פעם ראשונה עם framework לcgi שהרבה זמן רציתי לנסות בשם sinatra אשר כתוב בשפת רובי כמובן. ה framework שונה לגמרי בתפיסתו מכל framework מבוסס cgi אחר שאי פעם עבדתי איתו. הוא בנוי בגישה של DSL בשביל לתאר תכנות מבוסס web. הוא מאוד קל משקל וממש לא מזכיר את rails, אלא מצד אחד יותר את django מבחינת הגישה שלו (אני בוחר מבנה ספריות וכו'),  אבל הוא מאוד פשוט לעבודה מהצד השני. חצי יום לקח לי לשלב בינו לבין ajax. למעשה רוב ה עבודה היתה דווקא בצד ה Javascript ולא בצד הרובי. ה framework מדהים ופשוט מצד אחד, אבל מצד שני בנוי לעבוד עם אפליקציות רציניות בפני עצמו, או כMiddleware.

איך עובדים עם sinatra אתם בטח שואלים, ובכן, הנה דוגמא פשוטה:

#!/usr/bin/env ruby
require 'rubygems' # if we installed sinatra or any other modules using ruby gems
require 'sinatra'
get '/' do
'Hello World'
end

נשמור את הקובץ בשם sin.rb עכשיו בשורת הפקודה נכתוב:

$ ruby sin.rb

וזהו יש לנו מערכת cgi שכל מה שהיא עושה זה לענות לבקשה הראשית בשליחה של Hello World. בברירת מחדל לשלב הניסויים בלבד יהיה לנו שרת http משלנו, אבל sinatra צריך לדעת שהוא לא רץ בסביבת ניסוי בשביל להצליח להריץ אותו עם אפצ'י או כל שרת HTTP אחר על ידי הגדרה מאוד פשוטה שאפשר ליצור בקובץ בשם config.ru ושם נגדיר שזו סביבת ניסויים או סביבת production.

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

יש עוד הרבה דברים שאפשר לעשות בשיטה הזו, כמו גילוי חלקים מסויימים בבקשה, עבודה עם regex, הגדרת פעולות לפני הניתוב, תמיכה בtemplates ו layout בהם גם תמיכה ב haml, erb וכמובן גם ב SASS. יש תמיכה במסדי נתונים עם מנועים שונים כדוגמת ActiveRecords אבל לא רק ועוד המון דברים להציע.

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

הגדרת מקשי מולטימידיה xfce

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

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

עכשיו הלכתי להגדרות המקלדת של xfce והגדרתי את שלושת המקשים: להמשיך לקרוא

תתכוננו למהירות הגלישה הבאה

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

  1. בזק – מבטיחה גלישה עד 5
  2. אורנג' – מבטיחה מחשב נישא עם מודם סלולרי עד 5

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

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

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

אסטריסק קהילתי – שקופיות

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

את ההרצאה אפשר גם למצוא באתר שלי ב pdf וב odp

העוזר הקטן של הרשימה

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

אחד הדברים הכי מעצבנים אותי (כרגע) בrails הוא שאין כלים שמטפלים ברשימה, ואני צריך ליצור קוד שלי לבד. מה הכוונה ? נגיד ויש לי תוצאה של שאילתא ואני רוצה להציג אותה בol או ul, אין לי כלי שעושה את העבודה (אם אני רוצה ב combo box או list רגיל [הרכיב של ה form] אז כן יש לי עוזרים נחמדים), ולכן התחלתי לחקור אם מישהו כבר כתב משהו בשביל זה.

רק בשביל שתבינו את הבעיה, אז ככה עושים את זה ללא העוזר:

<ol>
<% @some_result.each do |rec| -%>
<li><%= link_to h(rec.name), some_route_path -%></li>
<% end -%>
</ol>

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

def list(tag, stuff, &block)
# content_tag(tag, stuff.map { |t| content_tag(:li, yield(t)) })
return "" if stuff.nil? || stuff.empty?
items = ""
stuff.each { |t| items << '<li>' + yield(t) + "</li>" }
return "" if items.empty?
"<#{tag.to_s}>#{items}</#{tag.to_s}>"
end
def ol(stuff, &block)
list(:ol, stuff, &block)
end
def ul(stuff, &block)
list(:ul, stuff, &block)
end

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

השימוש במה שיצרתי מאוד פשוט ד"א:

<%= ol(@some_result) { |e| link_to(h(e.name), some_route_path) } -%>

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

הכוח gsub

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

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

1. שימוש "רגיל" ב gsub:

'Hello world'.gsub(/^Hello/, 'GoodBye cruel')

ובכן בשביל זה אפשר "לכופף" את רובי בצורה הבאה:

2. שימוש מתקדם בgsub:

'Hello world'.gsub(/^\w+/) do |match|
match = 'GoodBye cruel' if 'Hello' == match
end

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

סוני ואיו ולינוקס

Sony VAIO vgn-nr498e

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

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

קוד פתוח עסקי

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

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

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

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

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

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

איגוד האינטרנט הישראלי

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

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

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

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

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

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