הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא תכנה ומחשבים.
לקמפל על 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.
מדוע אני אוהב MySQL...
אני יודע שיש אנשים שלא סובלים MySQL ומעדיפים כל דבר על פניו. יש הרבה ביקורות כלפי MySQL ויש לו לא מעט בעיות... אבל, מתוך ניסיון עבודה עם MySQL, Sqlite3, PostgreSQL וניסיון מועט בעבודה עם Firebird ו־MS SQL... אני מעדיף MySQL ובמקום השני Sqlite3.
מודע? כי הוא לא דורשים ממך תואר ב־DBA כדי להשתמש בו. הוא נותן לך כלים טובים ונוחים, לשמור, לנהל ולשלוף מידע בצורה פשוטה ונוחה; והסיבה העיקרית לכך:
הם עושים את הדבר הנפוץ פשוט
דוגמה 1: יצירת unique row id
אני יודע עידו כל־כך לא אהב איך שזה עובד ב־MySQL. אבל זה עובד בצורה פשוטה מאוד. יותר מזה היא מתנהגת בצורה הגיונית (לפחות בעיני).
דוגמה: אם אני יצרתי schema:
create table users (
id integer NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL
);
ואז מייבא נתונים קיימים:
insert into users(id,name) values(1,'Yossi');
insert into users(id,name) values(2,'Moshe');
ואז מוסיף משתמש חדש:
insert into users(name) values('Artyom');
אני אקבל id=3 כפי שניתן לצפות. מצד שני, ב־PostgreSQL אני חייב לעדכן sequence אחרי הכנסה של ערך ידני, אחרת אקבל התנגשויות.
ב־Firebird אתה בכלל חייב תואר שלישי ב־DBA כי ליצור auto-increment כי זה נעשה רק עם trigger.
או קיי, אבל מה אם אני רוצה לעשות משהו מסובך באמת שלא נתמך ע"י auto_increment פשוט? אז גם זה אפשרי עם כתיבת trigger. אבל המקרה הנפוץ הוא פשוט.
דוגמה 2: הוספה או עדכון
עוד משהו שתמיד הפריע לי ב־SQL הסטנדרטי, כיצד אני עושה Update אם ערך קיים או insert אם הוא לא קיים?
פעולה מאוד נפוצה שאני ממש לא מבין לא היא לא חלק מ־SQL סטנדרטי... ב־MySQL וגם ב־Sqlite יש replace וגם יש לך אופציות שונות איך להתנהג אם ערך קיים: להתעלם, לעדכן, לעשות rollback וכד'.
איך עושים את זה ב־PgSQL? כותבים פרוצדורה של... תעשו חיפוש בגוגל, אני רוצה לדעת אם מישהו ימצא פתרון בפחות מ־5 שורות SQL... כנ"ל Firebird ו־MS SQL. למשל, כך עושים את זה ב־Firebird, מישהו היה מנחש?
אני יודע ש־MySQL אינו בסיס נתונים מושלם, יש לו הרבה בעיות ונקודות בהן אפשר ליפול... אבל יש לו יתרון אחד גדול, אתה לא חייב להיות DBA כדי להשתמש בו.
מדוע Asp.Net/Mono לעולם לא ירוץ על לינוקס...
זאת הסיבה:
http://www.tapuz.co.il/forums2008/forumpage.aspx?forumId=156
http://www.tapuz.co.il/forums2008/forumPage.aspx?forumId=156
http://www.tapuz.co.il/Forums2008/ForumPage.aspx?ForumId=156
(לא אל תיכנסו לקישורים, תסתכלו בהם)
שוחררה CppCMS 0.0.2!
אחרי תקופה ארוכה של פיתוח מאומץ שוחררה גרסה 0.0.2 של CppCMS -- תשתית פיתוח יישומי אינטרנט ב־C++.
- הורדה
- תיעוד -- עדיין לא הושלם ב־100%.
- הוראות התקנה
הגרסה כוללת
- CppCMS תשתית הפיתוח.
- DbiXX --- ספריה לעבודה מול בסיסי נתונים שונים.
- WikiPP מערכת ויקי מובססת CppCMS.
- Examples --- דוגמאות שונות כחלק מתיעוד של CppCMS.
שינויים במדיניות
ישנם מספר שינויים חשובים במדיניות שחרור הגרסאות:
- גרסאות בטא ציבוריות יהיו זמינות רק דרך svn, ענף פיתוח ראשי trunk.
- קצב שחרור הגרסאות יגדל. אמנע משמירת השינויים ב־trunk בלבד.
- רוב הארכיטקטורה של CppCMS התייצבה, אם כי, API עדיין נתון לשינוי. עם זאת, ייצוב API ותאימות לאחרות הן מטרות חשובות של פיתוח עתידי.
השינויים העיקריים
- מערכת תבניות חדשה מבוססת על טיפוסים סטטיים. היא נשענת על קימפול התבניות לקוד המכונה וטעינתן כ־shared objects.
- מערכת תבניות הישנה, מבוססת על טיפוסים דינאמיים לא תיתמך יותר.
השיפורים השונים במערכת התבניות כוללים בין השאר:
- ירושת תבניות בסגנון Django.
- הרחבת תבניות ע"י השתלת קוד C++ לתוכן.
- תבניות הן חלק מהתשתית ולא מהוות ספריה נפרדת.
פותחה מערכת חדשה ליצירה ובדיקה של טפסים. היא משולבת עם מערכת התבניות.
- פיתחה מערכת ניהול sessions חדשה.
- שיפורים ב־API של מערכת caching לתמיכה יותר טובה ב־cache העובד ללא טריגרים.
- התיעוד של המערכת הועבר ל־WikiPP מערכת ויקי שפותחה על בסיס של CppCMS.
- נתמכות מערכות הפעלה חדשות: FreeBSD ו־OpenSolaris, בנוסף ל־Linux ו־Cygwin.
- מערכת ויקי WikiPP שוחררה תחת רישיון GPLv3.
