הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא תכנה ומחשבים.
גיוס מפתחים דרך Stackoverflow.
Stackoverflow זהו פורום מפתחי תכנה מיוחד בו ניתן לשאול שאלות, לענות עליהם ולהצביע להן ולתשובות הטובות ביותר. יש שם מאגר מידע עצום שאני נעזר בו לעתים קרובות ומוצא תשובות להרבה שאלות. האתר הוקם לפני כשנתיים ותפס תאוצה מדהימה בקרב מפתחים תוך זמן קצר.
לא מזמן גיליתי שירות מדהים ש־Stackoverflow נותן לפרויקטים של תכנה חופשית. האתר מאפשר להגיש בקשה לפרסום הפרויקט שזקוק גיוס מפתחים. במילים אחרות, אם אתה מעוניין לגייס מפתחים לפרויקט קוד פתוח, אז ניתן להגיש בקשה לפרסום. אם היא מקבלת 6 הצבעות או יותר מהקהילה אז היא תופיע באתר.
כמובן שאני בהחלט זקוק לעזרה בפיתוח CppCMS, לכן גם אני הגשתי בקשה ב־Stackoverflow. בתקווה שהיא תעבור את הרף של 6 הצבעות ותופיע בסופו של דבר באתר.
כך שאם יש לכם, קוראי הבלוג הזה, חשבון ב־Stackoverflow ואיכפת לכם מהפרויקט שלי, אשמח לקבל הצבעות ;-)
נ.ב.: מה אתם חושבים על הבאנר?
נ.נ.ב.: נכון לעכשיו, הבאנר קיבל 5 הצבעות... אני זקוק לעוד אחת. אם אתם רשומים ב־Stackoverflow ואיכפת לכם מהפרויקט, בבקשה תצביעו!
שימו לב:
- להירשם סתם כדי להצביע זה לא יעזור... צריך לצבור מוניטין כדי לקבל אפשרות הצבעה.
- אם אתם לא רשומים ב־meta.stackoverflow, פשוט תירשמו ותשייכו את החשבון לחשבון ב־stackoverflow זה יתן לכם אוטומטית תוספת ניקוד שתאפשר להצביע.
תודה!
שוחררה Boost.Locale
שוחררה גרסה חדשה של הספריה שמיועדת ל־boost Boost.Locale (ראה הודעה ברשמת התפוצה של Boost):
הגרסה הזו מכילה את השיפורים הבאים:
- תכנון מחדש של איטרטור גבולות (כלי המאפשר להפריד בין מילים, משפטים וכד').
- התווספה תמיכה בעבודה עם תאריכים בלוחות שנה שונים כמו גרגוריאני (לועזי), עברי ואחרים. ראה דוגמה calendar.cpp המדפיסה לוח שנה בהתאם ללוקל.
- תיקוני באגים רבים.
- תמיכה בפלטפורמות נוספות
ועוד.
הספרייה מספקת:
- נורמליזציה של Unicode, טיפול נכון בשינוי case של מחרוזות.
- מיון (collation) לפי 4 רמות unicode שונות.
- טיפול אחיד בלוחות שנה שונים כמו, גרגוריאני (לועזי), עברי ואחרים
- אנליזה של גבולות הטקסט (מילים, משפטים, תווים ועוד).
- הדפסה של מספרים, תאריכים, ערכי כסף, איות מספרים ועוד.
- פרמוט של מחרוזות המתאים ללוקליזציה ותרגום מחרוזות בעזרת מילונים של gettext.
תמיכה בקידודים שונים, utf-8/16/32 וקידודים אחרים כמו cp1255.
תיעוד: http://cppcms.sourceforge.net/boost_locale/html/index.html
- הורדה: https://sourceforge.net/projects/cppcms/files/
- מדריך מקיף: http://cppcms.sourceforge.net/boost_locale/html/tutorial.html
חשוב לציין
- Boost.Locale איננה חלק רשמי של Boost (בינתיים) ובתקווה תהפוך לכזו.
- היא לא מממשת את רוב כלי Uniode בעצמה אלא לרוב עוטפת API של ICU בצורה ידידותית למפתח C++.
נפלאות התמיכה בחלונות או מדוע CMake לא בדיוק מערכת הבניה איכותית.
פרסמתי מאמר Why CMake sucks... (once more) בבלוג שלי באנגלית.
מומלץ לקריאה לכל אלו שאוהבים CMake ושונאים auto*.
קצת רקע לאנשים שלא רגילים לעולם חלונות: בחלונות לא עושים linking ישירות מול dll אלא תמיד מול import-library מיוחדת שיודעת לעשות טעינה ל־dll. כך שאם בלינוקס בד"כ כל ספריה באה בגרסאות: דינאמית וסטטית, בחלונות (כולל mingw ו־cygwin) כל ספריה באה בגרסאות: דינאמית, ספריית import לספריה דינאמית וגרסה סטטית.
עכשיו תקראו את המאמר ותיהנו ;-)
.
לטובת מפתחי CMake ייאמר: אחרי שדיווחתי על הבאג הם עדכנו את הויקי שלהם כדי להמנע מהבעיה הזו.
מחשבות על Boost.
ספריית Boost היא אחת הספריות הגדולות של C++ הן מבחינת הגודל הפיזי והיקף הספריות והן מבחינת המרכיבים החשובים שהיא מספקת.
Boost ל־C++ היא היום אחת הספריות הנחוצות ביותר הכללת בין היתר: טיפול בחוטים, ביטויים רגולריים, סינגנלים, סוקטים ועוד עשרות מודולים חשובים ושימושיים; ומה שעוד יותר חשוב הם בנויים בצורה טובה, הגיונית ודי איכותית.
למעשה, המתכנת C++ המודרני שהתרגל לנוחות ש־Boost מספקת יתקשה לכתוב בלעדיה את הקוד.
כמובן שהיא לא הספרייה היחידה, גם כלים כמו Qt, GTKmm ואחרים מספקים כלים בהיקף דומה... אבל ל־Boost יש יתרון גדול: חלק מהכלים שקיימים היום ב־Boost כבר עברו כפי-שהם ל־STL החדש. למעשה, יש ערך מוסף לעבודה עם Boost: אם אתה רגיל לעבוד עם boost:function, boost::bind, boost::regex, boost::thread אתה תמצא את עצמך יום אחד משתמש ב־std::function, std::bind בצורה שקופה לחלוטין בלי תלות בספריית צד ג'.
אבל מה? בניגוד לספריית STL שבאה עם קומפיילר ומבטיחה לך תאימות לאחור ואפשרת לא לדאוג ומגרסאות... Boost היא לא כזו:
- כל מספר חודשים יוצאת גרסה חדשה שלא תואמת לקודמת!
- אתה יכול לצפות שאיזושהי גרסת Boost תסופק עם הפצת לינוקס, אבל אתה לא יודע איזו?
למעשה, לצורך עבודה באוניברסיטה הייתי צריך לכתוב תכנה שעובדת עם ביטויים רגולריים, עם חוטים, עם טעינה ושמירה של תמונות.
התכנה הייתה בשתי גרסאות (עם ifdefים): כזו שהשתמשה ב־Qt4 בלבד (וסיפקה GUI), וכזו שהשתמשה ב־Boost ולא סיפקה GUI.
היה לי קל מאוד לקמפל את התכנה שעבדה עם GUI ולשלוח למישהו אחר לבדיקה, כי לא היה לי אכפת איזו גרסת Qt4 מותקנת אצלו, כל עוד היא מספיק חדשה!
עם Boost לא היה שום סיכוי לעשות דבר כזה... הייתי צריך או לקמפל סטטית הכל, או לקמפל בדיוק עבור הגרסה שמותקנת אצל אותו האדם.
Boost היא ספרייה נהדרת. אבל, היא גורמת לי להתרחק ממנה יותר ויותר - כי יש פרויקטים שהיא פשוט לא רלוונטית עבורם בגלל שהיא שוברת API/ABI לעתים קרובות.
שוחררה גרסת 0.0.5 של CppCMS (ענף יציב)
שוחררה גרסה חדשה של ענף יציב של CppCMS, שינויים:
תיקוני בעיות אבטחה:
- נכתב מעקף לבעיה של ספריית CgiCC שהיה יכול לגרום ל־DoS.
- תוקנה בעיה שהייתה עלולה לגרום להווצרות SID בעלי אנטרופיה נמוכה.
תיקוני באגים:
- תוקן זמן חיים של ערכים "חשופים" בניהול מצב (sessions)
- תוקן באג שמנע אפשרות עבודה ב־FastCGI/SCGI מעל TCP/IP
- תוקנו בעיות בניה עם גרסאות Boost לא סטנדרטיות.
- תוקנו בעיות ביצירת HTTP Status Headers לא נכונים במקרה של שגיאות.
- תוקנו בעיות בניה עם גרסאות gcc שונות ועם קומפיילר של אינטל.
שיפורים:
- שופרו זמני בעיות views בצורה משמעות.