הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא תכנה ומחשבים.
זקוק לעזרה מקהילה או... למי יש ARM פנוי?
בימים אחרונים אני מנסה לתת ל־CppCMS עוד נישה פוטנציאלית והיא מערכות משובצות מחשב. בד"כ שפות כמו php ו־python כבדות עבור מערכות כאלה. פה בדיוק סביבת פיתוח נוחה יכולה לעזור.
בנוסף, קיימים מספר פתרונות דומים בשוק והם Wt ו־Klone. אבל, Klone לא נותן כלים ש־CppCMS נותן ו־Wt בנוי בצורה שלטעמי שגויה -- גישה של מפתח GUI ולא web.
אז, עשיתי כמה שיפוצים ב־CppCMS כך שהוא יוכל לתמוך גם בסביבות משובצות מחשב, ביניהם: ביטול רכיבים מיותרים, למשל, אם בונים CGI טהור, אז אין מרכיב s/f-cgi, ניהול threads וכד'. הוצאה מערכת cache ודחיסה עבור יישומי כאלה כי בד"כ זיכרון הוא יקר ועוד.
לאחר מספר אופטימיזציות, הצלחתי להגיע ליישום בגודל של כ־550K שזה כמעט חצי ממה ש־Wt הצליחו להגיע.
מה נותר? לבדוק את היישום על פלטפורמת ARM אמתית. כיום, כל הבדיקות נעשו בעזרת qemu-arm. לכן, אני זקוק לעזרתכם.
מה מדרש?
כל מי שיש לו גישה ל־ARM עם לינוקס מותקן עליו, אנא עִזרו:
- הורידו את הקובץ הבא.
- העבירו אותו לסביבת ARM שלכם ותפרסו.
תנסו להריץ:
./hello.dynamic -c config.txt
זהו קובץ ריצה שמקומפל דינאמית רק עם ספריות בסיסיות כמו libstdc++. אם הוא לא מצליח בגלל העדר ספריות תנסו:
./hello.static -c config.txt
בכל מקרה, אמור להתקבל פלט של Headers של cgi ותוכן HTML עצמו.
- אם יש אפשרות, אנא בדקו את זמן הריצה עם time.
- אם במקרה, יש לכם שרת web בסביבה שלכם אני אשמח אם תוכלו להריץ את ה־cgi שבספריה (רק שעדכנו את השם של קובץ ריצה לזה שהצליח (סטטי או דינאמי) בהתאם.
אם הכל יעבוד ואם תהיה נכונות מצדכם, אני אשמח להכין סדרה של סקריפטים ובדיקות מול ARM כדי לוודא שכל המרכיבים הנדרשים עובדים כמו sessions, תבניות ועוד.
תודה רבה, מראש!
מדוע אתה מפתח את זה בחינם?
בהמשך לכתבה של ליאור קפלן "עובדים בחינם" רציתי לפתוח "שרשרת תגובות" בבלוגי FOSS הישראליים --- מדוע אתה/את מפתח/ת את זה בחינם?
כאשר אני מבקש לציין --- שם הפרויקט שאתה עובד עליו/תורם עבורו והסיבות.
BiDiTeX --- תמיכה ב־bidi (כיווניות) עבור LaTeX בעברית.
יש כאן שתי סיבות העיקריות:
- אני מעדיף לכתוב ב־LaTeX על כתיבה בכל מעבד תמלילים, כנ"ל כשאני כותב בעברית. לכן, כתבתי תכנה קטנה שמפשטת את העבודה בצורה מאוד משמעותית.
- אני מעוניין בהתפתחות של LaTeX בעברית, כדי שהתמיכה בו תלך ותשתפר בעתיק. בלי תמיכה סבירה בכיווניות, זה פשוט לא יקרה. אף אחד לא יעבוד עם LaTeX.
קזית 3 --- Knoppix בעברית.
יש שלוש סיבות:
- בתקופה שפיתחתי את קזית, היה לי מחשב נייד שעבדתי עליו הרבה עם Knoppix, אבל לא יכולתי להתקין Linux, כי זה היה מחשב מהעבודה. ב־Knoppix הכל היה סביר למעט הבעיה העיקרית --- העדר תמיכה כלשהי בעברית. לכן, החלטתי לערצב גרסה משלי, כך הגעתי לפיתוח קזית.
- חשבתי שהפיתוח יהיה הרבה יותר מהיר מאשר יצא בפועל. אבל כשהייתי בחצי הדרך היה כבר חבל לעצור. לכן המשכתי.
- כשהבנתי שיהיה לזה ביקוש, פשוט נסחפתי ע"י הקהילה וגם רציתי לבנות לעצמי מוניטין מסוים; וכפי שציינתי היה חבל לעצור אחרי שכל כך הרבה זמן הושקע. (זה נשמע מרשים --- מפתח הפצת לינוקס... לא?)
CppCMS תשתית לפיתוח web ב־C++.
פה זה קצת יותר מורכב:
- בהתחלה זה היה הבנה שכתיבה ב־PHP מביאה ליצירת Bloatware אמתי ושמו Wordpress, שעובד מאוד לאט.
- אחר כך, היה רעיון של Prove of concept --- הוכחה שאפשר לפתח אתרים בקלות גם ב־C++ שיהיו הרבה יותר מהירים וגם שזה לא יהיה מסובך.
- ההבנה שבעצם יש פה מציאה אמתית --- זה כלי שיש לו ביקוש אמתי בשוק אמתי.
- הצורך להביא את הכלי למצב של Production Ready (שכבר די הצלחתי בזה), כדי לבנות מסביבו, אולי (בתקווה) בשלב מסוים, עסק...
אני מעביר את השרביט לאילן שביט, שחר שמש, מאיר קריחלי, עידו ואחרים שרוצים להצטרף לשרשור.
טיפים למצביעים (או אלה שעוד לא הצביעו)
אחד הדברים המעצבנים בבחירות זה לדעת לאיפה אתה הולך. החלפתם כתובת אבל לא עדכנתם אותה? עכשיו לכו תחפשו את הקלפי שלהם. מוכר?
יש פתרון מאוד פשוט! גידי גוב ;), או ליתר דיוק http://www.gov.il/. נכנסים לאתר, מקלידים מספר הזהות, לוחצים על חפש... יש כתובת, מספר קלפי ואפילו כפתור להדפסה. עובד בפיירפוקס, אפיפני וגם קונקי! כך שגם למשתמשי לינוקס אין תרוצים לא להצביע.
עכשיו בעיה שניה, מתלבטים במי לבחר. יש לכם שני פתרונות
פתרון ראשון שהציע שחר שמש. בגדול נחמד ופשוט, אבל יש לו שני חסרונות עיקריים:
- אתה מודע מה קיבלת, לכן, אתה יכול להיות מושפע מהתוצאות ולכן, התפלגות לא תהיה בדיוק אחידה.
- אתה מסתמך על הוגנות של שחר שמש שבנה את האתר (לא שאני לא סומך עליו, אבל בכל זאת) והוגנות של מחולל מספרים אקראיים. (שחר, אולי תפרסם קוד מקור?) בנוסף, מה קורה אם יש באג?
טוב, ספרתי את ההצעה של שחר לחבר שלי פבל והוא העלה את הרעיון שאין לו את שני החסרונות האלה. מה שכן, הוא דורש יותר מאמץ.
במילים אחרות... אין תירוצים, כולם מבציעים!
לקמפל על Linux להריץ על Windows.
לעתים, אנחנו נרשים לתמוך בפלטפורמה הלא ידידותית הזו. הבעיה העיקרית שלפעמים זה די מעצבן לוותר על הסביבה הנוחה שלך להיכנס ל"חלונות" רק כדי לבנות את כל מה שצריך.
הכל התחיל מזה שרציתי לבדוק --- עד כמה זה מסובך לבנות cppcms על mingw וכמה מאמץ צריך להשקיע להסבה. הסיפור היה נראה די מסובך --- איזה פונקציות המערכת שאני משתמש בהן לא נתמכות בחלונות ואילו כן. אז היה ברור שצריך לנסות לבנות את כל היישום. בהתחלה זה היה נראה די מסובך להתחיל לבנות את כל הסביבה במכונת windows וירטואלית חסרת כלי פיתוח בסיסיים.
אבל autotools נותן תמיכה מצוינת ב־cross compilation עבור Windows. כל מה שצריך זה להתקין mingw ולהריץ:
./configure --host=i586-mingw32msvc --prefix=/place/to/install
זהו פחות או יותר! הוא יבנה לך ספריות סטטיות ודינמיות, יבנה dllים איפה שצריך, יתקין. לעשה, ייתן לך סביבה שקופה לבניית יישומים תחת mingw. כמובן מדובר ב־debian/ubuntu ב־RH שם הקומפיילר יכול להיות קצת שונה.
ובכן, קמפלתי cgicc --- (היו כמה בעיות מינוריות, אבל הסתדרתי), הורדתי pthreads עבור windows. הכל היה די מבטיח.
לאחר מכן, בא הסיוט --- לבנות boost. הם לא משתמשים ב־autotools וגם bjam לא ממש תומך בצורה סבירה ב־cross compiling... אחרי הרבה מאמץ... ויתרתי ובניתי אותו על חלונות.
אחרי שבניתי boost הרצתי קונפיגורציה עבור cppcms והכל עבד מצוין --- הצלחתי למפות בצורה יפה את כל הפונקציות הלא נתמכות: בהן gettimeofday, readdir_r, clock_realtime, pthreads_sigmask ועוד ועוד ועוד (זה מעבר לדברים שידעתי שלא ייתמכו כמו fork ו־dlopen)...
מסקנות:
- ככל שעובר הזמן אני מבין יותר ויותר שבמציאות אין תחליף ל־autotools הישן והטוב ולא כל־כך ידידותי. לכל הילדים כמו bjam, cmake, scons ואחרים יש עוד דרך מאוד ארוכה.
- צריך לעבור ל־autotools גם עבור biditex ולחסוך לעצמי מאמץ של תחזוקה של שני קובצי makefile עבור שתי פלטפורמות שונות.
- לא נראה לי ש־CppCMS יתמוך ב־windows בקרוב.
- אם qt4 היה עובד עם autotools זה היה חוסך לי המון זמן, אתחולי Virtual Box רבים כדי לשחרר גרסאות של יישום קטן עבור חלונות/לינוקס.
אתר המראה עבור תיעוד של CppCMS.
לאחרונה התחלתי לקבל תלונות רבות על זמינות נמוכה של אתר הזה, בפרט התיעוד הוא היה כמעט ולא זמין מחוץ לישראל (כאשר בארץ הוא טס).
המצב מאוד מדאיג, כי כל מי שרוצה להתשמש בפרויקט מחוץ לארץ, עלול פשוט להישבר בגלל המתנה ארוכה לתיעוד, שלא לדבר על העובדה שזה "לא־ראוי" עבור מערכת שאמורה להבטיח ביצועים גובהים.
לכן, עד שאסדר את הבעיות מול ספקית האינטרנט שלי (012), הכנתי תסריט קטן שיוצר עותק ה־wiki בעזרת wget ומעלה אותו לאתר Sourceforge בעזרת rsync. הסקריפט הזה ירוץ כל 6 שעות ויבטיח עדכניות סבירה של אתר המראה; ולמעשה יבטיח זמינות טובה של תיעוד מחוץ לארץ.
לכן, אבקש, כל מי שרוצה לקשר לפרויקט הזה שיפנה ל־cppcms.sourceforge.net במקום הויקי הנוכחי ב־art-blog.no-ip.info.