<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>הבלוג של ארתיום :: CppCMS</title>
	<link>http://art-blog.no-ip.info/newpress/blog</link>
	<description>בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!</description>
	<atom:link 
		href="http://art-blog.no-ip.info/newpress/blog/rss" 
		rel="self" type="application/rss+xml" />
	
		
		<item>
			<title>ל־CppCMS יש קהילה פעילה</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/241</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/241</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;בחודש חודשיים אחרונים אני רואה פעילות ערה מסביב ל־CppCMS. רשימת התפוצה הפכה להיות פעילה, דיווחי באגים מגיעים ואפילו&amp;hellip;&lt;/p&gt;

&lt;p&gt;לפני ימים אחדים קיבלתי מספר דיווחי באגים ותרגום של הבלוג הזה ל&lt;strong&gt;סינית&lt;/strong&gt;, כך שאם מישהו רוצה בלוג שמיליארד סינים יוכלו לקרוא אותו בלי ליצור עומסים, זאת לא בעיה ;-).&lt;/p&gt;

&lt;p&gt;האמת היא, אני שמח ש־CppCMS לאט־לאט צובר תאוצה והקהילה נבנית מסביבו.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/241"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>נפלאות ה־Comet בשרתי האינטרנט המודרניים...</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/236</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/236</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;כפי שפרסמתי לאחרונה, אני עובד על תמיכה ב־Comet או HTTP Push ב־CppCMS. כאשר הכוונה לאפשרות שרת האינטרנט ליידע את הלקוח על אירוע חדש, למשל: &quot;הגיעה מסר מידי חדש, או מחיר המניה השתנה&quot; &amp;ndash; למעשה להעביר אירועים ללקוח בזמן אמת.&lt;/p&gt;

&lt;p&gt;כיצד התהליך מתבצע? הלקוח פונה לשרת עם בקשת HTTP לקבל עדכונים; והשרת, במקום לענות באופן מידי ממתין ומחזיק את הקשר פתוח. כאשר מגיע האירוע החדש, כמו עדכון מחיר המניה או הודעה חדש מחבר, התשובה נשלחת והתליך חוזר.&lt;/p&gt;

&lt;p&gt;לא מי יודע מה מסובך כמובן זה גם תלוי ביכולת השרת להחזיק קשר HTTP פתוח למשך הרבה זמן.&lt;/p&gt;

&lt;p&gt;אבל, מה קורה אם הלקוח סוגר את הקשר לפני שהוא מקבל תשובה? בבקשות HTTP רגילות זה אירוע נדיר והיישום בצד השרת יכול בקלות &quot;להתעלם&quot; ממצב כזה. ביישומי Comet זה שונה: מספיק שמישהו נכנס לאתר שמחכה לדף שמבצע בקשה מסוג זה ויוצא ממנו, הקשר לקבלת עדכונים ייסגר.&lt;/p&gt;

&lt;p&gt;אבל מה יישום Comet אמור לעשות? תחשבו שמספר הבקשות HTTP שנסגרות לפני דיווח על אירוע מסוים יכול להיות הרבה יותר גדול ממספר התגובות הרלוונטיות בפועל. אז יישום תקין צריך לזהות ניתוקים כאלה, ולמחוק אותם מ&quot;רשימת התפוצה שלו&quot;.&lt;/p&gt;

&lt;p&gt;אבל מה? יישום ה־Comet בד&quot;כ לא מדבר ישירות עם הלקוח בעזרת HTTP אלא מדבר עם שרת web בעזרת פרוטוקול סטנדרטי כמו FastCGI או SCGI. לכן, תפקידו של השרת הוא לדווח ליישום על כך שהלקוח סגר את הקשר. למעשה פרוטוקול FastCGI מגדיר במפורש דרך להפסיק בקשה מסויימת ע&quot;י סגירת ה־socket או שליחת בקשה מיוחדת &quot;Abord Request&quot;, כנ&quot;ל ניתן לבצע בעזרת scgi ע&quot;י ניתוק ה־socket.&lt;/p&gt;

&lt;p&gt;פשוט? כן. האם זה קורה בפועל? לא ממש.&lt;/p&gt;

&lt;p&gt;אחרי שמימשתי מערכת ניתוק הקשר ובדקתי אותה על שרת http פנימי, החלטתי לבדוק את ההתנהגות של שרתי web אמתיים: Lighttpd,‏ Nginx ו־Apache2. מה שגיליתי היה ממש לא נעים: למעט Nginx אף שרת לא מדווח על ניתוק הקשר לא מעל FastCGI ולא מעל SCGI.&lt;/p&gt;

&lt;p&gt;לצורך דוגמה פשוטה, אני יצרתי חיבור ומיד סגרתי אותו, כך עשיתי עשר פעם.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nginx הוא היחיד דיווח על כך ליישום FastCGI באופן מידי ואפשר לי לטפל בלקוח ש&quot;נעלם&quot;&lt;/li&gt;
&lt;li&gt;Apache דיווח רק אחרי timeout ארוך של כדקה הן ב־FastCGI והן ב־SCGI.‏&lt;/li&gt;
&lt;li&gt;lighttpd בכלל שכח מזה והחזיק קשרים פתוחים כל הזמן &amp;ndash; יותר מזה בירידה, הוא התלונן על כך שהיישום שלי &quot;נעלם&quot; ולא ענה לבקשת השרת (שאין לו כבר למי להעביר אותה).&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;בקיצור&amp;hellip; זה היה מאוד מאכזב. אני הייתי מוכן לקבל את זה מ־Apache שידוע כשרת שלא נועד לטפל בהרבה קשרים פתוחים, אבל Lighty? &lt;a href=&quot;http://redmine.lighttpd.net/issues/2058&quot;&gt;פתחתי על זה באג&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;מזל שמימשתי שרת HTTP פנימי בעצמי.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/236"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>CppCMS פוגש Comet</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/234</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/234</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;פרסמתי &lt;a href=&quot;http://art-blog.no-ip.info/cppcms/blog/post/47&quot;&gt;כאן&lt;/a&gt; כתבה על טכנולוגיית &lt;a href=&quot;http://en.wikipedia.org/wiki/Comet_(programming)&quot;&gt;Comet&lt;/a&gt; (או Server Push) הנתמכת בגרסה הבאה של CppCMS.&lt;/p&gt;

&lt;p&gt;הצגתי כדוגמה קלאסית: מימוש של יישום Chat, בצד הלקוח ובצד השרת, בכ־50 שורות קוד בכל אחד מהם, עם שימוש ב־XHR Long Polling.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/234"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>חדשות CppCMS...</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/233</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/233</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;לאחרונה אני עובד בענף ה־refactoring של CppCMS ומבצע שינויים גדולים. אביא כאן סקירה קצרה של השינוי שכבר נמצאות בגרסה ניסיונית:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;אחד השינויים הגדולים והחשובים זה להיפתר מכל התלויות המיותרות או מגבילות.
אחרי שכל השינויים יסתיימו, התלויות היחידות שיישארו הן גרסה עדכנית של Boost
ו־Python לצורכי הפיתוח בלבד.&lt;/p&gt;

&lt;p&gt;חלק מהספריות הוסרו בגלל אי תאימות לדרישות החדשות:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;libfcgi ירד כי ה־API שלו לא מאפשר גישה א־סינכרונית, במקומו, מימשתי את
הפרוטוקול בעצמי על בסיס Boost.Asio.&lt;/li&gt;
&lt;li&gt;ספריית CgiCC ירדה בגלל האיכות הירודה שלה וחוסר יכולת סבירה לתקשר עם המפתח
של אותה הספרייה הבעייתית.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;כך שבגרסה הבאה, תהיה לי אפשרות להכין debים ו־rpmים בקלות&amp;hellip;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;עד היום, פיתוח מול CppCMS דרש שימוש בשרת חיצוני, למרות שיש לי סקריפט
הפעלה אוטומטית של lighttpd, ‏nginx ו־Apache, עכשיו מימשתי שרתי HTTP פנימי פשוט
שמקל על הפיתוח ובנוסף, עתיד יקל על שיבוץ התשתית ביישומים שדורשים ממשק
web ובמערכות משובצות מחשב.&lt;/p&gt;

&lt;p&gt;כך שכיום, CppCMS החדש תומך בשלושה ממשקים FastCGI,‏ SCGI ו־HTTP.‏&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;התווספה תמיכה מסודרת בלוקליזציה עם שימוש ב־std::locale, כך שתצוגת התאריכים,
מספרים, מחרוזות וכד' יתבצעו בהתאם למקובל באותה שפה.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;בגלל שימוש מקיף ב־Boost &amp;ndash; ספריה בלתי תלויה בפלטפורמה, אני סוף־סוף אוכל
להכריז על Windows כפלטפורמה שנתמכת באופן (חצי) רשמי.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;יש עוד הרבה עבודת אינטגרציה של רכיבים שיצאו באופן זמני, כמו ניהול sessions, שינויים ב־cache, שכתוב תמיכה בטפסים ועוד.&lt;/p&gt;

&lt;p&gt;אבל לאט־לאט ההשפעה של השינויים הארכיטקטוניים מתחילים להתבהר.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/233"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>לתמוך או לא לתמוך, זאת השאלה (ב־Win32)?</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/229</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/229</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;כפי שפרסמתי ב&lt;a href=&quot;http://art-blog.no-ip.info/cppcms/blog/post/44&quot;&gt;עבר&lt;/a&gt;, אני עובד על שינויים בפנימיים עמוקים ב־CppCMS שבין השאר יאפשרו:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;תמיכה באירועי צד השרת או Comet.&lt;/li&gt;
&lt;li&gt;תמיכה בבינאום ולורקליזציה.&lt;/li&gt;
&lt;li&gt;תמיכה ב־ABI לאחור.&lt;/li&gt;
&lt;li&gt;ניקיון יסודי של קוד תוך הקטנה משמעותית בשימוש בספריות צד ג'.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;בגלל שאני עושה שינויים כל־כך מהותיים, חשבתי, אולי להוסיף גם תמיכה בעוד פלטפורמה בנוסף לתמיכה ב־Linux,‏ FreeBSD,‏ Solaris ו־Cygwin&amp;hellip; להוסיף תמיכה ב־Windows.&lt;/p&gt;

&lt;p&gt;זה באמת, לא אמור להיות עד כדי כך מסובך, יצא לי כבר פעם לבנות CppCMS עבור Mingw (כמובן נאלצתי לוותר על חלק גדול מהמודולים).&lt;/p&gt;

&lt;p&gt;אבל, בין לבנות משהו שרץ עד לפלטפורמת פיתוח אמתית יש תהום.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/229"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>יותר מחשבים יותר ביצועים?</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/212</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/212</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;כשבניתי CppCMS תמיד לקחתי בחשבון ששרת יחיד לא תמיד יוכל להבטיח ביצועים מספיק טובים של שירות web עמוס. לכן, תמיד בתכנון המערכת, לקחתי בחשבון את האפשרויות של scale up.&lt;/p&gt;

&lt;p&gt;בהחלט, הרבה יותר קל לתכנן מערכת שרצה על מחשב בודד עם זכרון משותף עם cache נגיש בצורה יעילה ועוד. אבל, במציאות זה לא יכול להיות. מערכות שמסוגלות לעמוד בעומסים גובהים הן בסופו של דבר חייבות להיות מוכנות לפעול בצורה מבוזרת.&lt;/p&gt;

&lt;p&gt;לאחרונה הצלחתי להשיג גישה זמנית לרשת מחשבים חזקים במיוחד: Intel עם 4 ליבות שרצים ב־2.4GHz ו־4GB של זכרון. כך יכולתי לבדוק את מנגנון ה־cache המבוזר בעובד מעל TCP/IP ולהבין כמה אני מפסיק כתוצאה מביזור:&lt;/p&gt;

&lt;pre name=&quot;code&quot; class=&quot;cpp&quot; &gt;#   Local  Distributed
1   5,500   5,500
2  11,500   9,500
3  15,200  13,500
&lt;/pre&gt;

&lt;p&gt;הטבלה מציגה את מספר הדפים בשניה שהמערכת wiki שבניתי מסוגלת לספק תחת הנחה של פגיעה 100% ב־cache (בגלל אילוצי הגישה לא יכולתי לשנות את הפרמטר). מספר השרתים הוא בין 1 ל־3 ומנגנוני ה־cache הם: cache המקומי הלא־מסונכון ו־cache המבוזר המסונכרן באופן מלא.&lt;/p&gt;

&lt;p&gt;אפשר לראות, מחשב בודד מסוגל לייצר כ5 וחצי אלפי עמודים בשניה והמספר הזה הולך וגדל בצורה קרובה ללינארית עם שימוש ב־cache מקומי (כצפוי). שימוש ב־cache המבוזר מעל TCP/IP מקטין את מהירות הכוללת של המערכת אך עדיין שיפור ביצועים נשאר קרוב ללינארי.&lt;/p&gt;

&lt;p&gt;יש לציין שהצלחתי למלא כמחצית מרוחב הפס של רשת 1GBit.&lt;/p&gt;

&lt;p&gt;כמובן הניסוי הוא די מלאכותי, אבל הוא נועד בעיקר לבדוק עד כמה מנגון ה־cache המבוזר הוא יעיל. אני לא מביא לכאן פרטים מדויקים של ניסוי מפני שהוא היה יותר ניסוי פנימי, אבל בסה&quot;כ הוא נותן הבנה של סדרי הגודל של מה שהמערכת מסוגלת לספק.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/212"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>גם לחלשים מגיע... או CppCMS במערכות משובצות מחשב.</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/209</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/209</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;בעיות ביצועים של מערכות web יכולות להופיע לא רק עקב עומסים כבדים אלא גם בגלל &lt;a href=&quot;http://stackoverflow.com/questions/480233&quot;&gt;מערכות מוגבלות&lt;/a&gt;. פה שפות מקומפלות כמו C/C++/Pascal‎ יכולות לתת מענה מצוין. אבל כרגיל חסרים כלים: Klone זה לא הרבה יותר ממשהו דמוי PHP ברק C.‏‏ Wt הוא בנוי כמו GUI.‏ Pascal? מישהו בכלל זוכר שפה כזו ;).&lt;/p&gt;

&lt;p&gt;לכן CppCMS יתמוך גם בצרכים של מערכות משובצות מחשב והן:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;צמצום תלויות למינימום.&lt;/li&gt;
&lt;li&gt;עבודה מהירה.&lt;/li&gt;
&lt;li&gt;גודל קובץ ריצה מינימלי.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;לכן, לקחתי CppCMS ועשיתי לו ניתוח &amp;mdash; זרקתי את כל מנגנוני ה־cache, ביטלתי דחיסת zlib ובכל צמצמתי תלות ב־boost::iostreams, העפתי מודי עבודה מיותרים ב־embedded.&lt;/p&gt;

&lt;p&gt;בנוסף, אם המפתח רוצה לבנות גרסת cgi אז בכלל, העפתי את כל הקוד שמטפל ב־thread-pool וכמובן גם בפרוטוקולים כמו scgi/fcgi. ובכן, התכנה הצטמצמה לגודל של 500Kb בלבד. שזה כ־10%&amp;ndash;20% מגודל משערך PHP אופייני.&lt;/p&gt;

&lt;p&gt;ובכך שוחררה גרסת CppCMS 0.0.4 שכוללת תמיכה במערכות משובצות מחשב.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/209"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>זקוק לעזרה מקהילה או... למי יש ARM פנוי?</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/208</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/208</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;בימים אחרונים אני מנסה לתת ל־CppCMS עוד נישה פוטנציאלית והיא מערכות משובצות מחשב. בד&quot;כ שפות כמו php ו־python &lt;a href=&quot;http://stackoverflow.com/questions/480233&quot;&gt;כבדות&lt;/a&gt; עבור מערכות כאלה. פה בדיוק סביבת פיתוח נוחה יכולה לעזור.&lt;/p&gt;

&lt;p&gt;בנוסף, קיימים מספר פתרונות דומים בשוק והם Wt ו־Klone. אבל, Klone לא נותן כלים 
ש־CppCMS נותן ו־Wt בנוי בצורה שלטעמי שגויה &amp;ndash; גישה של מפתח GUI ולא web.&lt;/p&gt;

&lt;p&gt;אז, עשיתי כמה שיפוצים ב־CppCMS כך שהוא יוכל לתמוך גם בסביבות משובצות מחשב, ביניהם: ביטול רכיבים מיותרים, למשל, אם בונים CGI טהור, אז אין מרכיב s/f-cgi, ניהול threads וכד'. הוצאה מערכת cache ודחיסה עבור יישומי כאלה כי בד&quot;כ זיכרון הוא יקר ועוד.&lt;/p&gt;

&lt;p&gt;לאחר מספר אופטימיזציות, הצלחתי להגיע ליישום בגודל של כ־550K שזה כמעט חצי ממה ש־&lt;a href=&quot;http://www.webtoolkit.eu/wt/wiki/index.php/Wt_embedded&quot;&gt;Wt  הצליחו להגיע&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;מה נותר? לבדוק את היישום על פלטפורמת ARM אמתית. כיום, כל הבדיקות נעשו בעזרת qemu-arm. לכן, אני זקוק לעזרתכם.&lt;/p&gt;

&lt;h3&gt; מה מדרש?&lt;/h3&gt;

&lt;p&gt;כל מי שיש לו גישה ל־ARM עם לינוקס מותקן עליו, אנא עִזרו:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;הורידו את &lt;a href=&quot;http://art-blog.no-ip.info/files/test_arm_embed.tar.gz&quot;&gt;הקובץ הבא&lt;/a&gt;.‏&lt;/li&gt;
&lt;li&gt;העבירו אותו לסביבת ARM שלכם ותפרסו.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;תנסו להריץ:&lt;/p&gt;

&lt;pre name=&quot;code&quot; class=&quot;cpp&quot; &gt;‎./hello.dynamic -c config.txt
&lt;/pre&gt;

&lt;p&gt;זהו קובץ ריצה שמקומפל דינאמית רק עם ספריות בסיסיות כמו libstdc++‎. אם הוא לא מצליח בגלל העדר ספריות תנסו:&lt;/p&gt;

&lt;pre name=&quot;code&quot; class=&quot;cpp&quot; &gt;‎./hello.static -c config.txt
&lt;/pre&gt;

בכל מקרה, אמור להתקבל פלט של Headers של cgi ותוכן HTML עצמו.&lt;/li&gt;
&lt;li&gt;אם יש אפשרות, אנא בדקו את זמן הריצה עם time.‏&lt;/li&gt;
&lt;li&gt;אם במקרה, יש לכם שרת web בסביבה שלכם אני אשמח אם תוכלו להריץ את ה־cgi שבספריה (רק שעדכנו את השם של קובץ ריצה לזה שהצליח (סטטי או דינאמי) בהתאם.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;אם הכל יעבוד ואם תהיה נכונות מצדכם, אני אשמח להכין סדרה של סקריפטים ובדיקות מול ARM כדי לוודא שכל המרכיבים הנדרשים עובדים כמו sessions, תבניות ועוד.&lt;/p&gt;

&lt;p&gt;תודה רבה, מראש!&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/208"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>אתר המראה עבור תיעוד של CppCMS.</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/204</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/204</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;לאחרונה התחלתי לקבל תלונות רבות על זמינות נמוכה של אתר הזה, בפרט ה&lt;a href=&quot;http://art-blog.no-ip.info/wikipp&quot;&gt;תיעוד&lt;/a&gt; הוא היה כמעט ולא זמין מחוץ לישראל (כאשר בארץ הוא טס).&lt;/p&gt;

&lt;p&gt;המצב מאוד מדאיג, כי כל מי שרוצה להתשמש בפרויקט מחוץ לארץ, עלול פשוט להישבר בגלל המתנה ארוכה לתיעוד, שלא לדבר על העובדה שזה &quot;לא־ראוי&quot; עבור מערכת שאמורה להבטיח ביצועים גובהים.&lt;/p&gt;

&lt;p&gt;לכן, עד שאסדר את הבעיות מול ספקית האינטרנט שלי (012), הכנתי תסריט קטן שיוצר עותק ה־wiki בעזרת wget ומעלה אותו לאתר Sourceforge בעזרת rsync. הסקריפט הזה ירוץ כל 6 שעות ויבטיח עדכניות סבירה של אתר המראה; ולמעשה יבטיח זמינות טובה של תיעוד מחוץ לארץ.&lt;/p&gt;

&lt;p&gt;לכן, אבקש, כל מי שרוצה לקשר לפרויקט הזה שיפנה ל־&lt;a href=&quot;http://cppcms.sourceforge.net&quot;&gt;cppcms.sourceforge.net‏&lt;/a&gt; במקום הויקי הנוכחי ב־art-blog.no-ip.info.&lt;/p&gt;

			&lt;p&gt;
			&lt;a href="/newpress/blog/post/204"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
		<item>
			<title>שוחררה CppCMS 0.0.2!</title>
			<link>http://art-blog.no-ip.info/newpress/blog/post/199</link>
			<guid>http://art-blog.no-ip.info/newpress/blog/post/199</guid>
			<description>
			&lt;div style=&quot;direction:rtl&quot;&gt;
			&lt;p&gt;אחרי תקופה ארוכה של פיתוח מאומץ שוחררה גרסה 0.0.2 של CppCMS &amp;ndash; תשתית פיתוח יישומי אינטרנט ב־C++‎.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=209965&quot;&gt;הורדה&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://art-blog.no-ip.info/wikipp&quot;&gt;תיעוד&lt;/a&gt; &amp;ndash; עדיין לא הושלם ב־100%.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://art-blog.no-ip.info/wikipp/en/page/main#inst&quot;&gt;הוראות התקנה&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;הגרסה כוללת&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CppCMS תשתית הפיתוח.&lt;/li&gt;
&lt;li&gt;DbiXX &amp;mdash; ספריה לעבודה מול בסיסי נתונים שונים.&lt;/li&gt;
&lt;li&gt;WikiPP מערכת ויקי מובססת CppCMS.‏&lt;/li&gt;
&lt;li&gt;Examples &amp;mdash; דוגמאות שונות כחלק מתיעוד של CppCMS.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt; שינויים במדיניות&lt;/h3&gt;

&lt;p&gt;ישנם מספר שינויים חשובים במדיניות שחרור הגרסאות:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;גרסאות בטא ציבוריות יהיו זמינות רק דרך svn, ענף פיתוח ראשי trunk.&lt;/li&gt;
&lt;li&gt;קצב שחרור הגרסאות יגדל. אמנע משמירת השינויים ב־trunk בלבד. &lt;/li&gt;
&lt;li&gt;רוב הארכיטקטורה של CppCMS התייצבה, אם כי, API עדיין נתון לשינוי. עם זאת, ייצוב API ותאימות לאחרות הן מטרות חשובות של פיתוח עתידי.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt; השינויים העיקריים&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;מערכת תבניות חדשה&lt;/strong&gt; מבוססת על טיפוסים סטטיים. היא נשענת על קימפול התבניות לקוד המכונה וטעינתן כ־shared objects.&lt;/li&gt;
&lt;li&gt;מערכת תבניות הישנה, מבוססת על טיפוסים דינאמיים לא תיתמך יותר.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;השיפורים השונים במערכת התבניות כוללים בין השאר:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ירושת תבניות בסגנון Django.‏&lt;/li&gt;
&lt;li&gt;הרחבת תבניות ע&quot;י השתלת קוד C++‎ לתוכן.&lt;/li&gt;
&lt;li&gt;תבניות הן חלק מהתשתית ולא מהוות ספריה נפרדת.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;פותחה מערכת חדשה ל&lt;strong&gt;יצירה ובדיקה של טפסים&lt;/strong&gt;. היא משולבת עם מערכת התבניות.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;פיתחה &lt;strong&gt;מערכת ניהול sessions&lt;/strong&gt; חדשה.&lt;/li&gt;
&lt;li&gt;שיפורים ב־API של מערכת caching לתמיכה יותר טובה ב־cache העובד ללא טריגרים.&lt;/li&gt;
&lt;li&gt;התיעוד של המערכת הועבר ל־&lt;a href=&quot;http://art-blog.no-ip.info/wikipp/en/page/main&quot;&gt;WikiPP‏&lt;/a&gt; מערכת ויקי שפותחה על בסיס של CppCMS.&lt;/li&gt;
&lt;li&gt;נתמכות מערכות הפעלה חדשות: &lt;strong&gt;FreeBSD&lt;/strong&gt; ו־&lt;strong&gt;OpenSolaris&lt;/strong&gt;, בנוסף ל־Linux ו־Cygwin.&lt;/li&gt;
&lt;li&gt;מערכת &lt;strong&gt;ויקי WikiPP&lt;/strong&gt; שוחררה תחת רישיון GPLv3.&lt;/li&gt;
&lt;/ul&gt;


			&lt;p&gt;
			&lt;a href="/newpress/blog/post/199"&gt;המשך...&lt;/a&gt;
			&lt;/p&gt;
			&lt;/div&gt;
			</description>
		</item>
		
	
</channel>
</rss>
