הבלוג של ארתיום :: Boost‏ http://artyom.cppcms.com/ בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא! למה נטשתי את Boost אפילו שתרמתי אליו שתי ספריות בעבר http://artyom.cppcms.com/post/350 http://artyom.cppcms.com/post/350 <div style="direction:rtl"> <p>בעבר השתמשתי הרבה ב־Boost לטובת פרוייקטים שונים ב־C++‎. במיוחד לפני ש־C++11 הפך לנורמה. אבל לאט־לאט עם בעיות שבירת API השונות התחחתי להתרחק ממנו במיוחד כש־C++11 ויותר נתן מענה למרבית הבעיות הקריטיות ש־Boost פתר בעבר.</p> <p>אז שנים רבות הסתדרתי בלי Boost. אפילו שתרמתי שתי ספריות בעבר Boost.Locale ו־Boost.Nowide - הן עכשיו מתוחזקות בצורה יוצאת דופן ע"י מפתח אחר.</p> <p>עכשיו אני עובד על פרויקט גדול OpenLiveStacker שגם בו לא השתמשתי ב־Boost וגם היה לי מענה לבעיות נוספות דרך CppCMS שאני משתמשו בו בפנים לטובת UI. הוא מיועד בעיקר לאנדרואיד ולינוקס אבל הבנתי שיהיה שימושי גם בחלונות ואז התחלתי לעשות הסבה לחלונות.</p> <p>בגדול הקוד גם ככה היה כמעט ולא תלוי בפלטפורמה אז לרב זה היה חלק ואז הגעתי לבעיה פשוטה של להריץ תהליך חיצוני, להרוג אותו אם צריך, לקבל סטטוס. בלינוקס ואנדרואיד פשוט עשיתי fork/exec/kill/wait. ואז הגעתי לחלונות. טוב אז מה עושים? אמרתי למה להמציא גלגל פשוט אקח Boost.Process - גוגל זריז - הוא בדיוק נותן מענה למה שאני צריך. אולי הייתי צריך להשתמש בו מלכתחילה? טוב נו. הסתכלתי במדריכים כתבתי, הורדתי גרסה אחרונה 1.88 של Boost לחלונות מקמפל ו־... לא עובד.</p> <p>השגיאה bp::child לא מוגדר! טוב מוודא שאני פותח את הגרסה אחרונה של התיעוד (גוגל לא תמיד מביא אותה) והפלא הפלא אין יותר bp::child יש bp::process! מה קרה? אכן API השתנה. מתי זה קרה? לפני כשנה באוגוסט 2024. כלומר אם הייתי משתמש ב־Boost.Process מלכתחילה הקוד היה נשבר. (כדי להשתמש ב־api ישן צריך לעשות include וליצור aliases וכד)</p> <p>שורה תחתונה - הם שברו API לגמרי. לא הוסיפו API חדש עם bp::process אלא מחקו את הקיים והחליפו. זה הזכיר לי לגמרי למה הפסקתי להשתמש ב־Boost. אז עשיתי אחורה פנה, ופשוט תחת ifdef כתבתי קוד עם שימוש ב־CreateProcess של חלונות ו... זה זה עבד ללא דופי.</p> <p>עצוב. איך מפתחי תוכנה פשוט לא מבינים את המשמעות של תאימות API לאחור.</p> </div> שוחררה גרסה 1.0.3 של CppCMS הכוללת תיקון של פריצת אבטחה http://artyom.cppcms.com/post/313 http://artyom.cppcms.com/post/313 <div style="direction:rtl"> <p>היום שוחררה גרסה 1.0.3 של CppCMS שמתקנת פריצת אבטחה במנגנון בדיקת תקינות קלט UTF-8, שאפשר למערכת לקלוט מחרוזות לא תקינות. באג כזה יכול בתיאוריה להביא לפריצת XSS.</p> <p>מומלץ לשדרג CppCMS לגרסה האחרונה.</p> <p>המקור של הבאג נמצא ב־Boost.Locale. הבאג תוקן בגרסה 1.53 שעומדת להשתחרר בקרוב. מי שמשתמש בפונקציות של Boost.Locale לבדיקת תקינות הקלט UTF-8 צריך לקחת את אפשרות פריצת האבטחה הזו בחשבון.</p> <p>מי שלא יכול לשדרג את גרסת ה־Boost יכול להשתמש בטלאי הבא:</p> <p><a href="http://cppcms.com/files/locale/boost_locale_utf.patch">http://cppcms.com/files/locale/boost_locale_utf.patch</a></p> </div> שוחררה גרסת 1.48 של Boost שמכילה Boost.Locale http://artyom.cppcms.com/post/293 http://artyom.cppcms.com/post/293 <div style="direction:rtl"> <p>סוף סוף שוחררה גרסה 1.48 של Boost. אחד הדברים המשמעותיים בה היא שילוב של Boost.Locale - ספריית הלוקליזציה שאני פיתחתי.</p> <p>קישורים:</p> <ul> <li>אתר הפרויקט: <a href="http://www.boost.org">http://www.boost.org</a></li> <li>הודעת שחרור: <a href="http://www.boost.org/users/history/version_1_48_0.html">http://www.boost.org/users/history/version_1_48_0.html</a></li> <li>תיעוד Boost.Locale‏: <a href="http://www.boost.org/libs/locale/index.html">http://www.boost.org/libs/locale/index.html</a></li> </ul> <p>להזכירכם, Boost.Locale פותחה כחלק מפרויקט <a href="http://cppcms.sf.net">CppCMS‏</a></p> </div> הפוסטר והמצגת מאוגוסט פינגווין http://artyom.cppcms.com/post/288 http://artyom.cppcms.com/post/288 <div style="direction:rtl"> <p>אני מפרסם כמו שהבטחתי את המצגת והפוסטר מהכנס:</p> <ul> <li>המצגת של ההרצאה על Boost.Locale: <ul> <li>פורמט <a href="http://art-blog.no-ip.info/files/August-Pinguin-Boost-Locale.odp">odp‏</a></li> <li>פורמט <a href="http://art-blog.no-ip.info/files/August-Pinguin-Boost-Locale.pdf">pdf‏</a></li> </ul> </li> <li>הפוסטר על CppCMS‏: <a href="http://art-blog.no-ip.info/files/august-pinguin-cppcms-poster.pdf">pdf‏</a></li> </ul> </div> שוחררה גרסת Boost.Locale חדשה http://artyom.cppcms.com/post/283 http://artyom.cppcms.com/post/283 <div style="direction:rtl"> <p>אחרי עבודה ארוכה על שיפורי ממשק ותיקוני בעיות שהועלו בתהליך בחינה רשמית של Boost.Locale הגרסה החדשה 4.0.0 שוחררה.</p> <p>בקרוב אתחיל לשלב אותה בעץ svn של Boost, כך שאם הכל ילך בסדר, אני צופה שהיא תיכנס לגרסה 1.48 או לכל המאוחר 1.49 של Boost.</p> <p>כרגיל:</p> <ul> <li>הורדה:<br/> <a href="http://sourceforge.net/projects/cppcms/files/cppcms/">http://sourceforge.net/projects/cppcms/files/cppcms/</a></li> <li>תיעוד ומדריכים:<br/> <a href="http://cppcms.sourceforge.net/boost_locale/html/index.html">http://cppcms.sourceforge.net/boost_locale/html/index.html</a></li> </ul> <p>במקביל שוחררה גרסת CppCMS 0.99.8 שמכילה את כל השינויים של Boost.Locale וגם תיקוני באגים שהצטברו במהלך 3 חודשים אחרונים.</p> <p><strong>אם עדיין לא שמתם לב</strong>, אני נותן הרצאה על Boost.Locale ב<a href="http://wiki.hamakor.org.il/index.php/%D7%90%D7%95%D7%92%D7%95%D7%A1%D7%98_%D7%A4%D7%99%D7%A0%D7%92%D7%95%D7%95%D7%99%D7%9F">אוגוסט פינגווין</a> - תבואו יהיה מעניין (גם אם אתם לא מדברים ב־C++‎)</p> </div> ספריית Boost.Locale התקבלה ב־Boost http://artyom.cppcms.com/post/279 http://artyom.cppcms.com/post/279 <div style="direction:rtl"> <p>הספריה <a href="http://cppcms.sourceforge.net/boost_locale/html/index.html">Boost.Locale‏</a> - ספרית לוקליזציה חוצת פלטפורמה <a href="http://article.gmane.org/gmane.comp.lib.boost.devel/218369">התקבלה</a> ב־Boost.</p> <p>במהלך 16 ימי הבחינה התקבלו 15 סקירות שונות כאשר 10 מתוכם הצביע בעד שילוב הספרייה ב־Boost ו־5 נגד. במהלך הבחינה קיבלתי הרבה הערות בונות שרובן ייכנסו בגרסה הראשונה שתשולב ב־Boost.</p> </div> ה־Review של Boost.Locale מתחיל עכשיו http://artyom.cppcms.com/post/278 http://artyom.cppcms.com/post/278 <div style="direction:rtl"> <p>בהמשך ל<a href="http://art-blog.no-ip.info/newpress/blog/post/277">פוסט הקודם</a> ה־Formal Review של Boost.Locale <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/217586">מתחיל היום</a>.</p> <p>אני מקווה ש־Boost.Locale תעבור אותו בהצלחה ותשולב ב־Boost.</p> </div> עכשיו זה רשמי: Boost.Locale תיבחן לשילוב ב־Boost http://artyom.cppcms.com/post/277 http://artyom.cppcms.com/post/277 <div style="direction:rtl"> <p>עכשיו זה רשמי, תהליך הבחינה הפורמלית (Formal Review) של <a href="http://cppcms.sourceforge.net/boost_locale/html/index.html">Boost.Locale‏</a> לשילוב ב־<a href="http://www.boost.org">Boost‏</a> תיערך <a href="http://www.boost.org/community/review_schedule.html">בין 7 ל־16 באפריל</a>.</p> <p><strong>קצת רקע</strong></p> <p>Boost היא אוסף של ספריות C++‎ חופשיות המשפיע ביותר על הפיתוח המודרני של השפה. הוא מכיל עשרות רכיבים חשובים, שחלקם כבר שולבו בתקן הבא של C++‎ הידוע כ־<a href="http://en.wikipedia.org/wiki/C++0x">C++0x‏</a> בספריה הסטנדרטית. רבים מהם כבר ניתן למצוא בגרסאות האחרונות של קומפיילרים של GNU,‏ Intel ושל Microsoft.</p> <p>זהו פרויקט קהילתי שמפתח ספריות C++‎ שימושיות חוצות פלטפורמה. כל ספריה, כדי שהיא תשולב ב־Boost צריכה לעבור תהליך בחינה רשמית (formal review) שבמהלכו מפתחים שונים סוקרים את הספרייה בוחנים אותה: תיעוד, קוד, תכנון, מימוש ועוד ובסופו של דבר מצביעים האם כדאי לשלב את הספרייה בתוך Boost או לא.</p> <p>התהליך מפוקח ע"י מנהל הבחינה (Review Manager) שבסופו של דבר מכריע על סמך קולות והערות המשתתפים אם לשלב את הספרייה ב־Boost או לא.</p> <p>Chad Nelson, מפתח ספריית Xint התנדב להיות מנהל הבחינה, התאריך נקבע ועכשיו זה רשמי - Boost.Locale תעבור את תהליך הבחינה באפריל.</p> <p><strong>על הספרייה עצמה</strong></p> <p>Boost.Locale זאת ספריית לוקליזציה ותמיכה ביוניקוד שמקלה על בנאום ולוקליזציה. היא פותחה על בסיס ספריית ICU שמהווה היום את state-of-the-art בתחום היוניקוד וגם מאפשרת עבודה עם תמיכה מובנית בלוקליזציה שמערכות הפעלה מודרניות מספקות היום.</p> <p>רכיבים:</p> <ul> <li>תרגום מחרוזות (על בסיס gettext)</li> <li>תמיכה במיון של טקסט</li> <li>פרמוט של תאריכים, מספרים, מטבע וכד' בהתאם ללוקל.</li> <li>תמיכה בלוחות שנה שונים (לא גרגוריאני) כמו לוח שנה עברי</li> <li>תמיכה טיפול מחרוזות כמו נורמליזציה</li> <li>תמיכה בחלוקת הטקס ליחידות כמו תווים, מילים, משפטים ועוד.</li> <li>תמיכה בהמרת קידוד הטקסט</li> </ul> <p>ועוד</p> <p>חשוב לציין שהיא עושה את זה בצורה חוצת פלטפורמה וגם מאפשר לבצע חלק נכבד מהמשימות האלה גם ללא תלות ב־ICU כך שהפרויקטים שלא דורשים תכונות מסובכות מידי יכולים לעבוד עם ספרייה מאוד קלילה ללא תלויות רבות.</p> <p>שיהיה לי ולספריית Boost.Locale בהצלחה!</p> <p><strong>נ.ב.:</strong> ראוי לציין שהספרייה פותחה במקור עבור פרויקט CppCMS ואחרי שראיתי את התועלת שהיא יכול להביא לתחום הלוקליזציה החלטתי לעבוד בצורה הרבה יותר מאומצת ולהכין אותה ל־Boost.</p> <p><strong>נ.נ.ב.:</strong> לכל המעוניינים, בקרוב תשוחרר גרסה תיעוד הספרייה קצת יותר מועדכנים.</p> </div> רישיון CppDB השתנה ל־BSL/MIT http://artyom.cppcms.com/post/274 http://artyom.cppcms.com/post/274 <div style="direction:rtl"> <p>החלטתי לשנות את רישיון CppDB - ספריית קישוריות ל־SQL לרישיון יותר מתירני רישיון כפול: רישיון <a href="http://www.boost.org/users/license.html">Boost‏</a> או רישיון <a href="http://www.opensource.org/licenses/mit-license.php">MIT‏</a> לבחירתכם.</p> <p>בגדול, אני הייתי שמח להישאר עם רישיון יחיד - רישיון Boost, אבל ספריית MySQL לא מכילה חריגה עבורו, אז הוספתי רישיון MIT כחלופה. כך שאם אתם משתמשים ב־CppDB וב־MySQL אתם צריכים לנהוג לפי דרישות רישיון MIT.</p> <p>לשינוי הרישיון היו מספר סיבות:</p> <ol> <li>אני רוצה לנסות להכניס את הספריה בשלב מסויים ל־Boost, כך ששינוי הרישיון היה מתוכנן בכל מקרה.</li> <li>אני מקווה שזה ירחיב את כמות המשתמשים והתורמים לפרויקט ויתן פרסום ודחיפה נוספים ל־CppCMS.</li> </ol> <p>כדי למנוע אי הבנות: CppCMS עדיין משוחרר תחת LGPLv3 וזה לא עומד להשתנות.</p> </div> שוחררה גרסה מקדימה של Boost.Locale 3. http://artyom.cppcms.com/post/263 http://artyom.cppcms.com/post/263 <div style="direction:rtl"> <p>שלום,</p> <p>שוחררה גרסה מקדימה של Boost.Locale</p> <ul> <li>מדריך: <a href="http://cppcms.sourceforge.net/boost_locale/html/tutorial.html">http://cppcms.sourceforge.net/boost_locale/html/tutorial.html</a></li> <li>תיעוד מפורט: <a href="http://cppcms.sourceforge.net/boost_locale/html/index.html">http://cppcms.sourceforge.net/boost_locale/html/index.html</a></li> <li>הורדה: <a href="https://sourceforge.net/projects/cppcms/files/boost_locale/">https://sourceforge.net/projects/cppcms/files/boost_locale/</a></li> </ul> <p>חדש בגרסה:</p> <ul> <li>התווספה תמיכה במנגנוני לוקליזציה מרובים: <ul> <li>ספריית ICU - ברירת מחדל</li> <li>תמיכה בסיסית של הספריית הסטנדרטית של C++‎ עם שיפורים.</li> <li>POSIX 2008 API (כמו strftime_l)</li> <li>Windows API.</li> </ul> <p> התמיכה הזו מאפשרת להשתמש בכלי לוקליזציה בסיסיים גם ללא ספריית ICU הכבדה.</p></li> <li>שיפורים משמעותיים בממשק וניהול לוקלים</li> <li>תיקוני ביצועים עובר ICU</li> <li>שיפורים בעבודה עם UTF-8</li> <li>תיקונים בתמיכה ב־UTF-16</li> </ul> <p>ועוד.</p> <p>קיימת תמיכה ב:</p> <ul> <li>מערכות הפעלה: Linux, ‏FreeBSD,‏ OpenSolaris,‏ Windows,‏ Cygwin, (בקרוב גם Mac OS X).</li> <li>מהדרים (קומפיילרים) gcc (גרסאות 3.4 עד 4.5), ‏Intel 11,‏ MSVC9, ‏SunCC 5.10/stlport</li> </ul> </div>