הבלוג של ארתיום :: Unicode http://artyom.cppcms.com/ בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא! כיצד לא לעשות יוניקוד http://artyom.cppcms.com/post/308 http://artyom.cppcms.com/post/308 <div style="direction:rtl"> <p>הסיפורו של הניסיון להדפיס "שלום" במספר שפות במסוף של חלונות.</p> <p><a href="http://blog.cppcms.com/post/105">http://blog.cppcms.com/post/105</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> גם Tatoeba תשתמש ב־CppCMS http://artyom.cppcms.com/post/281 http://artyom.cppcms.com/post/281 <div style="direction:rtl"> <p><a href="http://he.wikipedia.org/wiki/%D7%98%D7%98%D7%95%D7%90%D7%91%D7%94">טטואבה</a>, פרויקט בינלאומי המהווה מעין מילון האוסף מספר רב של משפטים, מפתח גרסה חדשה ב־C++‎ שמבוססת על CppCMS.</p> <p>למעשה ידעתי על התכנון הזה כבר מזמן, אבל לא ממש עקבתי אחרי הפרויקט. בעקבות החדשות שכתבתי עליהם <a href="http://art-blog.no-ip.info/newpress/blog/post/280">בפוסט הקודם</a>, החלטתי להסתכל שוב על הפרויקט הזה וגיליתי שהם התקדמו יפה מאוד.</p> <p>גרסת האלפה (עדיין מאוד בסיסית) כבר <a href="http://tatoeba.org/eng/wall/show_message/6217#message_6217">עלתה לרשת</a> וזמינה בכתובת:‏ <a href="http://tato.sysko.fr">http://tato.sysko.fr</a>. הגרסה הזו מחליפה את מנוע החיפוש הנוכחי העובד עם MySQL בבסיס נתונים ייחודי שהם פיתחו ותשתית הרשת שכתובה בעזרת CakePHP מתחלפת באחרת המבוססת על CppCMS.</p> <p><a href="http://tatoeba.org/eng/wall/show_message/4796">בהודעה הזו</a> הם מסבירים את ההחלטה שלהם לבחור ב־CppCMS. להחלטה הזו היה מספר לא מבוטל של סיבות.</p> <p>בקיצור... תתחילו לקחת את CppCMS בצורה רצינית <code>:-)</code></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> שוחררה גרסה מקדימה של 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> אמת המרה על רמת התמיכה בלוקליזציה http://artyom.cppcms.com/post/261 http://artyom.cppcms.com/post/261 <div style="direction:rtl"> <p>כפי שחלק מקוראי הבלוג אולי יודעים, אני עובד על ספריית <a href="http://cppcms.sourceforge.net/boost_locale/html/index.html">Boost.Locale‏</a> שאני מקווה תשולב ב־Boost בעתיד.</p> <p>הספריה נותנת בין השאר תכונות חשובות כמו: תרגום מחרוזות, הצגת תאריכים, מספרים, חלוקת הטקטס לתווים, מילים, מיון לפי סדר אלף־בית וכד'.</p> <p>כדי לאפשר תמיכה נאותה בכל המרכיבים האלה, אני משתמש בספרית <a href="http://site.icu-project.org/">ICU‏</a> שנותנת את כל הדרוש, למעט API שמתכנת C++‎ שפוי יכול להשתמש בו.</p> <p>למרות ש־ICU היא ספריה מצוינת, יש לה גם לא מעט חסרונות:</p> <ul> <li>גודל הספרייה שמכילה את כל הנתונים הוא כ־12 מ"ב! זה בד"כ מאוד בעייתי עבור סביבות משובצות מחשב.</li> <li>ביצועים - היא לא מצטיינת בהם, למשל יצירת תאריך או מספר לוקחת עד פי 10 יותר זמן בעזרת פונקציות ICU השוואה לפונקציות כמו strftime.</li> </ul> <p>לכן, החלטתי להוסיף ל־Boost.Locale מנגנונים שיאפשרו לעבוד עם התמיכה הבסיסית בלוקליזציה שנמצאת בכל מערכת הפעלה או ספריה סטנדרטית.</p> <p>למרות שכמעט בכל מערכת הפעלה יש פונקציות כמו setlocale, strcoll או strftime הן לא מתאימות לי כי הן אינן מאפשרות לעבוד עם מספר לוקלים שונים באותו תהליך בצורה בטוחה.</p> <p>אבל עדיין, יש לי שלוש אופציות:</p> <ul> <li>שימוש בספריית C++‎ הסטנדרטית שמכילה את מרבית הדברים הנדרשים.</li> <li>שימוש ב־API של POSIX 2008 שמגדיר אוסף פונקציות כמו newlocale, strftime_l או strcoll_l במערכות תואמות POSIX (למעשה, ה־API הזה נתמך בלינוקס ובמק).</li> <li>שימוש ב־Win32 API שנותן פונקציות די עשירות כמו GetDateFormat, CompareString וכד' שנותנות תמיכה רצינית בלוקליזציה.</li> </ul> <p>כמובן פה ושם צריך לסדר דבר או שניים כמו MSVC שלא מכיר בשמות לקול כמו <code>en_US.UTF-8</code> ולא תומך ב־UTF-8, לעשות התאמות פה ושם להבדלים בין לינוקס ומק במימוש של API של לוקליזציה וכד'.</p> <p>עד כאן זה נראה מבטיח, אבל מסתבר שרק על הנייר...</p> <ul> <li>libstdc++‎ של GCC לא תומך בלוקליזציה בשום מערכת הפעלה מלבד Linux (לא שזה חדש, בגלל זה הוספתי את שתי האופציות הנוספות).</li> <li>‏מסתבר שב־Mac OS X (וגם ב־FreeBSD) פונקציה strcoll שבורה לחלוטין, כך הוא לא יודע לסדר a &lt; ç &lt; d או אפילו a &lt; C &lt; d כפי שזה מתבקש בשפה בטבעית.</li> <li>ב־Solaris פונקציות towupper ו־towlower לא ממש מתחשבות בלוקל (למשל בלוקל טורקי i הופכת ל-"İ" ולא ל־"I" ב־upper case)</li> </ul> <p>בגדול... עצוב ומעצבן, אבל... טוב שיש לנו ICU וטוב שלפחות לינוקס וחלונות מספקים API שעובד בצורה סבירה (אם כי ממש לא מושלמת).</p> </div>