5 דברים

יובלס הזמין אותי לספר 5 דברים על עצמי. Here I Come!!!

  1. אני בן 17, לומד בשכבת י”א והמגמות שלי הן: אומנויות העיצוב ופיזיקה. החלטתי שמחשבים אני אשאיר מחוץ לבי”ס - הבי”ס רק ינוון אותי. אגב, אני חרשן.
  2. אני משחק כדורסל מכיתה ג’, ועד סוף כיתה ו’ גם שיחקתי בקבוצה העירונית!  אבל זה העבר הרחוק, כיום אני משחק כדורסל עם חברים טובים או ב”שכונה”, משתדל לשחק בכל יום שישי.
  3. אני אוהב ללכת לחדר כושר, לשחרר אגרסיות ולחץ על מכשירים ועוד לפתח את הגוף היקר שלי - שתי ציפורים במכה אחת.
  4. האהבה שלי לתחום בניית האתרים התחיל בגלל אחותי הגדולה, היא בנתה אתר בהומסטייד (ימך שמם, סיפור ארוך̷ ;) ואני התלהבתי ועם הזמן פשוט התחלתי ללמוד גם את התחום מספרים (למזלי היה ועדיין יש לי גישה לספרייה אלקטרונית דיי גדולה ובחינם).
  5. בתור מתכנת אני בעד קוד פתוח, הרבה מהשימוש שלי ביומיום זה באפליקציות קוד פתוח ובספריות קוד פתוח (ע”ע MooTools, RoR, PHP ובכלל ב-JAVA̷ ;) . בין האפליקציות שאני משתמש בהן כמעט כל הזמן הם Firefox, 7-Zip, VLC ולאחרונה גם BlogBridge (בתור קורא RSS).
    תודה לכל אותם מפתחים וחברות שמשקיעות בקוד הפתוח ומאפשרים לנו ללמוד מהקוד ולהשתמש בקוד המוצלח (לרוב) שלהם. הרבה למדתי מעיון בקוד של Mootools ו-Prototype ו-TaniPHP.

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

RIA Generators

לאחרונה ניתן לראות ברשת העולמית התפתחות מסויימת באופן בניית האפליקציות. זה התחיל ב-hype שנקרא AJAX ו-Web2.0 והתגלגל לספריות javascript לפישוט התכנות ב-javascript, עכשיו אנחנו נמצאים בשלב הבא - התרחקות מה-low level ופיתוח טכנולוגיות שמאפשרות שלא לכתוב בכלל JavaScript לדפדפן עצמו ובמקום זאת לקמפל קוד שכותבים בשפה אחרת ל-JS.

הבלוגר Sax & Violins (שבהשראתו אני כותב פוסט זה) מתאר את זה בפוסט שלו ככה:
“בדיוק כמו שכמעט אף מתכנת לא כותב אפליקציות באסמבלי או באפס ואחדים, כי הן מפחידות וקשות מדי, אין שום סיבה שג”ס “תומצא” כל פעם מחדש ע”י מתכנת אומלל אחר.
כשמתכנת ++C לדוגמא, כותב אפליקציה קטנה בחמש דקות, שנראית מצוין ועושה משהו מזה מגניב, הוא לא דואג לקוד המכונה שבפועל יעשה את העבודה, בשביל זה יש לו מהדר (קומפיילר). וול… זה בדיוק מה שהם עשו.”

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

  • GWT‏ - Google Web Toolkit - זאת ספרייה ב-JAVA שמאפשרת לבנות אפליקציית אינטרנט עשירה (RIA) כמו שכותבים אפליקציית שולחן עבודה. ישנם פקדים (Widgets) שונים ומגוונים (ופרוייקטי קוד פתוח שיוצרים עוד ועוד פקדים), ישנם פאנלים רבים. אחרי שכותבים את הקוד ב-Java המנוע של GWT מקמפל את הקוד ל-JavaScript.
    ספריית GWT מפותחת ברישיון קוד פתוח GPL.
  • OpenLaszlo - פרוייקט קוד פתוח כתוב ב-Java.הפרוייקט מגדיר שפה XMLית לבניית ממשק המשתמש ומשתמש ב-JavaScript כדי לשלוט על הממשק עצמו (עם API מוגדר משלהם). בניגוד ל-GWT שבו קודם כותבים את קוד הJAVA ואז מקמפלים אותו ל-JS ומשתמשים בקובץ ה-JS שנוצר. בפרוייקט זה ההמרה מתבצעת On the Fly (אולי נשמרת בקאש התוצאה, לא בדקתי). לטובת laszlo אפשר לטעון שהם יותר פשוטים, אין צורך לדעת JAVA כדי לכתוב את הממשק משתמש (בניגוד לGWT). צריך תמיכה ב-Java רק כדי להריץ את האפליקציה (אפשר להריץ את האפליקציה על כל שרת J2EE או כל Servlet Container כמו טומקט, ג’טי, רסיין וכו’).לא באופן רשמי, יש גם פרוייקטים שמייצרים את מנוע הרינדור עבור Ruby ואני מניח שיש עוד, לא ממש התעמקתי.
  • XML11 - כפי שהבלוגר Sax & Violins הגדיר: “המהדר שלהם מאפשר כתיבת אפליקציות “עשירות” ב-JAVA, ככל שהסביבה מאפשרת, ובלחיצת כפתור להמיר אותם לקוד שכל דפדפן יכול לקרוא, והפלא ופלא- מתקבל תעתיק מדויק של האפליקציה מבוסס ווב, מורכב כולו מג”ס, CSS ו-AJAX, אבל ניראה ועובד בדיוק כמו התוכנה החדישה ביותר על המחשב שלכם…”
    לא יכלתי להגדיר את זה יותר טוב.
  • Adobe Flex - פלטפורמה מבוססת פלאש של Adobe. הרעיון בפלטפורמה זו הוא לכתוב את ממשק המשתמש בשפה XMLית מוגדרת (בדומה ל-OpenLaszlo) ואת הפעולות של הממשק לכתוב עם ActionScript 3. הקוד מומר בצד השרת לפורמט פלאש (SWF Mime Type).

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

פרוייקט YUI-EXT יתמוך גם ב-JQuery

ג’ק סלוקום, המפתח של yui-ext הודיע שהוא בשיתוף מפתחי JQuery יוסיפו תמיכה בחבילת ההרחבות הזאת כך שתתמוך ב-JQuery. מעתה החבילה לא תקרא יותר yui-ext אלא רק Ext. בגרסה הראשונה של החבילה יהיה אפשר להשתמש ב-Ext לצד JQuery ללא שום ספרייה נוספת אחרת.

רישיון חבילת ההרחבות תהיה ברישיון הקוד הפתוח LGPL

לקריאה נוספת: בכתבה בJQuery

מיזם חדש בפתח

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

המיזם יכתב ב-Ruby On Rails, אפליקציה ראשונה שאני אכתוב עם הפריימוורק הנ”ל, מקווה להנות מהשימוש. ובצד הלקוח אשתמש כמובן ב-MooTools האהוב.

מה שנשאר זה לאחל לי בהצלחה :-).

שיפור לולאות ב-javascript, עוד קצת מידע…

Bas Wenneker כתב בבלוג שלו על סוגי לולאות ב-javascript ואיך הכי כדאי להשתמש בהן. אבל הוא לא דיבר על טכניקות לשיפור, כמוני וכמו אלעד, אלא על סוג הלולאות, בכמה כל דפדפן יותר מהיר בביצוע הלולאות והשווה גם בין מתודת Array.each שיש בmootools וב-prototype. הוא השווה 7 שיטות שונות לביצוע לולאות.
ממצאים:

  • אינטרנט אספלורר גרוע בלולאות for-in רגילות והוא מרנדר ממש גרוע את הלולאות של Mootools ו-Prototype.
  • לולאת for רגילה יותר מהירה כשעוברים מהסוף להתחלה (כשהספריה מתחילה מ-array.length ויורדת לאפס). אני מניח כי בלולאה רגילה המנוע מחשב את אורך המערך כל פעם מחדש וכאן הוא מאותחל פעם אחת וצריך לרדת למס’ קבוע.
  • הלולאה של Mootools מהירה פי 3 בערך ב-FF ופי 2 באופרה, בIE זה פי 1.3 בערך (אבל עדיין איטי להחריד).
  • אופרה נותן תוצאות מאוד טובות לעומת FF ו-IE.
  • רצוי להיצמד ללולאת for רגילה, ורצוי לעבור עליה מהסוף להתחלה אם מתאפשר.

את כל הלולאות הוא העביר על מערך בגודל 100 אלף תאים שמכיל מספרים.

עדכון: לאחר שהסתכלתי בקוד של Mootools ראיתי שהלולאה של Mootools  כשהיא עובדת ב-FF משתמשת בלולאה nativeית שקיימת במנוע ה-JS של הדפדפן (מדובר במתודה של  JavaScript 1.6) לכן הביצועים הם יותר גבוהים מבאופרה ובIE.

שימור אובייקט החיבור למסד בין מחלקות

פרוייקט שאני כותב עכשיו (שאסיים אותו אכתוב עליו בבלוג) ב-PHP, הוחלט שהמערכת תבוסס על תשתית OOPית, כלומר, הגדרת אובייקטים שישמשו כ-domain models (כמו User, Author וכדומה) והם ידברו מול המסד (שכבת DAL). כל מחלקה פונה למסד בעזרת אובייקט חיבור שהיא יורשת ממחלקת אב (כל המחלקות יורשות מהמחלקה הזו). מס’ בעיות נוצרו עקב כך:

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

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

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

והנה המחלקה:

/*
Class: BaseDAO
the base class that all domain models based on.
*/
class BaseDAO{
protected $oConn;
private static $s_oConn;
protected function __construct(){
$this->oConn =& BaseDAO::connect();
}
public function __destruct(){
$this->oConn = null;
}
/*
Function: &connect
Use this function to connect to the database.
Return:
*Reference* to PDO connection object
(start code)
$oConn =& BaseDAO::connect();
(end)
*/
protected static function &connect(){
if(!isset($s_oConn)){
$s_oConn = new PDO(System::$db[’dsn’], System::$db[’user’], System::$db[’password’]);
}
return $s_oConn;
}
}

 

המלצה: 4.0 Komodo Edit - עורך ישן חדש

Komodo Edit הוא עורך לשפות סקריפטים מבית ActiveState. מדובר בגרסא מצומצמת וקלה של Komodo IDE. הוא נבנה על פלטפורמת מוזילה (XUL) ומשלב בתוכו את Scintilla (פקד עורך קוד ל-win32 ו-gtk+ שמשולב בכמה יישומים כמו SCiTE, phpstar ועוד̷ ;)

  • יש תמיכה בPHP 4 אאל”ט, וכמו ב-phpstar אפשר להריץ ולדבג את האפליקציות מתוך התוכנה (בלי להריץ בדפדפן).
  • יש תמיכה ב-libraries כמו yahoo, prototype, django, rails, dojoTK, PyWin32 ועוד (מבחינת Code Intelligence) ואפשר להוסיף ספריות אחרות ע”י כתיבת קובץ השלמה אוטומטית מיוחד.
  • תמיכה בכל שפות צד הלקוח (X/HTML, CSS, JavaScript) כולל בדיקות תקינות ונגישות (אפשר לקבוע את רמות הבדיקה מתוך הקוד).
  • ניהול פרוייקטים.
  • עבודה על שרת מרוחק באמצעות FTP.
  • בודק שגיאות כתיב.
  • יש Code Intelligence!!! כולל לקבצים שמוסיפים ב-include.
  • תמיכה ב-OOP של PHP.
  • עובד על כל פלטפורמה שמוזילה עובד בה.

אני אישית (נראה לי) עברתי ל-Komodo Edit, אולי טיפה מכבידה יותר על המערכת מבחינת Mem Usage אבל לא מרגישים את זה כמו באקליפס. ואני מעדיף Intellisense על הקלות במשאבים של Edit Plus ה”פרימיטיבית” והלא מתעדכנת.

שימוש נעים בעורך, ותכנות מהנה.