ימי הביניים של Unix או FreeBSD 7.1.

ב־יום שלישי, 13 בינואר 2009, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, פיתוח, תכנה ומחשבים, CppCMS; ‏2 תגובות

כידוע, אני רוצה לוודא כי cppcms ירוץ על מספר מרבי של פלטפורמות תואמות POSIX. כשהפיתוח נעשה לרוב על Linux, אני רוצה לוודא כי הוא ירוץ על כל פלטפורמת POSIX חופשית: שכרגע הן: Linux,‏ OpenSolaris, ‏‎*BSD ו־Cygwin.

העבודה על לינוקס הרגילה אותי לסטנדרטים גובהים של מימושים ותאימות, תיעוד man מעולה עם דוגמאות והסברים ובכלל --- סביבת פיתוח UNIXית די נוחה.

אבל, כידוע לא כל ה־UNIXים הם זהים. יש פה ושם api שלא ממומש, יש פה ושם סמנטיקות שונות לפעולות בתנאים שונים ועוד. אז אחרי שמצאתי תאימות טובה מאוד ל־solaris גיליתי ש־FreeBSD היא קוץ אחד גדול.

אחת ההפתעות הראשונות שהייתה לי --- pthread_mutexattr_setpshared לא נתמך. ידעתי שהוא לא נתמך ב־cygwin אבל מ־FreeBSD 7.1 ציפיתי לטוב יותר.

הסבר: זאת אופציה שמאפשרת לשים mutex בזיכרון משותף של שני תהליכים שונים. כל UNIX בוגר תומך באופציה הזו. Linux תומך בזה החל מ־2.6 עם כניסת NPTL והופיע לראשונה ב־RH9.

טוב, מאחר ויש לי תמיכה של "אי־שימוש" במחיר של ביטול רכיבים מסוימים, לא נורא.

המערכת התקמפלה ועבדה יפה. ברגע שניסיתי להפעיל אותה ב־mod_prefork היא עפה עם unsupported system call...

או קיי? מה זה אומר.

מסתבר, ש־sem_init גורם לתופעה כזו. אני קורא man -- הכל אמור לעבוד. כותב תוכנת ניסוי פשוטה -- היא עפה. התחלתי לגגל וגיליתי: תמיכה ב־POSIX Semaphores היא ניסיונית מאוד ולא יציבה. צריך לקמפל kernel עם אופציה ספציפית כדי שזה יעבוד!

אם כך, למה להעיף תוכנה? אולי עדיף ש־sem_init יחזיר שגיאה? או קיי, אז אולי נשתמש במנגנון אחר? נגיד flock? אהה... לפי man של FreeBSD הוא אפילו לא יוצא עם EINTR במקרה של סיגנל (שזאת הסיבה העיקרית שהשתמשתי ב־Posix Semaphores.

היו כמובן עוד כמה נפלאות של עבודה על BSD עצמו: כמו המערכת קבצים ברירת מחדל בכלל לא עובדת עם journaling, תהליך fsck הוא איום. הגדרות בסיסיות על הפנים, pkg_add הנותן שגיאות מאוד "עוזרות וממצאות" "קל מאוד" להגדרה ועוד. תיעוד... לא אכנס לזה. התחושה שאני עובד על איזה Debian Potato... או בעצם גם אז הוא היה קצת יותר טוב.

בקיצור --- אני אומנם אמשיך ואגרום ל־CppCMS לעבוד על FreeBSD כי זה לא מי יודע מה מסובך, אבל...

Free BSD Sucks!!!‎

חד וחלק!

אני OpenSolaris,‏ VirtualBox והרבה כאב ראש...

ב־יום שבת, 10 בינואר 2009, מאת ארתיום; פורסם תחת: תכנה חופשית, לינוקס, פיתוח, תכנה ומחשבים, CppCMS; ‏0 תגובות

החלטתי לבדוק את CppCMS על מערכות הפעלה נוספות מלבד Linux, לכן, החלטתי להתקין OpenSolaris על VirtaulBox. אני מזהיר מראש, הסיפור של CppCMS כאן הוא מינורי --- התיקונים האמתיים שקשורים ל־OpenSolaris לקחו בדיוק 5 דקות, ש־4 מתוכן היו קומפילצייה של הקוד מחדש.

ובכן, נתחיל -- החלטתי להתקין OpenSolaris. כהרגלי, הורדתי LiveCD עדכני, הפעלתי VirtualBox ו־... גיליתי ש־OpenSolaris לא עולה. גיגלתי, בדקתי, הבנתי שצריך לעדכן גרסת VB. בסדר, לא מסובך נעשה.

בשלב הבא, כשההתקנה הושלמה, גיליתי שאין לי אינטרנט, חיפשתי גיגלתי, שיחקתי עם דרייברים ועם מודולים, ifup/down שיניתי הגדרות "חומרה וירטואלית" --- nada, אין אינטרנט... אחרי עוד מספר שעות בגוגל, גיליתי שאני חייב לעשות 2 אתחולים של מחשב וירטואלי לאחר התקנה כדי שהאינטרנט יעבוד(?!)

אכן, בשלב מסוים, הוא התחיל לעבוד, אבל, אחרי עוד אתחול הוא מת... בלי סיכויי להחייאה -- כנראה הרסתי משהו במשחקים קודמים.

אז, התקנתי OpenSolaris מחדש ו... לא כאן לא נגמרו בעיות

המשך...

פונקציית hash קריפטוגרפית ודעות קדומות

ב־יום ראשון, 4 בינואר 2009, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים; ‏4 תגובות

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

  • פונקציית md5 פרוצה, אז אני שומר את הססמאות בבסיס הנתונים בעזרת sha1 (או רשום פונקציית hash החביבה עליך) ואמנע גילוי ססמאות עם בסיס הנתונים ייפרץ!
  • פונקציית md5 אינה בטוחה, אז אני אוסיף קצת "מלח"‏: md5(salt+pass)‎ והיא תהיה בטוחה!
  • אני השתמשתי ב־hmac של פייתון בקונפיגורציית ברירת מחדל וגיליתי שהוא משתמש ב־md5 הפרוצה... עכשיו כל החתימות של שוות כלום.

מוכר לכם? ידוע לכם?

אז תגלו, שכל אלו הן טענות לא־בדיוק־נכונות.

המשך...

העדפות שלי, תשובה לאילן

ב־יום שישי, 2 בינואר 2009, מאת ארתיום; פורסם תחת: תכנה חופשית, תכנה ומחשבים; ‏0 תגובות

תשובה לשאלה של אילן שביט

  • הפצה: דביאן יציבה 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

ב־יום שני, 29 בדצמבר 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏; ‏9 תגובות

הערה 05/01/2009: פורסם מדריך לעבודה עם sessions בויקי

אחד החלקים חשובים של כל תשתית פיתוח יישומי אינטרנט הוא --- תמיכה בניהול Sessions: שמירת מידע בין בקשות שונות. זה מאפשר להפוך פרוטוקול HTTP שהוא stateless בטבעו ל־statefull. זהו מרכיב הכרחי שקיימ ברוב התשתיות כמו Django או RoR.

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

הדרך "זולה" ביותר, היא לשמור את המידע ב"עוגיות" אבל יש לה שני מגרעות:

  1. יש מגבלה של כ־4K נתונים שניתן לשמור בעוגיה (לא כולל קידוד וכד').
  2. RoR שנותנת אפשרות ניהול מידע בעוגיות, לא מבטיחה שהמידע השמור לא ייחשף ללקוח --- תחשבו על פתרון Captcha ששמור בתוך עוגיה..

שמירת המידע בצד השרת כרוכה בשתי בעיות:

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

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

המשך...

העמוד הקודם

העמוד הבא

דפים

נושאים