April 2008 - Posts
לכל מי שאי פעם יצטרך. לצרף כחלק ממחלקה או טופס/דף.
' ספירת העומר - כולל שנים מעוברות
' משה למפרט - moshel@a7.org
' http://blogs.microsoft.co.il/blogs/moshel
'
' שימוש חופשי, עם ההערה במקומה ובדף ה"אודות" של האתר או התוכנה + קישור לבלוג.
'
Shared oHD As New Globalization.HebrewCalendar()
Shared Nums() As String = {"אחד", "שניים", "שלושה", "ארבעה", "חמישה", _
"שישה", "שבעה", "שמונה", "תשעה", "עשרה"}
Shared Dec() As String = {"עשרה", "עשרים", "שלושים", "ארבעים", "חמישים"}
Shared Function NumToText(ByVal Num As Integer) As String
Select Case Num
Case 1, 3, 4, 5, 6, 7, 8, 9
Return Nums(Num - 1)
Case 2
Return "שני"
Case 11, 12, 13, 14, 15, 16, 17, 18, 19
Return Nums(Num - 11) & " עשר"
Case Is > 20
If Num Mod 10 Then
Return Dec(Int(Num / 10) - 1) & " ו" & Nums((Num Mod 10) - 1)
Else
Return Dec(Int(Num / 10) - 1)
End If
End Select
End Function
Shared Function OmerToText(ByVal Day As Integer) As String
Return "היום " & NumToText(Day) & " יום לעומר"
End Function
Public Shared Function GetOmer(ByVal dDate As Date) As String
dim iYear as integer = oHD.getYear(Now())
Return OmerToText(DateDiff(DateInterval.Day, _
New Date(iYear, 7-oHD.isLeapYear(iYear), _
14, 20, 0, 0, New System.Globalization.HebrewCalendar), dDate))
End Function
וגירסת C#
static Globalization.HebrewCalendar oHD = new Globalization.HebrewCalendar();
static string[] Nums = {"אחד", "שניים", "שלושה", "ארבעה", "חמישה", "שישה", "שבעה", "שמונה", "תשעה", "עשרה"};
static string[] Dec = {"עשרה", "עשרים", "שלושים", "ארבעים", "חמישים"};
// משה למפרט - moshel@a7.org
// http://blogs.microsoft.co.il/blogs/moshel
//
// שימוש חופשי, עם ההערה במקומה ובדף ה"אודות" של האתר או התוכנה + קישור לבלוג.
//
public static string NumToText(int Num)
{
switch (Num) {
case 1: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
return Nums(Num - 1);
case 2: return "שני";
case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19:
return Nums(Num - 11) + " עשר";
case else:
if (Num % 10) {
return Dec(Conversion.Int(Num / 10) - 1) + " ו" + Nums((Num % 10) - 1);
}
else {
return Dec(Conversion.Int(Num / 10) - 1);
}
break;
}
}
public static string OmerToText(int Day)
{
return "היום " + NumToText(Day) + " יום לעומר";
}
public static string GetOmer(System.DateTime dDate)
{
int iYear = oHD.getYear(Now());
return OmerToText(DateDiff(DateInterval.Day, new System.DateTime(iYear, 7 - oHD.isLeapYear(iYear), 14, 20, 0, 0, new System.Globalization.HebrewCalendar()), dDate));
}
אני מפעיל 2 בלוגים תחת אותו השם - "מאחורי המסך". הראשון - אישי-פוליטי, ונכתב על "פלטפורמת" בלוגי-המערכת של ערוץ 7 והשני מוגדר כטכני-מקצועי ונכתב כאן.
בהתחלה בחיפוש "מאחורי המסך" בגוגל, התוצאה הראשונה שהופיעה הייתה הבלוג האישי שלי, וכתוצאה חמישית או רביעית הבלוג כאן, קצת אחר כך הוא קפץ לתוצאה השניה ולאחרונה עקף את הבלוג המקורי.
אמנם לא השקעתי כ"כ הרבה כמו אחרים כאן בנסיון לקדם הודעות ובלוגים בגוגל (עשיתי בעיקר בנסיון לקדם הודעות ספציפיות) אבל מסתבר שהתוצאות של ההשקעה הרבה של אחרים רלוונטיות לכלל כותבי הפלטפורמה ולא רק למי שהשקיע.
בפעם הבאה בלנ"ד: מה קורה כשה-CPU מציג ניצול של פי 2-3 מהניצול של כלל התהליכים שרצים במחשב, והמחשב באופן כללי לא זז.
אחי בן התשע ביקש שנפרמט לו את המחשב. החלטתי לקיים את ההבטחה שלי למיכל וליאור והפעם להתקין לו ויסטה.
קצת רקע: מדובר במחשב שהיה במקור המחשב של אמא ושכב חצי שנה בבוידעם. לוח אם של אסוס P4B533, מעבד פנטיום 4 2.4GHz שהורד ל-1.8 בעקבות בעיית חומרה, חצי ג'יגה זיכרון ודיסק קשיח עתיק בנפח 40GB של WD.
כרטיס רשת מתוצרת לא ידועה.
בקיצור - גרוטאה. אבל בכל זאת החלטתי ללכת על זה. נורא נורא רציתי להתקין לו SP1, אבל הוא רצה עברית אז הסתפקתי בגירסא נטולת SP1 אבל דוברת עברית.

תחילת התקנה: 9:45.
המסך שלי בדרך כלל לא נראה ככה. אבל לכבוד פסח השולחן וכו' נקי והחדר נראה סביר. המחשב של הילדון מחובר דרך KVM שיושב פה מאחורי משהו, וכבל מאריך.
במסך הבא הוא נשאר דקה וקצת. לא נורא במיוחד. בשלב הזה תורידו 10 דקות מהזמן בגלל בקשה של אמא של הילדון שביקש להיות נוכח בכל שלבי ההתקנה.
חלוקת הדיסק המקורית עלובה למדיי והשאירה 10GB פנוי בכונן C.
ממש המינימום הנדרש ואף מתחת לזה.
10:26 - משלים התקנה ומבקש שם משתמש וסיסמא.
המחשב עובד נחמד למדיי. אין Aero וחלק גדול מהאפקטים הגרפיים בגלל חולשתו של כרטיס המסך (32MB זיכרון).
בשלב הבא ננסה לראות איך הוא מתמודד עם דברים כבדים יחסית כמ Movie Maker ואחרים.
אולי אפילו Visual Studio Express כלשהו.
ועכשיו נראה מה יגידו כל המכפישים.
אימצתי כמה הנהגות וסגנון דיבור שמקובל אצל אנשי החדשות שלנו ("אחת ו...חמש דקות בערוץ 7, היומן לפי שעה") וקצת רשמיות.
אסף שלי מדבר על ריבוי נימים בדוט נט
וידאו שצילמתי אתמול. תהנו
יש עוד כמה סרטים בפינה שלי ב-FlixWagon:
הרצאה של אסף שלי, וגיא (שכחתי את שם משפחתו) מאינטל.
אסף שלי, התפרסם בזמנו ששידר את ערוץ 10 חינם על שרתי MMS (אאל"ט שזה היה 100Kbps) ועל זה הוא קיבל MVP. היום הוא עובד עם מחשוב מקבילי.
הפתיח של גיא מאינטל היה שפחות או יותר אינטל עבדה קשה כדי לפתח את המעבדים מרובי הליבות, ועכשיו מנסים ללמד אותנו המפתחים איך להשתמש בזה.
כל מי שעובד עם Web או ניהל בסיס נתונים כבר מזמן נהנה מיכולותיו של ריבוי מעבדים שייעל משמעותית את העבודה בשרתים, גם בלי שהיה צריך לעשות משהו (כל משתמש עובד בנים אחד אבל בסך הכל יש שימוש בכלל המעבדים במכונה), אבל מתכנת בסביבות WinForms או WinServices - לא ממש ידע להתעסק בזה.

בגרף שהוצג, ניתן היה לראות שהורדת עוצמת המעבד ב-12% תגרור ירידה בצריכת החשמל של 50%, והעלאה בכ-20% תעלה את צריכת החשמל ב70%.
(בירוק-כחול - ביצועים, באדום - צריכת חשמל)
בהמשך חזר אסף והסביר את עקרונות התכנות המקבילי, בין השאר הוא שולל Lockים במקום שבו אפשר לוותר עליהם, ושולל שימוש במשתנים גלובליים למינהם מכיוון שזה גורר פגיעה בביצועים, כאשר הנימים השונים ממתינים בתחינה לקבל משאב משותף ונעול.
Net Paralel Extensions Loop
בהמשך הוסבר כי השימוש נכונה ב-2 מעבדים (לדוגמא) גורר עליה של 50% בביצועים, ועליה של 200% בכמות הצרות שיש למתכנת.
הצרה העיקרית: שגיאות. Thread אחד מקבל שגיאה והשאר ממשיכים לעבוד, מה שגורר גם צרות בניפוי הבאגים מכל העסק הזה ומעודד את המתכנת העצלן לסגת מכל העניין.
בהמשך דיברו על הכלים שמספקת Intel למפתחים, על מנת שיעזרו לה למכור מעבדים עם כמה שיותר ליבות - כלומר - כלים למפתחי ++C/C (בשלב הזה, ובהמשך גם NET. ו-JAVA) ע"מ לנצל ריבוי ליבות. ניכר שאינטל מבינה את מה שמיקרוסופט הבינה לפני שנים בקשר לחשיבותם של כלים ידידותיים למפתח.
היה מרתק, בעיניי, לעת עתה - זו ההרצאה הכי טובה בה נכחתי. עיקרון, הוכחה, מגבלות הפיתרון המוצע וגם דיון מרתק לאחר ההרצאה על מגבלות שונות נוספות (IIS למשל).
האמת שצילמתי לא מעט. גם תמונות וגם וידאו. רצה הקב"ה - ובגלל תקלה טכנית קלה נמחקו כל התמונות שצולמו על ידי הערב, וחבל - כי היו הרבה וגם עבדתי עליהן לא מעט.
האמת שכבר בתחילת הערב חיפשתי דבר אחד: התנסות. כל המצגות והמשחקים המטופשים (הוט) לא ממש עניינו אותי. כשראיתי עמדה עם סרט או מצגת חיפשתי איך סוגרים את המצגת ומתחילים להתנסות באמת.
והיה - ב"ה, איפה.
התלהבתי מאוד מהדוכן הקטנטן בפינה של HTC, זה עם המכשירונים מבוססי Windows Mobile, או המדליק ההוא שהוא בעצם מחשב כף יד מבוסס ויסטה. הכנתי גם צילומי מסך (פשוטו כמשמעו) של אתרים במכשירים האלה - אבל הכל נמחק. נו מילא.
אחר כך ביקרתי בדוכן של Hyper-V, שם בעצם הוצג שרת עם 4 (!) חיבורי חשמל, 8 (אאל"ט) מעבדים (4*2) וגם 8GB זיכרון. מדובר במכונה לא קוטלת קנים ללא ספק אולם כל נסיונותיי להתעלל בה ולחנוק אותה - פחות או יותר עלו בתוהו.
יש כמה בעיות באופן כללי עם העכבר שם (לא נוח לצאת ממצב בלעדי למכונה המדומה), אבל זה עובד מדהים.
בפעם הבאה: מה צילמתי בוידאו (ולכן שרד), ומה יכול לשמש עזר להציג את מה שהיה - ואיננו.
בדקות / שעות / ימים הקרובים אני מתעתד לעבור למצב מאוזן, להגיד שמע ישראל ולקפוץ לכמה שעות לעולם החלומות.
הערב הזה הושקע על ידי מיקרוסופט במיוחד בתור סוג של בילוי, כשעל הדרך המשתתף יסתובב וייחשף למה ששותפיה של מיקרוסופט יש להציע.
ויש הרבה.
אישית, בתור מי שעיסוקו הוא בסביבת Web, מצאתי עניין רב בלשחק קצת עם "רשת" (על בסיס Virtual PC 2007 על ויסטה) עם ISA.
בהתחלה הייתה שם סתם מצגת (או אולי סרט) מטופש, שאני העדפתי למזער כדי לגלות את המעניין האמיתי, והוא השרת בפעולה.
לא יצא לי עד היום לשחק עם ISA (כן יצא לי עם שרתי Apache/Squid) ובסך הכל היה נחמד.
מעניין.
מיקרוסופט חושפת כאן את הדגשים שלה לעשור (?) הקרוב. הרבה הרבה כלים שתפקידם לעשות למתכנת את העבודה ולדאוג שיוכל לשבור את הראש על דברים חדשים יותר.
זה מתחיל בעיקר בכל מיני מכשירים ניידים (OLPC), וגם Surface (שולחן ממוחשב, עם תקשורת אלחוטית ונגיעה בסגנון iPhone), וגם וכלים אמיתיים (ומדומים בינתיים) לשימוש בהם ובאחרים.
התחושה האישית שלי שההרצאה הזו היא מעין "אינדקס" שנותן למפתח מין מילון מפתח מהן היכולות של טכנולוגיה קיימת ו/או עתידית. משהו כזה שאמור לגרום לך ברגע שתצטרך לפתח משהו שאמור להיות דומה, להדליק את הנורות האדומות במוח.
\מעניין.
הגענו לתדרוך הבלוגרים ושם גילינו שכל בלוגר קיבל מתנות שימושיות. אישית - לאור ניידותי הרבה חלקן היו באופן קבוע בתיק, אבל חלקן בהחלט ראוי לציון כמחשבה מקורית ואיכות.
הראשון - מארז קטן, עם כל מיני דברים מבוססי USB בעיקר - עכבר, רכזת, מאריך, כבל MINI USB וגם אוזניות/מיקרופון + כבל רשת קטן להפליא למצב חרום. בנוסף קיבלנו גם מפצל שקעים (שזה דבר שיש לי בתיק על בסיס קבוע, אבל עוד אחד יתקבל בברכה - ומצויין) וכרטיסי ביקור עם שמנו מודפס והקישור לבלוג.
וקיבלנו נוקיה N95 לשידורים החיים למינהם, שה-SIM שלו פתוח ואפשר לנצל אותו חופשי, חוץ מ-2 הניידים שכבר יש לי. המכשיר אמנם עם לוגו של סלקום אבל מסתבר שהוא בכלל מחובר לרשת אורנג', ומשדר על גבה.
אז ישר כח למיכל ולשאר הצוות. בהמשך - נקודת המבט שלי על כל הקורה כאן בהרצאות שאמורות להתחיל בערך עכשיו.
כמה תמונות של ארצנו ממעוף הציבור. מנתצל על האיכות, בכסילותי ואיוולתי שכחתי את המצלמה הדיגיטלית בתיק שאוחסן בבטן המטוס, וכך נשארתי עם המצלמה של הסלולארי בלבד.
אבל בכל זאת תהנו.
קצה גוש דן - לא מזהה במדוייק משה למפרט
הגדר המכוערת, חותכת בבשר החי של ארץ ישראל צילום: משה למפרט
הנגב מלמעלה צילום: משה למפרט
כנף המטוס בענן צילום: משה למפרט
עד כאן להפעם. מי שמתעניין בכנס ה-Tech Ed יוכל למצוא אותי שם, וכמובן ברשת
מן הסתם מישהו במיקרוסופט חיכה שאפרסם מה אני מתכנן לשבוע הקרוב, אז הנה נתחיל.
אני לא באמת יודע של מי הרעיון החולני וההזוי להחריד לקבוע טיסה בשעה 7:00 לפנות בוקר, אני כן יודע שזה יאלץ אותי לוותר על מניין ולהתפלל בנסיעה.
ועוד בראש חודש. מזל שהרב מהשמינית לא רואה את זה.
שהלו"ז שלי מתוכנן להתחיל בשעה 5:10 בבוקר לערך, כשבשעה 5:25 אתייצב בתחנה המרכזית של פתח תקווה ואעלה על קו 249. בהמשך מתוכננת לי החלפת אוטובוס בסביבות שש אל תוך שדה התעופה.
עד לשלב של עליה על המטוס אני מתכנן לנוע על מדים, מה שיחסוך לי כמה שקלים וגם קצת צרות בבידוק הבטחוני של שדה התעופה.
רשימת ההרצאות שלי כמעט סגורה (אבל לא תפורסם כאן) ואני מקווה להספיק בין לבין גם להיפגש עם אנשים מעניינים מהתחום שלי או אף רחוקים ממנו.
לאור העובדה שאני משתמש כבד של מערכות WAP, ניתן יהיה לתפוס אותי בדוא"ל (moshel שטרודל a7.org) או ב-Messenger הנייד שאותו ניתן לקבל אישית. גם במקומות בהם לא יהיה WiFi מסיבה כלשהי, יש לי מודם סלולארי - אז אל דאגה.
מה התוכניות שלי? קצת Live Blogging, קצת הכרות עם דברים שחדשים לי ומן הסתם להפקה יש עוד תוכניות בשבילי ובשביל שאר הבלוגרים.
אז שיהיה חודש טוב !
או: כך תחשבו את
שעון הקיץ
בישראל, תוך שימוש במחלקת התאריך העברי המובנית בדוט נט.
קצת אחרי ראש השנה תשס"ח העלנו בערוץ 7 יומן (כמו זה של גוגל והוטמייל). היומן, בניגוד ליומנים מתחרים - תומך בתאריך עברי מלא וכך גם חגים ומועדים (צומות וכו').
אחת היכולות שהוטמעה ביומן הזה הייתה זמנים הלכתיים, שהם למעשה אסטרונומיה, וכמובן, כפופים לשעון קיץ.
אז לטובת כל מי שיזדקק לזה בעתיד - פונקציה לחישוב שעון קיץ.
Public Shared Function IsInSummerTime(ByVal dDate As DateTime) As Boolean
' חישוב שעון קיץ בישראל
' משה למפרט, תשרי תשס"ח
' http://blogs.microsoft.co.il/blogs/moshel
Dim oHD As New System.Globalization.HebrewCalendar
Dim dStart As New Date(dDate.Year, 4, 2, 2, 0, 0) ' 4.2 בשעה 2:00 בלילה
dStart = dStart.AddDays(dStart.DayOfWeek * -1 - 3) ' יום חמישי
Dim dEnd As New DateTime(oHD.GetYear(dStart) + 1, 1, 9, oHD) ' ט' ניסן
dEnd = dEnd.AddDays(dEnd.DayOfWeek * -1) ' יום ראשון
If dDate > dStart And dDate < dEnd Then Return True
Return False
End Function
להפוך את זה ל-#C היה עניין של דקה בדיוק, אז הנה גם גירסא נוספת:
public static bool IsInSummerTime(DateTime dDate)
{
/*
' חישוב שעון קיץ בישראל
' משה למפרט, תשרי תשס"ח
' http://blogs.microsoft.co.il/blogs/moshel
*/
System.Globalization.HebrewCalendar oHD = new System.Globalization.HebrewCalendar();
System.DateTime dStart = new System.DateTime(dDate.Year, 4, 2, 2, 0, 0);
// 4.2 בשעה 2:00 בלילה
dStart = dStart.AddDays(dStart.DayOfWeek * -1 - 3);
// יום חמישי
DateTime dEnd = new DateTime(oHD.GetYear(dStart) + 1, 1, 9, oHD);
// ט' ניסן
dEnd = dEnd.AddDays(dEnd.DayOfWeek * -1);
// יום ראשון
if (dDate > dStart & dDate < dEnd)
return true;
return false;
}