2 תוספי חובה ל-Visual Studio

הפוסט הזה הוא במיוחד לכול אחי המפתחים ב.net אשר משתמשים בVisual Studio ככלי העיקרי לפיתוח אתרים ותוכנות.

הצילום הוא מאוד ספונטני והקלטתי אותו ממש תוך כדי עבודה על פרויקט עבור לקוח, אבל אמרתי לעצמי שאני ממש חייב שתדעו על הכלים האלה במידה ואתם לא מודעים אליהם, ולכן יש לכם עכשיו סקרינקאסט חדש מטעמי.

אשמח לתגובות

2 must addons for visual studio from Avi Tzurel on Vimeo.

קבלת ציוצים באמצעות jQuery

כמו שהרבה מכם יודעים אני אוהב טוויטר מושבע, אני עושה בטוויטר שימוש יומיומי גם אישי וגם עסקי.

כמו בהרבה דברים שאני עושה אני אוהב לצלול יותר פנימה וכמובן שיצא לי לעבור על הAPI של טוויטר, גם בשביל העבודה שלי על פרויקט קוד פתוח שנקרא HebTweet (שהיום כבר עבר לאייפון ואני לא מעורב בו) וגם בשביל עוד כמה פרויקטים מעניינים הקשורים בקוד פתוח.

בקיצור, קיבלתי מייל לא מזמן ששואל שאלה פשוטה, האם אני יכול לקבל את הציוצים שלי באמצעות JavaScript בלבד, ללא צד שרת, ממש לקבל קוד שאני יכול לשתול אותו בכול אתר ולקבל ציוצים לפי שם משתמש.

כמובן שלאותו מייל עניתי: "הממ…כן, אתה יכול!"

קוד jQuery

כפי שכולכם בטח כבר יודעים אני אוהד מושבע של jQuery ובה עשיתי שימוש גם בדוגמה הזו, לכן, בשביל שהדוגמא תפעל אצלכם אתם צריכים הפנייה לקוד jQuery בראש ובראשונה.

איך מתאימים את הקוד לצורכיכם?

משנים את המשתנה twitterUsername – זה המשתנה שיקבע את שם המשתמש שהציוצים שלו ימשכו
יש עוד משתנה שקובע את כמות הציוצים שהשאילתה תחזיר אבל אני חושב שזה די ברור מהקוד :-)

   1: function getuserTweets() {

   2:     var twitterUsername = 'KensoDev';

   3:     var twitCount = 50;

   4:     $.getJSON(

   5:         'http://search.twitter.com/search.json?callback=?&rpp=' + twitCount + '&q=from:' + twitterUsername,

   6:         function(data) {

   7:             $.each(data, function(i, userTweets) {

   8:                 for (var tweet = 0; tweet < userTweets.length; tweet++) {

   9:                     if (userTweets[tweet].text !== undefined) {

  10:                         $('body').append('<p>' + userTweets[tweet].text + '</p>');

  11:                     }

  12:                 }

  13:             });

  14:         }

  15:     );

  16: }

בהצלחה

כיצד תהיו מקצוענים בפיתוח תוכנה? חלק 2

הפוסט הזה ממשיך את הפוסט הקודם בסדרה – כיצד תהיו מקצוענים בפיתוח תוכנה?

במהלך היום וקצת הזה מאז הפוסט הקודם אספתי עוד נקודות על הנקודות שכבר היו לי בעיקר בעזרתו האדיבה של חברי היקר @eladmeidar

מכונת זמן מישהו?

אם אתם מפתחים לבד או בצוות של 30 אנשים, זה בכלל לא משנה. החלק הזה של הפוסט נוגע לכם ברמה הקרובה ביותר שיכולה להיות.
אתם צריכים להשתמש בSource Control כלשהו, זה בכלל לא משנה באיזה אתם משתמשים.

הרבה פעמים אני מגיע לחברות ואז אני שומע את המתכנתים אומרים: יכול להיות שאין לי את הגרסה החדשה? שלח לי אותה במייל… ואז אנחנו מגיעים שוב לנקודה של להיות שבויים בהמתנה (נקודה מהפוסט הקודם)

בין אם אתם משתמשים בSVN או בGIT, גם אם אתם משתמשים בשרת פנים חברתי או בGoogle Code זה בכלל לא משנה, אתם צריכים להכיר את הכלים לSource Control ולהשתמש בהם. לעשות Commit כשסיימתם וUpdate לפני שאתם מתחילים.

Patching

אם יש לכם "חייזר" (מפתח מחוץ לצוות) שבא לפתור בעיה ספציפית אל תהיו שבויים בלשלוח לו את הקוד התקול ושישלח לכם את הקוד המתוקן, תנו לו את הקוד ושיכתוב Patch, בינתיים אתם תעבדו על דברים אחרים וכשתקבלו את הPatch תכניסו אותו פנימה והכול דבש! :-)

תוודאו מה אתם צריכים לעשות ואז תוודאו שוב

הרבה פעמים אני מקבל עבודה מלקוח ואז אני מבקש הבהרות על מה אני צריך לעשות (בכול הפרויקט), מה בדיוק התפקיד שלי בתוך הצוות, במידה ואני מנהל הצוות אז מה בדיוק אני צריך לנהל, איזה חלקים יוכתבו לי ואיזה אני צריך להכתיב.

לעיתים (די קרובות) אני מקבל תשובה בסגנון "תתחיל לעשות XYZ ואנחנו נעביר דרישות בהמשך".

תסרבו!

תבדקו ותשאלו מה בדיוק צריך לעשות לפני שאתם מתחילים, הקו הכללי של הפרויקט צריך להיות Crystal Clear וללא נקודות שחורות גדולות, כמובן שיכול להיות שלא יהיה לכם 100% מהמידע אבל המידע שחסר לכם צריך להיות כזה שלא יגרום לכם לעשות שינויים מרחיקי לכת ובטח לא כזה שיגרום לעבודה כפולה, לא שלכם, לא של הצוות שלכם זה בזבוז זמן וכסף ואפילו לא של משלם המיסים אלא לעיתים קרובות אפילו שלכם.

פעם קיבלתי מייל כזה מלקוח:

אני רוצה שתעשה באתר שאפשר יהיה לשלם
שהתשלום יעבור ללקוח שהגולש בחר באופן אוטומטי

נאמן למקור נשבע לכם, שתי שורות שיכלו להתבטא ב20 דקות עבודה ובאותה קלות בדיוק ב20 שעות, אל תתביישו לשאול שאלות, גם אם הן נראות לכם שאלות טפשיות וברורות, תשאלו!

תשמרו את הלקוח שלכם מיודע

אם אתם שכירים הלקוח שלכם יכול להיות המנכ"ל של החברה והוא יכול להיות גם הלקוח הסופי, אם אתם פרילנסרים (כמוני) הלקוח שלכם הוא חברה או לקוח סופי אבל זה בכלל לא משנה.

מה הנקודה?

הנקודה היא שאתם צריכים לשמור את הלקוח שלכם מיודע בכול נקודה בפרויקט שהיא קריטית.
נתקעתם באיזה Test (יש סעיף שלכם כאן על טסטים) ואתם חושבים שתצטרכו עוד יומיים שלושה לעבור נקודה מסוימת, תשלחו מייל, תרימו טלפון, תשלחו יונת דואר, תודיעו ללקוח.

נתקלתי פעם בחברה שידעה לקוח (גדול מאוד, פרויקט עצום) על איחור של שבועיים בפרויקט לילה לפני ההשקה, שלוש שעות אחרי שהלקוח הרים כוסית עם הצוות שלו שמחר מרימים את האתר אחרי 4 חודשים של עבודה.
אחרי שבועיים התברר שבכלל הפרויקט מוכן רק ב80%, הפרויקט עלה לאחר 6 חודשים וגם לא גמור.

המנעו מזה! כמו מאש!

תיידעו את הלקוחות שלכם, אמרו להם את האמת בפנים, תיידעו במיילים.
עדיף שהלקוח ידע מוקדם מאשר מאוחר.

אם אתם פרילנסרים סעיפים אלה נוגעים אליכם.
אתם יוצאים למילואים? תודיעו!
יוצאים לחופש עם האישה לשבוע? תודיעו!
אתם חולים ליותר מיום אחד? תודיעו!

הבנתם? יופי :-)

שירות, שירות, שירות

תציעו ללקוחות שלכם את השירות הטוב ביותר שאתם יכולים, השירות מתחיל בלהקשיב להם. תאמינו לי הם מבינים על מה הם מדברים ואתם בטח לא יודעים יותר טוב מהם מה הם צריכים ברמות הגבוהות, אולי הם לא מבינים קוד אבל הם מכירים את העסק שלהם ברמה שאתם לא מדמיינים בכלל.

תענו לטלפון באדיבות, תדברו איתם ברמה גבוהה, אל תצעקו, אל תרימו קולכם על הלקוחות שלכם.

יש מספיק חברות ופרילנסרים שמציעים שירות נוראי, הנה הזדמנות שלכם לבדל את עצמכם, תהיו מקסימים, תהיו מדהימים הלקוח צריך להרגיש מצוין כשהוא מקבל שירות מכם.
אתם לא עושים לו טובה. הוא משלם (אם הוא לא משלם, פטרו אותו).

הבהרה: שירות טוב הוא לא לעשות פרויקטים בחינם, הוא לא לתקן בעיות בחינם כשזה לא נסגר בחוזה (הכול בפרופורציות) שירות מתבטא בהרבה מעבר לכך.

קראתי לפני כמה שנים ספר מעולה על שירות שלצערי איני זוכר את שמו, סורו לחנות הספרים הקרובה לביתכם (או לAmazon) ובדקו כמה ספרים כאלה, רכשו לכם אחד וקראו, להפסיד לא תפסידו אני מבטיח לכם.

תרשום תרשום…

לקוח מדבר אתכם? תהיו עם דף ועט זמינים.
לקוח שולח אליכם מייל עם באג – שלחו אותו למערכת הבאגים שלכם (פירוט בהמשך).

מכירים את המילה "שכחתי", תשכחו אותה :-)

תשתמשו בכלים שיעזרו לכם לזכור על מה דיברתם עם הלקוח, זה לא חייב להיות משהו היי-טקי, זה יכול להיות Low tech לגמרי ולהסתכם בדף ועט (שבסוף כול יום עוברים על מה שרשמנו וכותבים ליום הבא).

GTD – Getting Things Done!

האמת, אני מרגיש לא מספיק ראוי לדבר על השיטה :-) חפשו עליה חומר באינטרנט, ישמו אותה בכול אספקט של עבודה שלכם, מפיתוח ועד תקשורת מול לקוח (ואפילו יצא לי חרוז)

בזה מסתכם לו החלק השני בסדרה, בחלק הבא אני אענה על התגובה של @eladmeidar עם כלים שיעזרו לכם, חלקם הגדול חינמי לגמרי, אתם יכולים גם לשוטט אחורה לפוסטים שלי על "כלים" ולראות שיש שם כבר כמה כאלה.

תוכנית חדשה של מיקרוסופט – Website Spark

בימים האחרונים מסתובב באז בטוויטר גם לפני ההכרזה וגם אחריה על כך שמיקרוסופט עשתה משהו גדול. הרבה אנשים בהתחלה לא הבינו על מה מדובר, אבל לאחר ההכרזה המון אנשים הביעו שביעות רצון גדולה מאוד ממה שמיקרוסופט עשו.

אני אישית לא מהמקניטים של מיקרוסופט, אני חושב שזו חברה מעולה שעושה מוצרים טובים, כלי הפיתוח שלה לדעתי האישית הם פשוט מהטובים ביותר שקיימים ושום דבר (וניסיתי המון) לא משתווה אליהם.
אוקיי… אז על מה הם הכריזו?

הרכזת מיקרוסופט על תוכנית חדשה

מיקרוסופט הכריזו על Website Spark, זוהי תוכנית חדשה לעידוד חברות קטנות ומפתחים בודדים לנסות את המוצרים של מיקרוסופט ללא התחייבות לרכוש את המוצרים ועם אפשרות לצאת מהתוכנית בכול זמן נתון.

(צילום מסך מאתר התוכנית)

webadbaehn4n4tn

אורך התוכנית: 3 שנים בהם תוכלו לצאת מהתוכנית בכול נקודה, לשלם 100 דולר ולהגיד שלא הייתם מרוצים – אך זו כמובן לא הכוונה.

מה התוכנית כוללת?

3 רשיונות לVisual Studio 2008 Profesional Edition
1 רישיון לExpression Studio 2 או 3
2 רישיונות לExpression Web 2 או 3
3 רישיונות ל Windows Server 2008 ול Sql Server 2008
4 רישיונות מעבר לWindows 2008 ול Sql server 2008

למפתחים בטכנולוגיות מיקרוסופט ולחברות עם פחות מ10 עובדים זו פשוט רשימת חלומות. יש כאן את כול מה שצריך בשביל לספק פתרונות תוכנה איכותיים (בתנאי שיש לכם מתכנתים איכותיים) ללקוחות שלכם ובמחיר בדיחה.

כדאי מאוד לקרוא את התנאים באתר של מיקרוסופט (כי יש כאלה).
הרישום אורך דקות ותוך 72 שעות בערך מקבלים אישור למייל ויכולים להוריד את התוכנות.

למי זה מתאים?

זה מתאים לחברות קטנות או מפתחים עצמאיים, שכן רוצים להיכנס לפיתוח בטכנולוגיות מיקרוסופט אל לא רוצים לשלם על זה הון מלכתחילה.

למי זה לא מתאים?

זה לא מתאים לכם אם אתם כבר חברים של אחת התוכניות במיקרוסופט כמו ActionPack או מנוי MSDN כזה או אחר.

הכי חשוב חברים יקרים, תעשו בתוכנות שימוש טוב, תייצרו תוכנות טובות ואתרים מעולים.

כיצד תהיו מקצוענים בפיתוח תוכנה?

שלום לכולם,

תקופה ארוכה כבר שאני מסתובב בפורומים, טוויטר, פייסבוק או במעגלים של חברות להן אני מייעץ בנושאי פיתוח תוכנה ותמיד מנסים להגדיר מה זה מקצוען בפיתוח – מיהו מקצועי ומיהו מקצוען. את החובבן קל להגדיר, אך את המקצוען קשה מאוד להגדיר.
אנחנו יודעים שזה לא קשור רק לקוד, אנחנו גם יודעים שאתה חייב לכתוב קוד טוב בשביל להיות מקצוען אבל בטח זה לא רק זה, זה פשוט סדרה של דברים שקשורים אחד בשני.

המון בלוגים עוסקים בפיסות של קוד, אפילו הבלוג שלי בא לתת על זה סוג של מענה בשפת הקודש, אבל קשה מאוד למצוא בלוגים שעוסקים בנקודות שיעזרו לכם להיות מוגדרים כמקצוענים.

אני אשתדל לעזור כאן, מניסיוני בתור יועץ לארגונים ולחברות ניהול צוותים, וגם כמובן מכמות החומר שאני קורא במהלך השבוע \ חודש \ שנה.
את הפוסט הזה אני כותב בהשראה של המון פוסטים של Uncle Bob והרצאות שלו.
הפוסט הוא בכמה חלקים, חלקו יהיה כתוב וחלקו בסקרינקאסט

טוב, נתחיל?

משמעת

נתחיל בכך שבעצם המון מתחיל במשמעת, אנחנו יכולים לדבר ימים ושבועות על עקרונות הOOP על מה זה SOLID או האם כדאי לכתוב בWebForms או ששווה כבר לעבור לMVC אבל האמת היא שלא שם זה מתחיל.

הכול מתחיל במשמעת.

ספק את הלקוחות שלך, עמוד בזמנים, שים את עצמך במקום של הלקוחות שלך ותבין את הצרכים שלהם.
אני מכיר את כול ההגדרות של מתכנתים: ההנהלה לא מאפשרת לעמוד בזמנים, הלקוחות נודניקים ולא מבינים כלום אבל האמת שזה לא ממש נכון, אני לא אומר כמובן שאין מקרים שבהם זה לא נכון אבל זה בטח לא המצב ברוב המקרים.

זמנים קצרים

תעבדו בזמנים מאוד קצרים, בין אם בPair Programming או בזמני אספקה מאוד קצרים שבהם אתם מחלקים את הפרויקט שלכם גדול או קטן לנקודות קצרות.
Uncle Bob אומר שהוא עשה סקר בין כמה לקוחות ושאל אותם בכול נקודה של הפרויקט (שלא בזמנים קצרים) מתי הם היו הכי מרוצים והם פשוט אמרו חד משמעית שבשלב הראשון.
למה? בגלל שבשלב הזה הם יכלו להשפיע בצורה טובה יותר על איך הפרויקט אמור להיראות.

אל תהיו שבויים

מכירים את זה שאתם לא מתחילים פרויקט בגלל שחסר לכם משהו קטן שהלקוח צריך לספק?

הממ, שקרנים :-)

כן, אני יודע אתם לא בונים שום דבר לפני שיש לכם את כול ההגדרות, כן אני יודע שאתם לא רוצים שדברים ישתנו ואז תצטרכו לזרוק קוד לפח.
טוב, אז בואו נרגיע, אתם תזרקו קוד לפח!

תתחילו לעבוד!
אל תהיו שבויים בתוך המעגל הזה של חסרים לכם נתונים, של ההנהלה צריכה לספק עוד נתונים ואתם פשוט לא תתחילו עד שיש לכם את כולם.

תתחילו בלבנות שכבות שבהם אתם לא צריכים את המידע הזה, תתחילו בלבנות לעצמכם תשתיות שלא קשורות בשום צורה, תפשטו, תעשו אבסטרקציה של שכבות מידע.

זו הייתה דוגמא קצרה, מופשטת מאוד של נקודה שבה מתכנתים נשבים בתוך מעגל בלתי נגמר אבל יש עוד עשרות, מחכים לתוצאות בדיקות, מחכים להגדרות לקוח, מחכים למחשב מתאים, מחכים למקלדת, העכבר איטי ועוד כול מיני כאלה.

סגור? נמשיך :-)

תמנעו מצימוד

תמנעו מצימוד הדוק לא רק באפליקציה שלכם אלא גם במסגרת הקוד שלכם.
הרבה פעמים אני תו”כ כתיבת תוכנה צריך להמתין לתוצאות בדיקה של מישהו אחר, לקוד של מישהו אחר או אפילו לComit של נתונים מצוותים אחרים.

זה רע!

תמנעו מצימוד הדוק שלכם לצוות אחר, או למתכנת אחר, אם מישהו צריך לספק לכם חתיכת קוד או קומפוננטה מסוימת תתכננו את הקוד שלכם כך שהקומפוננטה תשתלב פנימה מבלי שתצטרכו לחכות לה.
הרי בכול מקרה תצטרכו לכתוב Test לבדוק את הקוד שלו בשילוב הקוד שלכם.

ארכיטקטורה מסובכת… אוי ואבוי

תמנעו מארכיטקטורה סבוכה, מסובכת, כזו שיש לה תיעוד מסובך ובלתי מובן.

אני מכיר חברות שכול כך סבוכות בתוך הארכיטקטורה הבלתי אפשרית שלהם שפשוט מפסיקות לשלב מוצר מסוים בגלל שהאנשים (בשיווק) כבר לא מאמינים בו.

תמנעו מזה כמו שכשהייתם ילדים ההורים שלכם למדו אתכם להמנע מאש.
ארכיטקטורות כאלה פשוט לא עובדות לעולם ולא מחזיקות מעמד במבחן הזמן ובמבחן העלויות, שמרו את הדברים פשוטים מאוד, עבודה בשכבות, אבסטקציה ועוד.

שיפורים קטנים, קטנים אבל תמיד

אתם צריכים לשפר את הקוד שלכם, זו לא שאלה זו קביעה, גם אחרי שתיישמו את כול מה שכתוב כאן תכתבו קוד נקי מאוד עדיין יש שיפורים לעשות.

שימו לעצמכם ביומן כול יום לעשות שיפור בקוד שלכם, תעברו על פרויקטים אקראיים למשך שעה ביום, תשפרו פיסות קוד, תעבירו נתונים לCache במקום בסיסי נתונים, תכתבו string.Format במקום לשרשר String אקראיים.

שיפורים קטנים לאורך זמן יהוו שיפור גדול מאוד בסופו של דבר.

ממה להמנע? להמנע מאוד מלהגיד “אני אכתוב את זה טוב יותר אח”כ”, אתם לעולם לא תעשו את זה.

כתיבה מחדש – אוי ואבוי גדול מאוד

שבועת צופים
אין חברה שנכנסתי אליה עד היום שלא שמעתי את המשפט “המערכת הזו דפוקה צריך לכתוב אותה מחדש לגמרי”
אפילו לא חברה אחת.
יש איטיות? צריך לכתוב מחדש
יש בעיה בבסיס נתונים? צריך לכתוב מחדש
קוד HTML גרוע? צריך לכתוב מחדש

תדמיינו אותי בתור המנכ”ל שלכם, אני לעולם לא הייתי מאפשר את זה, לעולם!
זה מטומטם מבחינה תקציבית, תיאורטית, מעשית ועוד הרבה

מפתחים בתוך חברה יכולים להיות כוח לא מבוטל, זה מדהים לראות איך מפתחים יכולים להיות מאוחדים לעומת ההנהלה שלהם, בסופו של דבר ההנהלה תתקפל.

אני אומר לכם, אסור להם להתקפל ולכם אסור לדרוש את זה, אם יש לכם חלקים בעייתיים תכתבו אותם מחדש, אם אתם צריכים להתאים חלקים לדרישות של הלקוח תכתבו רק אותם מחדש.

אל תכתבו קוד רע

החוק הזה יגרום לכם ללכת ולא לרוץ, תמיד.

אי אפשר למהר בטירוף ולא לכתוב קוד רע.

Uncle Bob נותן כאן בהרצאה שלו השוואה מדהימה שאני רוצה לקחת ממנו ולכתוב אותה כאן.

דמיינו שאתם חווים חוויה חוץ גופנית ועומדים מעל חדר ניתוח בו רופא עורך עליכם ניתוח לב פתוח.
איך הייתם מעדיפים שהרופא יעבוד?

האם הייתם רוצים שהוא יעבוד לאט, ישקיע בתפרים שהוא עושה, ישקיע בתהליכים נכונים, יעבוד עם כלים נכונים או שהייתם רוצים שהוא יעבוד כמו שאתם עובדים כשאתם לחוצים?

כאן מסתיים החלק הראשון, המשך יבוא…

איך אומרים באנגלית Chew on it for a while…

Streaming לוידיאו ואודיו – כיצד?

שלום לכולם,

בימים אלה אני מתחיל Session של פגישות יעוץ מול לקוח. הלקוח הוא חברת בניית אתרים שרוצה לבנות לאחד הלקוחות שלה אתר למדריכי וידאו אונליין.

מטבע הדברים כמובן שלא אזכיר את שמה של החברה ואת שם הלקוח, אבל אני כן יכול לשתף אתכם במידע שזורם ממני אליהם ואני אף שמח לעשות זאת.

כאשר ניגשים לבצע אתר שצריך להזרים וידאו למשתמשים צריכים לענות ראשית על כמה שאלות מרכזיות.

1. האם אנחנו באמת רוצים Streaming או שמספיק לנו Progressive. רגע רגע, מה זה אומר בעצם?
2. האם יש לנו שרתים ייעודיים או שאנחנו צריכים לקבל את השירות הזה כחלק מService מאחד מנותני השירותים למחשוב ענן.

סטרימינג אמיתי או פרוגרסיב?

הרבה פעמים אני שומע מלקוחות שהם רוצים סטרימינג של וידאו אבל הם באמת לא מודעים למה זה אומר וכול הכוונה שלהם היא שהם יהיו מסוגלים להריץ סרטוני וידאו דרך השרת שלהם ולאו דווקא Streaming.

מה ההבדל?

סטרימינג – Streaming המידע שזורם ללקוח הוא זה שהוא רואה עכשיו ויראה בכמה שניות הקרובות, אם הלקוח לחץ על Play בוידיאו ואז לחץ על Pause המידע יפסיק לזרום אליו.
אני חושב שזהו ההסבר הפשטני ביותר שאני יכול לתת לאופציה הזו.

עוד הסבר הוא שהמידע נמצא על השרת בלבד ולא אצל הלקוח, המידע זורם מהשרת מפורש בלקוח לתמונות או וידאו ומוצג בסוג של Player (כול אחד שתבחרו).

לרוב, משתמשים בסטרימיג כאשר לא מעוניינים שהמידע ישמר אצל הלקוח, למשל בקבצי MP3 שיש עליהם הגנה ואנחנו רוצים לשמור על זכויות יוצרים.

Progressive – Progressive עדיין יאפשר את הצפייה בוידיאו אך הסרטון או קטע המוזיקה יורדים אל הלקוח (בו זמנית) ואז מתנגנים.
למשל, אם נלחץ על Play נתחיל בתהליך של זרימת מידע ללקוח ושמירה של הקובץ אצלו בTemporary Internet files, גם אם הלקוח ילחץ על Pause הוא ימשיך את תהליך השמירה ללא תלות בשום פעולה אחרת שלו.

דוגמא טובה לכך אנחנו יכולים לראות בYouTube שמשתמשים בProgressive על מנת להזרים את הסרטונים ללקוח, הסרטונים נשמרים בצורה זו או אחרת על המחשב המקומי.

יתרונות וחסרונות

כאשר אנחנו מדברים על Progressive אנחנו יכולים לעשות חישוב קצר וסיכויי הסתברות ולראות שיכול להיות מצב שאנחנו מזרימים יותר מידע ממה שהEnd Client שלנו ישתמש בו, למשל יכול להיות שלמישהו (אחד הלקוחות) יש אינטרנט מהיר במיוחד והוא מוריד בקצב של 10 מגה, קצב הצפייה במקרה הזה יהיה קטן יותר מקצב ההורדה.

יכול להיות מצב שגולש צפה ב10 שניות של וידאו אבל יש אצלו כבר דקה אחת או יותר מאותו הסרטון, האם השרתים שלנו מהירים בקצב הדחיפה שלהם זה מצב ודאי.

החיסרון במקרה הזו הוא כמובן Bandwidth usage, אנחנו מזרימים המון מידע ולמידע הזה יש עלות בסופו של דבר (גם כספית וגם ביצועים על מערך השרתים שלנו)

בStreming אנחנו מזרימים חלקיקים מהמידע, ורק חלקיקים בהם המשתמש עושה שימוש ברגעים אלה, אם המשתמש ירצה לקפוץ לדקה ה20 בסרטון מסוים הוא לא צריך לקבל אליו את כול המידע עד הדקה ה20 (למרות שגם בProgressive לא חייב להיות מצב כזה)

היתרון המובהק הוא השימוש רק במה שצריכים ולא במה שלא

החיסרון הוא עלויות גבוהות של שרתי המדיה, הן בחומרה והן בתוכנה למרות שהיו קיימים כבר פתרונות טובים הן בOpen Source והן במחשוב ענן שיכולים לתת את השירות הזה כExtra Service.

יכול להיות שהשרת שלך יהיה יעודי לWEB אבל כול הסרטונים יזרמו מEC של אמזון לדוגמא.

טכנולוגיות

גם בסטרימיג וגם בפרוגרסיב יש לנו את האפשרות לבחור.

Flash

במידה ונבחר בטכנולוגיה זו נצטרך לבצע המרה של כול הסרטונים שלנו לFLV, סרטונים של WMV או Avi לא יוכלו להיות מנוגנים על ידי Flash Player.
ניתן למצוא היום ממירים בתשלום או חינמיים.

ffmpeg-logo

אחד מהממירים הטובים ביותר שקיימים בשוק הוא FFMpeg שמכילה Command Line עשיר באפשרויות שאיתו ניתן לבצע Tweaking להמרה, איכות, גודל, Frame Rate ועוד.
FFMpeg אינו לשימוש מסחרי, במידה ורוצים לעשות בו שימוש מסחרי צריכים לבצע Open Source לכול מה שנוגע בחלק הזה.

אם למשל עשיתם המרה אוטומטית דרך SQL תצטרכו לחשוף את הקוד, אם עשיתם כול דבר אחר גם אותו תצטרכו לחשוף לדורשים אותו, אחרת לא תוכלו לעשות שימוש (הוגן) בתוכנה.flash-media-server

במידה ונבחר בסטרימינג יש לנו את Adobe Flash Media Server.
תוכנה מעולה זו יכולה לשבת על שרת יעודי שלכם ולבצע Stream של וידאו, אודיו, מידע,לנהל משתמשים, Chat's ועוד ועוד.
התכנות לשרת הזה אינו אינטואיטיבי וידרוש בד"כ מתכנת מיומן עם יכולת למידה גבוהה ביותר.

fetch

לסטרימינג של פלאש אפשר למצוא גם את תוכנת קוד פתוח Red5

מניסיון קצר מאוד עם התוכנה היא טובה מאוד, Solid Streaming גם של וידאו וגם של אודיו, שווה בדיקה לפני שמוציאים עשרות אלפי שקלים על כול דבר אחר.

Avi, WMV ושאר ירקות

במידה ולא נרצה את המרת הוידאו, נוכל להשתמש בWindows Media Player, החיסרון המובהק הוא התאימות לדפדפנים. משתמשי פיירפוקס וספארי לא יוכלו לראות את הסרטונים שלכם (לפיירפוקס יש תוסף מיוחד).

אפשר גם לבצע Streaming על ידי מימוש פרוטוקול MMS ושימוש בWindows media streaming שבא כחלק Windows 2003.

היום יש גם את Silverlight שמתחיל לצבור תאוצה וניתן לבצע גם Streming וגם פרוגרסיב דרכו.

silverlight

Sprite (לא, לא המשקה) CSS

שלום לכולם,

בטח שמעתם את המונח הזה פעם – Sprite Css.

Sprite Css זה בעצם ליצור תמונה אחת ויחידה אשר משמשת אלמנט רקע של כמה וכמה אובייקטים (כמה שאתם רוצים).

בסקרינקאסט של 7 דקות לערך אני מסביר (וגם קצת מפשל בדרך… :-) אתם תבינו שתראו) איך בדיוק עושים את זה באמצעות שימוש בCSS, jQuery.

אתם כמובן יכולים לעשות את זה בכול אמצעי אחר שבא לכם כמו למשל עם :hover בCSS (אל תבכו שזה לא עובד באקספלורר 6)

בהצלחה

אשמח לשמוע תגובות לכאן או למייל

אפשר להוריד את הפרויקט לדוגמא מכאן

פרויקט לדוגמא – CSS SPRITE

ניתן גם להוריד את הוידאו המקורי באיכות גבוהה מכאן

http://www.box.net/shared/kikxh8abtp