<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Geektime &#187; פיתוח</title>
	<atom:link href="http://www.geektime.co.il/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geektime.co.il</link>
	<description></description>
	<lastBuildDate>Sat, 25 May 2013 08:09:55 +0000</lastBuildDate>
	<language>he-IL</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Webzai מחכה ל-WiX בפינה הימנית של זירת בניית האתרים [Microsoft Azure]</title>
		<link>http://www.geektime.co.il/webzai-is-waiting-to-beat-wix-on-the-right-corner/</link>
		<comments>http://www.geektime.co.il/webzai-is-waiting-to-beat-wix-on-the-right-corner/#comments</comments>
		<pubDate>Tue, 21 May 2013 10:53:34 +0000</pubDate>
		<dc:creator>אבישי בסה</dc:creator>
				<category><![CDATA[סטארטאפ והון סיכון]]></category>
		<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[microsoft azure]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[website]]></category>
		<category><![CDATA[Webzai]]></category>
		<category><![CDATA[אינטרנט Website builder]]></category>
		<category><![CDATA[אתרים]]></category>
		<category><![CDATA[בניית אתרים]]></category>
		<category><![CDATA[הייטק]]></category>
		<category><![CDATA[וובזאי]]></category>
		<category><![CDATA[יזם]]></category>
		<category><![CDATA[יזמים]]></category>
		<category><![CDATA[סטארטאפ]]></category>
		<category><![CDATA[סטארטאפים]]></category>
		<category><![CDATA[עיצוב]]></category>
		<category><![CDATA[פלטפורמה]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=163332</guid>
		<description><![CDATA[פלטפורמה משוכללת למדי לבניית אתרים, אשר פותחת את שעריה גם למשתמשים פחות טכנולוגיים ומגוון האפשרויות בה פשוט עצום. האלטרנטיבה המסתמנת ל-WiX?]]></description>
				<content:encoded><![CDATA[<p>מידי שבוע נפרסם כאן סקירת סטארטאפ אחת מ<a href=" http://www.geektime.co.il/windows-azure-startup-nation/" target="_blank">תוכנית Windows Azure @ Startup Nation</a> שלנו, המאפשרת לסטארטאפים צעירים לקבל חשיפה בניוזגיק. רוצים שניוזגיק יכתוב גם עליכם במסגרת הסקירה השבועית של התוכנית? כל מה שעליכם לעשות הוא למלא את <a href=" http://www.geektime.co.il/windows-azure-startup-nation/" target="_blank">הטופס בלינק הבא ולשלוח אלינו</a>.</p>
<p><strong>שם: <a href="http://www.webzai.com/" target="_blank">Webzai</a><a href="http://www.greensql.com/" target="_blank"><br />
</a></strong></p>
<p><strong>פיץ' במשפט: </strong>החברה מפתחת פלטפורמה לבניית אתרי אינטרנט הכוללת פונקציונליות מתקדמת ומאפשרת למשתמשים לבנות אתרים ללא צורך בהרשמה מוקדמת לשירות.</p>
<p><strong>כיצד משתמשים ב-Windows Azure: </strong>חברת Webzai משתמשת בטכנולוגית הענן של מיקרוסופט, Microsoft Azure על מנת לאחסן את כל המידע המרכיב את אתרי האינטרנט הנבנים על ידי הפלטפורמה על גבי CDN. ה-CDN מאפשר טעינה מהירה של האתרים מכל מקום בעולם.</p>
<hr style="border: 0; height: 1px; border-bottom: 1px dotted #d4d4d4;" />
<div id="attachment_164823" class="wp-caption alignnone" style="width: 580px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/05/Webzai-logo.png"><img class="size-full wp-image-164823" alt="מקור: יח&quot;צ, עיבוד תמונה" src="http://www.geektime.co.il/wp-content/uploads/2013/05/Webzai-logo.png" width="570" height="200" /></a><p class="wp-caption-text">מקור: יח&quot;צ, עיבוד תמונה</p></div>
<hr style="border: 0; height: 1px; border-bottom: 1px dotted #d4d4d4;" />
<p>במידה ויש בבעלותכם עסק קטן, בינוני או אפילו במידה ואתם מתעסקים בעיצוב, בוודאי ניסיתם שירותים שונים לבניית אתרי אינטרנט, בחינם או בכסף אשר לכל אחד מהם הנישה אליה הוא ניגש. חלק מהאתרים פונים אל המשתמשים הפשוטים, הפחות טכנולוגיים שכל חווית בניית האתרים צריכה להיות הכי פשוטה בעולם וחלק מהאתרים, כגון WiX, מציעים ממשק מתקדם יותר אך עדיין מוגבל, גם ברמת העיצוב וגם ברמת הפונקציונליות.</p>
<p>חברת סטארטאפ צעירה יחסית בשוק שקיימת כבר שנתיים ועבדה ללא הפסקה על פלטפורמת בניית האתרים שלה היא Webzai. עכשיו, אני מניח שהשאלה הראשונה שעולה בראש שלכם היא: יש אלפי שירותי בניית אתרים בארץ ובחו&quot;ל, מדוע דווקא Webzai? איזה שינוי היא כבר מביאה אל עולם בוני האתרים? ובכן, התשובה לדעתי היא בעיקר החזון העומד מאחורי פיתוח הפלטפורמה, שמציג כלי לבנייה ועריכה של אתרי אינטרנט אשר מעניק חופש מוחלט למשתמשים בבניית האתרים שלהם.</p>
<h3>טמפלטים לבחירה, מותאמים לשולחן העבודה ולמובייל כברירת מחדל</h3>
<p dir="rtl">כלי בניית האתרים של Webzai מציע למשתמש את כל היכולות והאפשרויות המתקדמות הנפוצות בשוק לבניית אתרים כיום. בין הפיצ'רים איתם מגיעה Webzai ניתן למצוא מבחר של מעל ל-100 תבניות מוכנות מראש ל-Plug &amp; Play הידידותיות למנועי חיפוש, אלמנטים מובנים של גלריות ותפריטים, חיבור לרשתות חברתיות כגון Facebook, Twitter, Google Plus והטמעה של תכנים מאתרים כמו YouTube, אפשרות לבניית חנות מקוונת ואינטגרציה עם PayPal, חיבור לשירות הסטטיסטיקה של Google Analytics והעלאת קבצים ואפשרות להוספה עצמית של קוד HTML, CSS ו-Javascript אל תוך הדף.</p>
<p dir="rtl">הפלטפורמה של Webzai מתבססת על מנוע הבנוי ב-Javascript ו HTML5 ומכיל את מיטב החידושים הטכנולוגיים האחרונים. Webzai משתמש בטכנולוגית AJAX בעורך האתרים שלה, כלומר עדכון חלקים באתר אינם דורשים טעינה מחדש של העמוד, אלא ניתן לעבוד על האתר כאשר כל שינוי אשר המשתמש מבצע במערכת נשמר בשרת במקביל לביצוע. כמו כן, האתרים הנבנים תחת הפלטפורמה מותאמים מראש גם לשולחן העבודה וגם למובייל.</p>
<p dir="rtl"><a href="http://www.geektime.co.il/wp-content/uploads/2013/05/webzai620x620.png"><img class="alignnone size-full wp-image-164883" alt="webzai620x620" src="http://www.geektime.co.il/wp-content/uploads/2013/05/webzai620x620.png" width="620" height="620" /></a></p>
<p dir="rtl">בנוסף, ניתן למצוא ב-Webzai מגוון פיצ'רים מתקדמים לבניית אתרים אשר נותנים למעצב האתר חופש מוחלט בבנייה שלו ללא כל ידע מקדים בתכנות. ביניהם ניתן למצוא יכולות עיצוב גרפי מתקדמות בעורך האתרים של החברה, אשר משלב בתוכו כלי עיצוב שעד כה היו זמינים בכלים מקצועיים לעיצוב גרפי, כגון העתקה והדבקה של עיצוב בין אלמנטים, בחירה ועיצוב מרובה ובמקביל של אלמנטים, קבוצות אלמנטים, Grids, Fixed Layouts, Gradient Coloring ועוד.</p>
<p dir="rtl">פיצ'ר מגניב ביותר שמצאנו בעורך האתרים של Webzai, הוא האפשרות להגדיר &quot;מצבים&quot;, או במינוח הוגן יותר תגובה לפעולות המשתמש באתר. למעשה, מעצב האתר יכול להגדיר כיצד אלמנט יראה במצב ברירת המחדל ובנוסף כיצד הוא יראה בתגובה למעבר עכבר מעליו, לחיצה, או טעינת העמוד למשל. בעזרת האפשרות הזו, המשתמש למעשה &quot;בונה&quot; קוד Javascript משלו, בצורה וויזואלית ומותאמת אישית לצרכים שלו, ללא צורך במשאבים וכוח אדם של מתכנתים חיצוניים.</p>
<p dir="rtl">המערכת של Webzai מאפשרת למשתמשים, בנוסף לכל לשמור כתבנית כל עיצוב של אתר, אלמנט או קבוצה של אלמנטים ולהשתמש בהם לאחר מכן בעמודים שונים באתר או באתרים אחרים בפלטפורמה, הקשורים אל אותו המשתמש. זהו כלי שימושי במיוחד עבור מעצבי אתרים העובדים על כמה פרוייקטים דומים במקביל אשר מעוניינים לקצר את תהליך הבנייה במקום להגדיר את הדפים מחדש ולעבור שוב על סדר הפעולות הרצוי.</p>
<div id="attachment_164830" class="wp-caption alignnone" style="width: 580px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/05/webzaieditor.png"><img class="size-full wp-image-164830" alt="עורך האתרים של Webzai. מקור: יח&quot;צ" src="http://www.geektime.co.il/wp-content/uploads/2013/05/webzaieditor.png" width="570" height="321" /></a><p class="wp-caption-text">עורך האתרים של Webzai. מקור: יח&quot;צ</p></div>
<hr />
<h3 dir="rtl">מדריכי צעד אחר צעד מפורטים למשתמשים לא-טכנולוגיים</h3>
<p dir="rtl">אמיר גבאי סיפר לנו בריאיון כי בחודשים האחרונים החברה שמה דגש מיוחד על שיפור חווית המשתמש בעורך האתרים, זאת על ידי הוספת מדריכים אשר יוכלו להוליך את המשתמשים בתוך עורך האתרים של Webzai וידריכו אותם להגיע לתוצאה הרצויה מבחינתם דרך ביצוע תהליכים שונים בעורך אותם הם מעוניינים ללמוד כיצד לבצע. המטרה של המדריכים הללו תהיה לפשט את תהליך בניית האתרים ולהנגיש את המערכת גם למשתמשים אשר לוקים בחסר בידע טכני הקשור לבניית אתרים.</p>
<p dir="rtl">אחת מהתכונות המייחדות את Webzai בהשוואה אל פלטפורמות אחרות, היא שכל משתמש יכול להתנסות במערכת ללא צורך בהרשמה מוקדמת, כאשר אפילו רק בסוף התהליך ניתן להירשם למערכת ולרשום את האתר שבניתם תחת החשבון הפרטי שלכם. כמו כן, במידה ויש בבעלותכם דומיין פרטי, ניתן לחבר אותו אל האתר שבניתם ב-Webzai בחינם, בניגוד למתחרות המובילות בשוק הדורשים הרשמה לאחת מהחבילות בתשלום אותן הן מציעות בתמורה לקישור האתר אל דומיין פרטי.</p>
<p dir="rtl">המודל העסקי של Webzai מבוסס על Freemium, כאשר האתר הנבנה במערכת יופיע עם באנר החברה בתחתית ומגיע עם שטח אחסון חינמי של 250MB ותעבורה חודשית של 1GB. החברה מציעה מספר חבילות פרימיום אשר מחירן נע בין 6$ ל-20$ בחודש, המאפשר למשתמשים להסיר את הבאנר, לקבל אחסון מורחב עד 10GB ותעבורת משתמשים בלתי מוגבלת. למעצבים, החברה מציעה מבצע מיוחד, במהלכו חבילת פרימיום לשנתיים תינתן בחינם לכל מעצב או חברה לעיצוב אתרים אשר תבחר להקים את האתר שלה על גבי הפלטפורמה.</p>
<p>חברת Webzai נוסדה בשנת 2011 על ידי המייסדים אמיר גבאי וניר דומשלק. החברה גייסה עד עכשיו 230 אלף דולרים באוגוסט 2012 ממשקיעים פרטיים, מעסיקה 6 עובדים ויושבת ברחוב החשמונאים בתל אביב.</p>
<h3>סרטון וידאו: הכירו את הפלטפורמה של Webzai</h3>
<p><object width="640" height="360" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/YzHOJsxsHVA?hl=en_US&amp;version=3" /><param name="allowfullscreen" value="true" /><embed width="640" height="360" type="application/x-shockwave-flash" src="http://www.youtube.com/v/YzHOJsxsHVA?hl=en_US&amp;version=3" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/webzai-is-waiting-to-beat-wix-on-the-right-corner/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>סידייה הגיעה לאנדרואיד; רגע, מה?</title>
		<link>http://www.geektime.co.il/cydia-now-in-android/</link>
		<comments>http://www.geektime.co.il/cydia-now-in-android/#comments</comments>
		<pubDate>Thu, 16 May 2013 09:51:42 +0000</pubDate>
		<dc:creator>אבישי בסה</dc:creator>
				<category><![CDATA[מובייל וגאדג'טים]]></category>
		<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Custom Roms]]></category>
		<category><![CDATA[cydia]]></category>
		<category><![CDATA[Cydia Substrate]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Saurik]]></category>
		<category><![CDATA[אייפון]]></category>
		<category><![CDATA[אנדרואיד]]></category>
		<category><![CDATA[גוגל]]></category>
		<category><![CDATA[חנות אפליקציות]]></category>
		<category><![CDATA[סאוריק]]></category>
		<category><![CDATA[סידיה]]></category>
		<category><![CDATA[פריימוורק]]></category>
		<category><![CDATA[רומים מותאמים אישית]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=165253</guid>
		<description><![CDATA[מפתח חנות האפליקציות האלטרנטיבית לגרסות iOS הפרוצות ינסה לשנות את סדר היום גם במערכת ההפעלה המתחרה. האם הוא יצליח?]]></description>
				<content:encoded><![CDATA[<div id="attachment_165264" class="wp-caption alignnone" style="width: 610px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/05/cydia600200.png"><img class="size-full wp-image-165264" alt="קרדיט: cbren, devianart" src="http://www.geektime.co.il/wp-content/uploads/2013/05/cydia600200.png" width="600" height="200" /></a><p class="wp-caption-text">קרדיט: cbren, devianart</p></div>
<hr />
<p>מפתח חנות האפליקציות, סידיה, למכשירי האייפון בעלי ג'יילברייק, Jay Freeman, הידוע יותר בכינויו <a href="http://www.saurik.com/" target="_blank">Saurik</a> שיחרר לפני מספר ימים הודעה בחשבון הטוויטר שלו בנוגע להשקת אפליקציה ראשונית שנראית כמו חנות אפליקציות חלופית למכשירים סלולריים מבוססי מערכת ההפעלה אנדרואיד. האפליקציה, הנקראת Cydia Substrate, מיועדת לכלל מכשירי האנדרואיד המריצים את מערכת ההפעלה מגירסא 2.3 ומעלה, מהווה למעשה פלטפורמה להתאמה אישית קלה של תוכנות אשר קוד המקור שלהן אינו זמין. לדוגמא, הרחבת תכונות קיימות באפליקציות והגדרות אשר אינן זמינות במצע האפליקציה המקורי.</p>
<blockquote class="twitter-tweet"><p>After years of effort, Substrate for Android is finally released, along with full documentation for iOS Substrate ;P. <a title="http://www.cydiasubstrate.com/" href="http://t.co/WYrC37Z8UN">cydiasubstrate.com</a></p>
<p>— Jay Freeman (saurik) (@saurik) <a href="https://twitter.com/saurik/status/334357924287750144">May 14, 2013</a></p></blockquote>
<h3>רומים מותאמים אישית &#8211; פאסה, Framework אלטרנטיבי &#8211; העתיד</h3>
<p>אם עד עכשיו ראינו רומים מותאמים אישית המפותחים עבור מכשירים ספיציפיים המריצים את מערכת ההפעלה אנדרואיד, נראה שהטרנד החדש בקרב מפתחים העוסקים בקוד הפתוח של מערכת ההפעלה, הוא להשתמש באפליקציות פנימיות המשנות את ה-Framework של מערכת ההפעלה מבפנים, ללא כל צורך בהתקנת רום מותאם אישית. הטרנד למעשה התחיל עם Xposed Framework, המאפשרת למשתמשים לשנות נתונים ספציפיים במערכת ההפעלה ובאפליקציות על ידי התקנת תוספים וכעת גם מפתח חנות האפליקציות סידייה החליט, לפנות גם למערכת ההפעלה המתחרה של אפל ולשנות גם שם את סדר היום.</p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/05/unnamed-12.png"><img class="alignnone  wp-image-165263" alt="unnamed (1)" src="http://www.geektime.co.il/wp-content/uploads/2013/05/unnamed-12.png" width="250" height="400" /></a><img class="alignnone  wp-image-165262" alt="unnamed" src="http://www.geektime.co.il/wp-content/uploads/2013/05/unnamed2.png" width="250" height="400" /></p>
<h3>בולט בנוכחותו: WinterBoard</h3>
<p>התוסף הראשון והיחיד שכרגע ניתן להוריד דרך Cydia Substrate הוא מנוע תבניות הבסיס המוכר לכולם ממכשירי האייפון, <a href="http://cydia.saurik.com/package/winterboard" target="_blank">Winterboard</a> אשר מגיע לראשונה למערכת ההפעלה אנדרואיד. משתמשים אשר התקינו לא מכבר רומים מותאמים אישית על המכשירים שלהם, בוודאי מכירים את ה-Theme Chooser אשר נתמך כברירת המחדל על ידי הרומים של CyanogenMOD והוטמע בהמשך על ידי אחרים. עצם העובדה שאושייה כל כך ידועה ומשפיעה על עולם האייפון מצטרפת אל קרב מפתחי הרומים באנדרואיד עשויה למשוך ללא ספק מפתחים רבים אל ה-Framework האלטרנטיבי שלו.</p>
<p>האפליקציה עצמה עדיין בשלבי פיתוח ונכון לעכשיו, איננה שימושית כל כך. חשוב לציין, כי למרות שהאפליקציה נבדקה באופן יסודי על גירסאות שונות של אנדרואיד ומכשירים שונים על ידי קהילת המפתחים של XDA והוטמעו בה אמצעי בטיחות רבים, היא עדיין אינה מומלצת להתקנה. בכל מקרה, חשוב שמי שבוחר לנסות ולהתקין את ה-Framework על המכשיר שלו ידע שהחזקת מקש הווליום העליון במכשיר בזמן אתחול הטלפון מפעיל את המצב הבטוח של ה-Framework ומשבית את כל התוספים המופעלים על ידי Cydia Substrate.</p>
<p><a href="https://play.google.com/store/apps/details?id=com.saurik.substrate" target="_blank">להורדת Cydia Substrate לאנדרואיד</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/cydia-now-in-android/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>טרנדים בפיתוח הצד הקדמי של האינטרנט</title>
		<link>http://www.geektime.co.il/new-trends-at-internet-front/</link>
		<comments>http://www.geektime.co.il/new-trends-at-internet-front/#comments</comments>
		<pubDate>Tue, 14 May 2013 09:25:27 +0000</pubDate>
		<dc:creator>יגאל סטקלוב</dc:creator>
				<category><![CDATA[אינטרנט]]></category>
		<category><![CDATA[אירועים]]></category>
		<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[front trends]]></category>
		<category><![CDATA[ווב]]></category>
		<category><![CDATA[טכנולוגיית web]]></category>
		<category><![CDATA[מחשוב העתיד]]></category>
		<category><![CDATA[מפתח צד קדמי]]></category>
		<category><![CDATA[מפתחי הצד הקדמי]]></category>
		<category><![CDATA[נטקראפט]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=164532</guid>
		<description><![CDATA[לא יצא לכם להשתתף בכנס Front Trends 2013? לא נורא, הנה תקציר ההרצאות הכי מעניינות של אחד הכנסים החשובים עבור קהילת מפתחי ה-Front End]]></description>
				<content:encoded><![CDATA[<p>במטוס, בדרך חזרה מכנס <a href="http://2013.front-trends.com/" target="_blank">Front Trends 2013</a> אליו נשלחתי מטעם <a href="http://netcraft.co.il" target="_blank">נטקראפט</a> <a href="http://netcraft.co.il" target="_blank"><img alt="לב" src="https://dl.dropboxusercontent.com/u/43643514/front-trends/netcraft-hart.png" width="15" height="12" /></a>, לא יכולתי להתאפק והתחלתי לכתוב את הפוסט הזה כדי לספר לכם על ההרצאות המרתקות ומעוררות ההשראה שנכחתי בהן.</p>
<p><img alt="" src="https://dl.dropboxusercontent.com/u/574994/front-trends.png" width="500" height="377" /></p>
<p>אל הכנס, שהוא אחד הכנסים המובילים באירופה לקהילת מפתחי הצד הקדמי, מגיעים משתתפים ומרצים מאירופה, רוסיה ואוקראינה וגם מארה&quot;ב ואוסטרליה. הנוכחות של מפתחים פולנים (קל&quot;ב אחרי הכל) בלטה הפעם במיוחד יחד עם מפתחים גרמנים ואנגלים. הפוסט מסכם את ההרצאות הבולטות ביותר ואת הטרנדים שאליהם הולך התחום בשנים הקרובות.</p>
<h3>טכנולוגיות Web כפלטפורמה למחשוב העתיד, אלן ווירפס-ברוק</h3>
<p><a href="https://twitter.com/awbjs" target="_blank">אלן ווירפס-ברוק</a> (Allen Wirfs-Brock) העומד בראש הפרויקט לתקינת <a href="http://en.wikipedia.org/wiki/ECMAScript#ECMAScript_Harmony_.286th_Edition.29" target="_blank">ECMAScript 6</a> היה ה-Keynote Speaker עם <a href="http://www.slideshare.net/allenwb/fronttrends-awb" target="_blank">הרצאה</a> מרתקת ומעוררת השראה. בהיותו איש מחשבים ותיק (בניגוד לחלק גדול מהנוכחים בכנס שממוצע הגילאים שלהם היה להערכתי 25-35), הוא סיפר על התפתחות המחשוב התאגידי שנשלט ברובו ע&quot;י IBM והשפות COBOL/Fortran.</p>
<p>בשנות ה-80 התרחשה מהפכת המחשוב האישי (ה-PC) שהכתיר את אינטל למובילת התחום עם ++C. כיום, לפי אלן, אנו עומדים בפתחה של תקופת <a href="http://en.wikipedia.org/wiki/Ambient_intelligence" target="_blank">המחשוב האמביינטי</a>, תקופה בה המחשבים יהיו מודעים לקיומם של אנשים ויגיבו בצורה משמעותית לכך. כבר כיום ישנם שלל מכשירים אשר לא מנסים להיות ה-PC באריזה שונה, אלא כולם מחוברים יחדיו ומציגים חוויה אחידה כאשר הפלטפורמה שהמכשירים הללו משתמשים בה היא Web, כלומר HTML, CSS ו-JavaScript. דוגמאות לכך ניתן לראות בהתרבות אפליקציות מבוססות HTML5 בטלפונים הניידים והטאבלטים, <a href="http://en.wikipedia.org/wiki/Firefox_OS" target="_blank">מערכות הפעלה למכשירי מובייל</a>, בטלויזיות חכמות ומוצרים נוספים כמו <a href="http://www.sonymobile.com/us/products/accessories/smartwatch/" target="_blank">שעוני יד חכמים</a> או <a href="http://www.google.com/glass/start/" target="_blank">המשקפיים</a> המהפכניות של גוגל.</p>
<h3>בואו נעשה const ו-let ביחד כבר היום, אולוב לאסוס</h3>
<p>בכנס דובר רבות אודות ECMAScript 6, אשר טיוטת התקן שלו צפויה להיות מוכנה עד סוף השנה וה-Working Group שלו צופה לאשרה כתקן עד סוף 2014. <a href="https://twitter.com/olov" target="_blank">אולוב לאסוס</a> (Olov Lassus) <a href="http://blog.lassus.se/files/lets_const_together_ft2013.pdf" target="_blank">הציג</a> את פרויקט ה-<a href="https://github.com/olov/defs" target="_blank">DEFS.js</a> שלו, precompiler ל-JavaScript המאפשר להשתמש ב-let ו-const של ECMAScript 6 כבר היום.</p>
<p>פרט לכך, DEFS.js מבצע ניתוח של הקוד ומתריע על בעיות scope פוטנציאליות. היופי בפריקומפיילר זה הוא שבעתיד הקרוב יחסית, כאשר הדפדפנים יתמכו ב-EC6 בצורה טובה יותר, ניתן יהיה פשוט לוותר על השימוש בו. כמו כן, הוא כמעט ולא משנה את הקוד המקורי שלנו פרט להוספת suffix (של דולר ומספר אינדקס) למשתנים שהוגדרו כ-let/const בצורה צפויה מראש ללא שינוי מספרי שורות.</p>
<div style="width: 100%;">
<h4>מקור</h4>
<pre class="brush: jscript; title: ; notranslate">
function fn() {
	let y = 0; // z is certainly not defined here

	for (let x = 0; x &lt; 10; x++) {
		let y = x * 2;
		let z = y;
	}

	console.log(y);  // prints 0
	// z is not defined here
}
</pre>
</div>
<div style="width: 100%;">
<h4>מקומפל</h4>
<pre class="brush: jscript; title: ; notranslate">
function fn() {
	var y = 0; // z is certainly not defined here

	for (var x = 0; x &lt; 10; x++) {
		var y$0 = x * 2;
		var z = y$0;
	}

	console.log(y);  // prints 0
	// z is not defined here
}
</pre>
</div>
<h3>שיקולים לשיפור ביצועים במובייל, אסטל וואי</h3>
<p><a href="http://www.standardista.com/" target="_blank">אסטל וואי</a> (Estelle Wey) <a href="http://estelle.github.io/mobilecss/" target="_blank">הציגה</a> שיקולים שיש לקחת בחשבון בנושאי ביצועים בכל הקשור למכשירים ניידים. ראשית, יש להבין שהמגבלות של מכשירי מובייל הם לא רק גודל מסך או חיבור איטי, אלא העובדה שהם עובדים על סוללה (וכל סמארטפון צריך לתדלק גם ככה מהר מדי) וכן זיכרון ה-RAM המועט יחסית בהשוואה למחשבים האישיים. בהמשך הציגה אסטל מספר כללים לחיסכון בסוללה:</p>
<ul>
<li>העדיפו להשתמש ב-JPEG על פני PNG או GIF. זאת בעיקר מאחר ו-JPEG לא תומך בשקיפות ולכן נדרשים פחות משאבים (=חשמל) לרינדור התמונה.</li>
<li>מזערו את כמות האלמנטים ב-DOM למינימום האפשרי.</li>
<li>הקטינו את כמות קוד ה-JavaScript שאתם טוענים. כלומר, אם חשבתם שמאחר ואתם טוענים את jQuery והספרייה תהיה ב-cache של הדפדפן אתם &quot;מוגנים&quot; אז אתם כנראה טועים שכן הדפדפן בכל זאת צריך לפרסר את כל הקוד של הספרייה. לכן, אם אתם מוסיפים את jQuery (או כל ספרייה אחרת) לפרוייקט רק כדי לעשות דברים שיכולתם לעשות באמצעות <a href="http://vanilla-js.com/" target="_blank">Vanilla JS</a>, וותרו על כך. זכרו גם כי מכשירי המובייל בד&quot;כ מריצים דפדפנים מודרניים המאפשרים לעשות את מה שספריות כמו jQuery מנסות להשלים בצורה מלאכותית. לדוגמה, הדפדפנים תומכים ב- <a href="https://developer.mozilla.org/en/docs/DOM/Element.querySelectorAll" target="_blank">Query Selector</a> ולכן אין צורך ב- <a href="http://sizzlejs.com/" target="_blank">Sizzle</a>, המנוע שמאפשר ל-jQuery לבחור אלמנטים ב-DOM.</li>
<li>השתדלו לוותר על אנימציות מבוססות JavaScript והשתמשו ב- CSS transitions/animations על מנת להשיג תוצאות דומות. הרווח מסעיף זה הוא איננו רק חסכון בסוללה, אלא גם אנימציות חלקות יותר.</li>
</ul>
<p>נקודת תורפה נוספת של מכשירי המובייל היא שחיבור האינטרנט מתבצע באמצעות רשת הסלולר. במחשב רגיל התקשורת עוברת מהמחשב ישירות לספקית הרשת (ISP) ומשם לשרת היעד. לעומת זאת, בסלולר על התקשורת לעבור באנטנה הסלולרית ובתשתית של חברת הסלולר ורק לאחר מכן להמשיך לספקית הרשת ולשרת היעד. לכן חשוב מאוד למזער חיפוש (lookup) ב-DNS במידת האפשר, להקטין את כמות הבקשות לקבצים חיצוניים (CSS, JS, פונטים, תמונות וכו') מהשרת ולאחד אותן במידת האפשר. ניתן להשיג את המטרה הזאת באמצעות שימוש בספרייטים או ב-Data URI, חיבור מספר קבצי JS או CSS יחד וכו'.</p>
<p>טכניקת עבודה נוספת ומומלצת היא להשתמש ב- <a href="http://www.html5rocks.com/en/features/storage" target="_blank">Web Storage</a>, כלי מתקדם נוסף שזמין לנו כבר היום במכשירי המובייל, על מנת <a href="http://www.ibm.com/developerworks/xml/library/x-html5mobile2/" target="_blank">לעשות caching חכם</a> בצד לקוח. עלינו לשאוף לדחוס גם את התמונות שלנו למקסימום האפשרי. ניתן להשיג זאת ע&quot;י מזעור השימוש ב-<a href="https://dl.dropboxusercontent.com/u/43643514/front-trends/animated.gif" target="_blank">Animated GIFs</a> (ולהחליפן באנימציות CSS כמובן) וכן לוותר על שקיפות alpha בתמונות PNG. מומלץ להשתמש בכלים כמו <a href="http://tinypng.org/" target="_blank">TinyPNG</a> למזעור התמונות. בנוסף, במקרים רבים ניתן להמנע מתמונות לאייקונים לגמרי ע&quot;י שימוש בספריות אייקונים דוגמת <a href="http://fortawesome.github.io/Font-Awesome/" target="_blank">Font Awesome</a> או <a href="http://copypastecharacter.com/" target="_blank">CopyPasteCharacter</a> (שאפילו לא דורש טעינה של שום דבר נוסף על מנת להשתמש בה &#8211; רק להעתיק ולהדביק).</p>
<p>אופטימיזציה נוספת היא להשתמש ב-CSS Transformations לאנימציות במידת האפשר (לדוגמה לצורך הזזת אלמנט ממיקום אחד לאחר &#8211; במקום שימוש ב- absolute/top/left). זאת מאחר שבצורה כזאת לא מתבצע reflow מיותר של העמוד בגלל שפונקציית ה-transform משתמשת באותו ה-bitmap על מנת לעשות את המניפולציות הגרפיות ולא מציירת את האלמנט(ים) מחדש. בנוסף אנחנו גם מרוויחים ביצועים טובים יותר מאחר ונעשה שימוש ב<a href="http://en.wikipedia.org/wiki/Hardware_acceleration" target="_blank">האצת חומרה</a>, כלומר בכרטיס הגרפי של המכשיר.</p>
<p>אסטל הציגה <a href="http://estelle.github.io/mobilecss/#slide31" target="_blank">שיטה מאוד מעניינת</a> להשגת התנהגות של <a href="http://www.w3.org/community/respimg/" target="_blank">Responsive Images</a> (שכרגע לצערנו זו רק הצעה לתקינה) תוך שימוש ב-CSS ו-SVG בלבד, <a href="http://www.slideshare.net/igalst/responsive-design-15085745/15" target="_blank">בניגוד לשיטות הנהוגות כיום</a> המאפשרות לבצע זאת באמצעות JavaScript בלבד. הטריק בשיטה שאסטל הציגה מתבסס על כך שבמידה ועובדים עם SVG ובתוכו משתמשים ב-media query, אזי ערכי ה-min/max-width/height מתייחסים לגודל האלמנט בעמוד ולא לגודל חלון הדפדפן. בצורה כזאת נוכל להכין לנו <a href="http://estelle.github.io/clowncar/local.svg" target="_blank">קבצי SVG לכל סט</a> של גדלי תמונות ולהטמיעה את קובץ ה-SVG כאילו היה תמונה. כך תמונת ה-SVG שניצור תהיה רספונסיבית ותציג את התמונה המתאימה לגודל הרצוי.</p>
<h3>המטרה: אנימציות חלקות בדפדפן, ג'ק ארצ'יבלד</h3>
<p><a href="https://twitter.com/jaffathecake" target="_blank">ג'ק ארצ'יבלד</a> (Jake Archibald) משמש כ-Developer Advocate בגוגל. ג'ק הדגיש את חשיבות השימוש בכלים שהדפדפנים המודרנים כוללים על מנת לבדוק ולשפר את ביצועי הקוד אותו אנחנו כותבים, או במילים שלו &#8211; &quot;Tools, not Rules&quot;.</p>
<p><a href="https://speakerdeck.com/jaffathecake/rendering-without-lumps" target="_blank">בהרצאה</a> שלו ג'ק הציג בצורה מדעית (באמצעות ה-profiler של Chrome DevTools) באיזה שלב של הרצת הקוד אנחנו &quot;משלמים&quot; הכי הרבה בביצועים וגורמים לדפדפן לעבוד קשה כדי לצייר על המסך את מה שהעמוד מכיל. הירידה הזאת בביצועים באה לידי ביטוי בכך שמאחר וכל ציור של פריים לוקח יותר זמן, הדפדפן מספיק לצייר פחות פריימים בשניה ולכן מדד ה-<span style="direction: ltr: display: inline-block;">FPS (Frames Per Second) יורד למספרים נמוכים.</span></p>
<p>כדוגמה, ג'ק הציג <a href="https://speakerdeck.com/jaffathecake/rendering-without-lumps#27" target="_blank">עמוד</a> ובו כמה עשרות אלמנטים עם box-shadow. לאחר שהדפדפן יסיים לצייר פעם אחת את כל האלמנטים הללו, הוא לא יצטרך לעבוד קשה על מנת לצייר את העמוד כתגובה לביצוע גלילה ע&quot;י המשתמש. לעומת זאת, אם נוסיף ל-body של העמוד רקע עם -</p>
<pre class="brush: css; title: ; notranslate">background-position: fixed;</pre>
<p>נבחין מיד כיצד כל גלילה של העמוד גורמת לדפדפן לעבוד קשה על מנת לצייר את התמונה המעודכנת. ניתן היה להבחין כי הדפדפן מזיע הרבה לא רק לפי <a href="https://dl.dropboxusercontent.com/u/43643514/front-trends/fps-meter.png" target="_blank">מונה ה-FPS</a> אלא גם בתגובה איטית של הדפדפן לגלילה. הדפדפן מתקשה כל-כך בגלל שבניגוד למקרה הקודם שבו הדפדפן צייר רק פעם אחת את האלמנטים, במקרה בו יש רקע קבוע על הדפדפן לחשב עבור כל אלמנט כיצד ה-box-shadow שלו מוצג יחד עם תמונת הרקע. יתרה מזאת, לאחר הפעלת האפשרות ב-Dev Tools <a href="https://dl.dropboxusercontent.com/u/43643514/front-trends/paint-rectangles.png" target="_blank">להצגת האלמנטים אותם הדפדפן מצייר</a>, ניתן להבחין כי לפני שהוספנו תמונת רקע, הדפדפן לא היה צריך לצייר את האלמנטים מחדש כתגובה לגלילה של העמוד אך עם הרקע הקבוע כל העמוד מצוייר מחדש.</p>
<p>ג'ק הסביר בהמשך את הבעייתיות עם אנימציות על מסכים בכלל ובתוך הדפדפן בפרט ולאחר מכן הציג את צורת העבודה הנכונה כדי להשיג אנימציות חלקות בדפדפן. הבעיה, תחילה, נובעת מכך שעלינו לסנכרן בין ציור הפריימים בדפדפן לבין קצב הריענון (refresh rate) של המסך. פתרון הטוב ביותר הוא יצירת אנימציות באמצעות CSS. במידה ואתם צריכים אנימציות מבוססות JavaScript, אז הדרך הטובה ביותר היא עבודה עם <a href="https://developer.mozilla.org/en-US/docs/DOM/window.requestAnimationFrame" target="_blank">requestAnimationFrame</a> ו-fallback בדמות setTimeout של 16.7 שניות. למה 16.7? תצטרכו לעבור על <a href="https://speakerdeck.com/jaffathecake/rendering-without-lumps" target="_blank">המצגת המדהימה שלו</a>.</p>
<p>כך שלסיכום, עליכם כל הזמן לשאול את עצמכם <a href="https://twitter.com/search/%23wtfps" target="_blank">WTFPS?!</a></p>
<p style="text-align: right;">אגב, לקראת סוף ההרצאה וביוזמה מבורכת ג'ק הדגים מה יש לעשות כדי שכלים דומים אולי יופיעו בגירסאות הבאות של Internet Explorer. נקווה רק שזה יעזור:</p>
<p><a href="https://twitter.com/IE" target="_blank"><img alt="" src="https://dl.dropboxusercontent.com/u/43643514/front-trends/ie-tools.png" width="500" /></a></p>
<h3>המחשבה מאחורי BEM, ורוורה סטפנובה</h3>
<p><a href="https://twitter.com/toivonens" target="_blank">ורוורה סטפנובה</a> (Varvara Stepanova) היא ראש צוות פיתוח צד קדמי ב-<a href="http://www.yandex.ru/" target="_blank">Yandex.ru</a>, הגוגל הרוסי. בהרצאתה היא הציגה את פרויקט <a href="http://bem.info/" target="_blank">BEM</a> (שזה Block Element Modifier). מדובר בכלי פנימי של יאנדקס שפותח על ידם החל מ-2005 וכעת הם שחררו אותו כפרויקט Open Source.</p>
<p>מההרצאה, כמו גם משיחה שניהלתי עם ורוורה לאחר מכן קשה שלא לשים לב שיאנדקס צמאים לדחוף את הפרוייקט הזה קדימה וישמחו לקבל pull requests ב-<a href="https://github.com/bem/" target="_blank">GitHub</a>. לי אישית הפרויקט הזה מזכיר קצת את Twitter Bootstrap שכן גם הגרעין שלו הוא קופמוננטות (בלוקים בשפת BEM) לשימוש ב-UI של אתרים ואפליקציות ווב.</p>
<p>בולטת מאוד העובדה שקיימת <a href="http://coding.smashingmagazine.com/2012/04/16/a-new-front-end-methodology-bem/" target="_blank">פילוסופיה שלמה</a> העומדת מאחורי הפרויקט והושקעה בה מחשבה רבה שכן יאנדקס מפתחים אותו במשך כ-8 שנים ומשתמשים בו בלמעלה מ-100 שירותים שונים שלהם. פרט לאפשרות לייצר קומפוננטות באמצעות BEM, הפרויקט מגיע עם מספר <a href="http://bem.info/tools/" target="_blank">כלים מעניינים</a> נוספים, אחד הבולטים שבהם הוא CSS Optimizer, או <a href="http://bem.info/tools/csso/" target="_blank">CSSO</a> בקיצור. ה-CSSO מאוד הזכיר לי גירסה קצת מצומצמת של SASS + Compass. כשורווה נשאלה למה CSSO עדיף על SASS, תשובתה הייתה פשוט &quot;כי ככה&quot;. כמובן שתשובה מסוג זה גררה צחוק ומחיאות כפיים רבות מהקהל. ללא ספק מומלץ לבדוק את BEM. יש לו תיעוד רב באנגלית וגם עומדת מאחוריו חברת ענק בשוק הרוסי ומציעה גישות קצת שונות לכל נושא הקומפוננטות שאנחנו (הישראלים שהולכים בעיקר אחרי הטרנדים האמריקאים והאירופאים) כמעט ולא נחשפנו אליהן.</p>
<h3>הכירו את השגיאות שלכם, דייגו אנטונס</h3>
<p><a href="https://twitter.com/dicode" target="_blank">דייגו אנטונס</a> (Diogo Antunes), מפתח צד קדמי מ-<a href="http://www.booking.com/" target="_blank">Booking.com</a> <a href="http://www.slideshare.net/dicode/know-your-errors" target="_blank">סיפר</a> על ההתמודדות שלהם עם מעקב אחר שגיאות JavaScript. עבור חברה כמו Booking.com, אתר שלא מתפקד כראוי מתורגם בצורה ישירה להפסד כספי ולכן הנושא מאוד קרוב לליבם.</p>
<p>אחת השיטות הפשוטות ביותר שהוא הציג להתמודדות עם ניטור ומעקב אחר שגיאות JavaScript היא שימוש ב- <a href="https://developer.mozilla.org/en-US/docs/DOM/window.onerror" target="_blank">window.onerror</a>, כך ניתן בקלות להתמודד עם שגיאות המתרחשות בקוד או לכל הפחות להשתיק אותן מבלי שהמשתמשים ירגישו. במידה ונהיה מעוניינים לשמור את השגיאות, מומלץ לעשות זאת באמצעות <a href="http://en.wikipedia.org/wiki/Web_bug" target="_blank">Pixel Image</a>; השיטה שנמצאת איתנו כבר שנים רבות מתבססת על טעינת תמונה בגודל 1&#215;1 פיקסלים והוספת query string לכתובת של התמונה עם מידע אותו ברצוננו להעביר לשרת. נעדיף להשתמש בשיטה זו במקום AJAX request מאחר וייתכן והבעיה שיצרה את השגיאה נעוצה דווקא ב-AJAX. כלומר, ננסה לכתוב כמה שפחות קוד JavaScript על מנת לדווח על השגיאה ונשתמש בתכונות הבסיסיות של הדפדפן לטעינת תמונות על מנת להעביר את הדיווח לשרת.</p>
<p>דיאגו הציג גם את השימוש בבלוקים של try/catch כאפשרות, אך בעיניי מדובר בפתרון גרוע שכן נענש בביצועים פחות טובים &#8211; try/catch גוזל הרבה משאבים מהדפדפן, וחבל. אפשרות נוספת, במידה ומעניין אותנו לצרכים סטטיסטים לנטר את כמות השגיאות, ניתן להשתמש ב- Google Analytics על מנת <a href="https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide" target="_blank">לדווח על &quot;ארוע&quot;</a> של שגיאה.</p>
<p>מיקרו-ספרייה מעניינת שדיאגו הציג היא <a href="http://stacktracejs.com/" target="_blank">stacktrace.js</a> אשר עוזרת מאוד לקבל מידע רב על השגיאות שהתרחשו ושימושית במיוחד בדפדפנים בעייתים ל-debugging כגון IE לדורותיו. בנוסף, ישנם שירותים קיימים לניטור שגיאות JavaScript כגון: <a href="https://qbaka.com/" target="_blank">Qbaka</a>, <a href="http://errorception.com/" target="_blank">Errorception</a>, <a href="http://jserrlog.appspot.com/" target="_blank">jsErrLog</a>, <a href="http://www.muscula.com/" target="_blank">Muscula</a> ונוספים. רובם ככולם מאוד דומים בפונקציונליות שלהם פרט לכך שחלקם מוצעים במודל של SaaS ואחרים ניתנים להתקנה על השרת שלכם.</p>
<h3>בקטנות</h3>
<p><a href="https://twitter.com/gr2m" target="_blank">גרגור מאריטינוס</a> (Gregor Martynus) <a href="https://speakerdeck.com/gr2m/look-ma-no-backend" target="_blank">הציג</a> את חזונו על עתיד (או אולי כבר על הווה) טוב יותר שבו לא יהיה עוד back end. ליתר דיוק, מפתחי צד קדמי לא יצטרכו לדאוג ל-back end, אלא להתחיל לעבוד על האפליקציה (המאאגניבה) החל מהרגע הראשון.</p>
<p><img alt="2013 היא השנה שבה אפשר להפסיק לחשוב על back end" src="https://dl.dropboxusercontent.com/u/43643514/front-trends/no-backend.jpg" width="500" /></p>
<p>לא עוד יצירת טפסי הרשמה וניהול סיסמאות משתמשים אלא ריכוז המשאבים במה שהופך את האפליקציה שלנו לכל כך טובה. כבר היום יש כלים כמו <a href="https://www.firebase.com/" target="_blank">Firebase</a> <a href="http://nobackend.org/solutions/" target="_blank">ואחרים</a>, אך כל כלי הולך בגישה מעט שונה ומנסה לפתור את הנושא בצורה אחרת. לפי גרגור, שנת 2013 היא שנת המפנה ובסופה נוכל לכתוב את ה-<a href="http://nobackend.org/dreamcode/" target="_blank">dreamcode</a> שלנו שמתעסק רק בדברים שמעניינים אותנו כמפתחי צד קדמי. בקיצור, אל תתנו ל-back end לסרס את <a href="https://twitter.com/LeaVerou/status/327727144220385280" target="_blank">היצירתיות</a> שלכם והרשו לעצמכם לחלום.</p>
<p><a href="https://twitter.com/zbraniecki" target="_blank">זביגניו ברנצקי</a> (Zbigniew Braniecki) יחד עם <a href="https://twitter.com/stas" target="_blank">סטאש מאלולפשי</a> (Staś Małolepszy) <a href="http://l20n.github.io/preso/responsive/#/" target="_blank">הציגו</a> את <a href="http://l20n.org/" target="_blank">L20N</a>, ספריה ללוקאליזציה של ממשקי UI עם גישה שונה ומעניינת. בין היתר הספריה חוסכת כתיבה של הרבה קוד מותאם אישית המטפל בתרגומים וכן מאפשרת שינוי הטקסט בהתאם לארועים שונים בדפדפן כמו orientationchange לדוגמה. מוזילה משתמשת בספרייה זו ב-Firefox OS לצרכי לוקאליזציה ותומכת בפרוייקט. שווה בדיקה.</p>
<p><img title="Hi, I'm Lea" alt="" src="https://dl.dropboxusercontent.com/u/43643514/front-trends/lea.jpg" width="500" /></p>
<p><a href="https://twitter.com/LeaVerou" target="_blank">לאה ורו</a> (Lea Verou), שאותה אין צורך להציג, <a href="http://lea.verou.me/humble-border-radius/#for-browser" target="_blank">דיברה</a> על הרבה פינות מעניינות של border-radius ומה בדיוק המשמעות של כל הערכים שהמאפיין יכול לקבל וכיצד הדפדפן מפרש אותם. לאה אף אמרה בגיחוך שהיא דיברה בכל הכנסים של Front Trends &#8211; בראשון היא דיברה על CSS באופן כללי, בשני על CSS3 ובכנס הנוכחי היא מדברת רק על border-radius, כך שכל פעם נושא ההרצאה שלה מצטמצם. למרות זאת היא הצליחה לתת שואו מעולה על הבמה, על אף שהנושא נראה ממבט ראשון חרוש ומוכר.</p>
<p><a href="https://twitter.com/rachelandrew" target="_blank">ריצ'ל אנדרו</a> (Rachel Andrew) היא הבעלים של חברה בריטית המפתחת מערכת ניהול תוכן קטנה. מאחר ומדובר במערכת להצגת תוכן, כל נושאי ה-layout קרובים מאוד לליבה. ריצ'ל <a href="https://speakerdeck.com/rachelandrew/front-trends-2013-the-new-css-layout" target="_blank">סקרה</a> את החידושים שמגיעים לדפדפנים בימים אלו כמו עמודות, flexbox החדש, ה-grid, ה-regions ונוספים.</p>
<p><a href="https://twitter.com/asciidisco/" target="_blank">סבסטיאן גולש</a> (Sebastian Golasch) <a href="http://ft2013.asciidisco.com/#/" target="_blank">הציג</a> את <a href="https://github.com/dalekjs" target="_blank">Dalekt JS</a>, כלי לאוטומטיזציה של בדיקות UI ופונקציונליות אשר שואב השראה (וגם מממש) מ-<a href="http://www.w3.org/TR/2013/WD-webdriver-20130312/" target="_blank">Selenium WebDriver</a>. הכלי כרגע בשלבי פיתוח מוקדמים אך נראה מבטיח. המטרה היא ליצור כלי שיאפשר ל-FED-ים להריץ דפדפן וירטואלי ולשלוט עליו מקוד ה-JavaScript אותו כולנו מכירים. בצורה כזאת ניתן יהיה לבצע בדיקות כמו לחיצה על קישורים ווידאו הכתובת אליה הדפדפן הועבר או בחירת אפשרויות ב-select.</p>
<p>בחור כבד ראייה המשמש כיועץ הנגשת אתרים הציג את השיטה הנכונה ביותר ל-<a href="http://codepen.io/igalst/pen/gaLKf" target="_blank">Image Replacement נגיש</a>. בעוד שקיימות <a href="http://css-tricks.com/css-image-replacement/" target="_blank">שיטות רבות</a>, מפתחים רבים לא מנגישים אתרים כלל, אחרים כן מנגישים אך שוכחים מגולשים שהם כבדי ראייה, אשר לא בהכרח עיוורים באופן מוחלט, ובדרך כלל צופים באתר שלהם עם zoom או עם צבעים הפוכים (נגטיב).</p>
<h3>סיכום</h3>
<p>הכנס חיזק בי את ההרגשה שאנחנו נמצאים בתחילתו של עידן חדש בתחום פיתוח התוכנה, ומפתחי צד קדמי יהיו החזית שלו בשנים ואולי אף בעשורים הקרובים. קשה שלא לשים לב כי קיים מאמץ משותף מצד גופי התקינה מחד ויצרני הדפדפנים והמכשירים מאידך לשפר ולייצר תקינה עדכנית בתחום. כל התעשייה הזו עובדת במרץ בשנים האחרונות על מנת <a href="http://movethewebforward.org/" target="_blank">לקדם את האינטרנט קדימה</a> ולנתקו מהקשר ההדוק שלו לדפדפן על מנת לאפשר לו להתפשט לאיזורים וסביבות נוספות. אולי זה קצת נדוש, אבל באמת שנפלה בחלקנו, מפתחי Front End, הזכות להיות במרכזו של התהליך הזה שהשפעותיו ילוו אותנו עוד שנים ארוכות.</p>
<p>משהו שחזר על עצמו כל הזמן מנציגים של גופי התקינה היא הבקשה שלהם לקבלת פידבק מהקהילה (שזה כולנו, כן?) על הטיוטות לתקנים וכן מנציגי יצרני הדפדפנים שמשתוקקים לשמוע גם הם חוות דעת על המימושים והכלים שלהם. נתראה ב- Front Trends 2014.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/new-trends-at-internet-front/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>כמה אתם באמת יודעים על קוד פתוח? [חידון עם פרסים]</title>
		<link>http://www.geektime.co.il/opensource-questions-jb/</link>
		<comments>http://www.geektime.co.il/opensource-questions-jb/#comments</comments>
		<pubDate>Sun, 05 May 2013 08:20:45 +0000</pubDate>
		<dc:creator>מערכת גיקטיים</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[גון ברייס - מכללת טכנולוגיה]]></category>
		<category><![CDATA[חידון]]></category>
		<category><![CDATA[מובייל]]></category>
		<category><![CDATA[פייתון]]></category>
		<category><![CDATA[פרסים]]></category>
		<category><![CDATA[קוד פתוח]]></category>
		<category><![CDATA[רובי]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=163349</guid>
		<description><![CDATA[מפתחים בפייתון או ברובי? סתם אוהבים קוד פתוח? יש לנו חידון עבורכם, ואם תהיו בין שלושת הראשונים לענות על כל עשר השאלות נכונה גם תזכו במיני פי.סי חדש עם אנדרואיד לטלוויזיה שלכם.]]></description>
				<content:encoded><![CDATA[<div id="attachment_163350" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-163350 " title="open-source" alt="cc-by-fraserspeirs" src="http://www.geektime.co.il/wp-content/uploads/2013/05/3394900315_9bd8566018_o-300x199.jpg" width="300" height="199" /><p class="wp-caption-text">cc-by-fraserspeirs</p></div>
<p dir="RTL">כמעט כל יזם מכיר את הביטוי ”קוד פתוח“ &#8211; כביכול, תוכנה שניתן להוריד מהאינטרנט בחינם, ולהשתמש בה כטוב בעיניהם. אינספור מיזמים היום בנויים עם התשתיות האלה, ולמה לא? מלבד המחיר המפתה, קוד פתוח קיים לפתור בעיות, ללא ספין שיווקי, גישה שהופכת את התוכנה ליעילה ופרגמטית, כמו חברות היי-טק. מסביב לכל פרוייקט טוב בקוד הפתוח יש קהילה שעוזרת לחדשים ווותיקים כאחד להתקין, להתאים, ולהרחיב את התכונה עצמה.</p>
<p dir="RTL">אבל גם עם כל הפופולריות של קוד פתוח, יש עדיין הרבה דברים שאנשים אינם יודעים עליו.</p>
<p>החידון הזה מיועד לכל מי שחושב שהוא יודע הכל, או לצנועים יותר מביניכם, לאלו שחושבים שהם יודעים לא מעט על פיתוח במובייל. ניוזגיק וג'ון ברייס מכללת היי-טק מזמינים אתכם לחידון בן עשר שאלות מרובות בחירה (אמריקאי) הסוקרות באופן מדגמי את תחום הפיתוח למובייל, בפלטפורמות השונות וכן שאלות &quot;ידע כללי&quot; בנוגע לאיזו חברה עומדת מאחורי מה. שלושת הגולשים הראשונים שישיבו נכונה על כל השאלות, יזכו במכשיר MiniPC מבוסס אנדרואיד מדגם MK802iii.</p>
<p>לא מפתחים בקוד פתוח ורוצים להתחיל? ג'ון-ברייס מכללת הי-טק מספקת מגוון קורסים בתחום פיתוח בקוד פתוח כולל קורסים בשפות Ruby-on-Rails ו-Python למתחילים ולמתקדמים.</p>
<p><strong><a href="http://bit.ly/YhgJPm" target="_blank">לפרטים נוספים על קורסים בתחום הקוד הפתוח</a></strong></p>
<h3>אז קדימה, אתם עוד פה?</h3>
<p>הזדרזו לענות נכונה על עשר השאלות ואם תהיו בין השלושה הראשונים שיעשו זאת, גם תזכו בפרסים. השאלות נכתב על-ידי ראובן לרנר, מרצה בכיר לתחום קוד פתוח בג'ון-ברייס מכללת היי-טק.</p>
<div id="attachment_150109" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-150109" alt="מחשב מיני PC מדגם MK802iii" src="http://www.geektime.co.il/wp-content/uploads/2012/12/Mini-PC-UG802-Dual-Core-RK3066-1-6GHz-Cortex-A9-Dual-Stick-MK802-III-Android-4-300x168.jpg" width="300" height="168" /><p class="wp-caption-text">מחשב מיני PC מדגם MK802iii</p></div>
<p>שלושת הראשונים שישיבו נכונה על כל השאלות יזכו במחשב מיני פי.סי עם מערכת ההפעלה אנדרואיד 4.1 וזיכרון של 4 ג'יגה בייט של Rikomagik. מחשב המיני הזה נמצא על התקן דמוי דיסק און-קי המאפשר להפוך כל טלוויזיית אנדרואיד ולהנות מאפליקציות, גישה לאינטרנט וכל מה שטלוויזיה חכמה והאנדרואיד יכול להציע לכם. אנו מחלקים שלושה מחשבי מיני פי.סי כאלה מתנת ג'ון ברייס מכללת הי-טק.</p>
<p>השאלון יהיה פתוח עד יום חמישי, ה-9.5.2013. הזוכים בפרסים יהיו שלושת המשתתפים הראשונים שישיבו נכונה על כל עשר השאלות הראשונות ללא אף טעות. במידה ובתום תקופת התחרות לא ימצא משתתף שישיב נכונה על כל השאלות, הפרסים יחולקו למשתתפים שענו ראשונים נכונה על מספר השאלות הגבוה ביותר.</p>
<p><strong>עדכון 13/05/13: התחרות הסתיימה והזוכים קיבלו הודעה על זכייתם. שמות הזוכים יפורסמו בפוסט זה בקרוב.</strong></p>
<p>&nbsp;</p>
<hr style="border: 0; height: 1px; border-bottom: 1px dotted #dfdfdf;" />
<h3 dir="RTL">הפעילות נערכת בחסות ג'ון ברייס מכללת הי-טק</h3>
<hr style="border: 0; height: 1px; border-bottom: 1px dotted #dfdfdf;" />
<p dir="RTL"><strong><a href="http://www.johnbryce.co.il/content/קמפיין-פיתוח-geektime?source=145"><img class="alignleft size-full wp-image-160051" alt="a760358c524b5a54522fca321c708bf7" src="http://www.geektime.co.il/wp-content/uploads/2013/03/a760358c524b5a54522fca321c708bf7.gif" width="125" height="125" /></a>ג'ון ברייס מכללת הי-טק</strong> מקבוצת matrix הינה חברת ההדרכה המובילה בישראל ומהמובילות באירופה בתחום הדרכת המחשוב וטכנולוגיית המידע והאלקטרוניקה ובתחום הדרכת מיומנות הניהול, השירות והמכירות. לחברה ניסיון עשיר בהכשרת מפתחים, אך מעבר להסבות הרבות מועברים גם קורסים מקצועיים למגזר עסקי ולארגונים גדולים וקטנים. צוות המרצים הינו צוות מיומן ובקיא הן בהכשרות תלמידים והן בפן הטכנולוגי העדכני ביותר בתחום הקוד הפתוח. ג'ון ברייס מכללת הי-טק מציעה קורסי פיתוח ב-Ruby, פייתון ושפות נוספות שתואמים את צרכי שוק העבודה בתחום.</p>
<p dir="RTL"><strong><a href="http://www.johnbryce.co.il/content/%D7%A7%D7%9E%D7%A4%D7%99%D7%99%D7%9F-%D7%A4%D7%99%D7%AA%D7%95%D7%97-geektime?source=145" target="_blank">הרשמה בחודשי מאי לאחד מהקורסים הנבחרים תזכה אותך, גולש ניוזגיק, במלגה על סך 500 ₪</a></strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/opensource-questions-jb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>עידן ה-HTML5: מאקרו-סמנטיקה, מיקרו-סמנטיקה ומה שביניהן</title>
		<link>http://www.geektime.co.il/macro-semantic-and-micro-semantic/</link>
		<comments>http://www.geektime.co.il/macro-semantic-and-micro-semantic/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 14:31:55 +0000</pubDate>
		<dc:creator>כתב אורח</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[nav]]></category>
		<category><![CDATA[אדיר]]></category>
		<category><![CDATA[אדיר אמסלם]]></category>
		<category><![CDATA[מאקרו סמנטיקה]]></category>
		<category><![CDATA[מיקרו סמנטיקה]]></category>
		<category><![CDATA[מפתח ווב]]></category>
		<category><![CDATA[סמנטיקה]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=162988</guid>
		<description><![CDATA[מה היא סמנטיקה, למה היא טובה לנו ועל מה כל המהומה? הפוסט הבא ינסה להשיב לכם על השאלות]]></description>
				<content:encoded><![CDATA[<p><strong>הפוסט נכתב על ידי אדיר אמסלם, מפתח אינטרנט.</strong></p>
<div id="attachment_162996" class="wp-caption alignleft" style="width: 310px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/html5.jpg"><img class="size-full wp-image-162996" alt="תמונה: צילומסך" src="http://www.geektime.co.il/wp-content/uploads/2013/04/html5.jpg" width="300" height="183" /></a><p class="wp-caption-text">תמונה: צילומסך</p></div>
<p><strong></strong>סביר להניח שזו הפעם הראשונה שאתם שומעים את המונחים &quot;מאקרו-סמנטיקה&quot; ו-&quot;מיקרו-סמנטיקה&quot;, הרגע המצאתי אותם. בזמן האחרון נתקלתי בלא מעט תהיות לגבי מה היא סמנטיקה, למה היא טובה לנו ועל מה כל המהומה, אנסה לענות על רוב השאלות האלו. אתחיל עם מה שהיה נהוג לכנות עד היום כ-&quot;סמנטיקה&quot;, או מה שמעכשיו והלאה אני אתייחס אליו כ-&quot;מאקרו-סמנטיקה&quot;.</p>
<h3>מאקרו-סמנטיקה</h3>
<p>לא מזמן HTML5 נכנס לתודעה של כולנו, התקן החדש הביא עימו דרכים חדשות ומגוונות שיכולנו לנצל על מנת להקנות משמעות סמנטית לאלמנטים ולמידע שהזנו בדפי האינטרנט שלנו. עד אז היינו עוטפים כמעט כל דבר ב- &lt;div&gt;, תרשו לי לשער שדיב הייתה התגית הנפוצה ביותר באינטרנט – מרבית התוכן בדף היה עטוף בדיבים, היו דיבים בכל מקום, ממש שפע של דיבים.</p>
<p>ב-HTML5 נחשפנו לתגיות שבאמצעותן יכולנו להקנות משמעות לתוכן, תגיות שהפכו את האלמנטים שלנו מסתם קונטיינרים לקונטיינרים עם משמעות, תגיות כגון:</p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/Screen-Shot-2013-04-30-at-1.19.06-PM.png"><img class="aligncenter size-full wp-image-162989" alt="Screen Shot 2013-04-30 at 1.19.06 PM" src="http://www.geektime.co.il/wp-content/uploads/2013/04/Screen-Shot-2013-04-30-at-1.19.06-PM.png" width="600" height="144" /></a>מאותו רגע חלה מהפכה: את תפריטי הניווט יכולנו לעטוף ב- &lt;nav&gt; ולא ב- &lt;div&gt;, עכשיו כולם יודעים שמדובר בתפריט כלשהו, זה לא סתם קונטיינר. את הזמנים השונים יכולנו לעטוף ב- &lt;time&gt;, עכשיו כולם יודעים שמדובר בערך שמייצג זמן כלשהו, זה לא עוד סתם תוכן שזרוק שם. רעיון דומה תקף לגבי כל שאר התגיות והתכונות שהתווספו או הוגדרו מחדש, כעת אנחנו יכולים לתאר את דפי האינטרנט שלנו בצורה הרבה יותר עשירה.</p>
<h3>נגיד.. למה זה טוב?</h3>
<p>היום, בשנת 2013, כמה עשרות שנים לאחר שהאינטרנט הוצג בפעם הראשונה, הוא נמצא כמעט בכל מקום בחיים שלנו. בעבר אם היינו רוצים לגשת לתוכן הנמצא באתר אינטרנט כלשהו – סביר להניח שהיינו מקלידים את הכתובת בדפדפן, מנווטים באמצעות התפריט לדף המבוקש וזה הכל. בעולם שכזה, אין משמעות מיוחדת לסמנטיקה של הקוד, בגדול אפשר אפילו להגיד שמספיק שהתוכן יהיה שם וזהו.</p>
<p>היום המצב שונה, היום יש לנו דרכים הרבה יותר מגוונות למצוא מידע ולצרוך תוכן – החל במנועי חיפוש (כמו גוגל, בינג וכו') ועד לשירותים כאלו ואחרים המתיימרים ללקט עבורנו את המידע שמעניין אותנו ביותר. בקצרה אפשר להגיד שאם בעבר היחידים שהיו צופים באתר שלנו היו בני-אדם, היום אנחנו יכולים וצריכים להנגיש את האתר גם למכונות, לאובייקטים שאינם בעלי תודעה אנושית (עדיין?).</p>
<p>ניקח לדוג' את מנועי החיפוש – על מנת להקל על מנוע החיפוש לסרוק ולהבין את האתר שלנו, נוכל להשתמש בתגיות שצויינו למעלה על מנת להקנות משמעות לתוכן, ליצור היררכיה באתר ולתאר את המידע בצורה אינפורמטיבית, פעולות שבסופו של יום יאפשרו גם למנועי החיפוש להבין מה בעצם הדף שלנו מכיל ומה אנחנו יכולים להציע לקהל הגולשים הרחב.</p>
<p>כשמנועי החיפוש יבינו מה אנחנו מציעים, הם יוכלו להנגיש את התוכן שלנו בצורה טובה יותר למשתמשים ואנחנו נזכה בחשיפה גדולה יותר ובתעבורה גם מקהל שלא בהכרח מכיר את האתר שלנו, או יודע שהוא יכול למצוא את מבוקשו גם אצלנו.</p>
<h3>תרחיש לדוגמה</h3>
<p>בואו נגיד שבאמצעות התגיות שניתנו לנו ברמת המאקרו-סמנטיקה יצרנו את המבנה הבא:</p>
<div id="attachment_162990" class="wp-caption aligncenter" style="width: 210px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/basic-semantic-markup-200x300.png"><img class="size-full wp-image-162990" alt="* אין צורך להתפעל מהיכולות שלי בצייר – כל אחד יכול להגיע לתוצאה כזו לאחר כמה שנות ניסיון." src="http://www.geektime.co.il/wp-content/uploads/2013/04/basic-semantic-markup-200x300.png" width="200" height="300" /></a><p class="wp-caption-text">* אין צורך להתפעל מהיכולות שלי בצייר – כל אחד יכול להגיע לתוצאה כזו לאחר כמה שנות ניסיון.</p></div>
<p>מדובר במבנה מאוד כללי ולאו דווקא נכון, אבל בשלב הזה בואו נצא מנקודת הנחה שזה בסדר. כולנו אוהבים לאכול, אז בואו נגיד שמדובר באתר מתכונים – אחרי שיצרנו את המבנה הבסיסי הזה הוספנו גם כותרת, תמונה, רשימת מצרכים, כמה פסקאות על תהליך ההכנה, הוספנו כמה ביקורות על המתכון ואף נתנו קצת קרדיט ליוצר המתכון, הכל באמצעות תגיות סמנטיות כמובן.</p>
<p>הכל נראה טוב ויפה, אנחנו כבני אדם יודעים להרכיב את פאזל הנתונים הזה ולהבין מה רוצים מאיתנו – אבל מנוע החיפוש לא כל כך חכם, לא כמונו. למנוע החיפוש אין באמת מושג מה אנחנו מציעים כאן – הוא רואה כותרת, תמונה, רשימה, פסקה וכו', הוא יודע שהמידע הזה קשור אחד לשני, אבל איך הוא יכול לדעת שמדובר על מתכון? איך הוא יכול לדעת שאם ניקח את הנתונים מרשימת המצרכים ונבצע את התהליך המפורט בפסקאות, נגיע לתוצאה המופיעה בתמונה ונוכל לקרוא לה בשם הרשום הכותרת – הכל בזכות יוצר המתכון.</p>
<p>הוא פשוט לא יכול, זה מעבר ליכולות התיאור שלנו ברמת המאקרו-סמנטיקה.</p>
<h3>מיקרו-סמנטיקה</h3>
<p>אז מה היא בעצם &quot;מיקרו-סמנטיקה&quot;, מה אני בכלל רוצה, למה אני מבזבז לכם את הזמן וגורם לכם לקרוא מאות מילים לשווא. הטבה נוספת שקיבלנו בחבילת הפינוקים של HTML5 נקראת <a title="Microdata" href="http://en.wikipedia.org/wiki/Microdata_(HTML)" target="_blank">microdata</a> – מדובר בדרך המאפשרת לנו לתאר את התוכן לפרטי פרטים, לרדת לרמת המיקרו (ועל כן היא זכתה בכינוי &quot;מיקרו-סמנטיקה&quot;) ולתאר את התוכן בצורה אפילו יותר מעמיקה ממה שמאפשרות לנו התגיות החדשות והדרכים הקיימות.</p>
<p>חשוב לציין שגם טרם הגעת HTML5 ו-microdata יכולנו לבצע את תהליך המיקרו-סמנטיקה המתואר כאן, אומנם לא באמצעות microdata אך באמצעות דרכים אחרות (ביניהן: <a href="http://en.wikipedia.org/wiki/Microformat" target="_blank">Microformats</a>). לא אתייחס כאן לדרכים &quot;הישנות&quot; – לדעתי microdata עדיפה על כל שאר הדרכים בכל פרמטר ולכן אדבר אך ורק עליה מעכשיו והלאה.</p>
<p>לפני שאחנו מתחילים, אני צריך להכיר לכם חבר חדש שילווה אותנו בהמשך הדרך – תכירו את <a href="http://schema.org/" target="_blank">Schema.org</a> שהנו מאגר-מידע המכיל סכמות המאפשרות לנו לתאר את התוכן לפרטי פרטים, בדיוק כפי שתיארתי בדוגמה הקודמת של המתכון. לא מדובר רק על מתכונים כמובן, ניתן לייצג באמצעותו מגוון רחב מאוד של דברים (<a href="http://schema.org/docs/full.html" target="_blank">לרשימה המלאה</a>).</p>
<p>כפי שניתן לראות קיימת היררכיה בסכמות – כל דבר שאנחנו יכולים לייצג (מלבד &quot;DataType&quot;) הוא קודם כל &quot;<a href="http://schema.org/Thing" target="_blank">Thing</a>&quot;. לכל Thing אנחנו יכולים לשייך שם, תיאור, תמונה וכתובת url – זהו למעשה המבנה הבסיסי ביותר שקיים. שאר הסכמות יורשות מ-Thing ומרחיבות אותו עם מידע נוסף שרלוונטי לגבי כל אחת מהן.</p>
<p>נחזור כעת לדוגמה של המתכון ונראה איך אנחנו יכולים לייצג אותו כך שגם מנוע החיפוש (ושאר המכונות) יוכל להבין את התוכן לא פחות טוב מאיתנו.</p>
<h3>קדימה לאוכל, אה – לעבודה</h3>
<p>קודם כל בואו נכיר את הסכמה המייצגת מתכון – <a title="Recipe" href="http://schema.org/Recipe" target="_blank">http://schema.org/Recipe</a>. מתכון הוא קודם כל Thing, לאחר מכן הוא CreativeWork ולבסוף הוא כמובן Recipe. כל סכמה בהיררכיה מרחיבה את הסכמה ממנה היא יורשת ומוסיפה תכונות נוספות המייצגות ספציפית אותה. מאפיינים מסויימים בסכמה יכולים להצביע לסכמות נוספות – לדוג' יוצר המתכון הוא למעשה <a href="http://schema.org/Person" target="_blank">Person</a> או <a href="http://schema.org/Organization" target="_blank">Organization</a>, כל ביקורת היא <a href="http://schema.org/Review" target="_blank">Review</a> וכן הלאה. כך ניתן להגדיר קשרים בין פרטי המידע השונים וליצור מבנה שבו ברור לחלוטין מה כל דבר מייצג ולאן הוא שייך.</p>
<p>נעשה שימוש בדוגמאות הקיימות בעמוד של Recipe – אסביר בקצרה מה כל דבר אומר, לאחר מכן תוכלו להבין בעצמכם את שאר המאפיינים ואת כל הסכמות הנוספות.</p>
<p>נתון הטקסט הבא:</p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/Screen-Shot-2013-04-30-at-1.21.19-PM.png"><img class="aligncenter size-full wp-image-162991" alt="Screen Shot 2013-04-30 at 1.21.19 PM" src="http://www.geektime.co.il/wp-content/uploads/2013/04/Screen-Shot-2013-04-30-at-1.21.19-PM.png" width="602" height="451" /></a></p>
<p>על מנת לייצג אותו כ- Recipe, נעשה כך:</p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/Screen-Shot-2013-04-30-at-1.22.18-PM.png"><img class="aligncenter size-full wp-image-162992" alt="Screen Shot 2013-04-30 at 1.22.18 PM" src="http://www.geektime.co.il/wp-content/uploads/2013/04/Screen-Shot-2013-04-30-at-1.22.18-PM.png" width="605" height="637" /></a></p>
<p>הסבר קצרצר:</p>
<ol>
<li>על מנת לייצג פריט אנחנו יוצרים קונטיינר ונותנים לו itemscope.</li>
<li>בנוסף ל-itemscope אנחנו מגדירים itemtype, כאשר ב-itemtype אנו מציינים את עמוד הסכמה הרלוונטי (לדוג': <a href="http://schema.org/Recipe" target="_blank">http://schema.org/Recipe</a>).</li>
<li>על מנת לייצג מאפיין של אותו פריט אנו משתמשים ב-itemprop ומציינים את שם המאפיין (לדוג': name).</li>
<li>במידה והמאפיין מצביע לסכמה אחרת – מוסיפים itemscope ו-itemtype כמו בסעיפים 1 ו-2 וחוזרים על התהליך.</li>
<li>אם רוצים לייצג נתון מסויים אך לא רוצים שהוא יופיע לגולש – ניתן להשתמש בתגית meta אשר מקבלת itemprop כמו בסעיף 3 ואת הנתון עצמו שמים במאפיין content.</li>
</ol>
<p>איבדתם אותי? תחזרו לדוגמה אחרי כל סעיף ותראו איך זה ממומש.</p>
<h3>מנקודת המבט של מנוע החיפוש</h3>
<p>אם הגעתם עד לכאן כנראה שהנושא באמת מעניין אתכם (או שקיבלתם עונש לקרוא כמה פוסטים גרועים, אבל לא נכנס לזה). אחרי שהעשרנו את הדפים שלנו בכל כך הרבה מיקרו-סמנטיקה, אחרי שעבדנו כל כך קשה (טוב, לא באמת) – מנוע החיפוש יכול סוף סוף להבין את השטויות שאנחנו כותבים ולהציג את העמודים שלנו בצורה מדהימה.</p>
<p>אספתי עבורכם כמה דוגמאת לתוצאות המכילות דפים כאלו:</p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/the-godfather.png"><img class="aligncenter size-full wp-image-162993" alt="the-godfather" src="http://www.geektime.co.il/wp-content/uploads/2013/04/the-godfather.png" width="536" height="249" /></a></p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/baked-macaroni-and-cheese.png"><img class="aligncenter size-full wp-image-162994" alt="baked-macaroni-and-cheese" src="http://www.geektime.co.il/wp-content/uploads/2013/04/baked-macaroni-and-cheese.png" width="536" height="379" /></a></p>
<p><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/lady-gaga.png"><img class="aligncenter size-full wp-image-162995" alt="lady-gaga" src="http://www.geektime.co.il/wp-content/uploads/2013/04/lady-gaga.png" width="536" height="195" /></a></p>
<p>שימו לב כמה זה עוזר לו להבין את התוכן ולקשר בין פיסות המידע, שימו לב איזה יופי הוא מציג את העמוד – נראה לכם שעכשיו מישהו בכלל יתלבט האם ללחוץ על התוצאה שמובילה ישר אליכם?</p>
<p>למידע נוסף בעניין מנוע החיפוש של גוגל והשימוש שלו במידע הזה ניתן לקרוא על <a title="Rich Snippets" href="http://support.google.com/webmasters/bin/answer.py?hl=iw&amp;answer=99170" target="_blank">Rich Snippets</a> ולהשתמש <a title="Rich Snippets Tool" href="http://www.google.com/webmasters/tools/richsnippets" target="_blank">בכלי שהם מספקים</a> על מנת לנתח את העמודים.</p>
<h3>לסיכום</h3>
<p>לי אישית אין ספק בתרומה הרבה של microdata להעשרת הסמנטיקה באינטרנט. בעתיד אני מאמין שנזכה לראות שירותים רבים ומגוונים שילקטו מידע מאתרי אינטרנט, סביר להניח שגם הם יסתמכו לא מעט על microdata כדי להצליח להבין ולקשר בין כל פיסות המידע הנמצאות בעמודים השונים.</p>
<p><strong><em id="__mceDel">הפוסט פורסם לראשונה בבלוג <a href="http://www.adir.me/macro-semantic-and-micro-semantic/" target="_blank">אני, אדיר</a>.</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/macro-semantic-and-micro-semantic/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>על מה מפתחים מבזבזים את הזמן שלהם?</title>
		<link>http://www.geektime.co.il/developers-spend-their-time-on-waiting/</link>
		<comments>http://www.geektime.co.il/developers-spend-their-time-on-waiting/#comments</comments>
		<pubDate>Sun, 28 Apr 2013 09:25:56 +0000</pubDate>
		<dc:creator>אבישי בסה</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Electric Cloud]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[survey]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Wait]]></category>
		<category><![CDATA[אלקטריק קלאוד]]></category>
		<category><![CDATA[זמן]]></category>
		<category><![CDATA[מחקר]]></category>
		<category><![CDATA[מפתחים]]></category>
		<category><![CDATA[סקר]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=162711</guid>
		<description><![CDATA[מחקר חדש שמתפרסם מעלה תמונה מדאיגה בנוגע לזמן פיתוח שמתבזבז על המתנה לביצוע פעולות. כיצד ניתן לפתור את הבעיה?]]></description>
				<content:encoded><![CDATA[<div id="attachment_162734" class="wp-caption alignleft" style="width: 310px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/wait1.jpg"><img class="size-full wp-image-162734" alt="מקור: Flickr, cc-by-Onesu Bieru" src="http://www.geektime.co.il/wp-content/uploads/2013/04/wait1.jpg" width="300" height="183" /></a><p class="wp-caption-text">מקור: Flickr, cc-by-Onesu Bieru</p></div>
<p>&quot;מפתחים, מהנדסים, אנשי קריאייטיב ומנהלים טובים יודעים שגם הסחת דעת קטנה למישהו שנמצא ב&quot;זון” של העבודה עולה לו הרבה יותר מאשר רק 3 עד 5 דקות, אשר מהוות את הזמן שלוקח לשאול את השאלה ולקבל עליה תשובה. תוסיפו לכך את העובדה שאתם מנסים לזכור את החלקים של השאלה בנוסף לנושא אשר התעסקתם בו לפני כן ולא תצליחו לתת לשאלה את מלוא תשומת הלב, דבר שיגרום לסדרה אחרת לגמרי של בעיות.&quot;</p>
<p>דניאל גרינפילד, <a href="http://www.geektime.co.il/developer-time-post/" target="_blank">'שקט, מפתחים'</a>.</p>
<h3>איפה הזמן?</h3>
<p>על פי מחקר שנערך על ידי חברת התוכנה <a href="http://www.electric-cloud.com/" target="_blank">Electric Cloud</a> שסקר יותר מ-1,000 מהנדסי תוכנה ומפתחים, עולה כי מפתחים מבזבזים לפחות 20 אחוזים מהזמן שלהם, בהמתנה למשהו: המתנה לקוד שיתקמפל (הפיכתו של קוד בשפת תכנות לקוד בשפת מכונה שהמחשב מבין), המתנה לסיום הרצה של רוטינות בדיקה, או אפילו המתנה לבחור החדש שיחזור עם קולה ודונאטס מהקפיטריה הסמוכה.</p>
<div id="attachment_162719" class="wp-caption alignnone" style="width: 610px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/survey1.png"><img class=" wp-image-162719  " alt="מקור: Electric Cloud" src="http://www.geektime.co.il/wp-content/uploads/2013/04/survey1.png" width="600" height="450" /></a><p class="wp-caption-text">מקור: Electric Cloud</p></div>
<p>ניתן לראות על פי הגרף, כי משך הזמן המוקדש להמתנה למשימה מסויימת כגון בדיקה או הידור של תוכנה, העומד על כ-6 וחצי שעות שבועיות, לא רחוק ממשך הזמן השבועי המוקדש למשימות הקשורות לפרודוקטיביות בעבודה, כגון סיעור מוחות ונטוורקינג או ביצוע משימות אדמיניסטרטיביות. בתוך כך, הנתון המעניין ביותר הוא שקרוב ל-12 וחצי שעות שבועיות בלבד מוקדשות למשימות של עיצוב ופיתוח נטו.</p>
<h3>לא עובדים מהר מספיק</h3>
<p>בחברה החליטו לבצע את המחקר לנוכח תלונות רבות של לקוחות על כך שמפתחים לא עובדים מהר מספיק. בכדי לגייס את האנשים נשלחו הודעות ברחבי הרשת החברתית LinkedIn שביקשו ממפתחים ומהנדסי תוכנה להשתתף במחקר. ראש מחלקת השיווק של החברה, Ashish Kuthiala, מסר לאתר <a href="http://readwrite.com/2013/04/25/how-software-developers-really-spend-their-time" target="_blank">ReadWrite</a> כי: &quot;התוצאות הפתיעו אותי מאוד. מדובר באמצעי ויזואלי המאפשר לא רק להראות כיצד רוב המהנדסים מבלים את זמנם, אלא גם לשמש כאמת מידה לעשייה של המהנדסים והמפתחים בחברה בהשוואה לממוצע&quot;.</p>
<p>באופן מפתיע (או שלא), החברה שביצעה את המחקר: Electric Cloud, מציעה שירות שיכול לעזור לתהליך על ידי ביצוע פעולות הקימפול, בדיקה ופריסה של קוד באופן אוטומטי, כך שיש להתייחס לממצאיו בהתאם. בכל מקרה, מן המחקר עולה באופן ברור, כי שעות רבות ממכסת השעות השבועיות של מפתחים הולכות לטימיון. הפתרון אמנם אינו נמצא במיכון של פעולות מסויימות אלא בקיצור זמני ההידור, כך שטכנולוגיות הידור מהירות או כוח מחשוב גדול ביותר יכולים לעזור, אך בעת שהראשונה לא בנמצא והשנייה כרוכה בעלות כלכלית גבוהה, לא בטוח שפתרון יהיה זמין לציבור המפתחים בקרוב.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/developers-spend-their-time-on-waiting/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>אבני הבניין של האינטרנט: HTTP בסיסי</title>
		<link>http://www.geektime.co.il/http-basics/</link>
		<comments>http://www.geektime.co.il/http-basics/#comments</comments>
		<pubDate>Sat, 27 Apr 2013 12:30:19 +0000</pubDate>
		<dc:creator>ליאור בר-און</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[אינטרנט]]></category>
		<category><![CDATA[מפתחים]]></category>
		<category><![CDATA[מתודה]]></category>
		<category><![CDATA[פיתוח ווב]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=162598</guid>
		<description><![CDATA[בואו לסקור את המחזור הבסיסי של בקשה - תשובה של פרוטוקול HTTP, ולהתבונן על המתודות, ה-Headers וקודי תשובה.]]></description>
				<content:encoded><![CDATA[<div dir="rtl">
<div id="attachment_162655" class="wp-caption alignleft" style="width: 310px"><img class="size-full wp-image-162655" alt="מקור: flickr, cc-by Bekathwia" src="http://www.geektime.co.il/wp-content/uploads/2013/04/internet.jpg" width="300" height="184" /><p class="wp-caption-text">מקור: flickr, cc-by Bekathwia</p></div>
<p>פרוטוקול ה-HTTP הוא הפרוטוקול האחראי באינטרנט על שיתוף דפי HTML. רשת האינטרנט נבנתה בחשיבה על מספר רב של שירותים: דואר אלקטרוני, צ׳אט (IRC), שיתוף קבצים (FTP), תקשורת טקסט (Telnet) ועוד. אני לא חושב שבימים הראשונים של האינטרנט היה ברור איזה תפקיד משמעותי יהיה ל World Wide Web, לדפי ה HTML.</p>
<p>למען האמת, בימיו הראשונים היה ל-HTTP מתחרה משמעותי בשם <a href="http://en.wikipedia.org/wiki/Gopher_(protocol)" target="_blank">Gopher</a>. לפרוטוקול זה הייתה מטרה מקבילה (שיתוף &quot;מסמכים&quot;) והוא לא היה מבוסס על HTML, אם כי עם טקסט ללא עיצוב. היו לו דפדפנים משלו, ולא הייתה סיבה משמעותית להניח שדווקא HTTP יצא מהמאבק כשידו על העליונה.</p>
<p>בראשית ימיו (HTTP 0.9, שנת 1991) פרוטוקול ה-HTTP היה בסיסי ביותר ונועד רק להעביר קבצי HTML (ללא קבצי CSS או js) בצורה סטנדרטית על גבי פרוטוקול TCP. מסמך ה-Specification שלו היה באורך עמוד וחצי. פחות מעשור לאחר מכן (1999), הוגדר פרוטוקול HTTP 1.1, שמסמך ה-Specification שלו הוא באורך 360 עמודים &#8211; עליה תלולה במורכבות ובאחידות של הפרוטוקול.</p>
<p>מאז לא היו התקדמויות משמעותית, אם כי בימים אלו עומלים על הגדרת פרוטוקול HTTP 2.0 וצופים שהתקן הסופי ישוחרר בשנת 2015.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">On the Wire</span></p>
<p>בואו נתבונן כיצד נראה פרוטוקול HTTP בפעולה. אתייחס ל-HTTP גרסה 1.1 (לא נראה לי שיצא לכם להיתקל במשהו אחר), אולם אנסה להדגיש את הפונקציה הבסיסית ביותר של הפרוטוקול שהוגדרה עוד בגרסה 0.9. פרוטוקול HTTP כולל מחזור קבוע: בקשה ותשובה, שתיהן נשלחות כטקסט פשוט על גבי TCP Connection.</p>
<p>בקשה נראית כך:</p>
<p style="direction: ltr;">POST /lyrics_server/my_song.php HTTP/1.1<br />
Host: www.lyrics.com<br />
User-Agent: My-Home-Made-Browser/0.1a<br />
Content-Type: text/plain<br />
Referer: http://softwarearchiblog.com</p>
<p style="direction: ltr;">text=&quot;Att ahla Hamuda!&quot;&amp;action=post</p>
<p style="direction: rtl;">אתם יכולים לכתוב קוד פשוט בשפת התכנות החביבה עליכם שיבצע קריאות HTTP. כל שעליכם לעשות הוא לפתוח TCP socket, לשלוח מחרוזת טקסט בפורמט הבקשה, ולפרסר את פורמט התשובה (שנראה בהמשך). שימו לב שהבקשה בנויה בפורמט הבא:</p>
<p style="direction: ltr;">&lt;http method&gt; &lt;url&gt; &lt;http version&gt;<br />
&lt;headers&gt;<br />
&lt;empty line&gt;<br />
&lt;body&gt;</p>
<p style="direction: rtl;">השורה הראשונה נקראת Start Line ומכילה פרטים בסיסיים לגבי הבקשה. בדוגמה זו יש קריאת POST (&quot;שליחת מידע למשאב&quot;) שכוללת טקסט בדמות ה-body. קריאות GET, למשל, הן בקשות לקריאת נתונים מהשרת, ולרוב לא יכללו body (אך עדיין יכללו את השורה הריקה).</p>
<p style="direction: rtl;"><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">HTTP Methods</span></p>
<p style="direction: rtl;">פרוטוקול HTTP מתאר משאבים (resources, שם נרדף אחר הוא מסמכים documents), המתוארים ע&quot;י URL ופעולות (method או verb) שניתן לבצע עליהם. המשאב יכול להיות קובץ &quot;'קיים&quot; / &quot;סטטי&quot; (למשל קובץ HTML, CSS) או קובץ שנוצר באופן דינמי עבור כל בקשה (למשל דו&quot;ח מצב העובדים). אין מניעה שקבצי HTML או CSS ייווצרו גם הם באופן דינאמי, וזה בדיוק מה שעושים שרתי אינטרנט כמו Tomcat, IIS בעזרת טכנולוגיות כמו ASP.NET או Servlet בהתאמה.</p>
<p style="direction: rtl;">HTTP/1.0 הגדיר את המתודות הבאות:</p>
</div>
<div>
<ul>
<li><strong>GET </strong>- קריאת ה-resource.</li>
<li><strong>POST </strong>- עדכון ה-resource.</li>
<li><strong>HEAD </strong>- כמו GET רק ללא קבלת ה-body, שזו סוג של &quot;סימולציה&quot; מה היה קורה לו היינו קוראים ל-GET. טוב לבדיקה אם URL הוא תקין, למשל.</li>
</ul>
<p>תקן HTTP/1.1 הגדיר מתודות נוספות:</p>
<ul>
<li><strong>OPTIONS</strong> - בקשת מידע על הפעולות האפשריות על המשאב.</li>
<li><strong>PUT </strong>- שמירה של מידע כמשאב ב-URL המסופק.</li>
<li><strong>DELETE </strong>- מחיקה של המשאב. כנראה שאתם צריכים הרשאות מתאימות בכדי לעשות זאת.</li>
<li><strong>TRACE</strong> - תאורטית משמשת ל-debug, אולם בפועל לא כ&quot;כ בשימוש בגלל סכנות אבטחה שבשימוש בה.</li>
<li><strong>CONNECT</strong> - מתודה טכנית שנועדה לתמוך ב-HTTP Tunneling.</li>
</ul>
<p>בפועל, השימוש העיקרי באתרים או באפליקציות ווב הוא במתודות GET ו-POST. אני זוכר ש Flex גרסה 3 בכלל לא אפשרה לשלוח קריאה לשרת עם מתודה אחרת, והיא כנראה לא הייתה הטכנולוגיה היחידה. מתודת HEAD יכולה להיות שימושית לפעמים, ומתודות PUT ו DELETE הן שימושיות למדי כאשר מדובר בארכיטקטורת REST. בדרך כלל יהיה מדובר ב web service שהאפליקציה שלנו ניגשת אליו.</p>
<p>אלמנט חשוב מאוד במתודות ה HTTP הוא הקטלוג שלהם ל2 משפחות:</p>
</div>
<ul>
<li><strong>Safe Methods</strong>: שהן GET, HEAD ו OPTIONS.</li>
<li><strong>Unsafe Methods</strong>: שהן: POST, DELETE ו PUT.</li>
</ul>
<p>כחלק מהחוזה ש-HTTP מספק נקבע שהפעלת ״מתודות בטוחות&quot; לא אמורה לשנות את ה state בצד-השרת, בעוד הפעלה של מתודות &quot;לא-בטוחות&quot; עשויות לעשות זאת (אבל לא חייבות). למשל, קרוב לוודאי שיצא לכם להיתקל במצב בו לחצתם על &quot;Refresh&quot;, אך הדפדפן פתח לכם popup שהודיע שייתכן וישלח מידע פעם נוספת לשרת ושאל האם אתם רוצים להמשיך. קרוב לוודאי שלחצתם &quot;yes&quot;, אלא אם בדיוק בשלב של אישור עסקה כספית גדולה.</p>
<p>מה שקרה הוא שדף אינטרנט שהוצג לכם, בעת שלחצתם על refresh, הוא תוצאה של פעולת HTTP &quot;לא בטוחה&quot; (כנראה POST). מכיוון ש Refresh שולח את המידע לשרת שוב, הדפדפן מתריע על הסכנה לשינוי שלא בכוונה של ה state של המשאב בשרת.</p>
<p>פתרון מקובל לבעיה היא &quot;תבנית עיצוב&quot; שנקראת (Post/Redirect/Get (PRG בה לאחר פעולת POST השרת מבצע פעולת redirect (קוד 302 שמתואר בהמשך) לעמוד GET שאין שום מניעה לעשות Refresh.</p>
<p>הבדל חשוב לא פחות הוא שתוצאות של פעולות &quot;בטוחות&quot; ניתן לשמור כ-Cache. רכיבי רשת שונים (gateway, proxy, <a href="http://en.wikipedia.org/wiki/Content_delivery_network" target="_blank">cdn</a>) עשויים לשמור עותק מקומי של תוצאות של פעולות בטוחות ולהחזיר את התשובה עבור בקשות עתידיות. כמובן שחשוב שיהיה תהליך invalidation בו לאחר זמן, התוצאות שנשמרו ב-cache יזרקו לטובת תוצאות מעודכנות יותר.</p>
<p>אם אתם כותבים קוד צד-לקוח, שמתשאל את השרת בעזרת מתודת POST (בגלל שאתם צריכים לשלוח פרמטרים) &#8211; התוצאה של השאילתה לא תישמר &quot;ברשת&quot;, עובדה שיכולה להיות משמעותית מאוד עבור ביצועים (במיוחד ברשתות WAN) ועבור ה Scalability של השרת שצריך לחשב ולנפק את אותה התשובה פעם אחר פעם.</p>
<p>הדרך הנכונה היא לשלוח פקודות GET ולהשתמש ב Query String על מנת לשלוח פרמטרים. לא אמורה להיות לכם כיום מגבלה מעשית בצורת עבודה זו.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">שורה ריקה ושורות חדשות</span></p>
<p>תקן HTTP 0.9 קבע שכל שורה צריכה להסתיים ב-LF (בשפות תכנות רבות: &quot;n\&quot;) או ב-CRLF (בשפות תכנות רבות: &quot;r\n\&quot;). תקן 1.1 קבע שגם CR (בשפות רבות: &quot;r\&quot;) הוא סוף שורה תקני. כיצד יודעים אם CRLF הוא סיום שורה רגיל או &quot;השורה הריקה&quot; המיוחלת? אין לכך תשובה חד משמעית.</p>
<p>בנוסף יש את החוק המבלבל הבא: שורה שהתחילה ב-white space (טאב או רווח) נחשבת כהמשך לשורה הקודמת, למרות שהיה line break (אחד מהשלושה) קודם לכן.</p>
<p>מעניין לציין ששני שרתי הווב הנפוצים בעולם (Apache ו-IIS) לא מכבדים את התקן ולא מאפשרים לשלוח CR בלבד, בכדי להגן מהבעיות שיכולות להיווצר בגישה הזו. ישנה משפחה של התקפות אבטחה שנקראות header injection שמנסות לגרום לדחיפה של סימני LF, CR ו-CRLF מקומות שונים בתוך ה-headers ולגרום לקוד שמפרסר אותם להתבלבל ולשגות.</p>
<div id="attachment_162656" class="wp-caption aligncenter" style="width: 547px"><img class="size-full wp-image-162656" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/image1.png" width="537" height="328" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">Request Headers</span></p>
<p>כפי שציינו, הבקשה כוללת רשימה של Headers, כל אחד הוא שורה. ה-Header היחידי שהוא חובה הוא header ה-Host &#8211; כל השאר הם אופציונליים. ארגונים רבים משתמשים בשרת Proxy אשר דרכו עוברות כל קריאות ה-HTTP היוצאות מהארגון. שרת ה-Proxy יכול לפלטר אתרים לא רצויים (אתרים מתוך רשימה של אתרים הנגועים בנוזקות, בארגונים מסוימים: אתרים &quot;מבזבזי זמן&quot; כגון פייסבוק), לנטר תעבורה או לשפר ביצועים (ע&quot;י הגשת התשובה מ Cache מוכן).</p>
<p>ההבדל בין קריאה דרך פרוקסי וקריאה רגילה ב HTTP הוא סמנטי וכמעט נחבא מהעין: קריאה דרך Proxy תכלול בשורת הפתיחה URL מלא הכולל את ה Host. עבור הדוגמה למעלה, שורת הפתיחה תראה כך:</p>
<p style="direction: ltr;">POST <strong>http://www.lyrics.com</strong>/lyrics_server/queen_song.php HTTP/1.1</p>
<p style="direction: rtl;">קצת קטנוני &#8211; אפשר לומר.</p>
<p style="direction: rtl;">תהליך חשוב שמתרחש בעת החלפת ה-headers ב-request וה-response הוא תהליך שנקרא &quot;Content Negotiation&quot;. בתהליך זה ה-client (כנראה דפדפן, אבל לא בהכרח) מצהיר באילו סוגי תוכן ובאיזה פורמטים הוא תומך. השרת ינסה להיענות לדרישה כמיטב יכולתו. הנה קבוצת headers שכזו לדוגמה:</p>
<p style="direction: ltr;">Accept: text/html, application/xhtml+xml, application/xml; q=0.9, *.*;q=0.8<br />
Accept-Language: he, en-us;q=0.8, en;q=0.6<br />
Accept-Charset: ISO-112, utf-8;q=0.7,*;q=0.3<br />
Accept-Encoding: gzip, deflate</p>
<p style="direction: rtl;">שימו לב ש &quot;Accept-Charset&quot; הוא ה header שמצביע על סוג הקידוד (encoding) בעוד &quot;Accept-Encoding&quot; מתאר דווקא את סוג הדחיסה (compression). סוג של חוסר-דיוק מינוחי שנעשה בתקן. לפני שאנו נגשים ל headers עצמם בואו נבין את התחביר: לכל header יש מספר ערכים מופרדים בפסיקים, לערכים יש ערכי משנה, מופרדים בנקודה-פסיק.</p>
<p style="direction: ltr;">Accept-Language: he, en-us;q=0.8, en;q=0.6</p>
<p style="direction: rtl;">q הוא מדד בין 0 ל-1 שמבטא את חוזק ההעדפה (quantity?) עבור ה-content negotiation. כלומר ב-header זה הדפדפן אומר: &quot;אחי, אני הכי רוצה עברית (q לא צויין = 1) אבל אני מוכן לקבל אנגלית אמריקאית כהעדפה קצת יותר נמוכה או אנגלית-סתם כהעדפה שלישית.</p>
<p style="direction: rtl;">Headers שכדאי לציין הם:</p>
<ul>
<li><strong>Accept</strong> (נקרא גם Accept-Media) &#8211; מציין את רשימת ה-media types (נקראים גם MIME types) שה-client תומך בהם. * משמעה: &quot;תן לי הכל, אני אסתדר כמיטב יכולתי&quot;.<a href="http://en.wikipedia.org/wiki/Mime_types" target="_blank">רשימת ה MIME types</a> נראית קצת מסורבלת, וכנראה שאם תשלחו MIME type שגוי הדפדפן יידע להסתדר (הוא מפענח את התחילה של הקובץ כדי לדעת איזה סוג קובץ זה באמת, בלי קשר ל MIME type שנשלח) &#8211; אבל זהו התקן ורוב השרתים מצייתים לחלק זה.</li>
<li><strong>Accept-Encoding</strong> - סוגי דחיסה שונים שהדפדפן יודע לפתוח. קבצים נדחסים על מנת להעביר פחות מידע על גבי הרשת. הדחיסה המועדפת היא gzip (שזה וריאציה קלה-לפענוח של אלגוריתם הדחיסה ZIP). אין טעם לציין כאן q מכיוון שלדפדפן באמת אין העדפה.</li>
<li><strong>User-Agent</strong> - זהו header קצת חריג בנוף של ה-content negotiation: במקום לתאר יכולת של ה-Agent כגון encoding או supported media types, הוא מתאר פרטים מזהים על ה-Agent כמו מנוע הרינדור שה-agent משתמש בו או מערכת ההפעלה שהוא רץ עליה. בעזרת פרטים אלו יכול השרת לנחש ולנסות להתאים את התוכן טוב יותר ל-agent.</li>
</ul>
<p>אומר זאת בבירור: User Agent הוא סוג של Anti-Pattern בו עושים שימוש נפוץ בכדי להתאים תוכן של אתרים / אפליקציות לדפדפן ספציפי / מערכת הפעלה, על בסיס הידיעה כיצד מתנהג כל דפדפן (באיזו גרסה?). זיהוי דפדפן (למשל IE7) הוא לא משימה קלה מכיוון שבעוד שבמחשב שלכם IE7 ייצר User Agent String (בקיצור UA) אחד, למשל:</p>
<p style="direction: ltr;">Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/6.0; .NET4.0E)</p>
<p style="direction: rtl;">במחשב אחר (לא עוד disk image מאותו IT) הוא עלול לייצר UA שנראה כך:</p>
<p style="direction: ltr;">Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)</p>
<p style="direction: rtl;">&quot;אין בעיה!&quot;, תאמרו לעצמכם. &quot;MSIE 7&quot; תמיד יופיע ועליו נסתמך. מה שכן, הנה UA שהגיע מדפדפן IE8:</p>
<p style="direction: ltr;">Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; msn OptimizedIE8; ENUS)</p>
<p style="direction: rtl;">גם הוא מכיל משום מה &quot;תאימות ל MSIE 7&quot;.</p>
<p style="direction: rtl;">לפני שאתם משחררים קוד המתבסס על UA, כדאי שתבדקו את ה regular expressions שלכם מול בנק של UAs כגון <a href="http://www.useragentstring.com/pages/useragentstring.php" target="_blank">לינק1</a> או <a href="http://user-agent-string.info/list-of-ua" target="_blank">לינק2</a>. הדרך הנכונה לעבוד היא להשתמש בספריות כגון <a href="http://modernizr.com/" target="_blank">modernizr</a>, שבודקות בזמן ריצה האם יכולות ספציפיות נתמכות בדפדפן כגון SVG או Touch ולא לנסות לנחש זאת דרך ה-UA.</p>
<p style="direction: rtl;">עדיין שאלות חשובות כגון ״האם מדובר ב-Smartphone או ב-Tablet?״ לא יכולות להיענות בצורה טובה ללא גישה ל UA &#8211; אבל כדאי לעשות זאת בזהירות. ניתן לגשת ל UA גם מתוך ג'אווהסקריפט בעזרת פקודת <a href="https://developer.mozilla.org/en-US/docs/DOM/window.navigator.userAgent" target="_blank">navigation.useragent</a>.</p>
<div id="attachment_162657" class="wp-caption aligncenter" style="width: 571px"><img class="size-full wp-image-162657" alt="גם ג'ון רזיג, היוצר של jQuery, לא &quot;מת&quot; על השימוש ב UA. מקור: twitter, ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/twit.png" width="561" height="306" /><p class="wp-caption-text">גם ג'ון רזיג, היוצר של jQuery, לא &quot;מת&quot; על השימוש ב UA. מקור: twitter, ליאור בר-און</p></div>
<p style="direction: rtl;">Headers חשובים אחרים ב-HTTP Request הם:</p>
<ul>
<li><strong>If-Modified-Since</strong> - בעזרת header זה הדפדפן מצהיר: &quot;יש לי את הקובץ הזה (זכרו שקריאת HTTP היא גם לתמונות או מסמכים, לא רק קבצי HTML) מתאריך abc, שלח לי אותו חזרה רק אם הוא השתנה מאז&quot;. אם הקובץ לא השתנה, ה response יחזור עם body ריק אבל עם קוד 304 (not-modified) שיאמר לדפדפן להשתמש במשאב שכבר ברשותו, מכיוון שהוא מעודכן.</li>
<li><strong>Referer </strong>- זיהוי האתר שהפנה את הבקשה (בהנחה שבקשת ה HTTP היא תוצאה של לחיצה על לינק). מידע זה הוא שימושי למדי לכלי Web Analytics. בעלי אתרים רוצים לדעת אילו מפרסמים יעילים יותר עבור האתר שלהם. שימו לב ששגיאת הכתיב (באנגלית יש לכתוב Referrer) היא שגיאה שנעשתה במקור בתקן &#8211; ונשתמרה.</li>
<li><strong>Cookie ו Caches</strong> - שני נושאים בעלי נפח שראוי להקדיש להם דיון עצמאי.</li>
<li><strong>(X-forward-for (XFF</strong> - פעמים רבות, לפני השרת שלנו יישב Reverse Proxy או Load Balancer המנטרים את התעבורה. מכיוון שכלפי-חוץ (האינטרנט) אותו רכיב רשת הוא היעד הסופי של התעבורה, ה packet של פרוטוקול ה IP יציין את רכיב הרשת בתור היעד ולא את השרת שלנו. רכיב הרשת ישלח שוב את אותה הבקשה אלינו ושם הוא יציין את המקור (ברמת פרוטוקול ה IP) ככתובת שלו, ולא כתובת השולח המקורי. XFF נועד &quot;to patch&quot; מגבלה זו של פרוטוקול IP ולתאר לנו את המקור האמיתי של התעבורה.</li>
</ul>
<p>אם אתם רוצים לבחון את ה Headers של המערכת שלכם, ניתן לעשות זאת בקלות:</p>
<div id="attachment_162658" class="wp-caption aligncenter" style="width: 630px"><img class="size-full wp-image-162658" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/headers-in-Chrome.png" width="620" height="287" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<p>הקישו F12 בדפדפן בכדי לפתוח את כלי הפיתוח. בכרום, למשל, לכו לטאב ה-Network ולחצו F5 כדי לטעון שוב את הדף. עכשיו תראו את רשימת כל קריאות ה HTTP, כאשר בכל אחת ניתן לראות את ה Headers שנשלחו. בדפדפנים אחרים הדרך למצוא את ה Headrs אינה שונה בהרבה.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">HTTP Response</span></p>
<p>חפרנו דיי הרבה בבקשת ה HTTP, בואו נעבור על כמה נקודות מעניינות בתשובה. פורמט התשובה הוא דומה למדי:</p>
<p style="direction: ltr;">&lt;http version&gt; &lt;status code&gt; &lt;reason = status text&gt;<br />
&lt;headers&gt;<br />
&lt;empty line&gt;<br />
&lt;body&gt;</p>
<p style="direction: rtl;">ההבדל הניכר הוא בשורת הפתיחה, ובסט של Headers אפשריים שהוא שונה מאלו שנשלחים ב Request.</p>
<p style="direction: ltr;">HTTP/1.1 200 OK<br />
Server: Some-Server/0.9.2<br />
Content-Type: text/plain<br />
Connection: close</p>
<p style="direction: ltr;">&lt;DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;<br />
This is currently an &lt;b&gt;html&lt;/b&gt; document, but http response body can include images, css files, binary files etc.&lt;p&gt;<br />
&lt;/body&gt;&lt;html&gt;</p>
<div id="attachment_162659" class="wp-caption aligncenter" style="width: 630px"><img class="size-full wp-image-162659" alt="מקור: Flickr. cc-by Raphael Goetter" src="http://www.geektime.co.il/wp-content/uploads/2013/04/404.jpg" width="620" height="188" /><p class="wp-caption-text">מקור: Flickr. cc-by Raphael Goetter</p></div>
<p style="direction: rtl;"><strong>שורת הפתיחה</strong></p>
<p style="direction: rtl;">שורת הפתיחה כוללת את גרסת הפרוטוקול, קוד סטטוס (מספרי) וטקסט שמתאר את הסטטוס. אמנם כמעט תמיד נראה את התיאור &quot;OK&quot; עם קוד 200 (&quot;הכל בסדר&quot;), אבל אין מניעה לשלוח טקסט אחר. שדה זה נועד בכדי לשלוח הודעות שגיאה טקסטואליות כאשר עובדים, למשל, עם REST API. הודעת שגיאה כמו ״Bad Request״ היא לא מועילה וכדאי להחליף אותה.</p>
<p style="direction: rtl;">מבין כ-50 הקודים שמוגדרים בפרוטוקול ה HTTP יש אולי 15 שבאמת שימושיים בפועל, בואו נעבור עליהם בקצרה:</p>
<ul>
<li><strong>200 </strong>- &quot;הכל בסדר&quot;: התוכן שנתבקש אמור להגיע ב-body</li>
<li><strong>204 </strong>- No Content: כאשר אין ערך החזרה. הדפדפן לא ינווט לכתובת החדשה אלא יישאר בכתובת האחרונה שהיה.</li>
<li><strong>206 </strong>- Partial Content: כמו 200, רק משמש עבור בקשות של range בתוך המסמך, המבוצעות על בסיס ה header שנקרא Content-Range.</li>
<li><strong>301, 302 או 303</strong> - הדפדפן מציין שה URL למשאב זה הוחלף, וה URL החדש מצויים ב header בשם Location. דפדפנים יפנו אוטומטית לכתובת החדשה, מבלי שהמשתמש מודע לכך, מה שנקרא &quot;Client-Side ReDirect&quot;. אם הפעולה הייתה פעולת POST, הדפדפן יגש ל URL החדש בפעולת GET (כדי למנוע שליחה כפולה של הנתונים). דפים שמציגים למשתמש הודעה &quot;&#8230;You are being redirected&quot; מחזירים בעצם קוד 200, ופעולת ה Redirect היא בעצם אפליקטיבית (בעזרת קוד ג'אווהסקריפט, לרוב).</li>
<li><strong>304</strong> - not modified: ראו את ההסבר אודות סטטוס זה תחת ההסבר על ה header בשם If-Modified-Since למעלה.</li>
<li><strong>307</strong> - Temporary Redirect: כמו 301-303 רק ללא ביטול פעולת ה POST.</li>
<li><strong>400 - </strong>bad request: השרת מציין שמשהו לא בסדר בבקשה שנשלחה, אולי הפורמט ואולי תוכן הבקשה. הפירוט אמור להגיע בהודעת השגיאה.</li>
<li><strong>401 </strong>- Unauthorized: השרת לא מזהה את המשתמש ולכן אינו יכול לאפשר לו לגשת למשאב שהגישה אליו מוגבלת. קוד זה יזניק חלון &quot;שם/ססמה&quot; או יהיה נקודת הפתיחה לסט קריאות מורכב כחלק מהפעלת פרוטוקולים לאימות המשתמש כגון Kerberos או SAML.</li>
<li><strong>403</strong> - Forbidden: השרת מזהה את המשתמש, אך למשתמש אין הרשאות לגשת למשאב.</li>
<li><strong>404 </strong>- לא קיים משאב בשם שתואר ב URL. תשאלו כל ילד בן 12 ומטה, והוא יסביר לכם :)</li>
<li><strong>405 </strong>- Method not allowed: פעולת ה HTTP שביקשנו (למשל Delete) לא זמינה למשאב הספציפי. ייתכן והיא תהיה זמינה עבור משאב (URL) אחר.</li>
<li><strong>500 </strong>- Internal Error: תקלה פנימית בשרת, שיכולה להיות בעצם כל דבר. התקלה לרוב תכתב לקובצי הלוג של השרת ולא תשלח (מטעמי בטיחות) למשתמש. אל תצפו להודעת שגיאה מפורטת או מועילה על קודים אלו.</li>
<li><strong>503 - </strong>Service Unavailable: כמו 500, אך בא להדגיש שמדובר בתקלה זמנית בגלל שאיזה service בדיוק נמצא ב maintainable או restart, למשל.</li>
</ul>
<p>כמובן שקודים אלו הם קודים טכניים, שלא רבים מהמשתמשים מכירים או מבינים. אתרי אינטרנט יעדיפו להחזיר תמיד קוד 200 ולהחזיר דף HTML המתאר בצורה קלה ונוחה (חחחח, לפעמים זו הודעה מעוצבת בה כתוב רק &quot;404&quot;), מהי התקלה. קודי HTTP, אם כן, רלוונטיים יותר לשירותי REST.</p>
<p>בעצם, גם שירותים שקוראים לעצמם &quot;REST&quot; לא תמיד משתמשים בקודים בצורה נכונה. אפשר לומר שיש כאן כוונה טובה והרבה מקום לשיפור. ב<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html" target="_blank">לינק זה</a> תוכלו למצוא את ההגדרה התקנית לכל הקודים. שימו לב ששרתים או פרוטוקולים מסוימים אמצו לעצמם קודים נוספים, את הנפוצים שבהם תוכלו למצוא <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes" target="_blank">כאן</a>.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">Headers מעניינים בתשובה</span></p>
<p>הנה כמה מה Headers המעניינים שיכולים לחזור בתשובה:</p>
<ul>
<li><strong>Content-Encoding, Content-Language, Content-Type ועוד</strong> - המקבילים ל-Headers של ה-Content Negotiation בבקשה, אולם הפעם מצוינת ההחלטה. לא יהיו יותר q לבטא את מידת הרצון כי אם החלטה: &quot;התוכן הוא HTML בצרפתית והוא דחוס ב-gzip&quot;, לדוגמה.<br />
ה-Content Type יתואר בעזרת אחד מה <a href="http://en.wikipedia.org/wiki/Mime_types" target="_blank">MIME types</a>, כמו שהזכרנו קודם.</li>
<li><strong>Server - </strong>ממש כמו user agent &#8211; רק בצד השרת. מתאר איזה שרת זה ואיזו גרסה.</li>
<li>מעולם לא ראיתי קוד שעשה שימוש במידע זה, אך למי שמדבג פלטפורמה מרוחקת מידע זה עשוי להיות שימושי.</li>
<li><strong>Content-Length -</strong> אורך ה body. יכול לסייע ל client להיערך בהקצאת זיכרון.</li>
<li><strong>Cache-Control, Pragma, ETag</strong> - אלו headers המתארים את היכולת לשמור את התוכן ב cache בצד הלקוח, ופרטים אודות התקפות שלו. נושא בפני עצמו.</li>
</ul>
<p>סתם נקודה מעניינת לציין היא שאין חוק ברור כיצד להתנהג כאשר אותו ה-Header מופיע פעמיים. דפדפנים מסוימים מתייחסים רק למופע הראשון, ואחרים &#8211; רק למופע האחרון.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">סיכום</span></p>
<p>זהו. סקרנו את המחזור הבסיסי של בקשה &#8211; תשובה של פרוטוקול HTTP והתבוננו על מתודות, headers וקודי תשובה. אני מקווה שפוסט זה הצליח להיות מעניין ולא רק טכני. שיהיה בהצלחה!</p>
<p><em><strong>הפוסט פורסם לראשונה בבלוג <a href="http://www.softwarearchiblog.com/2013/04/http-basics.html" target="_blank">Software Archiblog</a>.</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/http-basics/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>AMD ו-Require.js</title>
		<link>http://www.geektime.co.il/amd-and-requirejs-intro/</link>
		<comments>http://www.geektime.co.il/amd-and-requirejs-intro/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 10:43:43 +0000</pubDate>
		<dc:creator>ליאור בר-און</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[AMD]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[Require.js]]></category>
		<category><![CDATA[ServerJS]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=162600</guid>
		<description><![CDATA[מבוא נאיבי ומופשט ל-Require.js, מה הקשר ל-AMD וכיצד אנשי הדפדפנים קשורים לכך?]]></description>
				<content:encoded><![CDATA[<div id="attachment_131770" class="wp-caption alignleft" style="width: 310px"><img class="size-full wp-image-131770" alt="מקור: flickr, cc-by Robert Banh" src="http://www.geektime.co.il/wp-content/uploads/2012/07/4119832912_dc050940f1.jpg" width="300" height="225" /><p class="wp-caption-text">מקור: flickr, cc-by Robert Banh</p></div>
<p>AMD היא תבנית עיצוב חדשה-יחסית, המיושמת בעיקר בג'אווהסקריפט ובאה לסייע לכתוב כמות גדולה של קוד ג'אווהסקריפט כך שיהיה קל לתחזוקה.</p>
<p>הדמיון ל-MVC הוא במטרה &#8211; שמירה של סדר בעבודה עם כמות גדולה של קוד. דרך הפעולה &#8211; שונה לגמרי. אפשר (וכדאי) להשתמש גם ב-MVC וגם ב-AMD במקביל על מנת &quot;לעשות סדר&quot; בקוד הג'אווהסקריפט שלנו.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">הקדמה</span></p>
<p>בשנת 2009, בחור בשם קוין דנגור (Kevin Dangoor) יזם פרויקט בשם ServerJS. מטרת הפרויקט: להתאים את שפת ג'אווהסקריפט לפיתוח צד-השרת.</p>
<p>הפרויקט, כלל קבוצות עבודה שהגדירו APIs לצורת עבודה שתהיה נוחה ואפקטיבית בפיתוח ג'אווהסקריפט בשרת. פרויקט ServerJS הצליח לעורר הדים והשפיע בצורה משמעותית על עולם הג'אווהסקריפט. פרויקטים מפורסמים שהושפעו ממנו כוללים את CouchDB, Node.js ו-MongoDB.</p>
<p>ServerJS הצליח כל-כך, עד שגם הדפדפנים (שלהם הפרויקט לא-יועד) החלו לממש רעיונות מתוך ServerJS, בהתאמה קלה לעולם הדפדפנים. אנשי ServerJS קיבלו את האורחים החדשים, ושינו את שם הפרויקט ל: &quot;CommonJS&quot;. כלומר: הפרויקט של כ-ו-ל-ם. עם אלו בעיות ServerJS מנסה להתמודד?</p>
<ul>
<li>הגדרה של מודולים (modules) וחבילות (packages) בכדי לארגן את הקוד. חבילות הן קבוצות של מודולים.</li>
<li>כתיבת בדיקות-יחידה.</li>
<li>כלי עזר לכתיבת קוד אסינכרוני כך שהקוד יישאר מודולרי.</li>
<li>עבודה עם מערכות קבצים.</li>
<li>טעינה דינמית של קוד.</li>
<li>ועוד כמה&#8230;</li>
</ul>
<p>אחד התקנים בעל ההשפעה הרבה ביותר הוא תקן בשם Modules/1.1, תקן המתאר כיצד להגדיר מודולים. צורך זה הוא בסיסי מאוד והרבה frameworks משתמשים ב-&quot;CommonJS Sytle&quot; (כלומר &#8211; בתחביר של התקן, או כזו שדומה לו מאוד) על מנת להגדיר מודולים של קוד ג'אווהסקריפט.</p>
<p>אנשי הדפדפנים, התאימו את Modules/1.1 לעולם הדפדפן (ישנם כמה <a href="http://unscriptable.com/2011/09/30/amd-versus-cjs-whats-the-best-format/" target="_blank">הבדלי התנהגות חשובים</a>) וקראו לו: Async Module Definition, או בקיצור: AMD  [א]. רק להסביר: AMD היא הגדרה המתארת API לטעינה דינמית של מודולים &#8211; אך אין מאחורי AMD קוד. ל-AMD יש מימושים רבים בדמות ספריות כמו: lsjs, curl, require, dojo ועוד.</p>
<p>המימוש הבולט ביותר ל AMD היא ספרייה בשם <b>require.js</b>. כיום require.js היא הספרייה הנפוצה ביותר, בפער גדול, על שאר האלטרנטיבות. המצב מזכיר במעט את המצב של jQuery מול MooTools או Prototype &#8211; תקן &quot;דה-פאקטו&quot;.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">היתרונות של AMD (בעצם: require.js)</span></p>
<p>מלבד היכולת להפציץ חברים לעבודה במושגים (כמו CommonJS, AMD או Modules/1.1), תבנית-העיצוב AMD מספקת יתרונות משמעותיים לאפליקציות גדולות. מרגע זה ואילך אתייחס ספציפית ל-require.js, או בקיצור: &quot;require&quot;.</p>
<p><span style="text-decoration: underline;">#1: ניהול &quot;אוטומטי&quot; של תלויות בין קובצי javaScript</span></p>
<p>האם קרה לכם שהיה לכם באג בקוד שנבע מסדר לא-נכון של תגיות ה &lt;script&gt; ב head של קובץ ה HTML? קרוב לוודאי שבמערכת גדולה יהיו מספר רב של קובצי javaScript ולכן &#8211; מספר רב של תלויות. אין דרך ברורה להגדיר קשרים בין קבצי javaScript (כולם נרשמים במרחב זיכרון משותף), כל שקשרים אלו הם לא-מפורשים ואינם קלים לתיעוד או למעקב.</p>
<p style="display: inline !important;">שימוש ב require פוטר אתכם מדאגה לעניין זה. require תטען את הקבצים בסדר הנכון, ע&quot;פ ההגדרות שסיפקתם.</p>
<p style="display: inline !important;">עבור אלו ששמרו על קובצי javaScript ענקיים, require מאפשרת להרבות בקבצים ללא דאגה לניהול שלהם &#8211; כך שיהיה קל יותר לפתח את הקוד.</p>
<p>הערה קטנה: require לא נבנתה לנהל קשרים בהם יש cycles, אולם יש &quot;טכניקה&quot; בה <a href="http://requirejs.org/docs/api.html#circular" target="_blank">ניתן לטעון קבצים עם תלות מעגלית</a> - אם כי בצורה מעט מסורבלת.</p>
<p><span style="text-decoration: underline;">#2: טעינה עצלה ומקבילית של קבצי javaScript [ביצועים]</span></p>
<p>Require מנצלת את היתרון שהגדרתם כבר את התלויות בין הסקריפטים לא רק בכדי לטעון אותם בצורה נכונה, כי גם בכדי לטעון אותם בצורה אופטימלית מבחינת ביצועים.</p>
<ul>
<li>Require לא תטען קובץ עד לרגע שצריך אותו בפועל (lazy loading).</li>
<li>Require טוענת קבצים בעזרת תכונת ה async של תגית ה &lt;script&gt; &#8211; משהו שכמעט בלתי-אפשרי לנהל באופן ידני בפרוייקט גדול.</li>
</ul>
<p>טעינה דינמית של קבצים מפגישה 2 כוחות מנוגדים: <b>מפתחים - </b>שמעוניינים בהרבה קבצים קלים בהם קל לנהל את הקוד. <b>אנשי </b>production / operations<b> -</b> שרוצים שיהיו מינימום roundtrips לשרת.</p>
<p>את הפתרון לדילמה זו מספקת require בדמות ספרייה בשם r.js (כמו &quot;require&quot; שעבר minification -ל &quot;r&quot;) שיודעת לדחוס רשימה של קבצים לקובץ אחד גדול, לבצע minification ולטעון דינמית רק קוד שלא נמצא שם. לא צריך באמת לציין את כל הקבצים &#8211; מספיק להגדיר את הקדקודים הרצויים של גרף התלויות ו-r ימצא את כל התלויות שהן חובה ויארוז אותן. הפתרון שנוצר הוא פתרון כמעט-אופטימלי בין הצרכים השונים.</p>
<p><span style="text-decoration: underline;">#3: ניהול תלויות בין קובצי ה javaScript השונים</span></p>
<p>שני היתרונות הקודמים הם בהחלט חשובים, אך הפאנץ' ליין נמצא כאן, לטעמי. כאשר אתם מגדירים תלויות בין מודולים &#8211; require תסייע לכם לאכוף את התלויות הללו ולוודא שאינכם &quot;עוקפים&quot; אותן. משהו שבשפות אחרות היינו מקבלים כמשפט &quot;import&quot; או &quot;include&quot; ולעתים היה נראה כמעמסה בעת כתיבה &#8211; מתגלה כחשוב מאוד כשהוא חסר.</p>
<p style="display: inline !important;">הניסיונות שלי לנהל פרוייקטים בעזרת namespaces במרחב הגלובלי (בצורת {} || var myns = myns) נגמרו לבסוף בעשרות תלויות בלתי-רצויות בקוד ש&quot;הזדחלו&quot; מבלי שהרגשנו. ברגע שרצינו להשתמש במודולריות של הקוד, כפי שתכננו &#8211; לא יכולנו לעשות זאת ללא refactoring משמעותי.</p>
<p>מה שווה MVC, אם ה&quot;מודל&quot; מפעיל פונקציות שלא היה אמור מתוך ה &quot;View&quot;? מה שווה חלוקה ל Layers, אם היא לא נאכפת בפועל? Require תסייע לכם לוודא שהקוד אכן מיישם את ה-design שתכננתם.</p>
<div id="attachment_162603" class="wp-caption aligncenter" style="width: 630px"><img class="size-full wp-image-162603" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/script.png" width="620" height="251" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">מבוא קצר ל-Require.js</span></p>
<p>חטא נפוץ הוא להציג את require.js כספריה קטנטנה ונטולת-מורכבות. מדוע חטא? מכיוון שהרשת מלאה במדריכי &quot;hello world&quot; ל-require, המציגים רק את היכולות הבסיסיות ביותר. אחרי כמה שעות עם עבודה ב-require קרוב לוודאי שתזדקקו ליותר &#8211; אך ידע זה קשה להשגה. התיעוד הרשמי של require הוא טכני ולא הדרגתי &#8211; ממש כמו לקרוא מסמך Specification. מתאים בעיקר למי שכבר מתמצא. התוצאה: עקומת למידה לא קלה לשימוש ב require &#8211; וללא סיבה מוצדקת.</p>
<p>require היא בעצם ספריה בוגרת ומקיפה, מלאה באופציות אפשריות לשימוש. הממשק הפשוט שלה מעט מטעה: הוא נועד לספק קלות פיתוח &#8211; אך הוא מסתיר מורכבות רבה שקל להתבלבל בה. אני אתחיל בחטא, אך אתקן אותו בהמשך.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">מבוא נאיבי ל-Require.js</span></p>
<p>Require היא ספריה פשוטה וחמודה. היא מציגה בסה&quot;כ 3 פקודות:</p>
<div>
<ul>
<li><b>define </b>- הגדרה של מודול (יחידת קוד של ג'אווהסקריפט בעלת אחידות גבוהה ותחום-אחריות ברור).</li>
<li><b>require </b>- בקשה לטעינה של מודול בו אנו רוצים להשתמש.</li>
<li><b>require.config</b> - הגדרות גלובליות על התנהגות הספרייה.</li>
</ul>
<p>כשאני רוצה להגדיר מודול, אגדיר אותו בעזרת פקודת define:</p>
<div id="attachment_162604" class="wp-caption aligncenter" style="width: 325px"><img class="size-full wp-image-162604" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/require1.png" width="315" height="202" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
</div>
<div>
<p>ModuleID הוא מזהה טקסטואלי שם המודול. ה-Id בעזרתו אוכל לבקש אותו מאוחר יותר. את הקוד של המודול כותבים בתוך פונקציה, כך שלא &quot;תלכלך&quot; את המרחב הגלובלי (global space). קונבנציה מקובלת ומומלצת היא לחשוף את החלק הפומבי (public) של המודול בעזרת החזרת object literal עם מצביעים (ורוד) לפונקציות שאותם ארצה לחשוף (טורקיז). כמובן שאני יכול להגדיר משתנים / פונקציות נוספים שלא ייחשפו ויהיו פרטיים.</p>
<p style="display: inline !important;">מבנה זה נקרא &quot;Revealing Module&quot; והוא פרקטיקה ידועה ומומלצת בשפת javaScript. ספריית require מסייעת להשתמש במבנה זה.</p>
<p>נניח שיש לי קוד שזקוק למודולים 1 ו 2 בכדי לפעול, כיצד הוא מתאר תלות זו וגורם להם להטען? פשוט מאוד:</p>
<div id="attachment_162605" class="wp-caption aligncenter" style="width: 413px"><img class="size-full wp-image-162605" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/require2.png" width="403" height="159" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<p>הפונקציה בדוגמה היא callback שתפעל רק לאחר שהקוד של מודולים 1 ו-2 נטען ואותחל. m1 הוא reference ל-מודול1 (אותו object literal שהוחזר ב -return וחושף את החלקים הציבוריים) ו -m1 הוא reference למודול2. השיוך נעשה ע&quot;פ סדר הפרמטרים. doStuff היא כבר סתם פונקציה שעושה משהו עם m1 ו-m2.</p>
<p>בפועל, רוב הפעמים יהיו לנו קוד שגם מגדיר מודול וגם תלוי במודולים אחרים. משהו שנראה כך:</p>
<div id="attachment_162606" class="wp-caption aligncenter" style="width: 466px"><img class="size-full wp-image-162606" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/require3.png" width="456" height="336" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<div></div>
<p>קוד זה הוא מעט מסורבל, ויותר גרוע &#8211; טומן בתוכו חשיפה לאופי האסינכרוני בו טוענת require את קובצי ה-javascript. ייתכן וה return יופעל לפני ש-doStuff הוגדרה &#8211; מה שיחזיר undefined כמצביע ל-doStuff לקוד שביקש אותו. כתיבת קוד אסינכרוני שתבטיח שה-return יופעל רק לאחר ש-doStuff הוגדרה תוסיף עוד מספר שורות קוד &#8211; ותהפוך את קטע הקוד למסורבל עוד יותר. על כן require (בעצם AMD) הגדירה תחביר מקוצר למצב של מודול שתלוי בקוד אחר. זהו בעצם המצב הנפוץ ביותר:</p>
<div id="attachment_162607" class="wp-caption aligncenter" style="width: 506px"><img class="size-full wp-image-162607" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/require4.png" width="496" height="230" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<p>הנה, קוד זה כבר נראה אלגנטי וקצר. הפונקציה שהגדרנו בשורה הראשונה היא ה-callback שיקרא רק לאחר שמודולים 1 ו-2 הופעלו &#8211; ממש כמו בפקודת require. בעצם, ניתן לחשוב על פקודת require כמקרה פרטי של define בו איננו רוצים להגדיר מודול. היא שימושית ב-2 מקרים:</p>
</div>
<div>
<ul>
<li>כאשר אנו רוצים לטעון מודולים רק בהסתעפות מסוימת בקוד (ולכן איננו יודעים בוודאות על צורך זה בשורה הראשונה).</li>
<li>עבור הקובץ הראשון בתוכנה שלנו. כלומר: פונקציית ה-&quot;main&quot;.</li>
</ul>
<div>הדרך המקובלת ביותר לטעון את require ב-HTML היא באופן הבא:</div>
<div id="attachment_162608" class="wp-caption aligncenter" style="width: 532px"><img class="size-full wp-image-162608" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/require-html.png" width="522" height="197" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
<div>
<p>שימו לב שגם בפרויקט גדול, אין צורך להגדיר ב-HTML יותר מסקריפט אחד: require. הוא כבר יטען את כל השאר. data-main הוא שם קובץ ה-javascript של פונקציית ה-&quot;main&quot; שלנו שמאתחלת את התכנית. יש להקליד את שם הקובץ ללא סיומת .js. זוכרים שיש פקודה שלישית? config? &#8211; היא לא כ&quot;כ חשובה. היא משמשת להגדרות גלובליות מתקדמות לגבי ההתנהגות של require. למשל קטע הקוד הבא:</p>
<div id="attachment_162609" class="wp-caption aligncenter" style="width: 452px"><img class="size-full wp-image-162609" alt="מקור: ליאור בר-און" src="http://www.geektime.co.il/wp-content/uploads/2013/04/require5.png" width="442" height="100" /><p class="wp-caption-text">מקור: ליאור בר-און</p></div>
</div>
<div>קוד זה מגדיר שאם קובץ לא נטען (ברשת) תוך 10 שניות, require יוותר ויזרוק exception. מצב זה סביר בעיקר כאשר אתם טוענים קובץ מאתר מרוחק. ה-default הוא time-out של 7 שניות.</div>
<div>
<p>זהו, סיימנו! ליותר מזה לא תזדקקו אלא אם אתם מתכננים לכתוב מערכת הפעלה חדשה, את קוד הגשש שיפעל על מאדים או לבצע בדיקות-יחידה, להשתמש בספריות חיצוניות, לנהל גרסאות שונות של קבצים או בעצם&#8230; להשתמש ב-require בפרויקט אמיתי.</p>
<p><span style="color: #000000; font-size: 1.4em; line-height: 1.5em;">סיכום</span></p>
<p>חטאתי בהפשטה של require ואופן העובדה שלה, אולם בכל זאת &#8211; צריך להתחיל איפהשהו. את החטא אני מתכוון לתקן, אולם הפוסט הולך ומתארך ולכן אתחיל פוסט המשך. שיהיה בהצלחה!</p>
<p>&#8212;-</p>
</div>
</div>
<div dir="rtl">[א] למען הדיוק אפשר לציין ש-AMD התחיל כ-Modules/Transport/A (תחת קורת הגג של CommonJS, אם השם המוזר לא הבהיר זאת) &#8211; אך הוא נזנח תוך כדי עבודה. כרגע מנסים להחזיר אותו חזרה &quot;הביתה&quot; ל-CommonJS בדמות התקן <a href="http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition" target="_blank">Modules/AsynchronousDefinition</a>, בעיקר על בסיס העבודה שנעשתה ב-AMD.</div>
<p dir="rtl"><em><strong>הפוסט פורסם לראשונה בבלוג <a href="http://www.softwarearchiblog.com/2013/04/amd-and-requireJs-intro.html" target="_blank">Software Archiblog</a>.</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/amd-and-requirejs-intro/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>תחרות Tel Aviv App2U הסתיימה; הכירו את הזוכות</title>
		<link>http://www.geektime.co.il/tel-aviv-app2u-winners/</link>
		<comments>http://www.geektime.co.il/tel-aviv-app2u-winners/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 07:46:15 +0000</pubDate>
		<dc:creator>חן אידן</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[BuzzJourney]]></category>
		<category><![CDATA[Moovit]]></category>
		<category><![CDATA[Once App on a Time]]></category>
		<category><![CDATA[Tel Aviv]]></category>
		<category><![CDATA[אפליקציה]]></category>
		<category><![CDATA[אפליקציות]]></category>
		<category><![CDATA[המלחמה הבאה]]></category>
		<category><![CDATA[מאגרי מידע]]></category>
		<category><![CDATA[מחשבון מכס]]></category>
		<category><![CDATA[מיחזרתי]]></category>
		<category><![CDATA[עירוני]]></category>
		<category><![CDATA[שקיפות]]></category>
		<category><![CDATA[תחרות]]></category>
		<category><![CDATA[תל-אביב]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=162531</guid>
		<description><![CDATA[בואו להכיר ולהוריד את האפליקציות שזכו בתחרות Tel Aviv App2U, תחרות האפליקציות הציבורית הראשונה]]></description>
				<content:encoded><![CDATA[<div id="attachment_162545" class="wp-caption alignleft" style="width: 310px"><img class="size-full wp-image-162545" alt="מקור: יח&quot;צ, עיבוד תמונה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/app2u_.png" width="300" height="170" /><p class="wp-caption-text">מקור: יח&quot;צ, עיבוד תמונה</p></div>
<p>בחודש נובמבר האחרון השיקה עיריית תל אביב ביחד עם השר לשעבר מיכאל איתן את תחרות האפליקציות הציבורית הראשונה: Tel Aviv App2U. במסגרת התחרות, שנערכה במקביל לפתיחת מאגרי מידע עירוניים וממשלתיים, התבקש הציבור ליצור אפליקציות המותאות לשירות תושבי העיר המקומיים, התיירים המגיעים לביקור וכלל הציבור.</p>
<p>במסגרת התחרות הוגשו 72 אפליקציות, כאשר מתוכן <a href="http://www.telavivapp2u.co.il/" target="_blank">עלו לגמר 32 האפליקציות</a> המושקעות, הטובות והיעילות ביותר. כעת, הגיע הזמן להכריז על הזוכות המאושרות, שיזכו לקחת לא רק פרס כספי, אלא גם לזכות בתהילה עירונית מקומית &#8211; ומי יודע, אולי אפילו להפוך לחברת סטארטאפ חדשה.</p>
<h3>הכירו את הזוכות</h3>
<div id="attachment_162549" class="wp-caption alignleft" style="width: 60px"><img class="size-full wp-image-162549" alt="מקור: דף האפליקציה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/once.png" width="50" height="50" /><p class="wp-caption-text">מקור: דף האפליקציה</p></div>
<p><strong><a href="http://onceapponatime.info/" target="_blank">Once App on a Time היה היה בתל-אביב</a></strong></p>
<p><strong>צוות: דוב דנון, ד&quot;ר טל הסנר, פרו&quot;פ ליאור וולף, עומר פינס, סרגיי שביאקוב</strong></p>
<p>אפליקציית האנדרואיד של החברה מאפשרת למשתמשים ליצור תמונות פוטומונטאז', המשלבות את תל אביב של פעם עם תל אביב של היום. כך יכולים המשתמשים לצלם תמונות עדכניות עם מכשירי הסמארטפון שלהם, ובאותו הרגע לשלב אותן עם תמונות ישנות ונוסטלגיות של אותו המקום, בצורה מקצועית וחלקה. <strong>האפליקציה זכתה בפרס ראש העיר, בסך 20,000 שקלים.</strong></p>
<div id="attachment_162550" class="wp-caption alignleft" style="width: 60px"><img class="size-full wp-image-162550" alt="מקור: דף האפליקציה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/nextwar.png" width="50" height="50" /><p class="wp-caption-text">מקור: דף האפליקציה</p></div>
<p><strong><a href="https://itunes.apple.com/app/hmlhmh-hb-h/id581240384?ls=1&amp;mt=8" target="_blank">המלחמה הבאה</a></strong></p>
<p><strong>צוות: אסף בנדור ויובל טיסונה.</strong></p>
<p>אפליקציית ה-iOS מתריעה למשתמשים ברגע שמתחילה אזעקה, ומציעה להם את המסלול למקלט הקרוב ביותר אליהם, בהתאם למיקום בו הם נמצאים כרגע. בעוד שהתחרות התמקדה בתל אביב, האפליקציה עובדת בכל עיר ברחבי הארץ, וכוללת בתוכה גם אפשרות להשתמש בפלאש המכשיר כפנס, להתחבר אל רדיו גל&quot;צ לשמיעת עדכונים, הנחיות עזרה ראשונה והנחיות התגוננות בשעת חירום. <strong>האפליקציה זכתה בפרס השר לשיפור השירות לציבור, בסך 20,000 שקלים.</strong></p>
<div id="attachment_162551" class="wp-caption alignleft" style="width: 60px"><img class="size-full wp-image-162551" alt="מקור: דף האפליקציה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/moovit.png" width="50" height="50" /><p class="wp-caption-text">מקור: דף האפליקציה</p></div>
<p><strong><a href="http://moovit.co.il/" target="_blank">Moovit</a></strong></p>
<p><strong>צוות: רועי ביק, ירון עברון, ניר ארז</strong></p>
<p>האפליקציה, הזמינה למשתמשי אנדרואיד ו-iOS מאפשרת למשתמשים לנווט בצורה חברתית בתחבורה הציבורית. באמצעות חוכמת הקהל והתבססות על שאר המשתמשים באפליקציה, יודעת לכוון את המשתמשים אל המסלול המהיר והנוח ביותר מיעד המוצא אל יעד ההגעה, ומציה ליווי צמוד הכולל הוראות על גבי המפה לאורך המסלול, כך שהמשתמשים ידעו מתי בדיוק מגיעים אל התחנה שלהם. <strong>האפליקציה זכתה בפרס היישומון התחבורה הטוב ביותר, בסך 15,000 שקלים.</strong></p>
<div id="attachment_162552" class="wp-caption alignleft" style="width: 60px"><img class="size-full wp-image-162552" alt="מקור: דף האפליקציה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/buzz.png" width="50" height="50" /><p class="wp-caption-text">מקור: דף האפליקציה</p></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.buzzjourney" target="_blank">BuzzJourney</a></strong></p>
<p><strong>צוות: ליאור חרסט</strong></p>
<p>אפליקציית האנדרואיד של החברה מציעה גם היא דרך נוחה יותר להתמודדות עם התחבורה הציבורית בארץ, ומספקת מידע מלא על אוטובוסים, רכבות, מוניות ואפילו על תחנות תל אופן השונות הפזורות בעיר. באמצעותה יכולים המשתמשים לתכנן את המסלול השלם שלהם מנקודה לנקודה, ולהיות בטוחים שהם לא הולכים לאיבוד בעיר. <strong>האפליקציה זכתה בפרס היישומון התחבורה הטוב ביותר, בסך 15,000 שקלים.</strong></p>
<div id="attachment_162553" class="wp-caption alignleft" style="width: 60px"><img class="size-full wp-image-162553" alt="מקור: דף האפליקציה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/michzarti.png" width="50" height="50" /><p class="wp-caption-text">מקור: דף האפליקציה</p></div>
<p dir="rtl"><strong><a href="https://itunes.apple.com/us/app/myhzrty/id590237406?ls=1&amp;mt=8" target="_blank">מיחזרתי</a></strong></p>
<p dir="rtl"><strong>צוות: ענבל גפן</strong></p>
<p dir="rtl">אפליקציית ה-iOS מעוניינת לעזור לתושבי העיר להשאר ירוקים יותר, ומציגה להם את פחי המיחזור הקרובים ביותר אליהם. לצד מציאת אותם פחי מיחזור, יכולים המשתמשים לעודד את התהליך באמצעות השארת תגמולים ווירטואלים למשתמשים הבאים, בדוגמה מתנות וירטואליות, הודעות וכדומה. <strong>האפליקציה זכתה בפרס היישומון הירוק ביותר, בסך 15,000 שקלים.</strong></p>
<div id="attachment_162554" class="wp-caption alignleft" style="width: 60px"><img class="size-full wp-image-162554" alt="מקור: דף האפליקציה" src="http://www.geektime.co.il/wp-content/uploads/2013/04/tax.png" width="50" height="50" /><p class="wp-caption-text">מקור: דף האפליקציה</p></div>
<p><strong><a href="https://play.google.com/store/apps/details?id=com.soft108.taxcalculator" target="_blank">מחשבון מכס</a></strong></p>
<p><strong>צוות: טל קרלינר, לב ליבר, רותם גיטלין, בן אור דנציגר</strong></p>
<p>האפליקציה, הזמינה למשתמשי אנדרואיד מאפשרת לכל המשתמשים התוהים האם כדאי להם לרכוש מוצר בארץ או בחו&quot;ל, לדעת כמה בדיוק זה עתיד לעלות להם. באמצעות המחשבון, יוכלו לחשב את העלויות הנוספות של כל אחד מהמוצרים אותם מעוניינים לייבא, וכך לדעת האם הרכישה היא אכן משתלמת יותר ושווה את ההמתנה, או שעדיף לרכוש את המוצרים בארץ. <strong>האפליקציה זכתה בפרס היישומון השקיפות הממשלתית והעירונית בסך 15,000 שקלים.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/tel-aviv-app2u-winners/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>להציג דמו לאפליקציה שלכם מבלי לגעת בקוד: 3 כלים מומלצים</title>
		<link>http://www.geektime.co.il/3-tools-to-show-your-idea-without-using-code/</link>
		<comments>http://www.geektime.co.il/3-tools-to-show-your-idea-without-using-code/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 13:00:57 +0000</pubDate>
		<dc:creator>כתב אורח</dc:creator>
				<category><![CDATA[פיתוח]]></category>
		<category><![CDATA[appgyver]]></category>
		<category><![CDATA[codiqa]]></category>
		<category><![CDATA[edesk]]></category>
		<category><![CDATA[elance]]></category>
		<category><![CDATA[Pop]]></category>
		<category><![CDATA[אפליקציות]]></category>
		<category><![CDATA[אפליקציית דמה]]></category>
		<category><![CDATA[אפליקצית דמה]]></category>
		<category><![CDATA[דמו לאפליקציה]]></category>
		<category><![CDATA[כלים להצגת רעיון]]></category>
		<category><![CDATA[להעביר רעיון לאפליקציה]]></category>
		<category><![CDATA[להציג אפליקציה]]></category>
		<category><![CDATA[להציג רעיון]]></category>
		<category><![CDATA[ליצור אפליקציית דמה]]></category>

		<guid isPermaLink="false">http://www.geektime.co.il/?p=162381</guid>
		<description><![CDATA[כיצד ניתן להמשיך ולבנות אפליקציה ואפילו להציג אותה מבלי לגעת בקוד או לשכור מפתחים? הנה שלושה כלים חינמיים שיעזרו לכם לייצר דמו לאפליקציות]]></description>
				<content:encoded><![CDATA[<p><strong>הפוסט נכתב על ידי <b id="docs-internal-guid-2ea3ebf4-3bd6-8b9b-f177-0d98adfcb377">אלעד המר, יזם הכותב ומפתח מיזמים במתודולוגיית Lean Startup.</b></strong></p>
<div id="attachment_162384" class="wp-caption alignleft" style="width: 310px"><a href="http://www.geektime.co.il/wp-content/uploads/2013/04/tools.jpg"><img class="size-full wp-image-162384" alt="תמונה: צילומסך" src="http://www.geektime.co.il/wp-content/uploads/2013/04/tools.jpg" width="300" height="183" /></a><p class="wp-caption-text">תמונה: צילומסך</p></div>
<p>בחודשים האחרונים פגשתי למעלה מעשרה סטארטאפים שעובדים, חושבים, בונים, חולמים ומפתחים רעיונות לסטארטאפ. רובם הגיעו לשלבים מוקדמים, לחלק היה כבר מוצר ראשוני שהם קידמו בנחישות, אבל לכולם היה דבר אחד משותף &#8211; לא היה להם מספיק כוח פיתוח לכתוב את הקוד שיקדם אותם ויקח אותם לשלב הבא. כי כמו שאנחנו יודעים, אין כמו מוצר בידיים של המשתמשים כדי לדעת לאיזה כיוון נושבת הרוח.</p>
<p>חלק היו בשלב ה &quot;אנחנו מחפשים שותף/יזם טכנולוגי&quot; שזהו שלב טריקי שבו הם יכולים לחשוב (בטעות) שהם לא יכולים להתקדם עד שהם מוצאים את אותו מוביל טכנולוגי. אחרים היו תקועים בשלב המוצר עם המון רעיונות לפיתוח ללא יכולת לבצע.</p>
<h3>אם כן, מה אפשר לעשות?</h3>
<p>לחפש מפתחים זו כמובן אופציה. אפשר להתקדם במהירות ובהשקעה לא גדולה דרך אתרים כמו <a href="https://www.odesk.com" target="_blank">oDesk</a>, <a href="https://www.elance.com" target="_blank">Elance</a> ודומיהם, אבל אני מאמין שהדבר החשוב ביותר הוא להמשיך לבנות. איך? ללא כתיבת קוד? הנה כמה כלים ורעיונות:</p>
<p>כשאתם לומדים את המוצר ואת פוטנציאל השוק שלכם, צפיה באיך המשתמשים/לקוחות שלכם עובדים עם המוצר ומגיבים אליו, הינו אחד מהשלבים החשובים ביותר עבורכם. אם אפשר היה לשים משהו ראשוני בידי המשתמשים שנראה דומה למוצר שאתם מתעתדים לבנות, מרגיש כמו החוויה שאתם רוצים להעביר, ומייצג את החזון שלכם בצורה טובה &#8211; אתם מתקדמים למרות שאתם לא כותבים אפילו שורת קוד אחת.</p>
<p><strong>הנה שלושה כלים (חינמיים) שיאפשרו לכם לעבור את השלב הטריקי הזה:</strong></p>
<p><strong>1. Pop &#8211; Prototyping on Paper for iOS:</strong> פופ הוא לבטח הדרך הקלה והמהירה ביותר ליצור את האב-טיפוס לאפליקציה שלכם, להראות לאנשים ולקבל פידבק ראשוני של על הרעיון וחווית המשתמש. למעשה, אין כל צורך בעיצוב גרפי או יכולות עיצוב. אם אתם יודעים לעשות סקיצות פשוטות על נייר &#8211; אתם מוכנים.</p>
<p>כך זה עובד: אתם מכינים סקיצות של האפליקציה, מעלים את התמונות לאפליקצית &quot;פופ&quot; לאייפון, מגדירים את הכפתורים והליניקים לניווט &#8211; וזה הכל.</p>
<p><object width="640" height="360" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/ohtL6unyPA0?hl=en_US&amp;version=3" /><param name="allowfullscreen" value="true" /><embed width="640" height="360" type="application/x-shockwave-flash" src="http://www.youtube.com/v/ohtL6unyPA0?hl=en_US&amp;version=3" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
<p><a href="https://itunes.apple.com/us/app/pop-prototyping-on-paper/id555647796?mt=8" target="_blank">לינק להורדת האפליקציה</a></p>
<p><strong>2. Appgyver:</strong> הכלי האהוב עלי. אפשר להשתמש גם כן בסקיצות, אבל זה כלי הרבה יותר מתקדם ומרשים ומאפשר שימוש בצילומי מסך מעוצבים. פשוט מעלים את צילומי המסך ומייצרים את חווית השימוש באפליקציה שלכם ממש כפי שהיא תיראה בעולם האמיתי. יש גם אפליקציה מדהימה לאייפון שסורקת קוד על מסך המחשב וטוענת אוטומטית את האפליקציה שנבנתה. עכשיו אפשר לרוץ ולהראות את האפליקציה או הפיצ'רים החדשים שלכם כאילו שי בידיכם את האפליקציה האמיתית.</p>
<p><iframe src="http://www.youtube.com/embed/R8WlafGrXnk" height="360" width="640" allowfullscreen="" frameborder="0"></iframe></p>
<p><a href="http://www.appgyver.com" target="_blank">לינק לאתר</a></p>
<p><strong>3. Codiqa:</strong> כלי נוסף לבניית דמו לאפליקציה שלכם. יש לו editor מאוד עשיר עם המון אופציות לכפתורים וגרפיקה. למרות שלוקח זמן לבנות משהו שנראה כמו אפליקציה מלאה. אך לאחר ההשקעה תהיה בידיכם דמו יפהפה למה אתם רוצים להראות ולבדוק.</p>
<p><object width="640" height="360" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/8_WP8SInVFM?version=3&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed width="640" height="360" type="application/x-shockwave-flash" src="http://www.youtube.com/v/8_WP8SInVFM?version=3&amp;hl=en_US" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
<p><a href="http://www.codiqa.com" target="_blank">לינק לאתר</a></p>
<p>לסיכום, אם יש לכם כמה שעות לבנות לעצמכם גירסא ראשונה של המוצר מבלי לכתוב קוד &#8211; אלה יהיו השעות הטובות והפוריות ביותר שלכם.</p>
<p>תיצרו משהו להראות במהירות וצאו החוצה לעולם.</p>
<p>ללמוד, לעדכן, ללמוד, לעדכן &#8211; זה שם המשחק.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geektime.co.il/3-tools-to-show-your-idea-without-using-code/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

 Served from: geektime.co.il @ 2013-05-25 11:25:04 by W3 Total Cache -->