Moving to MSDN to swim with the sharks.
http://blogs.msdn.com/lior
What is a “debugger visualizer”?
Here’s a direct quote from MSDN:
A visualizer creates a dialog box or other interface to displays a variable or object in a meaningful way that is appropriate to its data type. For example, an HTML visualizer interprets an HTML string and displays the result as it would appear in a browser window, a bitmap visualizer interprets a bitmap structure and displays the graphic it represents, and so on. Some visualizers allow you to edit as well as view the data.
Considering the context – custom debugger tools – creating a custom debugger visualizer is surprisingly easy. I would expect this to involve native code, COM objects, cumbersome registry editing and a week at a forced labor camp, or any combination of the above. Turns out it’s a walk in the park.
Wanna get started?
For those of you eager to begin, here is a summary of the steps needed. I’ll explain everything in detail after the jump.
- Create a class library project.
- Add reference to Microsoft.VisualStudio.DebuggerVisualizers (.NET reference)
- Add reference to System.Windows.Forms (.NET reference)
- Create a class that inherits from DialogDebuggerVisualizer
- Implement the single method required (very easy implementation).
- Add the DebuggerVisualizer assembly attribute to indicate which type are you handling and what is the class handling that type.
- Build the DLL and copy it to <My Documents>\Visual Studio 2005\Visualizers
- When you’re debugging – hover over a variable of the type you’re handling and click the magnifying glass icon.
That’s all you need to do.
Details explained
Steps 1-4 are pretty straight forward, so let’s jump right into step 5.
I’ve decided to create my visualizer for the type Color. The visualizer will display a small form filled with the color specified in the variable inspected by the debugger.
1 using System.Diagnostics;
2 using System.Drawing;
3 using System.Windows.Forms;
4 using Microsoft.VisualStudio.DebuggerVisualizers;
5 [assembly : DebuggerVisualizer(
6 typeof (ColorVisualizer),
7 Target = typeof (Color),
8 Description = "Color Visualizer")]
9
10 public class ColorVisualizer : DialogDebuggerVisualizer {
11 protected override void Show(IDialogVisualizerService svc, IVisualizerObjectProvider provider) {
12 Color c = (Color) provider.GetObject();
13 using (Form form = new Form()) {
14 form.Text = "Color Visualizer - by Lior Elia";
15 form.BackColor = c;
16 form.Size = new Size(400, 400);
17 svc.ShowDialog(form);
18 }
19 }
20 }
As you can see, the code is really straight forward. Get the object, create a form (can be a pre-prepared form if it's a complex visualizer) and display the data. That's it!
Another interesting thing to notice is regarding steps 7-8. You don't need to restart visual studio in order to use your new visualizer. This means that you can make changes and fixes to your code and just drop the new DLL in the visualizers folder in order for Visual Studio to use it. It's that easy!
Important note: you need a reference to System.Drawing for the Color class to be accessible in your code.
הבוקר נתקלתי במאמר ב”כלכליסט” שדיבר על נתוני צפייה בכבלים ובלווין. בעוד שהכתבה עצמה היתה די מעניינת, משפט אחד במיוחד קפץ לי לעין וגרם לי לחשוב על פרספקטיבה. הנה המשפט:
חבר’ה, תהיו חזקים, הטכנאי בדרך!
(אזהרה: פוסט זה מיועד לבני 30 ומעלה, אם אתה צעיר יותר, אל תטרח לנסות להבין)
תראו מה מצאתי ב-YouTube. זוכרים את המשחק הזה? כבר שנים שאני מתכנן לחזור לשחק בו באיזה אמולטור ולא מוצא את הזמן.
אז הנה דרך הרבה יותר טובה לחוות את המשחק מחדש – לראות מישהו אחר משחק. ככה אני יכול להתרכז בלהנות מהנוסטלגיה בלי לדאוג להתקדמות שלי במשחק.
אני במשך תקופה ארוכה נתקעתי בשלב של הצוללת כי לא היו לי את הקודים ואז מצאתי איזה חבר עם חוברת קודים והשמחה היתה רבה (כן, אז אי אפשר היה לחפש באינטרנט כי לא היה אינטרנט ועוד לא המציאו את מנועי החיפוש).
אז הנה GamePlay Video בשלושה חלקים מהתחלת המשחק ועד סופו, תהנו.
בשבוע שעבר נפגשתי לראשונה עם ילדי WiseKid. מי שלא יודע במה מדובר מוזמן לעיין ב
פוסט הקודם שלי בנושא.החוויה היתה מרתקת. אמנם במהלך השיעור התיאורטי די התייבשתי, בכל זאת לשמוע על תבנית, מחלקה ומתודה מעלה זכרונות נשכחים ולא מאוד נעימים מלימודי מחשבים, אבל התרגול היה ממש מהנה. אגב תבניות ומחלקות, מישהו יכול לספק לנו הסבר סביר למה מתעקשים לעברת את השמות הטכניים? זה כ"כ מאולץ והרי אף אחד בתעשייה לא משתמש בשמות האלו. אז למה? בין הפותרים נכונה תוגרל
מחלקת תבנית רשימה מ
ספריית התבניות התקניות.
אפשר בהחלט לראות את ההבדל בין שיעור תאורטי למעשי. בשיעור המעשי הילדים ממש פרחו. כמעט כולם סיימו את כל התרגילים עד תום השיעור, וחלק גדול מהם עוד הספיק לנסות דברים חדשים שלא למדו. לראות את הסקרנות שופעת מהם ואת הרצון שלהם לעשות עוד ועוד בהחלט עשה לי את היום. תלמידים שכבר סיימו הסכימו לעזור לאחרים שהתקשו, וכולם רצו להמשיך ולגלות עוד דברים שיוכלו ליצור על המחשב. פשוט הרגשה טובה.
נכון שתמיד יש את הילדים שמפריעים ואת אלה שמחפשים צרות, אבל כל זה נבלע בים של מוחות צעירים בעלי סקרנות אין סוף ופוטנציאל אדיר.
יצאתי משם בסוף היום חדור מוטיבציה ותחושת שליחות.
להתראות בפעם הבאה, ילדים נבונים שלי.
אני כבר שנים מסתובב עם מאזדה כלשהי צמודה לי לטוסיק. זה רכב נוח, מאובזר לא רע בכלל ואומרים שגם די בטיחותי. אבל עכשיו כשעברנו למיקרוסופט החלטתי שזה זמן טוב לשנות. מכל הרכבים שבחנתי הכי מצאה חן בעיני ה- C4 של סיטרואן. כן, שמעתי על בעיות החשמל, על הבילויים התכופים במוסך. אבל יש לה בקרת שיוט! והגה מגניב שאין באף רכב אחר. אז הזמנתי. וחיכיתי. ומי לא בא? סיטרואן.
אחרי כמה בירורים וכמה חודשים של המתנה הבנתי שהרכב החדש שלי עדיין רחוק מלהיות שלי והחלטתי לבחון את הנושא מחדש. קצין הרכב שלנו הציע להראות לי רכבים שהוחזרו באמצע התקופה, אולי אמצא משהו מעניין.
ואכן מצאתי. מצאתי את הסקודה שלי. זה לא שלא ידעתי שהיא קיימת. היא הופיעה ברשימת הרכבים כשבחרתי את ה-C4 אבל אפילו לא טרחתי להסתכל עליה. יודעים למה? קודם כל, הרומסטר "בורכה" בצורה החיצונית המאוד לא אטרקטיבית של, ובכן, טנדר. כן, כזה כמו של טכנאי בזק. למעשה אחי, שעובד בבזק, קיבל לפני כמה חודשים את הרכב הזה בדיוק. ואני זוכר שצחקתי עליו. מה, מתקמצנים עליכם? נותנים לכם סקודה?
והנה הגענו לסיבה השנייה, ואולי העיקרית. כשסקודה הגיע לראשונה לארץ נמכרו כאן רכבים פשוטים ועממיים. ונוצר הרושם, המוטעה – יש לציין, שסקודה זה שם נרדף לרכב זול ופשוט.
מאז זרמו הרבה מים ב-Vltava וסקודה הפכה לחלק מתאגיד פולקסווגן. סקודה החדשה (לפחות מהכרותי עם ה"רומסטר") היא לא מה שהכרתם.
שימו לב לנתונים היבשים: קבוצת רישוי: 2. מנוע 1600 (אבל רק 105 כ"ס). מ-0 ל-100 ב-12 שניות. תא מטען 450 ליטר. טיפטרוניק עם 6 (שישה!) הילוכים. בקרת יציבות. 4 כריות אויר. מד לחץ אויר אוטומטי, ו- שימו לב לפינוק, הגה וידית הילוכים מצופים עור. יאמי!
וההתרשמות האישית שלי: האוטו מגיב יפה, גם בזינוקים (למרות המנוע החלש יחסית), גם בבלימה וגם בסיבובים. זה גם נראה כאילו המנוע לומד את סגנון הנהיגה שלי או שאני מדמיין וזה אני שהשתניתי תוך יומיים. כלומר, אני יודע שזה קיים ברכבים אחרים אז אולי גם כאן.
מה שכן אוכל לציין לרעתה זה שהמנוע מאוד רועש. שומעים שהוא מתאמץ ואי אפשר להתעלם מזה. לי זה לא מפריע. לחלקכם זה עלול. עניין של טעם אני מניח.
למשפחתיים שבינינו (ואני ביניהם) נוסיף גם שיש ניטרול כרית אויר מקדימה, תא מטען מרווח מאוד, חלונות צד ענקיים במושבים האחוריים (קצת ידיעת הארץ לא תזיק לילדים שלכם) וכמובן isofix.
אז אני בחרתי – סקודה רומסטר.
So, you’ve filled your PowerShell profile with dozens of useful functions and aliases. You use a few of them very often. But most of them are useful only once in a while. Now isn’t it annoying to have to open a ps1 file and go over all function definitions just to find the function name for a script that would sometimes take even less time to just write anew?
Imagine you could use something like “Get-Help” or “Get-Command” to remind you of functions that you wrote a while back.
Why imagine? Let me introduce you to the DocProvider script.
First watch this video to get you enthusiastic.
Now get this file and put it in your PowerShell Profile directory.
Add the following lines in every script file containing documented function definitions (don’t know what documented functions are? it’s ok. read on).
# Initialize the doc provider
. "$(Split-Path $profile)\DocProvider.ps1" # Dot-source the functions from the DocProvider file
LoadDoc $MyInvocation.MyCommand.Path # Load the documentation from current file.
Now it’s time to actually document the functions.
This version of DocProvider only supports function description. I might add parameters description later on. Ok, so add the documentation attributes to every function in your script file. Follow the example below:
function mem { #@Top 10 memory hoggers@
Get-Process | sort PrivateMemorySize | select PrivateMemorySize,Description,Path -Last 10 }
Run or dot-source the modified file and type “doc” to access full list of documented functions (see, told you you’d know what that phrase meant) or “doc function” to get just the documentation for the specified function.
יש לי וידוי קצר לפני שנתחיל: הפעם האחרונה שהתנדבתי למען הקהילה (ואני לא סופר
דברים כמו להעביר זקנה או ילד את הכביש) היתה לפני הצבא. באותה התקופה התנדבתי במשך
כשלוש שנים במשמר האזרחי. לא רק טובת הקהילה היא שעמדה לנגד עיניי בכל הזמן הזה
וגרמה לי להתנדב ואף להתמיד במשך שנים. בטווח גילאים כזה שלפני הצבא היינו מאוד
להוטים לקצת אקשן. היה לנו הרבה זמן פנוי וגם מוטיבציה (לפעמים קצת עודף מוטיבציה,
אבל כיוון שרוב הזמן התנהגנו יפה ואפילו ראו תוצאות בשטח כולם היו מרוצים).
השנים חלפו, נהייתי בחור עסוק (מבוגר אחראי קוראים לזה). המשפחה והעבודה מילאו
את חיי וכבר לא היה לי זמן לעיסוקים נוספים, בטח שלא בהתנדבות. ואז יום אחד באה דנה
ווהל מקשרי קהילה ונתנה הרצאה מקסימה על תחומי התנדבות שונים, שם שמעתי לראשונה על
WiseKid.
תוכנית WiseKid היא בעצם קורס פיתוח תוכנה, לגילאי - לא תאמינו - 12 עד 15.
עכשיו נסו לדמיין תלמיד כיתה ז' מתמודד עם ביטים, אלגוריתמים, תרשימי זרימה וכו'.
מסובך, נכון? בטח לא מתאים לכלל האוכלוסייה, נכון? אז זהו, שאפשר לעשות את זה אחרת.
ארז קלר מחברת MCD פיתח תוכנה שמתווספת לכלי הפיתוח החינמי של מיקרוסופט - Microsoft Visual C# 2008 Express Edition ומאפשרת לתלמידים התחלה קלה ומהירה בפיתוח תוכנה. קבוצות
התלמידים נפגשות בכל שבוע עם מדריך מטעם התוכנית. הם לומדים מתוך ספר שנכתב במיוחד
עבור תוכנית WiseKid ואנחנו, המתנדבים, מתרגלים איתם את החומר ועוזרים להם לכתוב
קוד אמיתי ב-#C. ממש כמו הגדולים. במתכונת הנוכחית ישנה חלוקה לשתי קבוצות על פי
אזורים. בחיפה יצטרפו המתנדבים לקבוצת תלמידים אתיופיים ובהרצליה קבוצת הלימוד
תורכב כולה מתלמידות כיתות ז'-ט'. במהלך השנה המתכנתים הצעירים ייצרו אפליקציות
גרפיות מורכבות ואפילו ייכתבו משחקים. כל זאת בסביבת עבודה מקצועית, בשפת פיתוח
נפוצה ומתקדמת וללא ידע מוקדם.
מה אתם יודעים, פתאום מצאתי זמן להתנדב. השילוב של תרומה לקהילה, קידום תחום
הקרוב לליבי ועבודה עם בני נוער קסם לי. אני הצטרפתי. ואתם?
זה כבר הפוסט השני שלי בנושא. הפוסט הראשון התמקד בניסוי מוהבי. את הפוסט הנוסף הזה כתבתי משתי סיבות - הראשונה היא שהרגשתי שאני מפספס חלק גדול מקהל היעד שלי, משתמשי Windows דוברי העברית, שאינם נוהגים לקרוא פוסטים ארוכים באנגלית (לפחות ראיתם את הסרטון?). הסיבה השנייה היא שפשוט נמאס לי. כן, פשוט ככה. נמאס לי לשמוע כמה שויסטה איטית, מלאה באגים, מנופחת וגם מריחה לא טוב מהפה. ועוד יותר נמאס לי לשמוע את זה מאנשים ששמעו את זה מהחברים שלהם או מאיש ה-IT של החברה שהוא מה זה כלי, חבל על הזמן. והכי מצחיק (או עצוב, תלוי איך מסתכלים על זה) זה שאף אחד מהאנשים האלה לא נתן צ'אנס אמיתי לויסטה. נכון, יש כאלו ששיחקו קצת בויסטה אצל חבר, שבמקרה יש לו מחשב מלפני חמש שנים עם 256MB זכרון אבל הוא מתעקש להדליק את כל האפקטים המ-א-גניבים האפשריים ומאט את העגלה, סליחה, את המחשב שלו עד לזחילה בסגנון חופשי. יש גם את אלו שעזרו אומץ והתקינו ויסטה בעצמם (או אולי קיבלו את המחשב החדש ככה) ואז נבהלו ממערכת הפעלה ששונה לחלוטין ממה שהכירו עד כה (כן, זה אותם אנשים שיגידו לך "וואלה תאמין לי וינדוז 98 היה הכי טוב").
אז תקשיבו חבר'ה. עזבו רגע אותי שאני אוהב חדשנות וגאדג'טים, כי זה היה ברור שאני הראשון שירוץ ויתקין ויסטה גם בעבודה וגם בבית. אבל אני מכיר אישית מספר לא מבוטל של אנשים שעובדים עם ויסטה יום יום. את האנשים האלו, כמובן אחרי תקופת הסתגלות, אפשר למיין לשתי קבוצות. קבוצה אחת, זה כל אלה שלא מבינים איך הם הסתדרו קודם ואיזה יופי ונוח שיש את זה ואת זה ואת זה שלא היה ב-XP. הקבוצה השנייה מורכבת מאנשים שלא מתעמקים יותר מדי במה שיש לויסטה להציע. הם התקינו Office או כל כלי עבודה אחר שמתאים לתפקידם, והם כל כך עסוקים בשגרת היום יום, שהם פשוט משתמשים במערכת ההפעלה באופן די שטחי. מיישמים שיטות עבודה שהם מכירים מ-XP, אולי פה ושם משתמשים בכמה פיצ'רים חדשים אבל לא יותר. בקבוצה הזאת יש גם את אלה שלא יכולים להתעמק יותר מדי בפיצ'רים החדשים כי אין להם את ההבנה המתאימה. הם בד"כ מקבלים את הויסטה מותקנת כבר על המחשב החדש או שהנכד בן ה-9 התקין עבורם.
הנקודה המרכזית כאן, שאולי פיספסתם אותה בכל המלל הזה, היא זאת: לדעתי ומהכרותי עם ויסטה עד כה - כמעט כל משתמש, אחרי תקופת הסתגלות לא ארוכה, יהנה מויסטה ולא יתגעגע ל-XP ב-כ-ל-ל. ויסטה היא לא רק ממשק משתמש ראוותני (ויפיפיה לטעמי). ויסטה היא לא רק החלון המעצבן שמחשיך את המסך ושואל האם אתם מאשרים (פעולה שבעצמכם יזמתם רוב הפעמים). ידעתם שבויסטה יש "פותר בעיות רשת"? וזה לא סתם קובץ עזרה כמו בXP. זה ממש פותר בעיות. ואני משתמש בו לא מעט. ולא, זה לא מרמז על בעיות בויסטה. יוצא לי לעבור הרבה בין רשתות, אלחוטיות, ציבוריות, פרטיות, מוצפנות וכו' ותמיד משהו בהגדרות משתנה וב-XP הייתם צריכים לתפעל את זה בעצמכם (או לקרוא לנכד ההוא בן ה-9). ואת נ- Snipping Tool הכרתם? בטח יש לו שם מגניב אחר בויסטה גרסה עברית, אבל תזהו אותו בקלות לפי סמל המספריים, הוא יושב בתיקיית "עזרים". זה כלי ממש נוח למי שרוצה להעתיק חלק מהמסך לתמונה. למשל צוות הבדיקות שלנו מאוד שמח כשגיליתי להם על קיומו של הכלי הזה. ומה עם העיצוב מחדש של האקספלורר (כן זה שמופיע כשאתם לוחצים לחיצה כפולה על "המחשב שלי")? שמתם לב איזה נוח להשתמש בשורת הניווט למעלה כדי לחזור לרמה ספציפית בהיררכיית התיקיות? שמתם לב לרשימת המיקומים המועדפים שמופיעה לצד התיקיות והקבצים שלכם? ידעתם שאפשר לגרור לשם תיקיות כדי שתוכלו בעתיד להגיע אליהן בקלות? שמתם לב שתפריט ה"התחל" הפך פתאום שוב למשהו הגיוני ובר ניהול? אם הייתם רואים איך נראה התפריט הזה על כמה מחשבי XP שאני נתקלתי בהם (כולל שלי, לפני ששידרגתי לויסטה) הייתם מקבלים סחרחורת.
לסיכום, הנה עוד כמה דברים מדליקים שבטוח לא ידעתם על ויסטה.
- אתם בטח מכירים את שורת הסמלים בסרגל למטה (בד"כ מופיע שם סמל האינטרנט, שולחן העבודה, תוכנת הדואר). ובטח גם הבנתם כבר שאפשר לגרור לשם קיצורים נוספים. אבל - הידעתם... לחיצה על כפתור Windows ומספר כלשהו בשורה העליונה במקלדת מפעילה את הקיצור המתאים בסרגל הזה (משמאל לימין).
- נכון שלחצן ימני על קובץ או תיקייה פותח תפריט יפה עם הרבה אפשרויות מעניינות? ניסיתם פעם בויסטה להחזיק את הshift לחוץ ואז ללחוץ לחצן ימני? נוספות אפשרויות כמו: להוסיף קישור לקובץ לתפריט "התחל", להוסיף קישור לQuickLunch (הסרגל ההוא שדיברנו עליו בסעיף הקודם), ועוד ועוד...
- ידעתם שאפשר להגדיל טקסט ותמונות באינטרנט אקספלורר ע"י Ctrl + גלגלת העכבר? בטח לא ניחשתם שאפשר לעשות את אותו הדבר גם בשולחן העבודה! למעשה, ניתן להשתמש בטריק הזה בכל תיקיה, מאוד נוח כשרוצים לעבור מהר ממצב טקסט עם פרטים על כל קובץ למצב תמונות גדולות או אפילו ענקיות (למשל שמחפשים תמונה או סרט מסוים).
אז הנה, עכשיו אתם יודעים יותר על ויסטה ותוכלו להחליט בעצמכם.
ועצה לעתיד - אל תאמינו לכל מה שמספרים לכם.
One of our customers was wandering if it is at all possible to find, using PowerShell, all documents in a specific folder that have "Track Changes" activated.
This is what I came up with, and it works well:
function FindTrackRevisions ([string] $path) {
$files = Get-ChildItem $path -Filter "*.doc"
$results = @{};
$wa = New-Object -ComObject Word.Application
$wa.Visible = $false $files | % {
$filePath = $_.FullName
$wd = $wa.Documents.Add($filePath)
Write-Host "Loading $filePath..."
$results[$filePath] = $wd.TrackRevisions
}
$wa.Quit()
$wa = $null
$results | ft -AutoSize
}
First, let's get this out of the way: Other than obviously working for the same company, I'm totally unrelated to the Mojave Experiment or any other marketing department for that matter. I'm "Dev" and the following post reflects my own opinions.
Windows Vista, from a product point of view, got itself some pretty bad reputation right from the start. It might be the delayed schedule, it might also be a few promised features that never made it to production (who said relational file system?). It might also be some bugs and glitches in the pre-SP1 version. And I guess biased public opinion had its effect as well. Whatever the reasons, the facts remain the same - Vista made a bad first impression on public opinion. I can only imagine the product and marketing people spending hours and days and week and months - trying to come up with a solution. However, first impressions, like the title reads, are lasting ones. This required "Thinking outside the box" (this term got so chewed up I'm feeling guilty using it).
So the marketing guys thought - (and this is just conjecture, I have absolutely no connection with that department) - Vista is actually pretty awesome, we just need to get over that bad first impression. So let's take a group of people that never heard of Vista and show them the cool features while recording their reaction - than we'll show it to the rest of the world and hope for good results.
But wait, where on earth will you find someone that knows how to run a Windows based computer but never heard of Vista? So here's a better, more practical idea...
Come forth the Mojave Experiment.
The experiment was ingeniously simple. It went like this: They took a group of people and told them they were going to try out some features in the next operating system by Microsoft, codenamed "Mojave". These people where then placed in front of a computer running Windows Vista. I imagine it was a slightly modified version of Vista made so it would not easily expose the true nature of this experiment.
The results were amazing, and a point was proven. People think Vista sucks because they were led to believe so, and not because they tried it for themselves.
By the way, before joining Microsoft I was one of the first enthusiasts in my company (if not the first) to install Windows Vista on my main development machine (a laptop). I remember vividly how friends, co-workers and family members alike made faces and remarks along the lines of "Are you sure you want to do that? Vista is so slow and there are a lot of problems."
Nonsense, I tell you. I think Vista is a major leap forward over XP, or any other OS available today. There are many areas of improvement. My favorite, of course, being usability. The new Explorer, Control Panel, Network problems diagnostics tool, all blessed with a new, impressive, user experience. Of course like every major change in your life it takes adjusting and getting used to doing things differently. The problem with software, especially operating systems, is that you depend on thousands of software vendors to do things differently on their part before you can really feel the change.
So don't just believe everything you hear or read, experiment for yourself.
Hi, welcome to my new Microsoft branded blog. Here I'll share my thoughts and experiences from the information technology world.
Most posts will probably be Dev related stuff (i.e. about software development), but not all. I'll also be writing some posts in Hebrew. The general rule of thumb is that the content is not overly technical or that it effects only the local community. In addition to new posts, I'll be re-posting some of the technical posts from my other, non MS blog (at http://www.runningbits.com/blogdev/). I'd like to also recommend you read my "About" page, so you'll get to know me.
So we begin the voyage into the great unknown - our future.
Enjoy the blog. Get smarter!
LiorE