<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>‫try, catch, write - Ron Klein‬</title>	
	<link>http://heblog.ronklein.co.il</link>
	<description>‫הבלוג של רון קליין: תכנות, OOP, טכנולוגיה, Design Patterns, log4net ועוד עניינים‬</description>	<lastBuildDate>Wed, 28 Mar 2012 18:20:55 +0000</lastBuildDate>
	<language>he</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/try-catch-write-Ron-Klein" /><feedburner:info uri="try-catch-write-ron-klein" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>‫Tip: Resharper and Unit Testing Settings‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/p6o9MTehxGQ/</link>
		<comments>http://heblog.ronklein.co.il/2012/03/tip-resharper-and-unit-testing-settings/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 18:20:55 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[Resharper]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[Unit-Testing]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=947</guid>
		<description><![CDATA[&#8235;נניח שיש לכם Unit Testing וגם מותקן לכם Resharper ב Visual Studio. נניח גם שהטסטים שלכם מתבססים על קיומם של קבצים מסויימים. ואז אתם מנסים להריץ את הטסטים האלה דרך הרישרפר, מצפים ל Pass ומקבלים Fail.. למה? תמונה אחת שווה אלף מילים: יש איזו הגדרה נסתרת ברישרפר (לפחות בגירסה 5, לא בדקתי את 6), שיוצרת [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>נניח שיש לכם Unit Testing וגם מותקן לכם Resharper ב Visual Studio.</p>
<p>נניח גם שהטסטים שלכם מתבססים על קיומם של קבצים מסויימים.</p>
<p>ואז אתם מנסים להריץ את הטסטים האלה דרך הרישרפר, מצפים ל Pass ומקבלים Fail.. למה?</p>
<p>תמונה אחת שווה אלף מילים:</p>
<div id="attachment_948" class="wp-caption alignnone" style="width: 516px"><a href="http://heblog.ronklein.co.il/wp-content/uploads/2012/03/resharper-unit-testing.png"><img class="size-full wp-image-948 " title="הגדרות Resharper" src="http://heblog.ronklein.co.il/wp-content/uploads/2012/03/resharper-unit-testing.png" alt="" width="506" height="517" /></a><p class="wp-caption-text">להסיר את הסימון</p></div>
<p>יש איזו הגדרה נסתרת ברישרפר (לפחות בגירסה 5, לא בדקתי את 6), שיוצרת shadow copy במסגרת של unit-testing. אם תסירו את מסימון מההגדרה הזו, אני מעריך שהתסכול יהיה נמוך יותר אם הטסט לא עובר.</p>
<p>בקיצור, תסירו את הסימון ותאריכו ימים <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span class="ron_english">Happy Testing!</span></p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/p6o9MTehxGQ" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2012/03/tip-resharper-and-unit-testing-settings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2012/03/tip-resharper-and-unit-testing-settings/</feedburner:origLink></item>
		<item>
		<title>‫BitTorrent is only a Protocol‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/s8OfQjP-MQc/</link>
		<comments>http://heblog.ronklein.co.il/2012/02/bittorrent-is-only-a-protocol/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 20:48:18 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[טכנולוגיה]]></category>
		<category><![CDATA[BitTorrent]]></category>
		<category><![CDATA[Protocol]]></category>
		<category><![CDATA[stackoverflow.com]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=937</guid>
		<description><![CDATA[&#8235;פירסמו היום ב Ynet כתבה שעוסקת במספר ספקיות אינטרנט בישראל, ובכותרת כתבו כך: שלוש ספקיות האינטרנט הגדולות מאטות את הגלישה למי שמשתמש בשירותי שיתוף קבצים. ספציפית, הכוונה היא להאטה של מהירות הגלישה למי שמשתמש בפרוטוקול שנקרא ביטורנט כדי להוריד קבצים. קצת מעצבן, לא?! העניין הוא שקשה לבדוק ועוד יותר קשה להוכיח שזו אכן ההתנהגות של [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p><a title="כתבה ב Ynet" href="http://www.ynet.co.il/articles/0,7340,L-4185956,00.html">פירסמו היום ב Ynet</a> כתבה שעוסקת במספר ספקיות אינטרנט בישראל, ובכותרת כתבו כך: שלוש ספקיות האינטרנט הגדולות מאטות את הגלישה למי שמשתמש בשירותי שיתוף קבצים.</p>
<p>ספציפית, הכוונה היא להאטה של מהירות הגלישה למי שמשתמש בפרוטוקול שנקרא <a href="http://he.wikipedia.org/wiki/%D7%91%D7%99%D7%98%D7%95%D7%A8%D7%A0%D7%98">ביטורנט</a> כדי להוריד קבצים.</p>
<p>קצת מעצבן, לא?! העניין הוא שקשה לבדוק ועוד יותר קשה להוכיח שזו אכן ההתנהגות של הספקיות. ולראיה, בכתבה מצוטט עו&quot;ד קלינגר: &quot;זה בעייתי שתובע יאמר לבית המשפט כי הוא מוריד קבצים לא חוקיים ונפגע בגלל זה. אולי אם יימצא, לשם הדוגמה, אמן שמפיץ מוזיקה שלו בביטורנט, בחינם, והוא יטען שפוגעים בו &#8211; אז יכולה להתגבש תביעה&quot;.</p>
<p>אז בבקשה, עו&quot;ד קלינגר, אמנם לא אמן שעונה לקריטריון המדויק, אבל אולי בכל זאת: מדי פעם האתר StackExchange, שהוא האתר הגלובלי שתחתיו רצים אתרים כמו <a href="http://stackoverflow.com/">stackoverflow</a>, <a href="http://serverfault.com/">serverfault</a>, <a href="http://superuser.com/">superuser</a>, מוציא את המפלצת שנקראת:</p>
<p><a href="http://www.clearbits.net/creators/146-stack-exchange-data-dump">Stack Exchange Data Dump</a></p>
<p>שזה, באופן כללי, הרבה מאוד נתונים שכוללים את מגוון השאלות והתשובות באתרים הנ&quot;ל.</p>
<p>זה חינם, כל עוד שומרים על תנאי הרשיון. וזה שוקל כמה ג'יגות. וזה מופץ (גם) באמצעות BitTorrent. לדוגמה, <a href="http://www.clearbits.net/torrents/1881-dec-2011">הקובץ של דצמבר 2011</a> שוקל כמעט 5 ג'יגה.</p>
<p>הנה, עו&quot;ד קלינגר, יש לך נקודת התחלה.</p>
<p>אתם יודעים מה, אני מוכן להשתתף בניסוי שכזה: להתקין תוכנה שמורידה בפרוטוקול ביטורנט, התקנה נקיה לגמרי, ולהוריד קבצים שכאלה. לא סיפור גדול.<br />
השאלה היא, כמובן, אם יש מי שיודע איך למדוד את התנועה ולהסיק את המסקנות הנדרשות.</p>
<p>בכל מקרה, מה שרציתי לכתוב זה ש<strong>ביטורנט זה רק פרוטוקול</strong>.<br />
כמו ש SMTP זה פרוטוקול לשליחת מיילים.<br />
כמו ש POP3 זה פרוטוקול לקבלת מיילים.</p>
<p>ביטורנט זה פרוטוקול להעברת קבצים. זהו. התכנים עצמם יכולים להיות חוקיים לחלוטין, או לחלוטין לא חוקיים. השאלה היא אם צריך או לא צריך לבצע סינון לקבצים האלה.</p>
<p>אבל חבר'ה, ביטורנט זה רק פרוטוקול. עזבו אותו במנוחה <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/s8OfQjP-MQc" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2012/02/bittorrent-is-only-a-protocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2012/02/bittorrent-is-only-a-protocol/</feedburner:origLink></item>
		<item>
		<title>‫Tapuz Meetup at Sela‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/OwtUIDpwQcA/</link>
		<comments>http://heblog.ronklein.co.il/2012/01/tapuz-meetup-at-sela/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 06:22:14 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Meetup]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=928</guid>
		<description><![CDATA[&#8235;מדי פעם אנחנו יוזמים מפגש פורום. הפורום הוא כמובן פורום תכנות דוט נט בתפוז, המקום הכי פעיל למתכנתי דוט נט בעברית כיום. ו&#34;אנחנו&#34; זה משתתפי הפורום, או לפחות ה&#34;גרעין הקשה&#34; ביום שלישי, ה 24.1.2012, נערך מפגש פורום שכזה. מכללת סלע נתנה את החסות, שזה אומר מקום, נשנושים ופיצות (תכלס, אני שם בשביל הפיצות). נתחיל בתודה [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>מדי פעם אנחנו יוזמים מפגש פורום.</p>
<p>הפורום הוא כמובן <a href="http://www.tapuz.co.il/forums2008/forumPage.aspx?forumId=831">פורום תכנות דוט נט בתפוז</a>, המקום הכי פעיל למתכנתי דוט נט בעברית כיום.</p>
<p>ו&quot;אנחנו&quot; זה משתתפי הפורום, או לפחות ה&quot;גרעין הקשה&quot; <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>ביום שלישי, ה 24.1.2012, נערך מפגש פורום שכזה. מכללת סלע נתנה את החסות, שזה אומר מקום, נשנושים ופיצות (תכלס, אני שם בשביל הפיצות).</p>
<p>נתחיל בתודה גדולה ל<a href="http://blogs.microsoft.co.il/blogs/shlomo/">שלמה גולדברג</a>, הידוע גם בכינויו הרב דוט נט, או shlomo500 בפורום, שהיטיב לארגן את כל הסיפור.</p>
<p>נמשיך בתודה למכללת סלע, שכאמור, נתנה את החסות.</p>
<p>וכמובן, תודה למרצים: <a href="http://blogs.microsoft.co.il/blogs/idof/">עידו פלטו</a>, שהרצה על Fiddler, ו<a href="http://blogs.microsoft.co.il/blogs/gadim/">גדי מאיר</a>, שהרצה על Production Debugging. שתי ההרצאות היו מעולות.</p>
<p>הסשן שלי היה האחרון, ולכן היה יחסית קצר. יותר בכיוון של חומר למחשבה מאשר הרצאה טכנית.</p>
<p>הנושא שדברתי עליו היה מעבר מקוד פרוצדורלי ל Object Oriented.<br />לשמחתי האנשים שרדו יפה ולא נרדמו <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>ההרצאות הוקלטו והן זמינות ברשת (שוב תודה למכללת סלע!), <a href="http://scc.sela.co.il/SCC/Pages/ShowLecture/ShowLecture.aspx?lectureId=644">ההרצאה שלי</a> לקחה 28 דקות.</p>
<p>תוכלו להוריד את <a href="http://heblog.ronklein.co.il/wp-content/uploads/2012/01/proc-to-oop.zip">דוגמאות הקוד</a> ואת <a title="המצגת בפורמט pptx" href="http://heblog.ronklein.co.il/wp-content/uploads/2012/01/Code-from-Procedural-to-Object-Oriented.pptx.zip">המצגת עצמה</a>, שהמרתי גם ל slide-share:</p>
<div style="width:425px" id="__ss_11287106"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/kleinron/code-from-procedural-to-object-oriented" title="Code: from Procedural to Object Oriented">Code: from Procedural to Object Oriented</a></strong><object id="__sse11287106" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=code-fromproceduraltoobjectoriented-120126232458-phpapp02&#038;stripped_title=code-from-procedural-to-object-oriented&#038;userName=kleinron" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/><embed name="__sse11287106" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=code-fromproceduraltoobjectoriented-120126232458-phpapp02&#038;stripped_title=code-from-procedural-to-object-oriented&#038;userName=kleinron" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/kleinron">kleinron</a>.</div>
</div>
<p>האווירה במפגש היתה ממש טובה. היה נחמד לראות את האנשים שמאחורי הכינויים. חלק כבר הכרתי ממפגשים קודמים, וחלק רק מהמפגש האחרון.</p>
<p>בקיצור, Good Vibes, ואפילו בלי אלכוהול! נקווה שיהיו עוד מפגשים כאלה.</p>
<p>צ'ירס!</p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/OwtUIDpwQcA" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2012/01/tapuz-meetup-at-sela/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2012/01/tapuz-meetup-at-sela/</feedburner:origLink></item>
		<item>
		<title>‫Web Developer position at WinBuyer‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/fldxOEb9xKM/</link>
		<comments>http://heblog.ronklein.co.il/2012/01/web-developer-position-at-winbuyer/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 10:02:14 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[job]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=922</guid>
		<description><![CDATA[&#8235;לחברת WinBuyer דרוש/ה מתכנת/ת Web חברת WinBuyer היא סטארט אפ בשלב מתקדם, והמוצרים שלה פונים לשוק ה Retailers. החברה ממוקמת בתל אביב. הערה: המודעה כתובה בלשון נקבה, אבל פונה לגברים ולנשים כאחד. דרישות מקצועיות לפחות שנתיים נסיון ב ASP.NET, עדיפות ל MVC לפחות שנתיים נסיון וידע ב HTML, CSS, JavaScript לפחות שנה נסיון בעבודה מול [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>לחברת WinBuyer דרוש/ה מתכנת/ת Web</p>
<p>חברת WinBuyer היא סטארט אפ בשלב מתקדם, והמוצרים שלה פונים לשוק ה Retailers. החברה ממוקמת בתל אביב.</p>
<p>הערה: המודעה כתובה בלשון נקבה, אבל פונה לגברים ולנשים כאחד.</p>
<p><strong>דרישות מקצועיות</strong><br />
לפחות שנתיים נסיון ב ASP.NET, עדיפות ל MVC<br />
לפחות שנתיים נסיון וידע ב HTML, CSS, JavaScript<br />
לפחות שנה נסיון בעבודה מול MS SQL Server<br />
חובה נסיון בתכנון (design) לפני כתיבת קוד<br />
יתרון משמעותי: נסיון ב Multi Threading<br />
יתרונות אחרים: נסיון ב jQuery, הבנה אמיתית של OOP, רקע ב WCF ו/או HTTP, נסיון ב Big Data, נסיון ב SilverLight, השכלה אקדמית.</p>
<p><strong>הגדרת התפקיד</strong><br />
מתכנתת בסביבת <span class="ron_english">ASP.NET + C#</span>, עם הבנה טובה ב Web, לעבודה בשני הצדדים: Client+Server.</p>
<p><strong>ברמה האישית</strong><br />
מישהי שרוצה להתפתח מקצועית, שרוצה להיות חלק מצוות, ועם תקשורת טובה. יוזמה אישית מתקבלת בברכה.</p>
<p><span style="font-size: medium;"><strong><span style="color: #333399;">מתאים לך? שלחי קורות חיים למייל jobs_rd2012a@winbuyer.com</span></strong></span><br />
נא <strong>לא</strong> לציין בקורות החיים: תאריך לידה, מצב משפחתי, שירות צבאי וכד'. אנו מעוניינים לקבל קורות חיים מקצועיים בלבד.</p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/fldxOEb9xKM" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2012/01/web-developer-position-at-winbuyer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2012/01/web-developer-position-at-winbuyer/</feedburner:origLink></item>
		<item>
		<title>‫Patriq – MSMQ Routing Service‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/ZcdJVnQi_bQ/</link>
		<comments>http://heblog.ronklein.co.il/2012/01/patriq-msmq-routing-service/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 19:45:52 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[MSMQ]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[Patriq]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=915</guid>
		<description><![CDATA[&#8235;ניר (מתי תפתח כבר בלוג) ואני מפתחים Pet Project בשם Patriq ב CodePlex. פטריק הוא סוג של Router אפליקטיבי במסגרת MSMQ. הקטע המאגניב הוא שיש שימוש ב IronPython כדי ליצור את חוקי ה Routing. כרגע הפרויקט בשלב ממש התחלתי, אבל בסך הכל &#8211; עובד! http://patriq.codeplex.com&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>ניר (מתי תפתח כבר בלוג) ואני מפתחים <a href="http://patriq.codeplex.com">Pet Project בשם Patriq</a> ב CodePlex.</p>
<p>פטריק הוא סוג של Router אפליקטיבי במסגרת MSMQ.</p>
<p>הקטע המאגניב הוא שיש שימוש ב IronPython כדי ליצור את חוקי ה Routing.</p>
<p>כרגע הפרויקט בשלב ממש התחלתי, אבל בסך הכל &#8211; עובד!</p>
<p><a href="http://patriq.codeplex.com">http://patriq.codeplex.com</a></p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/ZcdJVnQi_bQ" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2012/01/patriq-msmq-routing-service/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2012/01/patriq-msmq-routing-service/</feedburner:origLink></item>
		<item>
		<title>‫About MSDN Forums – The Hebrew Version‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/uecuBkubl_U/</link>
		<comments>http://heblog.ronklein.co.il/2011/12/about-msdn-forums-the-hebrew-version/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 22:06:27 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[Community]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=907</guid>
		<description><![CDATA[&#8235;אני בודק מדי פעם מה קורה בפורום דוט נט ב MSDN, בגירסתו העברית. אחרי הכל, נחמד לפעמים לראות שיש קהילה פעילה גם בשפה העברית. ויצא לי אפילו לענות על שאלה או שתיים שם. אתם מרגישים שעוד רגע מגיע ה&#34;אבל..&#34;? אז רגע לפני ה&#34;אבל&#34;, ממש לפני שהוא נדחף בדלת, אני אעצור ואכתוב עוד כמה מילים. אני [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>אני בודק מדי פעם מה קורה בפורום דוט נט ב MSDN, <a href="http://social.msdn.microsoft.com/Forums/he-IL/nethe/threads">בגירסתו העברית</a>.</p>
<p>אחרי הכל, נחמד לפעמים לראות שיש קהילה פעילה גם בשפה העברית. ויצא <a title="הפרופיל שלי במסדן" href="http://social.msdn.microsoft.com/Forums/he-IL/user/threads?user=%D7%A8%D7%95%D7%9F%20%D7%A7%D7%9C%D7%99%D7%99%D7%9F">לי</a> אפילו לענות על <a href="http://social.msdn.microsoft.com/Forums/he-IL/nethe/thread/f8d5d77e-b825-453c-9504-1b88604a08a1">שאלה</a> או <a href="http://social.msdn.microsoft.com/Forums/he-IL/nethe/thread/08fd2e56-6111-4a1d-a961-1c4443c2ec5f">שתיים</a> שם.</p>
<p>אתם מרגישים שעוד רגע מגיע ה&quot;אבל..&quot;?</p>
<p>אז רגע לפני ה&quot;אבל&quot;, ממש לפני שהוא נדחף בדלת, אני אעצור ואכתוב עוד כמה מילים.</p>
<p>אני לוקח חלק פעיל בקהילה של מתכנתים בכלל ומתכנתי דוט נט בפרט, ואני שמח לראות כל &quot;קורת גג&quot; וירטואלית (או פיזית, כפי שקורה במפגשי משתמשים) שמארחת את הקהילה.</p>
<p>&quot;קורות גג&quot; שכאלו הן רבות, וראוי לציין את אלו שהן בעברית, שם האתגר הוא כפול ומכופל: גם לשלב עברית ואנגלית, לתרגם מונחים טכניים, להוסיף קוד וליישר לשמאל (כולל מעברי BiDi), וגם מספר המשתתפים יחסית נמוך לעומת האלטרנטיבות.</p>
<p>לפיכך אין לי אלא להוריד את הכובע בפני כל מי שמשתתף, תורם, משקיע (זמן ו/או כסף) כדי שתהיינה &quot;קורות גג&quot; שכאלו.</p>
<p>ועכשיו, אחרי שהקדמתי וכתבתי את ההלל והשבח לאלו שלוקחים חלק במשימה של יצירת קהילת משתמשים בעברית, הנה זה בא:</p>
<h2>אבל&#8230;</h2>
<p>נבדוק לרגע את <a href="http://social.msdn.microsoft.com/Forums/he-IL/nethe/threads">הפורום של דוט נט בגירסה העברית של MSDN</a>.</p>
<p>נכנסתם? יפה.</p>
<p>הכל בסדר. באמת. ממשק משתמש סביר, יש שאלות, יש תשובות.</p>
<p>התנועה קצת דלילה לפעמים. יש תקופות של יובש קל, שיכולות לקחת גם שבוע.</p>
<p>טוב, לא נורא, קורה.</p>
<p>עד שצדה את עיני התנהגות קצת מוזרה. תסלחו לי על הקונספירציה, אבל נראה לי שמרוב שהתנועה דלילה, יש איזה משתמש dummy, שמייצר שאלות יחסית שטחיות, ויש מי שעונה. והכל כדי להשאיר את הפורומים האלה יחסית בחיים.</p>
<p>מה זה שאלות יחסית שטחיות? נניח, משהו כמו: מה זה connection string? מתי משתמשים בזה? &#8211; זו שאלה שטחית.</p>
<h2>מה מפריע לי בזה?</h2>
<p>קודם כל, זו רק תיאוריה, אין לי שום הוכחה, אז מי אני שאגיד משהו?</p>
<p>אבל בכל זאת, אם זה נכון, אז זה מרגיש שכאילו &quot;מריצים את המניות&quot;. מייצרים תחושת &quot;כאילו&quot;. וכשזה מספיק שקוף &#8211; זה מעצבן.</p>
<p>האלטרנטיבה היא או להציג את האמת הקשה במלוא תפארתה (פורום דליל), או לייצר תנועה ע&quot;י שאלות יזומות, אבל עם קצת יותר תחכום, רק כדי שאלה מאיתנו שרוצים לענות &#8211; ירגישו שהם באמת עוזרים למישהו עם בעיה אמיתית, ולא עם שאלה מומצאת.</p>
<h2>ולסיום &#8211; חידה</h2>
<p>נסו בעצמכם לבדוק מיהו ה dummy שאני מתייחס אליו (הנה <a href="http://social.msdn.microsoft.com/Forums/he-IL/nethe/threads">הלינק</a> שוב, לעצלנים). אתם מוזמנים לכתוב בהערות לפוסט את הניחוש שלכם.</p>
<p>וגם אם לא מצאתם, בטח למדתם משהו חדש מהסקירה הזו <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/uecuBkubl_U" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2011/12/about-msdn-forums-the-hebrew-version/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2011/12/about-msdn-forums-the-hebrew-version/</feedburner:origLink></item>
		<item>
		<title>‫תרמתי לויקיפדיה‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/K__zLTm_OVA/</link>
		<comments>http://heblog.ronklein.co.il/2011/11/%d7%aa%d7%a8%d7%9e%d7%aa%d7%99-%d7%9c%d7%95%d7%99%d7%a7%d7%99%d7%a4%d7%93%d7%99%d7%94/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 21:45:02 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[Donation]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[stackoverflow.com]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=865</guid>
		<description><![CDATA[&#8235;כשהתחלתי להשתתף ב stackoverflow נתקלתי בשאלה הבאה (בתרגום שלי): פרויקטים של קוד פתוח חוסכים לנו הרבה זמן וכסף. למי הייתם תורמים 100 דולר מבין הפרויקטים של הקוד הפתוח? התשובה שלי היתה: אני משתמש בויקיפדיה על בסיס יומיומי במסגרת העבודה שלי. למרות שזה לא קוד פתוח, אני חושב שזה מועמד ראוי. אגב, חוץ מלקרוא ערכים, לעיתים [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>כשהתחלתי להשתתף ב <a title="A Few Words on StackOverflow.com" href="http://heblog.ronklein.co.il/2010/04/a-few-words-on-stackoverflow-com/">stackoverflow</a> נתקלתי <a title="Stackoverflow.com - Donations for open source tools" href="http://stackoverflow.com/q/129537/17772">בשאלה הבאה</a> (בתרגום שלי):</p>
<p><span style="background-color: #ffffff;"><strong>פרויקטים של קוד פתוח חוסכים לנו הרבה זמן וכסף. למי הייתם תורמים 100 דולר מבין הפרויקטים של הקוד הפתוח?</strong></span></p>
<p><a href="http://stackoverflow.com/questions/129537/donations-for-open-source-tools/277400#277400">התשובה שלי</a> היתה:</p>
<p><span style="background-color: #ffffff;"><strong>אני משתמש בויקיפדיה על בסיס יומיומי במסגרת העבודה שלי. למרות שזה לא קוד פתוח, אני חושב שזה מועמד ראוי.</strong></span></p>
<p>אגב, חוץ מלקרוא ערכים, לעיתים רחוקות אני גם מעדכן ומתקן ערכים שם. אז אפשר לומר שאני תורם מהידע שלי, <a title="ויקימילון - פילנתרופ" href="http://he.wiktionary.org/wiki/%D7%A4%D7%99%D7%9C%D7%A0%D7%AA%D7%A8%D7%95%D7%A4">פילנתרופ</a> שכמותי!</p>
<p>אבל היום&#8230; היום תרמתי כסף של ממש לויקיפדיה. אני מאמין שהם (כלומר, אנחנו) צריכים את הכסף הזה כדי להשאיר את ויקיפדיה נטולת פרסומות ונגישה לכל.<br />
למעשה ויקיפדיה בעיני זה אחד הפרויקטים המרגשים שקיימים כיום באינטרנט (גם אם הוא חורק קצת בפוליטיקה&#8230;).</p>
<p>צ'ירס!</p>
<p><a href="https://wikimediafoundation.org/wiki/Support_Wikipedia/en"><img src="//upload.wikimedia.org/wikipedia/commons/4/40/Fundraising_2009-micro-thanks-en.png" alt="Support Wikipedia" border="0" /></a></p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/K__zLTm_OVA" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2011/11/%d7%aa%d7%a8%d7%9e%d7%aa%d7%99-%d7%9c%d7%95%d7%99%d7%a7%d7%99%d7%a4%d7%93%d7%99%d7%94/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2011/11/%d7%aa%d7%a8%d7%9e%d7%aa%d7%99-%d7%9c%d7%95%d7%99%d7%a7%d7%99%d7%a4%d7%93%d7%99%d7%94/</feedburner:origLink></item>
		<item>
		<title>‫Don't enum Data‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/kG4fL6aC9aE/</link>
		<comments>http://heblog.ronklein.co.il/2011/10/dont-enum-data/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 21:37:46 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[OCP]]></category>
		<category><![CDATA[Solid]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=769</guid>
		<description><![CDATA[&#8235;בפוסט הזה:
אני אראה איך קוד יכול להיות מעוצב ובנוי אחרת, כאשר רואים חלקים ממנו כ plugins.
אני אסביר את השינויים, את היתרונות והחסרונות, ואתחמק באלגנטיות משאלת מיליון הדולר: מה עדיף?&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>מכירים את enum?</p>
<p>-מכירים.</p>
<p>אז מתי כדאי להשתמש בו וליצור enum בקוד שלנו?</p>
<p>-הממממם&#8230; כשיש כמה קבועים מאותה &quot;קבוצה&quot;.</p>
<p>ופיסת הקוד הזו:</p>
<pre class="brush: csharp; gutter: false; title: ; notranslate">
public class Util
{
  public static void SaveAs(Image image, ImageFormat format, string path)
  {
    switch (format)
    {
      case ImageFormat.Bitmap:
        SaveAsBitmap(image, path);
        break;
      case ImageFormat.Jpeg:
        SaveAsJpeg(image, path);
        break;
      case ImageFormat.Png:
        SaveAsPng(image, path);
        break;
      default:
        throw new ApplicationException(
          string.Format(&quot;enum '{0}' changed&quot;, typeof (ImageFormat).FullName)
          );
    }
  }

  // implementations here...
}
</pre>
<p>נראית הגיונית?</p>
<p>-כן. נראה בסדר גמור.</p>
<p>טעות. הקוד הזה מפר את עקרון OCP, קיצור של <a href="http://en.wikipedia.org/wiki/Open/closed_principle" title="Open/closed principle - Wikipedia">Open/closed principle</a>.</p>
<p style="background-color: #e6e6fa; border-style: solid; border-width: thin; border-color: #000099; padding: 15px;"><strong>בפוסט הזה</strong>:<br />
אני אראה איך קוד יכול להיות מעוצב ובנוי אחרת, כאשר רואים חלקים ממנו כ plugins.<br />
אני אסביר את השינויים, את היתרונות והחסרונות, ואתחמק באלגנטיות משאלת מיליון הדולר: מה עדיף?<br />
קבצים: <a href="http://heblog.ronklein.co.il/wp-content/uploads/2011/10/silicate.zip">גירסה ראשונה</a>, <a href="http://heblog.ronklein.co.il/wp-content/uploads/2011/10/silicate-plugins.zip">גירסה שניה</a>.</p>
<p>לפני שנמשיך עם הדוגמה הקודמת, בואו נראה דוגמה אחרת, שבה ה enum הוא הגיוני, מוצדק, טבעי וכו':</p>
<pre class="brush: csharp; gutter: false; title: ; notranslate">
using System;
namespace System.Data
{
  public enum ConnectionState
  {
    Closed = 0,
    Open = 1,
    Connecting = 2,
    Executing = 4,
    Fetching = 8,
    Broken = 16
  }
}
</pre>
<p>בא מי שתכנן את האובייקטים של <a href="http://msdn.microsoft.com/en-us/library/system.data.aspx" title="System.Data Namespace - MSDN">ADO.NET</a> ואמר: אלה המצבים היחידים האפשריים ל Connection. זה מה שיש, וזה מה שיהיה.<br />
למעשה, זאת הנחת עבודה מהותית. החלטה עקרונית שנמצאת ביסודות של הארכיטקטורה של ADO.NET. שינוי בהנחת העבודה הזו משמעותו, ככל הנראה, הנחת יסודות למערכת <strong>אחרת</strong>.</p>
<p>ועכשיו נחזור לדוגמה הראשונה. אם בעוד כמה חודשים נצטרך לתמוך בשמירת האובייקט Image לפורמט אחר, נניח לפורמט <a title="WebP - ויקיפדיה" href="http://en.wikipedia.org/wiki/WebP">WebP</a>, אז נצטרך להוסיף עוד ערך לקבוצת הערכים של ה enum שלנו. ולקמפל מחדש. ולבדוק בכל מיני מקומות מה ההשפעה של זה. וכו' וכו'. כמה שינויים בקוד בשביל להוסיף תמיכה בפורמט נוסף!</p>
<h2>למה זה קורה?</h2>
<p>בשורה התחתונה, זה קורה בגלל שעטפנו קבוצת ערכים ב enum, בזמן שהם למעשה נתונים &#8211; data. <strong>הם לא קבוצה סגורה וסופית</strong>. אולי עכשיו היא נראית סופית, אבל זה ממש לא בטוח. יתרה מזאת, הוספת ערך לקבוצה הזו <strong>לא</strong> תגרום להנחת יסודות למערכת אחרת.</p>
<p>בקיצור, יצרנו enum סביב data, וזו הטעות.</p>
<p>זאת טעות נפוצה מאוד. גם אני הייתי שם, בעיקר בגלל שזה נתן לי תחושה של type safety &#8211; יש לי השלמה אוטומטית של הויז'ואל סטודיו, יש Resharper שיכול לצעוק עלי שאני לא בודק את כל הערכים האפשריים &#8211; משמע אני לא יכול לטעות. זה אולי נכון במיקרו, אבל מרוב תחושה של &quot;הנה אני כותב קוד עם מינימום אפשרות לטעות&quot; &#8211; לא ראיתי את הטעות במאקרו.</p>
<h2>איך בכל זאת כדאי לעצב ולכתוב קוד עם רעיון דומה?</h2>
<p>הרעיון המרכזי הוא לראות שהקוד הזה יכול להיות מורכב משילוב של plugins, כאשר לכולם אותו <a title="מנשקים לפנים - בבלוג הזה" href="http://heblog.ronklein.co.il/2011/02/interface-in-your-face/">ממשק</a> (חוזה) אבל כל אחד מהם מממש אותו בצורה שונה.</p>
<p>בדוגמה שלנו, הממשק הוא כזה ששומר תמונה לדיסק:</p>
<pre class="brush: csharp; gutter: false; title: ; notranslate">
using System.Drawing;

namespace Silicate.Lib
{
  public interface IImagePersister
  {
    void SaveAs(Image image, string path);
  }
}
</pre>
<p>וכל מימוש יוכל לכתוב את הקובץ בפורמט אחר. ניקח לדוגמה מימוש של png:</p>
<pre class="brush: csharp; gutter: false; title: ; notranslate">
using System.Drawing;

namespace Silicate.Lib
{
  public class PngPersister : IImagePersister
  {
    public void SaveAs(Image image, string path)
    {
      image.Save(path, System.Drawing.Imaging.ImageFormat.Png);
    }
  }
}
</pre>
<p>ובאותו אופן נוכל לממש עבור כל פורמט שנרצה, כולל WebP, שלא נתמך בפריימוורק.</p>
<h2>אוקיי, אבל איך הכל מתחבר ביחד?</h2>
<p>הרעיון המרכזי הוא לוותר על ה switch, כי אז הוספה (או גריעה) של פורמט לשמירת תמונה תגרום לקימפול מחדש. במקום ערכים של enum נעבוד עם <strong>string</strong>, שיכול להחזיק ערכים בצורה גמישה יותר. האלטרנטיבה ל switch היא לטעון באופן <strong>דינמי</strong> את ה plugin הרלוונטי ולהשתמש בו. טעינה דינמית שכזו יכולה להתבצע ע&quot;י Reflection, או ע&quot;י <a title="IoC Container Explained - בבלוג הזה" href="http://heblog.ronklein.co.il/2011/07/ioc-container-explained/">IoC Container</a> (ובקיצור IoCC). אני אראה בפוסט הזה את הדרך של IoCC. אם מישהו יבקש (נניח בהערות לפוסט) &#8211; אז אני אוסיף גם קוד שמדגים ע&quot;י Reflection.</p>
<p>נסכם את המהלך בטבלה קטנה ואז נמשיך:</p>
<table class="ron_heb_table" style="border-color: #000000; border-width: 1pt; background-color: #e6e6fa; width: 500px; border-style: solid;">
<tbody>
<tr>
<td></td>
<td>לפני</td>
<td>אחרי</td>
</tr>
<tr>
<td>סוג המזהה</td>
<td>ערך מתוך enum</td>
<td>string</td>
</tr>
<tr>
<td>סוג הטעינה</td>
<td>סטטית ע&quot;י switch + new</td>
<td>דינמית ע&quot;י Reflection או IoCC</td>
</tr>
<tr>
<td>הרחבה גורמת ל&#8230;</td>
<td>שינויים בקוד + rebuild <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </td>
<td>שינויים בקונפיגורציה בלבד <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </td>
</tr>
</tbody>
</table>
<h2>נחבר את הכל עם Unity</h2>
<p>ה IoCC שאדגים באמצעותו את השינויים בקוד הוא <a title="patterns &amp; practices - Unity" href="http://unity.codeplex.com">Unity</a>. קודם כל &#8211; הקונפיגורציה:</p>
<pre class="brush: xml; gutter: false; title: ; notranslate">
&lt;unity&gt;
  &lt;namespace name=&quot;Silicate.Lib&quot; /&gt;
  &lt;assembly name=&quot;Silicate.Lib&quot; /&gt;
  &lt;container&gt;
    &lt;register type=&quot;IImagePersister&quot; mapTo=&quot;BitmapPersister&quot; name=&quot;bitmap&quot; /&gt;
    &lt;register type=&quot;IImagePersister&quot; mapTo=&quot;JpegPersister&quot; name=&quot;jpeg&quot; /&gt;
    &lt;register type=&quot;IImagePersister&quot; mapTo=&quot;PngPersister&quot; name=&quot;png&quot; /&gt;
  &lt;/container&gt;
&lt;/unity&gt;
</pre>
<p>שימו לב שיש יותר ממימוש אחד לממשק IImagePersister, ולכן יש גם התייחסות לשם (או מזהה) של המימוש.</p>
<p>מרגע שהכל מקונפג כמו שצריך, נוכל לוותר על ה switch ולכתוב את הקוד באופן הבא:</p>
<pre class="brush: csharp; gutter: false; title: ; notranslate">
public class Util
{
  private static readonly UnityContainer Container = BuildContainer();

  private static UnityContainer BuildContainer()
  {
    var container = new UnityContainer();
    var section = (UnityConfigurationSection)
      ConfigurationManager.GetSection(&quot;unity&quot;);
    section.Configure(container);

    return container;
  }

  public static void SaveAs(Image image, string format, string path)
  {
    var persister = Container.Resolve&lt;IImagePersister&gt;(format.ToLowerInvariant());
    persister.SaveAs(image, path);
  }
}
</pre>
<p>בואו נעבור קצת על הקוד:</p>
<p>קודם כל, במקום פרמטר מסוג enum, אנחנו מקבלים פרמטר מסוג string. זה שינוי מהותי, כי string הוא ערך גמיש &#8211; אפשר להכניס בו כל טקסט שהוא.</p>
<p>שנית, ה string שקיבלנו מייצג את הפורמט הרצוי. כלומר, מי שקורא לפונקציה הזו &#8211; אמור לדעת בדיוק איך לרשום את הטקסט שמייצג את הפורמט הרצוי. למשל &quot;bitmap&quot; ולא &quot;bmp&quot;. זה מקשה קצת על מי שאמור להשתמש בקוד. זה אומר שהוא יצטרך לקרוא את התיעוד איפשהו.</p>
<p>עניין נוסף &#8211; מי שמבצע את הטעינה (בפועל) של המחלקה הרלוונטית הוא ה Unity. העברנו אליו את <strong>האחריות</strong> לבצע את זה. [אנחנו, ראש קטן אנחנו, כמה שפחות אחריות - יותר טוב <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ]</p>
<p>ועוד משהו: שימו לב כמה הקוד קצר וברור. זה אלגנטי, זה קריא, וקל לתחזק את זה.</p>
<p>יש מספר יתרונות וחסרונות בצורה שבה הקוד מעוצב כרגע. נתחיל מהחסרונות:</p>
<ul>
<li>מי שקורא לפונקציה הזו &#8211; אמור לדעת את הערכים האפשריים ל string הרלוונטי. זה פחות נוח מההשלמה האוטומטית של הערכים מתוך ה enum הקיים.</li>
<li>הכנסנו פנימה IoCC, וזה אומר שעכשיו יש לנו תלות ב DLLים נוספים, וכן בקונפיגורציה שלו.</li>
<li>נוספו קבצים לפרויקט: קובץ הממשק, וקבצי המימושים.</li>
</ul>
<p>ונעבור ליתרונות:</p>
<ul>
<li>המערכת שיש לנו ביד &#8211; פתוחה להרחבות, וללא צורך בשינוי כלשהו בקוד עצמו (וב rebuild שלו). כלומר, אנחנו עומדים בעקרון שנקרא OCP. אם יש לנו קבוצה של 10 פורמטים, ונרצה להוסיף את הפורמט ה 11 שנרצה לתמוך בו &#8211; אין שום בעיה.</li>
<li>הקוד שיש לנו קריא יותר, ולכן התחזוקה שלו קלה יותר.</li>
<li>במקרים אחרים (ואולי פחות בדוגמה הזו) &#8211; הקוד יותר טסטבילי, כלומר יותר מוכן לבדיקות.</li>
</ul>
<p>המסקנה היא שהמערכת, אחרי השינויים, היא יותר <strong>פתוחה להרחבות</strong>, אבל <strong>במחיר מסויים של נוחות</strong>. במילים אחרות: עכשיו קצת פחות נוח, אבל הרבה יותר גמיש וניתן להרחבה.</p>
<h2>ולשאלה המתבקשת&#8230;</h2>
<p><img class="alignright size-full wp-image-837" style="magin-left: 10px;" title="מיליון דולר?" src="http://heblog.ronklein.co.il/wp-content/uploads/2011/10/question-mark-flickr.jpg" alt="" width="75" height="75" />השאלה המתבקשת שעולה עכשיו, והיא שאלת מיליון הדולר: מתי כדאי להעדיף את הצורה הראשונה (enum+switch) ומתי נעדיף את הצורה השניה?</p>
<p>התשובה המתבקשת, וזו בד&quot;כ התשובה הטבעית לשאלות של מיליון דולר ומעלה:<br />
תלוי.</p>
<p>תלוי כמה הפרויקט גדול.</p>
<p>תלוי כמה מפתחים בוחשים בקדרה הזו.</p>
<p>ובעיקר: תלוי כמה OCP הוא עקרון שחשוב שיבוא לידי ביטוי בפרויקט.</p>
<p>בשורה התחתונה: לא חייבים. אבל, אם בעתיד הנראה לעין יש סיכוי סביר שמערכת תורחב, אז יכול להיות ששווה כבר מהרגעים הראשונים לעצב את המערכת ל plugins. צורת עבודה שכזו מובילה אותנו לקוד איכותי יותר גם ככה, וגם זו סיבה לא רעה.</p>
<p>עדכון לאלה ששרדו עד עכשיו: ממליץ לכם לקרוא את <a href="http://heblog.ronklein.co.il/2011/10/dont-enum-data/#comments">התגובות לפוסט</a>, שכנראה יכולות לחדד את העניין.</p>
<p>תכנות נעים!</p>
<p>קבצי הקוד: גירסה <a href="http://heblog.ronklein.co.il/wp-content/uploads/2011/10/silicate.zip">ראשונה</a> &#8211; עם enum וגירסה <a href="http://heblog.ronklein.co.il/wp-content/uploads/2011/10/silicate-plugins.zip">שניה</a> &#8211; בצורה של plugins.</p>
<p><span style="font-size: xx-small;">[התמונה מתוך אתר flickr, שם משתמש tj scenes, <a href="http://www.flickr.com/photos/uncut/16926192/">לינק ישיר לתמונה</a>, תחת רשיון CC BY 2.0]</span></p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/kG4fL6aC9aE" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2011/10/dont-enum-data/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2011/10/dont-enum-data/</feedburner:origLink></item>
		<item>
		<title>‫WinBuyer is Hiring‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/wkrYiUKjYbk/</link>
		<comments>http://heblog.ronklein.co.il/2011/08/winbuyer-is-hiring/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 10:22:22 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[job]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=816</guid>
		<description><![CDATA[&#8235;אני עובד בחברה שנקראת WinBuyer, ואנחנו מחפשים ראש צוות web. ההודעה מנוסחת בלשון נקבה, בשביל הכיף. התפקיד הוא של ניהול של שני מתכנתים, hands-on, כלומר צריך לכתוב קוד בחלק מהזמן. ברמת הטכנולוגיה מדובר על פיתוח web, שכולל את כל ההיבטים: client side &#8211; לדעת ולהבין JS ברמה טובה וכן jQuery (או כל פריימוורק אחר ב [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>אני עובד בחברה שנקראת WinBuyer, ואנחנו מחפשים ראש צוות web.<br />
ההודעה מנוסחת בלשון נקבה, בשביל הכיף.<br />
התפקיד הוא של ניהול של שני מתכנתים, hands-on, כלומר צריך לכתוב קוד בחלק מהזמן.<br />
ברמת הטכנולוגיה מדובר על פיתוח web, שכולל את כל ההיבטים:<br />
client side &#8211; לדעת ולהבין JS ברמה טובה וכן jQuery (או כל פריימוורק אחר ב JS), כולל Ajax<br />
לדעת ולהבין HTML+CSS<br />
server side &#8211; לדעת ולהבין ASP.NET עם <span class="ron_english">C#</span><br />
לדעת ולהבין אחסון נתונים ב MSSQL (עם או בלי שכבת ORM, לא עקרוני)</p>
<p>נדרש נסיון של שנתיים לפחות בניהול צוות בתחום.</p>
<p><strong>ברמה האישית</strong>:<br />
אנחנו מצפים למועמדת בעלת יכולת תקשורת טובה מאוד, שלצד הנסיון שלה תוכל ללמוד ולהתפתח גם בהיבט הניהולי וגם בהיבט הטכני.<br />
מישהי שתוכל גם לקחת אחריות וגם להיות קשובה לביקורת וללמוד מטעויות.<br />
מישהי שאוהבת את התחום ואת הצד הטכנולוגי באותה מידה (פחות או יותר..) כמו שהיא מעוניינת באתגרי ניהול.</p>
<p><strong>אז נסכם</strong>:<br />
ראש צוות web, שיודעת את העבודה, אוהבת את העבודה שלה, עם נסיון של שנתיים, ומשם כבר נתקדם.</p>
<p>מי שרוצה פרטים נוספים &#8211; שתשלח לי מייל לכתובת jobs.winbuyer@yahoo.com ואני אשלח לה דרישות תפקיד מלאות במסמך Word. אבל תכלס התמצית של הכל כבר כאן.<br />
אשמח לקבל קורות חיים במייל.</p>
<p>בהצלחה!</p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/wkrYiUKjYbk" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2011/08/winbuyer-is-hiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2011/08/winbuyer-is-hiring/</feedburner:origLink></item>
		<item>
		<title>‫מפגש מתכנתי דוט נט‬</title>		<link>http://feedproxy.google.com/~r/try-catch-write-Ron-Klein/~3/oowjxqqeNrU/</link>
		<comments>http://heblog.ronklein.co.il/2011/08/dot-net-developers-meetup/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 15:45:05 +0000</pubDate>
		<dc:creator>‫רון קליין‬</dc:creator>				<category><![CDATA[תכנות]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Meetup]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Unit-Testing]]></category>

		<guid isPermaLink="false">http://heblog.ronklein.co.il/?p=808</guid>
		<description><![CDATA[&#8235;ב 2 באוגוסט, שזה לפני כמה ימים, היה מפגש מתכנתי דוט נט במכללת סלע. היה ממש כיף. נתחיל בתודה מתבקשת למכללת סלע, שארחה אותנו בצל קורתה וביד נדיבה: היו פיצות!! המפגש הזה נולד ביוזמה של משתתפי פורום תכנות דוט נט בתפוז. באופן אירוני משהו, היוזם העיקרי (שמזוהה בניק IamStalker ושמו האמיתי הוא גנַדי) נעדר מהמפגש [...]&#8236;]]></description>			<content:encoded><![CDATA[<div dir="rtl"><p>ב 2 באוגוסט, שזה לפני כמה ימים, היה מפגש מתכנתי דוט נט במכללת סלע. היה ממש כיף.</p>
<p>נתחיל בתודה מתבקשת למכללת סלע, שארחה אותנו בצל קורתה וביד נדיבה: היו פיצות!!</p>
<p>המפגש הזה נולד ביוזמה של משתתפי <a title="פורום תכנות דוט נט" href="http://www.tapuz.co.il/Forums2008/ForumMaavaron.aspx?ForumId=831">פורום תכנות דוט נט בתפוז</a>. באופן אירוני משהו, היוזם העיקרי (שמזוהה בניק IamStalker ושמו האמיתי הוא גנַדי) נעדר מהמפגש עצמו כי היה חולה <img src='http://heblog.ronklein.co.il/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> .</p>
<p>בכל מקרה, התחלנו את <a href="http://www.tapuz.co.il/Forums2008/ViewMsg.aspx?ForumId=831&amp;MessageId=154536422">המפגש</a> בסקרנות הרגילה של &quot;מי את/ה ומה הכינוי שלך בפורום?&quot; היו כאלה שהזדהו, היו כאלה שבחרו להישאר אנונימיים, והיו כאלה שבכלל לא הגיעו ישירות מהפורום אלא מ<a title="מתוך הקבוצה .NET Developers in Israel" href="http://www.linkedin.com/groupItem?view=&amp;gid=2513131&amp;type=member&amp;item=63994772&amp;qid=26926a80-8cdd-4acc-8ac9-973b898e837f&amp;trk=group_most_popular-0-b-ttl&amp;goback=.gmp_2513131">הודעה שפירסמתי</a> בלינקדין (&quot;הפרסום בלינקדין &#8211; עובד!&quot;)</p>
<p>סוף סוף ראיתי מי זה זיו, מנהל הפורום הנוכחי (כבר דברתי איתו בטלפון, אבל לא יצא לנו להיפגש ממש), שגם <a title="שרשור התמונות" href="http://www.tapuz.co.il/Forums2008/ViewMsg.aspx?ForumId=831&amp;MessageId=154580488">צילם אותנו</a> אוכלים פיצה בהפסקה.</p>
<p>בהתחלה <a href="http://blogs.microsoft.co.il/blogs/eladkatz/archive/2011/08/04/future-client-technologies-slides-and-demo-code.aspx">אלעד</a> העביר סשן מעניין על הטכנולוגיות של ה client בעיקר בקונטקסט של web: איפה אנחנו עומדים כיום ולאן מועדות פנינו בהקשר של SilverLight, JavaScript, <span class="ron_english">HTML(5)</span> ועוד. מעבר לחנופה צפויה ושגרתית, באמת היה מעניין. תודה, אלעד!</p>
<p>אחרי שאלעד סיים אני העברתי סשן בנושא Introduction to Unit Testing with NUnit. מעבר למבוא ולדוגמאות שהן סוג של Jump Start למי שרוצה להיכנס לתחום של Unit Testing, ניסיתי להעביר את המסרים הבאים:</p>
<ol>
<li>קוד שמכוסה ב Unit Testing הוא קוד שיחסית קל לשנות לו את המימוש. הבדיקות מוודאות שהפונקציונליות נשמרת למרות השינויים במימוש.</li>
<li>קוד שהוא לא טסטבילי, כלומר שלא ניתן לכתוב לו Unit Testing &#8211; הוא ברוב המקרים קוד שצריך לשפר אותו. כלומר, טסטביליות מובילה אותנו לקוד טוב יותר ו/או ל design טוב יותר.</li>
</ol>
<p>הנה המצגת שליוותה את הסשן שלי:</p>
<div style="width:425px" id="__ss_8785144"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/kleinron/unit-testing-with-nunit" title="Unit testing with NUnit" target="_blank">Unit testing with NUnit</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8785144" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/kleinron" target="_blank">kleinron</a> </div>
</p></div>
<p>אפשר גם להוריד את <a href="http://heblog.ronklein.co.il/wp-content/uploads/2011/08/unit-testing-presentation.zip">הקובץ של המצגת</a> ואת <a href="http://heblog.ronklein.co.il/wp-content/uploads/2011/08/unit-testing-code.zip">הקוד</a> לדוגמאות (שימו לב שצריך רפרנסים ל NUnit, וזה לא חלק מההורדה).</p>
<p>תודה לכל מי שלקח חלק במפגש הזה, אני מקווה שיהיו עוד.</p>
</div><img src="http://feeds.feedburner.com/~r/try-catch-write-Ron-Klein/~4/oowjxqqeNrU" height="1" width="1"/>]]></content:encoded>			<wfw:commentRss>http://heblog.ronklein.co.il/2011/08/dot-net-developers-meetup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://heblog.ronklein.co.il/2011/08/dot-net-developers-meetup/</feedburner:origLink></item>
	</channel>
</rss>

