FireStats 1.0.2 – Stable

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

FireStats 1.0.0-RC1

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

מנוע חיפוש לממשקי תכנות

יונתן שלח לי לינק לאתר gotapi שמרכז ממשקי תכנות למגוון שפות וטכנולוגיות.
מה שיפה זה שהאתר מאפשר חיפוש אג'אקסי זריז ונוח במיוחד.
שוה לנסות.

איך ללמוד לתכנת

למה בכלל ללמוד תכנות?

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

אבל איך?

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

ג'אווה

ג'אווה היא שפת תכנות נוחה למתחילים, עם Garbage collector מובנה, שחוסך את הצורך להתעסק בשחרור זכרון.
עוד יתרונות למתחילים:
* סביבת הריצה (JRE) מאוד יציבה, ובדרך כלל מקבלים הודעות שגיאה בעלות משמעות ולא סתם קריסות על טעויות.
* פשוטה הרבה יותר מ++C.
* השפה כוללת ממשקי תכנות לריבוי נימים (Threads), ממשקי משתמש גרפיים, ובאופן כללי, כמעט כל מה שתצטרכו בשביל לכתוב תוכניות מורכבות. (פחות ספריות חיצוניות ללמוד).

איך מתחילים:

1. הורד את הJDK, אני ממליץ על JDK 1.5 Standard edition בלי Netbeans, שאפשר למצוא פה.
2. הורד את Eclipse, שהיא סביבת פיתוח מעולה לג'אווה.
3. עבור בשיטתיות על הטוטוריאלים של סאן, תוך שאתה מנסה לכתוב כל דוגמא בעצמך.
רצוי לעבור על כל הקורסים שם, למעט אולי כמה ספציפיים שמתעסקים בדברים מאוד מסויימים שפחות רלוונטיים לכם (כמו 3D, סאונד או בסיסי נתונים).
אם אין לכם נסיון בתכנות, קחו בחשבון שאתם מסתכלים על בין שלושה חודשים לשנה של לימוד, תלוי באינטנסיביות של הלימוד שלכם.

ספרים מומלצים:

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

C++

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

איך מתחילים:

1. לא מומלץ להתחיל ללמוד תכנות חלונות, יש הרבה מאוד דברים רעים בממשקי התכנות של חלונות, ואם לא רוצים שהם ישפיעו לרעה על נפשכם הרכה.
2. להתאפס על קומפיילר, גם וויזו'אל סטודיו טוב, בתנאי שאתם לא מפרים את תנאי מספר 1 – כלומר, להתרחק ממשקי התכנות של חלונות (לתכנת ישומי מסוף – קונסול)
3. למצוא טוטוריאל טוב למתחילים, עם דגש על מתחילים. C++ נותנת הרבה מאוד חבל למי שרוצה להטביע את עצמו.
חיפוש קצר בגוגל העלה את זה, שנראה מתאים למתחילים, אבל יש המון אחרים.
4. לעבור על הטוטוריאל בשיטתיות, תוך שאתה מנסה כל דבר חדש (ראית const? תכניס const לאפליקציה שלך. ראית exceptions? תכניס לאפליקציה וכו').

ספרים מומלצים:

הספרEffective C++ של סקוט מיירס.
הספר של סטראוסטרופ – The C++ programming language הוא ספר מצויין, אבל לא למתחילים.
עוד ספר שאני נעזר בו לפעמים הוא Thinking in C++, אבל לא קראתי אותו ממש אלא רק נעזרתי בו מפעם לפעם.

פוסט עדכון שכזה

לא יצא לי לכתוב יותר מדי לאחרונה, אז הנה פוסט עדכון.
בשלושת החודשים האחרונים אני עובד על FireStats, כמו שאני בטוח שאפשר היה לשים לב מאחוז הפוסטים הגבוה בנושא.
FireStats התחיל כנסיון לשפר את Counterize, שדי קפא על שמריו, והפך לפרוייקט בפני עצמו די מהר, כשהבנתי שהקוד של Counterize הוא בעייתי למדי.
למי שלא בעניינים, FireStats זו מערכת סטטיקסטיקות לאתרי אינטרנט, שהתחילה כפלאגין לוורדפרס, אבל גדלה ועכשיו תומכת במדיה-ויקי, דרופל, טראק גרגריוס ובדפי PHP כלשהם באופן כללי. המערכת תומכת בריבוי שפות, וכבר יש תרגומים לספרדית, צרפתית והולנדית, וכמובן עברית ואנגלית – שנתרמו על ידי משתמשים.
למעשה למדתי תכנות ווב בPHP, Javascript, HTML וCSS תוך כדי שפיתחתי את FireStats, עד אז לא ממש התעסקתי בתכנות ווב.
הפרוייקט מצליח, מקבל תגובות חיוביות, ומורד די הרבה – הגרסא האחרונה הורדה מעל 1000 פעמים, וסך הכל יש קצת יותר מ3000 הורדות.

במהלך אותם שלושה חודשים, גם לקחתי את הקורס מבוא לבינה מלאכותית בפתוחה, קורס מהנה למדי עם הרבה תרגילים תכנותיים, אבל היה לי מעט מדי זמן להשקיע בו – עקב כמות הזמן שהשקעתי בFireStats. עשיתי את המבחן בקורס לפני כמעט שבועיים, ואני מצפה לציון בקרוב, בתקווה שהוא יהיה מספיק טוב.
באותו נושא, הסימסטר אני לוקח את רשתות ב' – שזה הסימסטר האחרון שהוא מועבר בפתוחה (הוא אוחד עם רשתות א' לקורס רשתות אחד, שמזכה ב6 נקודות זכות במקום 4+4, כמו שני הקורסים היוצאים), ואת תכנות מתקדם בשפת ג'אווה.
את תכנות מתקדם בשפת ג'אווה לקחתי כדי לנוח קצת, אני לא ממש צריך ללמוד אותו, אחרי הכל – אני מתכנת בג'אווה מ99 – אבל חשבתי שזה יכול להיות נחמד לקחת איזה קורס שאני יודע כבר :).

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

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

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

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

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

IP2C

שחררתי ספריה חדשה למציאת המדינה שאליה שייכת כתובת IP.
הספריה, IP2C – משוחררת תחת רשיון GPL2, ותומכת בJava, PHP ושורת פקודה.
הביצועים מצויינים:
250 חיפושים בשניה בPHP, ו330,000 חיפושים בשניה בג'אווה (זה ממש טוב מדי מכדי להיות אמיתי, אבל אלו התוצאות שלי) זה באמת טוב מכדי להיות אמיתי, כתבתי תוכנית בדיקת ביצועים והתוצאה היא ש100,000 כתובות אי פי אקראיות לחיפוש לוקחות 14.7 שניות, מה שנותן כ7140 חיפושים לשניה בג'אווה.
הספריה עובדת על קובץ בינארי, ככה שלא צריך להתעסק עם בסיס נתונים כדי להשתמש בה.

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

עורך הקס

אני מכניס לFireStats תמיכה בזיהוי מדינה לפי כתובת IP, ומשיקולים שונים אני לא אשתמש בבסיס הנתונים כדי לאכסן את המידע על תחומי הIP, אלא בקובץ בינארי.
אז כתבתי תוכנית שממירה את קובץ הCSV שמגיע חינם מפה לקובץ בינארי דחוס ורב תחכומים, רק מה, כצפוי בהתעסקות עם דברים כאלו לא הכל עובד חלק.
בדיבוגי, הזדקקתי לHex editor חזק ונוח.
חיפוש קצר בנבכי apt-get הניב את KHexEdit, עורך ההקס של KDE
KHexEdit הוא סבבה לגמרי, עושה את העבודה טוב, ומציג את הנתונים בצורה ברורה מאוד.
הגדרתי את המקש F5 לטעון מחדש את הקובץ, וככה יכלתי לראות איך הקובץ נוצר בזמן שאני מדבג צעד צעד בתוכנית שיוצרת אותו.
מומלץ אם אתם צריכים תצוגה נוחה של קובץ בינארי.

KHexEdit

khexedit

דף בית חדש לFireStats

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

FireStats 0.9.4-beta

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