הבלוג של ארתיום :: לינוקס http://artyom.cppcms.com/ בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא! שבירת API בלי סיבה מוצדקת זה פשע נגד הקהילה http://artyom.cppcms.com/post/349 http://artyom.cppcms.com/post/349 <div style="direction:rtl"> <p>באתי לבנות את הפרויקט שלי <a href="https://github.com/artyom-beilis/OpenLiveStacker">OpenLiveStacker</a> עם OpenCV אחרון 4.11 - הכל נופל. נעלמו אופרטורים +/- על פעולות וקטוריות. לדוגמה הקוד הבא:</p> <pre><code>cv::v_float32x4 zero = cv::v_setall_f32(0.0f); cv::v_float32x4 one = cv::v_setall_f32(1.0f); int limit = N/4*4; for(;i&lt;limit;i+=4,p+=4,d+=4,f+=4) { cv::v_float32x4 v=cv::v_max(zero,cv::v_load(p) - cv::v_load(d)); v = cv::v_min(cv::v_load(f) * v,one); cv::v_store(p,v); } </code></pre> <p>פשוט לא מתקמפל כי <a href="https://github.com/opencv/opencv/issues/27267#issuecomment-2840142542">הסירו אופרטורים של חיבור/חיסור</a>. למה? כובע!</p> <p>איזו זאת יש לכם לשבור את הקוד של האחרים ועוד בפרויקט ענק שמשתמשים בו בכל העולם ועוד בלי סיבה אמתית.</p> <p>טוב, נחכה ונראה</p> </div> פריסת מקלדת "חדשה-ישנה" http://artyom.cppcms.com/post/348 http://artyom.cppcms.com/post/348 <div style="direction:rtl"> <p>בעקבות מעבר לעבודה חדשה אני נאלץ לעבוד חלק מהזמן בחלונות. בלינוקס התרגלתי ל־LyX שנותנת לי ניקוד בצורה נוחה, מקף־עליון וגם צירופים RLM/LRM שמסייעים בכתיבה של עברית ואנגלית ביחד.</p> <p>אבל מה פריסת מקלדת בחלונות 10 באה עם התקן החדש SI-1452-2. אז התחלתי לעבוד איתו ולמען אחידות העברתי בבית את המחשב השולחני לתקן מקלדת הזה במקום LyX. מה ההבדל בגדול? במקום ללחוץ על shift לוחצים על Alt-Gr או Alt ימני. לקח מעט זמן להתרגל. אבל אני חייב להגיד שנעשתה פה <a href="https://www.youtube.com/watch?v=nTtBmNxSohM">עבודה מעולה</a>! כל הכבוד לכל הפעילים ביניהם <a href="https://blog.shemesh.biz/">שחר שמש</a> ועמותת המקור.</p> <p>אני יודע שזה נעשה לפני יותר מעשור אבל היום באמת אני מרגיש שאפשר להוציא את LyX לגימלאות. כמה יתרונות מבחינתי:</p> <ol> <li>אפשר לכתוב קיצורי דרך באנגלית בלי להחליף שפה – זה מאוד יקל על אנשים שרגילים להשתמש בזה</li> <li>מיקום קיצורי RLM/LRM הרבה יותר הגיוני – על מקשי סוגריים.</li> <li>בנוסף למקף־עליון הנמצא במקש "-/_" יש גם מקף "–" על מקש "+/=".</li> <li>סימן ₪ נמצא במקש של $ שזה מקל מאוד לזכור את מיקומו</li> <li>זה עובד גם בחלונות כך שלא צריך לשבור את הראש אם רוֹצִים לְנַקֵּד משהו או עוברים ממערכת הפעלה אחת לאחרת מידי פעם – זה כבר שם!</li> </ol> <p>באיחור של יותר מעשר שנים: תודה רבה!</p> </div> איך ללמוד תכנות בגיל צעיר? http://artyom.cppcms.com/post/347 http://artyom.cppcms.com/post/347 <div style="direction:rtl"> <p>כשהייתי בן 11 הורים שלי קנו לנו מחשב קטן ZX Spectrum עם מעבד Zilog Z80 מ־48KB של זכרון. "מערכת ההפעלה" שלו הייתה BASIC פשוט, הוא התחבר לטלוויזיה, התוכנה נשמרה ונטענה מקלטות. אומנם קיבלנו את המחשב בתחילת שנות ה־90 אבל בפועל זו הייתה טכנולוגיה של שנות ה־80. כך או אחרת זה הדליק את העניין שלי ושל אחי בתוכנה התווה את הדרך המקצועית של שנינו. למדתי עליו תכנות בסיסי והאסמבלי של Z80 הוא הראשון (ובעצם היחיד) שלמדתי לעומק.</p> <h2>קצת נוסטלגיה</h2> <p>עבר המון זמן. אבל תמיד אהבתי את המחשב הקטן ההוא. שחקתי עם אמולטורים שלו כמו fuse ואפילו בניתי תוכנה עבורו. אפילו חשבתי לקנות אחד ישן - אבל תמיד זה העלה שאלות - חיבור למסכים, אלטרוניקה של שנות ה־80 עם קבלים שלרוב נהרסו ועוד כל מיני שיקולים.</p> <p>אבל לאחרונה יצאה מחשב "מחודש" הנקרא "The Spectrum" שמעשה מדמה את המחשב הישן נראה בדיוק כמוהו אבל עובד עם טכנולוגיה מודרנית - מאפשר לטעון טכנה מדיסק־און־קיי ומתחבר למסך עם HDMI. אחרי הרהורים קצרים הזמנתי אחד מ־Amazon צרפת ו... לא התאכזבתי. באמת, מחשב קטן וגאוני. מהר מאוד כתבתי בשבילו כמה משחקים פשוטים ב־BASIC למשל Snake. הראיתי את המחשב לבתי הגדולה. הראיתי כמה פקודות פשוטות. כתבתי לידה משחק פשוט בו תפוסים קוביה שנופלת</p> <p><img src="http://cppcms.com/files/ball-zx.png" alt="תמונה" /></p> <pre><code> 1 BORDER 1 5 LET row=0 6 LET score=0 10 LET p=16 20 LET col=15 25 LET row=0 30 PRINT AT row,col;"#" 40 LET row=row+1 100 PRINT AT 20,p;"^" 105 LET psave=p 110 IF INKEY$="p" AND p&lt;31 THEN LET p=p+1 120 IF INKEY$="q" AND p&gt;0 THEN LET p=p-1 130 IF psave&lt;&gt;p THEN PRINT AT 20,psave;" " 140 PRINT AT row-1,col;" " 145 IF row&gt;20 AND p=col THEN LET score=score+1: PRINT AT 21,0;"Score ";score; 150 IF row&gt;20 THEN LET row=0: LET col=INT (16*RND)+7 200 GO TO 30 </code></pre> <p>הפתיעה אותה כמה קל זה היה אז במחשבי 8bit הפשוטים לכתוב דברים כאלה. הייתי רוצה לתת גם לילדים שלי להיחשף לעולם התוכנה. ולמרות שברור לי מחשב כזה הוא נפלא למשימות האלה, אני לא חושב שזה רעיון טוב ללמיד את הטכנולוגיה של שנות השמונים.</p> <h2>אז מה האלטרנטיבות הים?</h2> <p>אני רציתי סביבה בה אפשר לבנות דברים פשוטים כאלה בלי "לפתוח חלונות" לטפל באלף הגדרות ממשק וכד'. משהו שלילד (וגם מבוגר) יהיה קל וכיף להיכנס.</p> <p>לפני שתגידו Scratch - אני מכיר - אבל הבעיה שלי עם Scratch ש"שפת התכנות" מזעזעת. לא הצלחתי להתחבר. וגם כשנתתי לבתי הגדולה היא לא המשיכה הרבה עם זה. אולי בגלל שאני גם לא הצלחתי.</p> <p>פתחתי דיוק בנושא בקבוצת פייסבוק של משתמשי ZX Spectrum שוודאי יבינו את הכוונה שלי:</p> <ol> <li>שפת תכנות קלה יחסית</li> <li>אפשרות הפעלה של הכל דרך ide (שלא אצטרך ללמד גם שורת פקודות)</li> <li>קל מאוד להגיע לתוצאות מהירות</li> </ol> <p>ועלו מספר אפשרויות:</p> <ol> <li>love2d עם Lua</li> <li>pygame-zero עם Python</li> <li>processing עפ שפת תכנות מבוססת Java</li> <li>כמובן אותו ה־Scratch</li> </ol> <p>התחלתי לחקור ופתחתי <a href="https://github.com/artyom-beilis/education_projects/tree/main">פרוייקט</a> שכולל קוד המקור של כולם (מלבד Scratch)</p> <p>מטרה - לכתוב משחק פשוט בו כדור נופל ממקום אקראי ומנסים תפוס אותו עם המשטח שמזזים אותו בעזרת מקשים. אם תופסים הניקוד עולה ומוצג למשתמש. הנה דוגמה של המחשק שבניתי ב־pygame zero:</p> <p><img src="http://cppcms.com/files/pgzero-ball.png" alt="תמונה" /></p> <p> <a href="/post/347">המשך...</a> </p> </div> תמיכה בחצובה או סיפורי הסבת indi ו-indigo לאנדרואיד http://artyom.cppcms.com/post/346 http://artyom.cppcms.com/post/346 <div style="direction:rtl"> <h2>מה שטוב בסטנדרטים זה שיש הרבה כאלה...</h2> <p>אחרי תקופה ארוכה של פיתוח תוכנה/אפליקציית OpenLiveStacker המיועדת לצילום אסטרונימי בזמן אמת, הגעתי לנקודה שמעבר לתמיכה במצלמה נדרשת תמיכה בחצובה ובמצלמה גנרית. אז איך מתחברים במשהו גנרי? משתמשים בממשק סטנדרטי! בעולם "חלונות" יש ASCOM. בעולם הלינוקס המצב נותן מגוון רחב של סטנדרטים</p> <p> <a href="/post/346">המשך...</a> </p> </div> הפצה? למי איכפת. האמת שכן http://artyom.cppcms.com/post/345 http://artyom.cppcms.com/post/345 <div style="direction:rtl"> <p>אני יודע שימי מלחמת הפצות לינוקס כבר פחות מעניינים - כי כולם בסופו של דבר +/- אותו הדבר. אבל החלטתי להיזכר מה הייתה הדרך שלי.</p> <p>התחלתי עם Fedora 3 - הנתנה לי הרגשה מה זה לינוקס מודרני (אז). אבל מהר מאוד התייאשתי - כי הרעיון לשדרג כל 6 חודשים להפצה חצי יציבה - כי זו מעבדתי ניסויים של Red Hat - לא קסם לי.</p> <p>המשכתי ל־Debian - ה־stable אז היה ממש ישן עברתי ל־testing שאומנם עבד אבל... היה קשה וגם חיכיתי המון לגרסה "יציבה" שהייתה ישנה עם ההגעה.</p> <p>כשרכשתי מחשב מחדש 64 ביט התקנתי עליו גרסת LTS הראשונה של Ubuntu 6.06 ומשם בבית אני עם גרסאות LTS - למה? כי לא בא לי להתעסק יותר מידי בלינוקס.</p> <p>בעבודה עבדתי עם RHEL וגם עם CentOS וגם עם גרסאות שונות ומשונות של Ubuntu. שורה תחתונה. זה עובד וזהו. לא משנה מה.</p> <p>העיקר שיהיה יציב שלא ישגע עם שדרוגים יותר מידי ויעבוד. ונחמד כשזה נתמך ע"י תוכנה מסחרית</p> </div> למידה עמוקה מחוץ לקופסת nVidia http://artyom.cppcms.com/post/344 http://artyom.cppcms.com/post/344 <div style="direction:rtl"> <p>לפני <a href="http://artyom.cppcms.com/post/328">3 וחצי שנים</a> סקרתי את מצב הלמידה העמוקה בקוד פתוח (מחוץ לעולם nVidia) והמצב היה בכי רע.</p> <p>גם עכשיו המצב לא מזהיר. לפני מספר שנים רכשתי AMD rx6600XT ולא מזמן בתור ניסוי קניתי Intel Arc a380.</p> <h2>נתחיל מפתרון מבית AMD - השכפול של cuda בשם hip</h2> <p>קודם כל בניגוד לשנים הקודמות בהן אפילו לא הייתה תמיכה בכרטיסי RNDA התקנתי לאחרונה אובונטו 22.04 התקנתי rocm הורדתי pytorch מתאים - וזה עבד (כמעט היה צריך להגדיר <a href="https://discuss.linuxcontainers.org/t/rocm-and-pytorch-on-amd-apu-or-gpu-ai/19743">משתנה סביבה</a> כדי שיכיר בכרטיס שלא נתמך באופן רשמי) אבל זה עבד. לא נתקלתי עד עכשיו במשהו שלא עבד. שזה בהחלט התקדמות מרשימה. כמובן גם כל הקוד של AMD הוא פתוח שזה יתרון ענק.</p> <p>אבל... הם זרקו תמיכה ב-GCN4 זאת אומרת הכרטיס הישן rx560 כבר לא עובד עם rocm ואפילו דרייבר OpenCL שלהם קורס. דרייבר Mesa פשוט גרוע ו-rustocl קטסטרופה אחת גדולה, אבל הצלחתי להתקין amdgpu-pro הישן והלא נתמך - אבל לפחות עובד.</p> <p>כלומר בעלי RDNA נראה יהנו, אולי גם אלה עם Vega (אבל לא APU) ורק אם משתמשים בלינוקס.</p> <h2>השחקנית החדשה בשוק היא Intel Arc</h2> <p>בניגוד ל-AMD הם לא שכתבו cuda אלא עובדים עם pytorch כ-plugin. ההתקנה קצת יותר מסובכת אבל הצלחתי. להבנתי החל מ-pytorch 2.5 או 2.6 זה כבר אמור להיות שקוף יותר. הכרטיס עובד. האימונים? תלוי עד כמה הקוד שאתה מנסה להריץ תלוי בעבודה ישירה מול cuda בלבד. אבל הצלחתי אפילו להריץ yolo ועוד כל מיני רכיבים. כך שהמצב נראה טוב יחסית. אבל כמובן Intel החליטו ללכת בדרך ה-nית שאף אחד לא עובד עם זה sycl... טוב לפחות זה תקן פתוח (שתכל'ס רק Intel עובדים איתו)</p> <p>מה לגבי ביצועים. טוב. עשיתי השוואה בין gtx960 לבין arc a380. מבחינת המפרט</p> <ul> <li>לשניהם יש 1024 מעבדים</li> <li>מהירות הזכרון של אינטל כ-143GB/s לעומת כ84GB/s בנבידיה</li> <li>השעון הוא 2450MHz לאינטל לעומת כ-1506MHz משמע: יש כ-5020GFlops מול 3080GFlops יתרון</li> </ul> <p>איך הביצועים... <a href="https://github.com/artyom-beilis/pytorch_dlprim/blob/master/benchmarks/v0.2.0/summary.md">לא בדיוק טובים לעומת מה שכתוב על הנייר</a></p> <p>למרות שהמהירות התיאורתית אמורה להיות יותר טובה בכ-%63 בפועל באימון היתרון היה סה"כ 38% באימון בממוצע ו-48% בחיזוי. אם לוקחים חציון המצב עוד יותר גרוע. 13% שיפור באימון ו-40% בחיזוי.</p> <h2>סיכום</h2> <p>אז המצב השתפר פלאים לעומת מה שהיה. זה רחוק מהליות מושלם אבל יש התקדמות ומה שחשוב שההתקדמות החדשה היא בתחום קוד פתוח.</p> <p>עכשיו מה לא טוב? עדיין כל אחת מהחברות הגדולות בוחרת בפתרון משלה...</p> <ul> <li>nVidia זה cuda</li> <li>AMD זה hip/rocm (העתק של cuda)</li> <li>Intel זה - sycl אבל לפחות יש תמיכה גם ב-opencl ב-onednn</li> <li>Apple זה metal</li> <li>microsoft זה DirectML</li> </ul> <p>נפלתם על הראש? ברור ש-nvidia תהיה מונופול בשוק.</p> <h2>ומה אני עושה?</h2> <p>ממשיך לעשות את הבלתי אפשרי ו<a href="https://github.com/artyom-beilis/pytorch_dlprim/releases/tag/0.2.0">שחררתי עוד גרסה מספר 0.2.0</a> של OpenCL backend ל-Pytorch עם הרבה תיקונים.</p> <p>מוזמנים לנסות - אבל הדרך עוד ארוכה</p> </div> כשכבר מזמן לא איכפת לך מה גרסת מערכת ההפעלה שלך כל עוד זה לינוקס http://artyom.cppcms.com/post/343 http://artyom.cppcms.com/post/343 <div style="direction:rtl"> <p>לאור רכישת מחשב חדש התקנתי מערכת הפעלה על נקי. כבר מספר שנים (כ-6) הרצתי Ubuntu 18.04 וזה כבר התחיל לתת אותות התיישנות, לא בגלל שמשהו חסר לי אלא פתאום כבר אין תמיכה בכל מיני דברים חדשים.</p> <p>אז הורדתי גרסה עדכנית של Kubuntu התקנתי הכל עבד יחסית חלק מערכת הפעלה חדשה נקיה, התקנתי כל כלי הפיתוח סידרתי Steam וקצת משחקים אחרים. התקנתי rocm כך שאני יכול להריץ pytorch על כרטיס AMD עם הפתרון הרשמי שלהם (וזה אפילו עבד חלק).</p> <p>את המחשב הקודם הישן (בן 8 אבל עדיין טוב וחזק) הכנתי לבת שלי (שהגיע הזמן) גם התקנתי את ה-Kubuntu ופתאום קלטתי שבמהלך ההתקנה מופיע 22.04 ולא 24.04 - איזה באג מוזר. נו. סיימתי התקנה ואז החלטתי לבדוק. זה 22.04 ולא 24.04 - הלכתי למחשב שהתקנתי לפני שבועיים - גם כן! איך פספסתי! הסתכלתי על iso שהורדתי וזה באמת 22.04 והייתי כל הזמן בטוח ששמתי 24.04.</p> <p>האמת, זה כל-כך לא משנה. כל עוד הדברים עובדים. רק צריך יהיה מתישהו לשדרג (אני שונא שדרוגים)</p> </div> לחבר שני תחביבים http://artyom.cppcms.com/post/338 http://artyom.cppcms.com/post/338 <div style="direction:rtl"> <p>אני חובב אסטרונומיה. בתור חובב אסטרונומיה אני סובל ואחת הבעיות הגדולות של העולם המודרני - זיהום אור. יש המון גרמי שמיים חיוורים כמו גלסקסיות וערפיליות שפשוט לא ניתן לראות מהעיר. בשביל זה צריך לנסוע לנגב או לרמת הגולן ולבלות לילה בתצפית. זה מאוד כיף כמובן. אבל זה לא תמיד נגיש.</p> <p>אחד המעקפים לבעיה זה שימוש בצילום. מצלמה שיכולה לאגור פוטונים מגלקסיות מרוחקות ומאפשרת לחדור דרך שכבת זיהום אור כבדה ולהראות לנו גרמי שמיים עמומים. זה כמובן לא תחליף לצפייה ישירה אבל גם נותן יתרונות רבים אחרים. במובן, צילום אסטרונומי הוא נושא מורכב שדורש שימוש בתוכנות ייעודיות: איסוף תמונות רבות ככל הניתן, ועיבוד שלהם (הערמה) כדי לקבל תמונה יפה של איזו ערפיליות או גלקסיה.</p> <h2>אמרנו לינוקס?</h2> <p>אז מה המצב התוכנה בתחום זה מבחינת תוכנה חופשית ולינוקס? יש ויש. חלק הארי של הכלים הם חופשיים/קוד־פתוח. יש לא מעט תוכנה ללינוקס, אם כי הדברים הטובים ביותר רצים על חלונות. רוב הדרייברים של המצלמות דווקא סגורים. אבל לרוב יש גרסאות לינוקס, Raspberry PI ועוד.</p> <p>עכשיו, בצילום אסטרונומי יש נדבך חשוב שמעניין אותו במיוחד: Electronically Assisted Astronomy או EAA בקיצור. פירושו ביצוע כל הפעולות הנדרשות לצילום (כולל עיבוד, איסוף תמונות והערמה) בזמן אמת, כאשר עם כל תמונה חדשה של האובייקט, אתה מקבל את התמונה הסופית המשופרת יותר ויותר. המטרה של EAA בניגוד לצילום, לא להגיע לתמונה הטובה ביותר אפשרית, אלא להגיע לתמונה שמספיק טובה כדי לראות את האובייקט ולהנות ממנו.</p> <p>למעשה, במקום לצפות באובייקט דרך עינית, צופים בו דרך המסך. ובניגוד לצילום אסטרונומי שיכול להמשך שעות ארוכות, מסתפקים בזמן איסוף כולל קצת יחסית - מעשרות שניות עד דקות בודדות - כי המטרה לראות ולעבור לאובייקט מעניין הבא. מה מצב התוכנה פה? אם בצילום היה מאתגר בלינוקס, פה המצב קשה. יש מעט מאוד פתרונות ולא כולם עובדים ונוחים.</p> <p>הבעיה השניה, מבחינתי, זה ש־EAA דורשת לרוב להביא מחשב נייד לשטח כדי להפעיל את כל התוכנה המסובכת הזו. למעשה, אם תצפיתן שצופה ויזואלית יכול להביא איתו תיק אחד ובו טלסקופ, חצובה וכמה עיניות, צלם צריך להביא איתו לשטח: חצובה ממונעת, עשרות כבלים, מחשב, ספק כוח שיספיק למספר רב של שעות ועוד. הקמה וקיפול של הציוד לצילום יכולים לקחת בקלות בין חצי־שעה ולשעה בניגוד לצופים בעין - העושים הכל במספר דקות בודדות.</p> <p>אבל לרובינו יש כבר מחשב די חזק ונייד: טלפון או טאבלט! לו רק יכולתי לחבר את המצלמה ישירות לאליהם...</p> <h2>אז הרמתי את דגל</h2> <p>בניתי פתרון ל־EAA עבור לינוקס ואנדרואיד ושמו <a href="https://github.com/artyom-beilis/OpenLiveStacker">OpenLiveStacker</a>. והוא בנוי בצורה הבאה:</p> <ul> <li>הקוד כתוב ב־C++‎ עם שימוש ב־OpenCV לצורך עיבוד תמונה</li> <li>הממשק בנוי כ־web interface שמדבר ב־REST עם השרת - מה שמאפשר בניית ממשק בלינוקס ואנדרואיד באותה צורה וגם מקל על גישה מרחוק במקרה והתוכנה רצה על pi. כמובן שהשרת מבוסס CppCMS. מה שמאפשר חיבור קל ונוח בין הקוד שדורש ביצועים הגובהים לממשק משתמש.</li> <li>הדרייברים נטענים דינאמית: <ul> <li>אחד עבור מצלמה גנרית עם פרוטוקול UVC על בסיס libusb/libuvc- שתומך במצלמות רשת או במצלמות כמו SVBony sv105 - אבל הוא מוגבל לצורכים אסטרונומיים</li> <li>דרייבר של ASI ZWO - החברה המובילה בתחום, שעובד מול SDK שלהם. לצערי הדרייבר עצמו הוא קוד סגור, אבל יש להם גרסה לאנדרואיד.</li> <li>דרייבר גנרי שיודע לקרוא קבצים מהספרייה איך שהם מגיעים - מה שמאפשר חיבור לכל מצלמה אחרת דרך כלים קיימים כמו indi/ekos.</li> </ul> </li> <li>לצורך תמיכה באנדרואיד יש אפליקציה קטנה שעוטפת את השרת ומנהלת גישה ל־USB (כי באנדרואיד הכל צריך להיות מסובך)</li> <li>לצורך הקלה על התמצאות יש חיבור לתוכנה פופולרית מאוד בתחום אסטרונומיה: ASTAP שיש לה גם גרסה (קובץ ריצה) לאנדרואיד. הדבר המעניין בתוכנה הזו שהיא כתובה בפסקל! לא חשבתי שאתקל בדבר כזה בימינו.</li> </ul> <h2>מה למדתי?</h2> <ul> <li>בניית אפליקציות אנדרואיד זה די סיוט וזה לא בגלל השפה אלא בגלל שצריך ללמוד פחות או יותר הכל מ־0. מזל שרוב הקוד ניתן לכתוב ב־C++‎.</li> <li>כמעט כל דבר באנדרואיד עובד "קצת שונה". למשל: אין לך ‎/tmp, להריץ exe חיצוני זה סיפור שעלה לי בלילה לבן, להביא קבצים עם אפליקציה זה גם לא משהו טריוויאלי. בקיצור. זה לינוקס, אבל לא בדיוק.</li> <li>אני שונא לעבוד עם קוד סגור. אומנם ASI ZWO משחררים דרייברים לאנדרואיד, אבל הם גם הכניסו <a href="https://bbs.astronomy-imaging-camera.com/d/16038-asi-zwo-android-sdk-critical-bugs">באג מעצבן</a> שגורם ל־RTTI לא לעבוד! למעשה כל תכנת החיבור ל־SDK שלהם כתבתי ב־C+-‎ בגלל אי זמינות של RTTI. וזה לא היה משהו מסובך אם הייתי יכול לקמפל את הדרייבר מחדש הבעיה הייתה פשוט נעלמת.</li> </ul> <h2>שורה תחתונה</h2> <p>אבל מה שחשוב, שבשורה תחתונה, יש לי פתרון פשוט - לעבוד עם טאבלט שבקושי צורך חשמל, קל ונוח.</p> <p><img src="https://user-images.githubusercontent.com/14816918/229337011-72031279-8de8-4be0-b1a1-61d592525230.jpeg" width="450" height="400"></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>