הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
אני OpenSolaris, VirtualBox והרבה כאב ראש...
החלטתי לבדוק את CppCMS על מערכות הפעלה נוספות מלבד Linux, לכן, החלטתי להתקין OpenSolaris על VirtaulBox. אני מזהיר מראש, הסיפור של CppCMS כאן הוא מינורי --- התיקונים האמתיים שקשורים ל־OpenSolaris לקחו בדיוק 5 דקות, ש־4 מתוכן היו קומפילצייה של הקוד מחדש.
ובכן, נתחיל -- החלטתי להתקין OpenSolaris. כהרגלי, הורדתי LiveCD עדכני, הפעלתי VirtualBox ו־... גיליתי ש־OpenSolaris לא עולה. גיגלתי, בדקתי, הבנתי שצריך לעדכן גרסת VB. בסדר, לא מסובך נעשה.
בשלב הבא, כשההתקנה הושלמה, גיליתי שאין לי אינטרנט, חיפשתי גיגלתי, שיחקתי עם דרייברים ועם מודולים, ifup/down שיניתי הגדרות "חומרה וירטואלית" --- nada, אין אינטרנט... אחרי עוד מספר שעות בגוגל, גיליתי שאני חייב לעשות 2 אתחולים של מחשב וירטואלי לאחר התקנה כדי שהאינטרנט יעבוד(?!)
אכן, בשלב מסוים, הוא התחיל לעבוד, אבל, אחרי עוד אתחול הוא מת... בלי סיכויי להחייאה -- כנראה הרסתי משהו במשחקים קודמים.
אז, התקנתי OpenSolaris מחדש ו... לא כאן לא נגמרו בעיות
המשך...פונקציית hash קריפטוגרפית ודעות קדומות
אחרי הכתבה של עידו על הקשחת שרת, ראיתי את האי־הבנות שקיימות בנוגע לפונקציות hash הקריפטוגרפיות.
- פונקציית md5 פרוצה, אז אני שומר את הססמאות בבסיס הנתונים בעזרת sha1 (או רשום פונקציית hash החביבה עליך) ואמנע גילוי ססמאות עם בסיס הנתונים ייפרץ!
- פונקציית md5 אינה בטוחה, אז אני אוסיף קצת "מלח": md5(salt+pass) והיא תהיה בטוחה!
- אני השתמשתי ב־hmac של פייתון בקונפיגורציית ברירת מחדל וגיליתי שהוא משתמש ב־md5 הפרוצה... עכשיו כל החתימות של שוות כלום.
מוכר לכם? ידוע לכם?
אז תגלו, שכל אלו הן טענות לא־בדיוק־נכונות.
המשך...העדפות שלי, תשובה לאילן
תשובה לשאלה של אילן שביט
- הפצה: דביאן יציבה 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.
אז בואו נתחיל.
המשך...