DCSIMG
February 2010 - Posts - GadiM - Gad J. Meir www.idag.co.il

GadiM - Gad J. Meir
www.idag.co.il

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

קישורים

February 2010 - Posts

גירסא חדשה של Debugging Tools for Windows (וה WDK)

יצאה גירסא חדשה של כלי העבודה העיקרי, של כל מי שעוסק ב Production Debugging, הלא היא חבילה ה debugginh tools for windows מגירסא 633. מעבר לתיקוני בגים, ישנם שני שינויים מענינים בגירסא החדשה. קודם כל החבילה מעתה והלאה תהיה חלק מה WDK (יצא באותה הזדמנות עדכון ל WDK), ולא ניתן יהיה להוריד אותה בנפרד. והשינוי המשמעותי יותר, הוא החלפת ה AdPlus.vbs הוותיק ב exe בעל אותו שם (הכלי הותיק נמצא עדיין בחבילה, תחת השם adplus_old.vbs). פרטים נוספים באתר.

לקראת Microsoft Developer Acadmy 4.

למי שעוד לא שמע על הבשורה, אז ב 22/3/10 יתרחש הארוע המכוננן השנתי, של מיקרוסופט ישראל, בתחום הפיתוח, הלא הוא ה Developer Academy 4. גם הפעם מדובר בארוע מצומצם קימעה, כיאה לתקופה הכלכלית הקשה העוברת על כולנו, ארוע של יום אחד בלבד. מי שמעוניין בפרטים נוספום מוזמן לבקר באתר הארוע ולהתרשם.

יש לי כמה הערות שקשורות לארוע הזה שחשבתי שאולי הם יענינו את מי שהולך להרשם (ואולי גם את המארגנים).

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

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

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

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

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

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

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

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

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

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

מפגש קבוצת משתמשים של NET. על Refactoring.

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

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

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

הסיבה לתיסכול נבעה מזה שאם רצית לעשות משהו פשוט, כמו לשנות שם של משתנה מ X17 למשהו יותר ברור כמו AgeOfSystem,  היית צריך לחפש ידנית את כל המופעים שבהם המחרוזת X17 מופיעה, לבדוק שאתה משנה לשם החדש רק את אלה שב Scope הנכון, שאין Side Effects לשינוי, ולבסוף לבצע סט בדיקות QA מלא ממש כמו שינוי של Feature במוצר. בקיצור כאב ראש רציני שאך מנהל פרויקט לא היה מאשר לך לבצע בקוד רק בגלל שהוא "לא מספיק יפה". וזה עוד על משהו פשוט, לקחת קטע קוד, שחוזר על עצמו כמה פעמים ב Switch, ולהוציא אותו לפונקציה חיצונית, דרש בדרך כלל Redesign של היישום.

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

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

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

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

stam 007

אז הנה כמה נקודות מההרצאה וכמה הערות ותובנות.

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

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

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

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

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

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

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

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

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

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

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

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

בעיית אבטחה חמורה בסייר הקבצים בחלונות 7 (ובויסטה, וב XP ובכלל)

מה לא בסדר בתמונה הבאה ?

picture01

לא ניחשתם ? הנה רמז !

 picture02

לא עזר ? הנה רמז ממש ברור !!!

 picture03

למי שלא זיהה, להלן הבעיה. אם תלחצו על ה Alt ותפתחו את תפריט Tools ובתוכו את Folder Options תקבלו את התמונה הבאה

 picture04

שימו לב לזה ש Hide extensions for known file types מסומן ב V. אם תורידו את הסימון ותסתכלו עת אותה תיקיה תקבלו תמונה שונה והרבה יותר מעניינת.

picture05

שימו לב שהקובץ gtrr.jpg הוא למעשה קובץ exe ושהקובץ thisiswrong.bmp הוא למעשה קובץ Batch.

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

הבעיה היא שברירת המחדל (כבר שנים) של התקנת מערכות ההפעלה של חלונות, היא שה Hide extensions for known file types מסומנת. זו לטעמי בעיית אבטחה קשה, כי זה נוגד את העיקרון של Sacure by default לגבי מערכת ההפעלה.

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

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

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