הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא לינוקס.
CppCMS עובר מ-LGPLv3 ל-MIT
היום עדכנתי רישיון של CppCMS ל-MIT. הגרסה הקרובה 1.2 תשוחרר עם רישיון מעודכן
ההחלטה נובעת ממספר סיבות:
- רצון להגדיל נתח השוק של CppCMS ולהקל על כניסה של משתמשים חדשים
- להביא יותר מפתחים לפרויקט
לשרת את כל אתרי החדשות בארץ בעזרת... CppCMS
אני לא יודע אם שמתם לב, אבל בשנה האחרונה קצב הפיתוח של תשתית CppCMS ירד בצורה ניכרת. ריכזתי את מרבית המאמצים במערכת פרסום מיוחדת הבנויה על תשתית ה־CppCMS שפותח עבור לקוח.
הפרויקט נקרא ליניקום.
היום, כשליניקום כבר פעיל זמן רב ומתוחזק ע"י צוות מורחב, אני אוכל להקדיש יותר זמן לתשתית CppCMS עצמה.
מספר מילים על "ליניקום":
"ליניקום" הוא מנוע שמביא פרסומות תלויות תוכן ומותאמות למשתמש לאתרים שונים בקלות רבה. מרבית אתרי החדשות הגדולים בארץ משתמשים בשירותי ליניקום, ביניהם: ynet, הארץ, מאקו, Jerusalem Post, ואללה ועוד רבים אחרים כולל מספר אתרים גדולים בחו"ל.
להלן כמה עובדות מעניינות:
- ליניקום מבוססת על טכנולוגית CppCMS
- המערכת משרתת כ־10,000,000 פניות המותאמות למשתמש ביום - קרי כ־115 פניות בשניה.
- בשעות העמוסות הקצב מגיע לכ־160 פניות בשניה.
- השרת מייצר תעבורה יוצאת ממוצעת של כ־11 מגאביט בשניה.
- צריכת זיכרון הכוללת של המערכת (שרת וואב, בסיס נתונים, יישום, מערכת ההפעלה) הוא בסביבות 360MB
- העומס הממוצע על המעבדים הוא כ-5%
- השרת רץ על c1.medium instance בודד ב־Amazon EC2
המערכת רצה מאחורי lighttpd ומשתמשת ב־PosgreSQL לשמירה וניהול הנתונים בצורה אינטנסיבית, עם זאת, מרבית הנתונים הנדרשים בזמן אמת שמורים ומנוהלים בזיכרון.
כמעט כל פניה לשרת דורשת עיבוד נתונים על מנת לספק פרסומות מותאמות אישית, מבחינה טכנית, זה אומר שלא ניתן לעשות "מיקור חוץ" של הפניות האלה לקבצים הסטטיים וכל פניה של כל לקוח צריכה להיות מטופלת בנפרד.
מערכת הפרסום הזו, היא הדוגמה הקלאסית לשימוש בטכנולוגיית CppCMS - מערכת שצריכה להיות מהירה ואפקטיבית. מערכת שמסוגל להתמודד עם עומסים גבוהים ולעתים חריגים ללא בעיות ולספק איכות השירות גבוהה ביותר.
שימוש בנתונים השמורים בזיכרון, ניהול נתונים שלא יכולים להיות שמורים בזיכרון מטמון - זה המקום בו יכולות CppCMS באות לידי ביטוי במלואן. יכולת גדילה גבוהה עם דרישות תחזוקה מינימליות, אמינות גבוהה - האם אלה שמאפשרים לדאוג לצד העסקי בלי לחשוב על בעיות ביצועים אפשריות.
לבנות RPM להרבה הפצות
כשאתה מפתח הפרויקט קוד־פתוח, קל מאוד להפיץ קוד מקור, אבל כשזה מגיע לקבצים בינאריים, זה הופך לבעיה הרבה יותר משמעותית. יש עשרות הפצות, כל אחת מגיע במספר גרסאות שונות ומביא אתה חבילות טיפה שונות. לכן, לאדם אחד זה כמעט ובלתי אפשרי לבנות חבילות לכל הפצה אפשרית.
בזכות debootstrap היה לי יחסית קל לבנות חבילות deb ל־Debian ו־Ubuntu, אבל המצב הרבה יותר מורכב כשמדובר ב־rpm כי אין דרך קלה לשים את הפצת rpm בספריה ולעשות לתוכה chroot.
בהמלצת שגיא בן־עקיבא התחלתי להשתמש ב־Open Build Service של OpenSuse.
האמת, אני מאוד מרוצה! כל מה שצריך זה להעלות Source RPM או קובץ spec, כל השאר ייעשה בצורה אוטומטית: בניה למספר הפצות ופלטפורמות, הכנת מקורות מסודרים ואפילו אתה מקבל repository מסודר.
בצורה כזו הכנתי rpmים ל־3 הפצות (Fedora, Suse, CentOS) כולל מספר גרסאות וגם הכל עבור שתי ארכיטקטורות: x86 ו־x86_64.
http://download.opensuse.org/repositories/home:/artyom-beilis/
מה שנותר... להבין כיצד משתמשים בשירות עבור debים
שוחררה גרסה יציבה 1.0.0 של CppCMS המופצת תחת רישיון כפול
היום, אחרי מספר שנות פיתוח, שוחררה גרסה יציבה של CppCMS 1.0.0, אחרי תקופה ארוכה של גרסאות בטא. הגרסה הזו מהווה אבן דרך משמעותית בהתפתחות של CppCMS, הן מבחינה טכנולוגיות והן מבחינה עסקית.
החל מגרסה 1.0.0, ספריית CppCMS תהיה זמינה תחת רישיון חופשי LGPLv3 ותחת רישיון מסחרי שיאפשר פיתוח יישומים קנייניים תוך שמירה על שלמות המוצר והגנה על הסודות המסחריים שלו.
למידע נוסף על הרישוי החלופי והמחירים אנא כנסו לאתר שלנו:
http://commercial.cppcms.com
גרסה זו, עברה שכתוב יסודי ושינויים ארכיטקטוניים עמוקים שהזניקו את הפופולריות שלה מיד עם שחרור גרסאות בטא ראשונות. מבין החידושים הטכנולוגיים:
- הכנסה של API ו־ABI יציבים
- תמיכה מובנית ב־Ajax ו־Comet
- שיפורים מהותיים בלוקליזציה
- תמיכה מובנית ב־Windows
- שיפורים משמעותיים באבטחה: מסנני XSS וכלים למניעת CSRF ועוד.
- שרת HTTP מובנה לפיתוח ומערכות משובצות
הענף הישן יציב CppCMS 0.0.x לא נתמך יותר. כל משתמשיי הענף הישן מתבקשים לעבור לגרסה החדשה. יש לציין, לא ידוע לי על משתמש אחד שנשאר עם הגרסה הישנה.
שפת תכנות לא משנה...
מאז שהמציאו שפת תכנות ראשונה ממשיכים למצוא את השפה האולטימטיבית שתפתור לנו את כל הבעיות:
- תהיה מהירה
- תהיה פשוטה
- תהיה חזקה
- תהיה ברורה
- תהיה נוחה
- תכין לנו קפה לארוחת הבוקר...
אז נגיד מחר אני אצליח ליצור שפה חדשה:
- מהירה כמו C או C++
- קלה להבנה כמו Java או Pascal
- גמישה כמו Python או JavaScript
- ועוד כמה תכונות נוספות שתרצו לפרט
ואז כשיהיה לי מהדר (או משערך) אולטימטיבי שיעבוד על כל מערכת הפעלה ובכל סביבה החל ממערכות משובצות עד מחשבי על, החל מ־ARM עד ל־Itanium ואפתח IDE אולטימטיבי יהפוך אותי לפרודוקטיבי־על, אני אתחיל לעבוד...
מה יקרה?
רוב המפתחים היום לא כותבים אלגוריתמים הם כותב אפליקציות. רוב המפתחים היום צריכים לדעת את הספריות שלהם יותר טוב מהשפה, למתכנת GUI ממוצא יותר חשוב להבין אין עובד Qt מאשר לדעת כיצד לעשות partial template specialization. למתכנת יישומי עיבוד תמונה ב־Matlab יותר חשוב לזכור את הפונקציות שמבצעות convolution על מטריצה, מאפשר לזכור כיצד להגדיר מחלקות. למפתח Web יהיה יותר חשוב לדעת כיצד לייצר טופס, מאשר כיצד להשתמש בפונקציות למבדה.
בסופו של דבר גם אם פיתחת שפת־על אתה צריך כלים. ואם אין לך כלים השפה תמות.
זאת הסיבה רוב השפות שנולדות לאחרונה הן רצות על JVM או על .Net או כמו Vala משתמשות באוסף הספריות העשיר של Gnome כדי להיות פרודוקטיבי.
ומה עם "שפות־העל" שפותחו והמון מחשבה הושקעה בהן כמו, למשל, D? הן לא התרוממו.
למעומת זאת, שפות "עתיקות" כמו C ממשיכות להתקיים והמונים כותבים בהן. Vala בזכות האימוץ המלבב של GTK ו־GObject תופסת תאוצה. Go? כנראה לא תתרומם בקרוב בלי השקעה אדירה.
במילים אחרות.
זה נחמד אם תהיה שפה חדשה שתפתור לנו את כל הבעיות האפשריות, אבל אם היא לא "תירש" בצורה אוטומטית או חצי אוטומטית SDK עשיר, היא לא תחיה הרבה.