Best practices: Daylight saving time and Timezone

SpirallingTime

שיטות עבודה מומלצות עם DateTime אזורי זמן ושעון הקיץ

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

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

static void Main(string[] args)
{
    var start  = new DateTime(2011, 10, 2, 0, 0, 0);
    var finish = new DateTime(2011, 10, 2, 2, 0, 0);

    Console.WriteLine((finish - start).TotalHours); // output: 2 INCORRECT!!
    Console.ReadKey();
}

בשביל ההמחשה נניח שאני צריך לכתוב תוכנה שמחשבת אורך שיחה של לקוחות ספק תקשורת סלולרית. כשלקוח מחייג, אני רושם במשתנה start אז זמן תחילת השיחה (02/10/2011 00:00:00), וכשהוא מנתק, מציב בfinish את זמן סיום השיחה (02/10/2011 02:00:00). בסיום השיחה התוכנה מחשבת את אורך השיחה ומחזירה את מספר השעות שארכה השיחה לצורך חיוב הלקוח. במקרה שלפנינו, בהתחשב בזמני תחילת וסיום השיחה, התוכנה פולטת שהלקוח שלי דיבר במשך שעתיים.

ברוב ימות השנה זו אפילו תהיה התוצאה הנכונה. הבעיה היא, שבדיוק באותו היום ישראל עברה משעון קיץ לשעון חורף. כלומר, בזמן שהלקוח שלי היה באמצע השיחה, החזירו את השעון הישראלי מהשעה 01:59:59 לשעה 01:00:00. נמצא, שכשהתוכנה שלי רשמה את שעת סיום השיחה ב2 לפנות בוקר לפי שעון חורף (שהרגע הוחל) זה בעצם היה ב3 לפנ"ב לפי שעון הקיץ. והלקוח שלי שהתחיל את השיחה לפי שעון הקיץ בעצם דיבר 3 שעות ולא 2!

למרות שמעבר השעון מתרחש בשעות הלילה הפחות פעילות, בעולם שכולו OnLine הסיכוי הוא שגם בשעות האלו התוכנה\אתר\שירות שלכם יהיו פעילים. ואם הם כתובים בצורה לא נכונה - הם יבצעו חישובים ופעולות שגויות! עוד...

קטגוריות: .NET | מדריכים

מדריך: שינוי מיקום קבצי משתמש בWindows 7

SSD 510 Pretty boxכוננים בתצורת SSD תופסים תאוצה בתקופה האחרונה והופכים לפופולאריים יותר ויותר. הסיבה היחידה המונעת מהם לכבוש את השוק, ולהחליף לגמרי את הכוננים הקשיחים המסורתיים (להלן HDD) היא – מחירם הגבוה.

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

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

הבעיה היא שWindows כברירת מחדל מאחסן את קבצי המשתמשים (תיקייה Users) באותו הכונן. כתוצאה, כל קובץ שתשימו על שולחן העבודה, או באחת התיקיות: מסמכים/תמונות/מוסיקה/סרטי וידאו שלי, כולם יאוחסנו על כונן הSSD. והיות ובד"כ קונים כונני SSD קטנים יחסית (80-120GB) עקב מחירם הגבוה, הדבר מוביל במהרה לניצול כל שטח הכונן ולפגיעה בביצועים ובחוויית השימוש.

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

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

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

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

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

קטגוריות: מדריכים
תגיות: ,