הבלוג של ארתיום :: תכנה ומחשבים http://artyom.cppcms.com/ בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא! רשתות נוירונים בקוד פתוח... תמונת מצב http://artyom.cppcms.com/post/328 http://artyom.cppcms.com/post/328 <div style="direction:rtl"> <p>כידוע היום שוק ה־deep learning נשלט באופן <a href="http://artyom.cppcms.com/post/324">כמעט בלעדי</a> ע"י nVidia. אומנם כל תשתיות למידה החישובית הפופולריות כגן TensorFlow, PyTorch, Caffe, MXNet ואחרות משוחררות כקוד פתוח, אבל בליבו של כל אחד מהם, ללא יוצא מן הכלל, רצות ספריות cublas ו־cudnn המאפשרות לנצל את החומרה בצורה מיטבית. כולן כמובן קוד בסגור ומסוגר הרץ על בסיס CUDA. כמובן, גם הוא API פרטי וקנייני של חברת nVidia.</p> <p>אקדים ואומר: אין אני טוען שהסכנה כאן כי החברה "המרושעת" תשתלט על בינה מלאכותית ותקים skynet מתחת לרגליים שלנו. לא, בסה"כ מדובר במימוש פעולות מתמטיות בסיסיות מוגדרות היטב בצורה יעילה להפליא.</p> <h2>אבל אני רוצה קוד פתוח?</h2> <p>אז יש מספר פתרונות וכיוונים:</p> <ol> <li>לאמן הכל ב־CPU בלבד.</li> <li>להשתמש בתשתית ROCm של AMD.</li> <li>להשתמש ב־OpenCL במקום ב־CUDA ואז חוץ מדרייבר של nVidia הכל יהיה פתוח (פחות או יותר)</li> </ol> <p> <a href="/post/328">המשך...</a> </p> </div> 1984 הדיגיטלי http://artyom.cppcms.com/post/326 http://artyom.cppcms.com/post/326 <div style="direction:rtl"> <p>בעקבות פרשת טראמפ, החלטתי להבין מה קרה שם בגבעת הקפיטול. לא מהפרשנים אלא מהמקור. מה הייתה ההסתה לכאורה שגרמה להמון משולהב להתפרץ. פתחתי גוגל: trump capitol speech, הגעתי למלא פרשנויות אבל לא למקור. שיניתי גרסאות החיפוש אותה תוצאה... מוזר. פתחתי bing בקישור השני מצאתי וידאו מלא. זה צרם לי אבל המשכתי הלאה. ראיתי ש־twitter החזירו את החשבון לעת עתה.</p> <p>היום מדברים בחדשות שהחשבונו נחסם לצמיתות. מעניין. Googe: twitter trump. מגיע לעשרות כתבות של חדשות על חסימת חשבון - אבל לא הקישור לחשבון עצמו. הפעם אני פותח bing במידי ובקישור הראשון אפשר למצוא את חשבונו החסום - ממקור ראשון. הפעם האסימון נפל.</p> <p><img src="https://upload.wikimedia.org/wikipedia/en/c/c3/1984first.jpg" alt="1984 מויקיפדיה" /></p> <p>זוכרים את תפקידו של וינסטון ב־<a href="https://tinyurl.com/y4jke8hm">1984</a>? הוא היה אחראי על שיפוץ עיתונים ישנים ומחיקת היסטוריה לא רצויה. אם לא קראתם את הספר עד עכשיו - הזמינו אותו מיד. אז מסתבר גם גוגל התאימו את המציאות. הרי זה ידוע - אם אתה לא בגוגל אתה לא קיים! אחד כלי המחקר האינטרנטי - שנותן לנו בעצם גישה לאינסוף מידע ודיעות, עוזר למצוא מקורות הוא מונע את המידע.</p> <p>עד היום לא הסתמכתי על כלי תקשורת אחד כדי לגבש עמדה על משהו חשוב - כי ידוע לכל כלי תקשורת יש אג'נדה משלו. לכן תמיד הסתכלי במספר דיווחים משני צידי המתרס. ידיעות וישראל היום. ערוץ 13, 12 ו־20 ואם הנושא חשוב באמת הייתי מחפש את המקורות - למשל קראתי את פסק דינו של אלאור אזריה. צפיתי בשידורי הבג"ץ בנושא חוק הלאום. כי לא סמכתי על פרשנויות.</p> <p>אבל עד עכשיו הנחתי שחיפושים בגוגל יביאו אותי לתוכן הרצוי. מסתבר גם פה - אין להסתמך על ספק יחיד. תארו לעצמכם אם בחיפוש בגוגל אחרי פרשת תיק 4000 או המימד החמישי - כל התוצאות הראשוניות היו מביאות אותי ל"אין כלום כי לא היה כלום" או להפך "הינה הוכחה לשחיתות"... כוח עצום. כוח משחית!</p> <p>ובעיקר מטריד...</p> <p>טוב, מזל שכבר פיתחתי הרגלי הצלבת מקורות. עכשיו אצטרך גם להצליב מנועי חיפוש. האמת לא ציפיתי. ציפיתי שאין לצפות לפרטיות מגוגל או פייסבוק. אבל לא ציפיתי להטיה מכוונת שלא קשורה לנושאים מסחריים כמו קידום מוצרים.</p> <p>טוב אז מאין תבוא הישועה? bing? duck-duck-go? yandex? יש עוד אלטרנטיבות?</p> <p>מישהו מכיר מנוע חיפוש מבוסס FOSS?</p> <p><em>התמונה נלקחה מויקיפדיה</em></p> </div> רשת חברתית חופשית או פעם זה היה אחרת http://artyom.cppcms.com/post/325 http://artyom.cppcms.com/post/325 <div style="direction:rtl"> <p>לאחרונה חסמו לדונלד טרמפ את חשבון הטוויטר שלו. לא אתייחס כאן לסוגיית חופש הביטוי ואם התנהגותו של טרמפ הולמת פחות או יותר מהציוצים של חומייני, פוטין או רבים וטובים אחרים. הרי מדובר בפלטפורמה פרטית של חברה פרטית שזכותה להחליט על תנאי השימוש שלה ולקבוע את האג'נדה שלה. כך גם פייסבוק ועוד כלים נפוצים אחרים.</p> <p>בסופו של דבר אנחנו נקבע במה נרצה להתשמש ונצביע ברגליים בעד או נגד התנהגותה של חברה כזו או אחרת.</p> <p>אבל מה... אנחנו בעצם נעולים. אם אין לך twitter או facebook או פלטפורמה נפוצה אחרת אתה לא תגיע לקהל היעד שלך. בעצם מספר רשתות חבריות שולטות בשוק ובעלות כוח רב בהשפעה על דעת הקהל וחשיפה של אנשים כאלה ואחרים. זה לא חדש. עוד מתחילת עידן הפייסבוק ראיתי כיצד הוכחדו מספר טכנולויות של רשתות חברתיות של פעם. כי באמת פייסבוק נתן פלטפורמה זמינה ונוחה ובעלת רף כניסה מאוד־מאוד נמוך למשתמש קצה. אבל מה האלטרנטיבות שהיו ונכחדו?</p> <h2>בלוגים</h2> <p>פעם אנשים שרצו להגיד משהו כתבו בלוגים. בלוגרים אחרים הגיבו לכתבות אחרות. ציטטו וקיבלו ציטוטים של אנשים אחרים. היה מנגנון מבוזר שאפשר לקשר בין הבלוגים. היה נהוג שבלוגר שמגיב לבלוג של מישהו אחר משאיר את הקישור לבלוג שלו. חלקם ניהלו מקבצי rss-feed של בלוגים שעקבו אחריהם.</p> <p>מוכר? נכון - זה ממש כמו פייסבוק! רק במספר הבדלים</p> <h4>הקמת בלוג הייתה עניין לא טריוויאלי שדרש רצינות חשיבה וכתיבה יחסית מסודרת</h4> <p>בד"כ אנשים לא פרסמו "מאמרים" בסגנון</p> <blockquote><p>בוקר - 16 גרביים - אף זוג 😕</p> <p>ייצור חבילות גרביים בה כל זוג שונה מאחרים צריכה להיות מוגדרת בחוק כהתעללות בבני אדם</p></blockquote> <p>אלא השקיעו בתוכן איכותי. ומה הקמת בלוג לא הייתה עניין מסובך אבל גם לא משהו פשוט.</p> <h4>היה קשה ליצור קשרים חברתיים</h4> <p>היה הרבה יותר קשה להגיע לכל החברים שלך שהיו מתעניינים בדעות שלך (גם אם אלו דעות על גרביים). בפייסבוק אוטומטית, חלק ניכר ממכריך עם גם העוקבים שלך. בבלוגים היה צריך לגרום לאנשים אחרים להוסיף אותך ל־rss-feeder שלהם - וכמובן שרוב רובם לא ניהלו כאלה.</p> <h4>ברוב הפלטפורמות הפתוחות התוכן היה שלך</h4> <p>אם פתחת בלוג ב־wordpress יכולת להוריד את התוכן/גיבוי בכל רגע ולהעביר אותו לשרת wordpress פרטי - זה אומנם לא שיטה פשוטה למשתמש ביתי, אבל כל דמות חשובה ומשפיעה הייתה יכול לעשות זאת. ולכן הדרך היחידה להוריד את הבלוג מרשת היה בעזרת צו בית המשפט - לטוב ולרע.</p> <h2>פורומים</h2> <p>לפני קצת יותר מעשור פורומים היו בשיאם. אפשר היה ליצור קבוצות דיון. אנשים הסתכלו וכתבו. פורומים היו מנוהלים בצורה זו או אחרת.</p> <p>ההקמה של פורומים הייתה קשה ומסובכת (עשיתי זאת פעם). אבל אפשר היה גם להקים פורום בפלטפורומות פתוחות אבל זה היה פחות נפוץ.</p> <p>גם זה פייסבוק הרג - והאמת לא הביא תחליף ראוי. כדוגמה שכאבה לי אישית - היו מספר פורומים בתחום סלסה בארץ עם תוכן איכותי מעניין ודיונים מרתקים. כולם כמובן נמחקו הוזנחו לאחר הופעת פייסבוק.</p> <h2>אז מה אפשר לעשות מלבד לדבר על זכרונות הימים שעברו?</h2> <ol> <li>להחזור ולכתוב בפלטפורמות פתוחות כמו בלוגים ולהפנות אליהם מפייסבוק טוויטר ורשתות אחרות על מנת שהתוכן יישאר פתוח ויהי מה.</li> <li>להקים פרוטוקולים וסטנדטים להחלפת מידע ביו הבלוגים וייבוא/ייצוא מידע. כבר יש תשתיות לזה ופרוטוקולים קיימים - צריך לחדש ולהתאים אותם לדור הנוכחי</li> <li><p>לתת לשוק להקים פלטפורומות מתחרות שעובדות על בסיס המידע החופשי והזמין שיהיה</p> <ul> <li>קל להתחיל - לכל אחד</li> <li>לק לעבור מפלטפורמה אחת לשניה - על ידי דרישה לעמידה בתקנים חופשיים ומבוזרים</li> </ul> </li> </ol> <p>מי מרים ו/או הרים כבר את הדגל?</p> </div> על למידה חישובית, תכנה חופשית ומה שביניהם http://artyom.cppcms.com/post/324 http://artyom.cppcms.com/post/324 <div style="direction:rtl"> <p>רשתות נוירונים מהווים היום את שיטת הלמידה החשובה ביותר. הם הביאו לפרצות דרך חשובות. היום כל אדם בעל ידע בתכנות ורקע מתמטי סביר יכול לממש דברים שהיו מדע בדיוני לפני עשור. כוח החישוב העצום של מעבדים גרפיים וזמינות גבוהה של נתונים שינה את פני למידה החישובית. היום אם אתה רוצה להתעסק תחום ראיה ממוחשבת, עיבוד קוד תרגומים וכד' חייב להכיר את השיטות האלה.</p> <p>היום קיימות עשרות תשחתיות (frameworks) לעבודה עם רשתות נוירונים - וכל הפופולריים ביניהם הם תכנה חופשית: tensorflow, pytorch, caffe, keras, mxnet ועוד רבים אחרים הם תכנה חופשית שמופצת תחת רשיונות די מתרניים. חברות ענק שעומדות מאוחרי חלק מהם כמו facebook ו־google דואגים להחזיק את הקוד הפתוח - כי רק כך ניתן לשרוד בעולם הזה בו השיטות והמאמרים שפורסמו לפני שנה כבר לא מספיק עדכניים.</p> <p>אבל, יש פה אבל אחד גדול מאוד. כל התשתיות האלה, דורשות שימוש ב־GPU על מנת לקבל תוצאות בזמן סביר. נקח לדוגמה את הרשת המקורית הידועה בשם alex-net שהייתה אחת פרצות הדרך מהמשעותיות ביותר בתחום הלמידה החישובי בשני עשורים אחרונים. זמן אימון הרשת ב־2012 לקח סדר גודל של שבועיים תוך שימוש בשני כרטיסים גרפיים.</p> <p>כמובן אין כל פסול בשימוש בכרטיסים גרפיים - הם בסה"כ עושים מה שהם יודעים לעשות טוב number-crunching. אבל, היום כמט כל התשתיות מסתמכות של טכנולוגיה אחת וספק אחד - כולם משתמשים ב־cuda וב־nVidia. יתרה מזו חלק מהתשתיות מסתכמות באופן בלעדי על ספריה סוגרה אחת בשם cuDNN שמאפשרת לנצל את כל החישוב של החומרה עד תום. cuDNN ו־cuBLAS הן הספריות שבלעדיהם tensorflow או pytorch פשוט לא יכולים להקיים מבחינת לקוח הקצה.</p> <p>כן, קיימות תשתיות שמאפשרות אימון גם על טכנולוגיה פתוחה. לדוגמה ל־caffe יש ענף opencl העובד על בסיס טכנולוגיות פתוחות ויודע לרוץ גם על כרטיסים של AMD ואפילו של Intel. אבל</p> <ol> <li>פיתוח של caffe די נפסק - ובעולם הדינאמי של היום זה אומר - הפרויקט במצב מוות קליני</li> <li>גם כשאתה משתמש בו אתה מקבל קנס לא קטן מבחינת ביצועיים. זמני הריצה הם איטיים בערך פי שתיים.</li> </ol> <p>בהתחשב בעובדה שחלק מהאימונים יכולים לקחת שעות רבות אפילו ימים זה הופך את הענף של opencl לפחות רלוונטי. הסיבה לאיטיות היא שהמימוש לא נהנה האופטימיזציות מטורפות וכתיבה ב־assembly ש־nVidia הייתה יכולה לעשות ב־cudnn ו־cuBlas.</p> <p>אבל מה עם AMD? האם הם ישנים? כן ולא. AMD דאגו לפתח אלטרנטיבה בשם ROCm. למעשה אם אתה עובד על לינוקס ויש לך כרטיס כמו rx580 או Vega 56 אתה יכול באמץ סביר להריץ את ה־tensorflow ו־pytorch ואפילו caffe על AMD. והיתרון הגדול של ROCm הוא שמדובר בקוד פתוח לחלוטין. החסרון?.. מאיפה להתחיל</p> <ol> <li>ROCm תומך אך ורק בלינוקס אם אתה על Mac או על Windows... לא</li> <li>ספריית MIOpen שלהם שמהווה מאין תחליף ל־cudnn, אפילו שתומכת ב־OpenCL עובדת אך ורק על דיריבר rocm של AMD. משמעות - אומנם זה קוד פתוח אבל זה vendor-lock-in לא פחות מ־cudnn של nvidia</li> <li>ROCm לא תומך עדיין ברטיסים הגרפיים העדכניים ביותר מבוססי rdna כמו Rx 5700XT וחבריו. עברה שנה מאז שהכטריסים האלה הושקו אבל עדיין לא ניתן להשתמש בהם לטובת למידה חישובית.</li> <li>הוא גם לא נותן מענה ל־APUs. הכרטיסים הגרפיים המובנים שבאים במעבדים כמו Razen 3400G - לא יעבדו עם tensorflow או pytorch. ויש לציין של־Vega 11 שבא עם 3400G יש יותר כוח החישוב מ־GTX 580 ש־alex-net המקורי אומן עליו.</li> </ol> <p>למעשה נראה כי AMD עשתה הכל כדי למנוע ממישו אפילו להסתכל בכיוון שלהם לטובת deep-learnים.</p> <p>מה עם פתרונות עבור intel? הרי גם להם יש GPU? מעבר לעובד שביצועי Intel GPU הם בדיחה, גם intel דאגה לכתוב ספריית deep-learning משלה שלא עובדת עם שום כרטיס גרפי אחר.</p> <h2>שורה תחתונה</h2> <p>למרות שמבחוץ נראה שכל נושא למידה חישובית על רשתות נוירונים מתבסס על תכנה חופשית, במציאות יש רק דרך אחת לעבוד - לעבוד עם הקוד הסגור של ספק אחד. ללא שילוב של nVidia/cuda/cudnn התחזיות של Deep-Learning די עגומות</p> </div> שוחררה גרסת בטא ראשונה של CppCMS 2.0.0 http://artyom.cppcms.com/post/323 http://artyom.cppcms.com/post/323 <div style="direction:rtl"> <p>שוחררה גרסת בטא הראשונה. השינויי העיקרי - לפי דרישת הקהילה זה מעבר ל־C++11 כברירת מחדל - מה שאפשר לנקות חלקים נכבדים מספריית booster הממשים פונקציונליות שהייתה חסרה ב־C++2003:</p> <p>ביניהם:</p> <ul> <li>מצביעים חכמים</li> <li>תמיכה ב־threads</li> <li>שימוש ב־<code>std::error_code</code> ונגזרותיו</li> <li>החלפת <code>auto_ptr</code> ז"ל ל־<code>unique_ptr</code> ועוד.</li> </ul> <p>ראוי לציין שהגרסה הקודמת עבדה עם C++11 אבל לא ניצלה את היכולות שלה כמו למשל move-constructor וכד'.</p> <p>כיוון שהשינויים לא ב־100% תואמים לאחור זוהי גרסת משמעותית מבחינת משתמשים.</p> <p>חייב לציין שעל אף שינויים בחלק מה־APIים - כל הדוגמאות ואפליקציות שונות כגון הבלוג הזה עברו בנייה ללא שינווים בכלל.</p> <p>בנוסף כיוון ש־python2.7 הגיע ל־End-Of-Life הסבתי את הקוד של unit-tests ושל ה־template compiler לתמיכה גם python2.7 וגם ב־python >= 3.5. חייב לציין שאני עדיין מתפלא מהשטות הזו של הסבת מחרוזות ל"unicode" במקום שימוש ב־utf-8 פשוט. למה להרוס לאנשים שאת הקוד הקיים?</p> </div> בינה מלאכותית על ZX Spectrum http://artyom.cppcms.com/post/322 http://artyom.cppcms.com/post/322 <div style="direction:rtl"> <p>המחשב הראשון שלי היה <a href="https://he.wikipedia.org/wiki/%D7%A1%D7%A4%D7%A7%D7%98%D7%A8%D7%95%D7%9D_%D7%A1%D7%99%D7%A0%D7%A7%D7%9C%D7%99%D7%99%D7%A8">ZX Spectrum</a>. למדתי עליו לתכנת, למדתי לכתוב קוד אסמבלי, וגם את ההבנה איך מעבדים בנויים רכשתי שם.</p> <p>הוא היה הכלי ששימש אותי בכתיבת סימולציות פיזיקאליות בזמן שלמדתי בבית ספר עם דגש בתחום פיזיקה ומתמטיקה. אפילו אחי הגדול שלמד באוניברסיטה כתב עליו חישובים מתמטיים מסובכים לטובת הלימודים. זו הייתה האהבה הדיגיטלית הראשונה שלי.</p> <p>היום אני עוסק בתחום בבינה מלאכותית ומשתמש בכרטיסים גרפיים חזקים ביותר שהביצועים שלהם נמדדים ב־Terra FLOPS. אבל לאחרונה נתקעתי בסימולטור של ZX Spectrum ועלה במוחי רעיון. האם אפשר לקחת את המשימות שאני עושה היום ולעשות אותה על המחשב של אז?</p> <p>אז לקחתי את ה-Hello World של למידה חישובית <a href="https://en.wikipedia.org/wiki/MNIST_database">זיהוי ספרות בכתב היד</a> והחלטתי לממש את זה ב-ZX Spectrum.</p> <p>להלן התוצאות:</p> <p><a href="https://github.com/artyom-beilis/zx_spectrum_deep_learning">https://github.com/artyom-beilis/zx_spectrum_deep_learning</a></p> <p><img src="https://user-images.githubusercontent.com/14816918/71548763-9db92080-29bb-11ea-82a9-34cd1a510c26.png" alt="mnist2" /></p> <p>ניתן למצוא מאמר מלא באנגלית והסברים מלאים על התהליך כאן:</p> <p><a href="http://blog.cppcms.com/post/125">http://blog.cppcms.com/post/125</a></p> </div> CppCMS עובר מ-LGPLv3 ל-MIT http://artyom.cppcms.com/post/320 http://artyom.cppcms.com/post/320 <div style="direction:rtl"> <p>היום עדכנתי רישיון של CppCMS ל-MIT. הגרסה הקרובה 1.2 תשוחרר עם רישיון מעודכן</p> <p>ההחלטה נובעת ממספר סיבות:</p> <ol> <li>רצון להגדיל נתח השוק של CppCMS ולהקל על כניסה של משתמשים חדשים</li> <li>להביא יותר מפתחים לפרויקט</li> </ol> </div> לשרת את כל אתרי החדשות בארץ בעזרת... CppCMS http://artyom.cppcms.com/post/315 http://artyom.cppcms.com/post/315 <div style="direction:rtl"> <p>אני לא יודע אם שמתם לב, אבל בשנה האחרונה קצב הפיתוח של תשתית CppCMS ירד בצורה ניכרת. ריכזתי את מרבית המאמצים במערכת פרסום מיוחדת הבנויה על תשתית ה־CppCMS שפותח עבור לקוח.</p> <p>הפרויקט נקרא <a href="http://linicom.co.il">ליניקום</a>.</p> <p>היום, כשליניקום כבר פעיל זמן רב ומתוחזק ע"י צוות מורחב, אני אוכל להקדיש יותר זמן לתשתית CppCMS עצמה.</p> <p>מספר מילים על "ליניקום":</p> <p>"ליניקום" הוא מנוע שמביא פרסומות תלויות תוכן ומותאמות למשתמש לאתרים שונים בקלות רבה. מרבית אתרי החדשות הגדולים בארץ משתמשים בשירותי ליניקום, ביניהם: ynet, הארץ, מאקו, Jerusalem Post, ואללה ועוד רבים אחרים כולל מספר אתרים גדולים בחו"ל.</p> <p>להלן כמה עובדות מעניינות:</p> <ul> <li>ליניקום מבוססת על טכנולוגית CppCMS</li> <li>המערכת משרתת כ־10,000,000 פניות המותאמות למשתמש ביום - קרי כ־115 פניות בשניה.</li> <li>בשעות העמוסות הקצב מגיע לכ־160 פניות בשניה.</li> <li>השרת מייצר תעבורה יוצאת ממוצעת של כ־11 מגאביט בשניה.</li> <li>צריכת זיכרון הכוללת של המערכת (שרת וואב, בסיס נתונים, יישום, מערכת ההפעלה) הוא בסביבות 360MB</li> <li>העומס הממוצע על המעבדים הוא כ-5%</li> <li>השרת רץ על c1.medium instance בודד ב־Amazon EC2</li> </ul> <p>המערכת רצה מאחורי lighttpd ומשתמשת ב־PosgreSQL לשמירה וניהול הנתונים בצורה אינטנסיבית, עם זאת, מרבית הנתונים הנדרשים בזמן אמת שמורים ומנוהלים בזיכרון.</p> <p>כמעט כל פניה לשרת דורשת עיבוד נתונים על מנת לספק פרסומות מותאמות אישית, מבחינה טכנית, זה אומר שלא ניתן לעשות "מיקור חוץ" של הפניות האלה לקבצים הסטטיים וכל פניה של כל לקוח צריכה להיות מטופלת בנפרד.</p> <p>מערכת הפרסום הזו, היא הדוגמה הקלאסית לשימוש בטכנולוגיית CppCMS - מערכת שצריכה להיות מהירה ואפקטיבית. מערכת שמסוגל להתמודד עם עומסים גבוהים ולעתים חריגים ללא בעיות ולספק איכות השירות גבוהה ביותר.</p> <p>שימוש בנתונים השמורים בזיכרון, ניהול נתונים שלא יכולים להיות שמורים בזיכרון מטמון - זה המקום בו יכולות CppCMS באות לידי ביטוי במלואן. יכולת גדילה גבוהה עם דרישות תחזוקה מינימליות, אמינות גבוהה - האם אלה שמאפשרים לדאוג לצד העסקי בלי לחשוב על בעיות ביצועים אפשריות.</p> </div> שעון קיץ בישראל ומחשבים http://artyom.cppcms.com/post/316 http://artyom.cppcms.com/post/316 <div style="direction:rtl"> <p>ביום ראשון האחרון, חצי מדינת ישראל התעוררה עם שעונים לא נכונים.</p> <p>כולנו מוכנים לכוון את השעונים שלנו כשיש מעבר לשעון חורף, בודקים פעמיים יומנים וזמנים, מסתכלים על שעונים וכד'. אבל מה עושים שימים בהם לא התשנה שעון - אלא היה אמור להשתנות השעון - אף אחד לא שם לב.</p> <p>בזיון. מרבית הפצות לינוקס לא הספיקו לעדכן את tzdata, למשל לא Debian ולא Ubuntu יציבות קיבלו איזורי זמן נכונים (גם בעדכונים אחרונים), העדכון האחרון של Red Hat גם הוא יצא ממש לא מזמן. כמובן גם Windows לא הספיקו להוציא עדכונים - כך שגם אשתי שלא משתמשת בלינוקס התעוררה עם שעון לא תקין במחשב שלה - והוא תמיד מעודכן אצלה עד לדקה האחרונה.</p> <p>אני כמובן כבר לא מדבר על יישומים שמנהלים את <a href="http://en.wikipedia.org/wiki/Tz_database">IANA Time Zone Database</a> בעצמם, יישומים <em>זניחים</em> כמו Java או ICU וכד.</p> <p>אז מה לדבר על טלפונים סלולריים? <a href="http://idkn.wordpress.com/2013/09/05/daylight-saving-and-cellular-companies/">יש כאלה האשימו בבזיון את חברות הסלולר</a>... אבל נדמה לי שבעיה קצת יותר עמוקה.</p> <p>עדכון החוק האחרון היה ב<a href="http://he.wikipedia.org/wiki/%D7%A9%D7%A2%D7%95%D7%9F_%D7%94%D7%A7%D7%99%D7%A5_%D7%91%D7%99%D7%A9%D7%A8%D7%90%D7%9C#.D7.94.D7.97.D7.95.D7.A7_.D7.94.D7.A0.D7.95.D7.9B.D7.97.D7.99_-_.D7.94.D7.97.D7.9C_.D7.9E.D7.A9.D7.A0.D7.AA_2013">יולי 2013</a> - אז האם אפשר להאשים את מאות (אם לא אלפי) האנשים והארגונים האחראים על עדכונים שוטפים שלא הספיקו להפיץ את עדכוני איזור הזמן האחרונים? האם אפשר להאשים מיליוני משתמשים בישראל בכך שלא התקינו את העדכונים האחרונים (אם הם היו בכלל)?</p> <p>התשובה היא: הבזיון האמתי הוא לא אותם האנשים אלא החקיקה חפוזה שלא באמת מתחשבת בהשלכות. כנראה לא היה מי שהסביר לח"כ היקרים שלנו ששינוי איזור זמן זה לא בדיוק הזזת מחוגים בשעה המתאימה. (או הסבירו אבל אף אחד לא הקשיב או העדיף שינוי פופליסטי)</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>