הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא תכנה חופשית.
העדפות שלי, תשובה לאילן
תשובה לשאלה של אילן שביט
- הפצה: דביאן יציבה 100%, אפילו שאני פוזל לכיוונים אחרים.
- סביבת עבודה: KDE
- מעבד תמלילים: LaTeX, עדיפות שניה OO.
- נגן מוזיקה: amarok
- נגן וידאו: Kaffeine ב־Windows כמובן VLC.
שפת תכנות: אין דבר כזה, תלוי משימה:
- GUI, שרת, יישום שדורש ביצועים -- C++ לפעמים C.
- עבודה עם קבצים, משימות פשוטות אחרות, קינפוגים bash.
- עיבוד טקסט python או perl.
- בניה של דף אינטרנט דינאמי קטן PHP.
- חישוב מתמטי octave/matlab.
מה שחשוב לדעת ולא לפחד לשלב ביניהם: למשל גרעין של CppCMS כתוב ב־C++, כאשר משימה שהיא לא מתבצעת בזמן־אמת ניתנת ל־python וכל מיני תסריטי עזר כתובים ב־bash.
IDE לשפת התכנות: KDevelop או vim.
- שפה נוספת שהייתי שמח להכיר (לעומק): Python ו־Java.
- מה הייתי לומד (לו היה לי זמן): FPC.
- משחקים אהובים: AH2
- דוא"ל: Yahoo
- דפדפן: פיירפוקס או אפיפני, לא ממש משנה.
- תוכנת גיבוי: תסריט bash עם scp לאתר מרוחק. (רק עבור דברים מאוד קריטיים כמו בסיס נתונים).
- חלוקה למחיצות: אני לא ממש זוכר מתי עשיתי אז זה בפעם האחרונה --- מה שעובד qparted/gparted או תוכנת התקנה של דביאן.
- עורך אודיו: Audacity (יש משהו חופשי אחר?)
- לקוח FTP: עבור windows כמובן filezilla, עבור לינוקס gftp, או Konqueror, או nautilus -- לא ממש משנה.
ניהול Sessions ב־CppCMS
הערה 05/01/2009: פורסם מדריך לעבודה עם sessions בויקי
אחד החלקים חשובים של כל תשתית פיתוח יישומי אינטרנט הוא --- תמיכה בניהול Sessions: שמירת מידע בין בקשות שונות. זה מאפשר להפוך פרוטוקול HTTP שהוא stateless בטבעו ל־statefull. זהו מרכיב הכרחי שקיימ ברוב התשתיות כמו Django או RoR.
בד"כ, אני נוהג להסתכל בפתרונות הקיימים, לבחור את הטוב ביותר וליישמו במסגרת האילוצים של CppCMS. גם הפעם הסתכלתי בשתי התשתיות הפופולריות RoR ו־Django והבנתי, שהפתרון שהם מציעים, כפי שהוא לא מתאים בגלל אילוצי ביצועים.
הדרך "זולה" ביותר, היא לשמור את המידע ב"עוגיות" אבל יש לה שני מגרעות:
- יש מגבלה של כ־4K נתונים שניתן לשמור בעוגיה (לא כולל קידוד וכד').
- RoR שנותנת אפשרות ניהול מידע בעוגיות, לא מבטיחה שהמידע השמור לא ייחשף ללקוח --- תחשבו על פתרון Captcha ששמור בתוך עוגיה..
שמירת המידע בצד השרת כרוכה בשתי בעיות:
- ניהול בסיס נתונים כלשהו לשמירת המידע --- שיכול להוות צוואר בקבוק.
- בעית הביזור שלו גישה מרובת משתמשים.
לכן, החלטתי שב־CppCMS אני אלך על פתרון קצת שונה שמשלב את התכונות של שניהם (עם שיפורים).
המשך...בחירת בסיס נתונים משובץ... או לא כל הנוצץ זהב.
מי שעוקב אחרי התפתחות של CppCMS יודע, שבתחילת דרכי, רציתי לעבוד עם בסיס נתונים מיוחד Berkeley DB. אחד היתרונות הגדולים שלו זה ביצועים מדהימים, לפחות לפי הנתונים של Oracle.
בזמנו, התלבטתי והחלטתי להפסיק להשתמש בו. אלה היו הסיבות:
- אומנם BDB היה מהיר יותר, אבל לא כל כך משמעותית.
- התחזוקה של בסיס נתונים הייתה מאוד מסובכת (בייחוד שדרוג של מבנה טבלאות).
- ה־API היה, נוראי בלשון המעטה שדרש מעטפת נוספת שהכתיבה שלה בפני עצמה הייתה לא מי יודע מה פשוטה.
אבל היום, עלה לי צורך ספציפי, בו הייתי זקוק לבסיס נתונים מאוד פשוט, לא מבוסס על SQL שיעשה את העבודה הפשוטה: ניהול Sessions.
מה בדיוק צריך לשמור:
- מפתח ייחודי לכל אחת.
- שעת התפוגה --- מתי אפשר למחוק רשומה מהטבלה.
- הנתונים עצמם.
אפשר היה להשתמש ב־RDBS כמו MySQL, אבל עבור המשימה הספציפית, זה היה נראה כבד מידי. הדרישות היו די בסיסיות:
- תחזוקה מינימלית.
- מהירות הכנסה גבוהה.
- זמינות גבוהה בהפצהות ומערכות הפעלה שונות.
- דרישות שרידות בסיסיות: רצוי שבסיס הנתונים לא ייפגע עם התכנה תקרוס, או מחשב יפול, אבל, אם ייאבדו כמה רשומות, זה לא ממש משנה.
אז היו לי מספר אפשרויות:
- בסיס נתונים מאוד פשוט של מפתח/ערך כמו gdbm עם מנגון "ניקוי".
- בסיס נתונים מורכב כמו Berkeley DB שתומך אינדקסים, כבר היה לי ניסיון איתו.
- מערכת קבצים --- כל ערך שמור בקובץ נפרד, גם פה צריך מנגנון "ניקוי" של ערכים ישנים.
- בסיס נתונים משובץ sqlite3.
אז בואו נתחיל.
המשך...הגיע זמן לחפש הפצה חדשה?
בהמשך לחיזוי של שחרור מאוחר של Lenny באוגוסט 2008, אני מתחיל להגיע למסקנה -- הוא מדויק למידי. הנה גרף הבאגים הקריטיים במצבו של היום:
זה עצוב, אבל זה נכון. אי אפשר לצפות ל־Lenny לפני מאי--יוני, למרות שרוב האנשים ואפילו קפלן חושבים אחרת.
האם הגיע זמן להחליף הפצה? מצד שני כשאני מסתכל, אין הפצה מתאימה בסביבה --- מספיק יציבה, עם שדרוגים פעם בשנה--שנה־וחצי, עם מאגר חבילות רחב ומה שעוד יותר חשוב עם backports מסודרים. כנראה שגם לא תהיה כזו בקרוב, כי רוב המשתמשים עדיין גיקים ורוצים משהו אחר.
מה חסר חי כרגע? gcc-4.3, גרסה אחרונה של firefox ועוד כמה דברים.
(תחילת) מבוא ל־LaTeX בעברית
לפני כחצי־שנה--שנה, התחלתי להכין "מבוא ל־LaTeX בעברית". לצערי, אני לא מוצא זמן להביא את העבודה מצב סביר, שלא לדבר על מצב "מוגמר". מצד שני, כבר הספקתי לכתוב לא מעט מידע מועיל, שלא לדבר על העובדה, שהמדריך עצמו, מהווה דוגמה מצויינת לעבודה עם LaTeX בעברית עבור אלה שכבר מכירים LaTeX רגיל.
כמו כן, שמתי לב להתעוררות בנושא LaTeX ועברית בזמן האחרון; ואיתה הבעיה התמידית --- הערד כל תיעוד סביר.
לכן, החלטתי לשחרר את הטיוטה לקהל רחב. אני לא יודע מתי אני אחזור אליה. ייתכן שהיא תהיה מספיק מועילה לקהל משתמשי LaTeX בעברית ומשתמשי BiDiTeX.
קישורים
אני מקווה שזה יכול להיות מועיל למישהו. אני בטוח שתמצאו כאן חוסרים, ואי־דיוקים, אבל, כרגע אין לי זמן לטפל בזה, לכן, החלטתי שעדיף משהו חצי בשל, מאשר כלום.