DCSIMG
September 2010 - Posts - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

September 2010 - Posts

What is Reflector

 

מה זה ואיך משתמשים ב - Reflector

 
 
קבלתי שאלה במייל - "מה זה reflector?מה השימוש בו וכיצד"
 
כדי לענות על השאלה חשבתי לכתוב פוסט שידגים את השימוש בו.
 
לפני שנדבר על הכלי המופלא שנקרא ה - Reflector, צריך לוודא שאנחנו מבינים את תהליך העבודה ב - net.
 
 
 
Net process
 
 
(התמונה לקוחה מהמצגות של סלע.)
 
התהליך מתחיל כמובן בזה שאנחנו כותבים קוד באחת משפות NET.
 
ממשיך לקומפילצייה במידה והתהליך עבר בהצלחה אנו מקבלים קובץ exe/dll (תלוי בסוג הפרויקט).
 
מה שהקובץ באמת מכיל אינו קוד בינארי אלא קוד בשפה שמכונה intermediate language - IL.
 
בזמן ריצה נטען לזיכרון המחלקה הראשונה עם מתודת ה - Main, ה - JIT עולה לחיים ומקמפל לשפה בינארית את הקוד בצורה הכי מתאימה למעבד שמריץ את הקוד.
 
יש כל מיני סיבות לתהליך אבל לא פוסט זה המקום להסביר אותם - מה שמעניין אותנו הוא שאחרי הקומפילצייה יש לנו ביד קובץ בשפת IL שמכיל את הקוד שכתבנו (והוא יהיה זהה בלא קשר לשפה המקורית שבה הוא נכתב - כל עוד שמדובר כמובן בשפה .net)
 
היות שזו המציאות קם גאון אחד וכתב כלי נהדר שנקרא Reflector - הכלי הזה יודע לקחת קוד IL ולהמיר אותו בחזרה לקוד קריא - בצורה הזו אנו יכולים לקרוא את קוד המקור של כל הקוד שמייקרוסופט כתבו.
 
אפשר להוריד את הכלי מהלינק הבא.
 
אחרי ההפעלה תקבלו את המסך הבא
 
 
 
Reflector
 
 
נבחר את אחד מה - DLL של מיקרוסופט (תמיד עניין לראות איך הם מימשו את Console.WriteLine)
 
הכי קל כדי למצוא את המתודה יהיה ללחוץ על לחצן החיפוש ולכתוב את שם המחלקה
 
Reflector
 
לחיצה כפולה על שם המחלקה בתוצאות החיפוש תביא אותנו למחלקה ב - DLL המתאים.
 
נחפש את המתודה WriteLine ונלחץ על רווח - ונראה את המימוש של מייקרוסופט
 
Reflector
Reflector
 
 
 תוכלו להכנס יותא פנימה ולראות את המימוש של Out.WriteLine (שזה המימוש האמיתי - אבל תעשו את זה לבד)
 
שימו גם לב לקומבו למעלה שמאפשר לבחור מתוך רשימת שפות - באיזה שפה אנו רוצים לראות את המימוש.
 
 
כמובן שאפשר גם לייבא DLL אחרים כדי לראות אותם ולקרוא מה נכתב בהם.
 
השימוש בכלי יכול לתת לכם פרספקטיבה אחרת על הקוד שאתם כותבים והוא גם כלי דיבוג מעולה - למשל בפוסט הזה אני מתאר כיצד מצאתי את הבאג בעזרת ההבנה כיצד מומשה מתודה מסויימת.
 
 
אז שיהיה לכם בהצלחה - אחד מהדברים שאני נהנה לעשות הוא לשוטט עם ה - Reflector ולקרוא את המימוש של מייקרוסופט.
Posted: Sep 24 2010, 12:07 AM by Shlomo | with 2 comment(s)
תגים:,

Problem with PageMethod - calling to method invke the page_load

 

קריאה למתודה מתוך ה - PageMethods מגיעה ל - Page_Load.

 
 
כפי שכבר כתבתי כמה פעמים כמה זה קל להפעיל מתודות בצורה אסינכרונית בעזרת ScriptManager. יצא לי להיות במקום נחמד שבו ברגע שהפעלנו קריאה למתודה הגענו ל - Page_Load, כלומר ה - Request היה מושלם אבל איכשהו השרת התייחס כאילו זה פנייה רגילה לעמוד.
 
לאחר יום דיבוג מתיש הבנו שמשהו חסר בקובץ הקונפיג -
 

<httpModules>

  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule,

                                System.Web.Extensions, Version=3.5.0.0,

                                Culture=neutral,

                                PublicKeyToken=31BF3856AD364E35"/>

</httpModules

 
 
בדרך כלל כשמוסיפים ScriptManager לעמוד הוא מוסיף את השורה הזאת לקונפיג, באפליקצייה שלנו הקונפיג היה נעול (אנחנו משתמשים ב - Source Safe) ולכן הוא לא הוסיף את הקוד לקונפיג (וכמובן לא הודיע לנו על כך) מה שגרם לאי הפעלת ה - Page Methods.
 
 

החוויות שלי עם גרסת ה - Beta של Internet Explorer 9

 

כששמעתי שה - Beta של IE9 יצא מצד אחד שמחתי היות שכתבתי (ואני אכתוב) פוסטים על הפיצ'רים של IE9, מצד שני להתקין גרסה של דפדפן על מחשב שמשמש אותי לעבודה היום יומית - לא בטוח שזה רעיון הכי חכם - וכן, אני לא אוהב לעבוד עם מכונות וירטואליות.
 
 
אחרי יומים שלושה של היסוסים החלטתי שאני מתקין, זה היה הימור מכיוון שבאותו יום שהתקנתי הייתי אמור להעביר את ההרצאה על פיתוח לפי התקן בדפדפני IE - לשמחתי ההימור התברר כמוצלח והדפדן החדש סיפק די יפה את הסחורה, השימוש בו הוא מאוד נוח ואינטאוטיבי הוא מהיר הרבה יותר מהגרסאות הקודמות אני בהחלט ממליץ להתקין אותו ולהינות ממה שהוא מציע.
 
 
אבל היות שזה גרסת בטא, יש בו כמובן באגים ואני אמנה את מה שמצאתי (כדי שלא תגידו שאני מקבל כסף ממיקרוסופט - לא שאני אתנגד כמובן), כולי תקווה שהבאגים הללו יתוקנו בגרסאות הקרובות.
  • כשנמצאים בתוך תיבת טקסט - אי אפשר להחליף את כיוון הסמן המהבהב - כלומר גם אם תשנו את השפה מאנגלית לעברית הסמן יציג (כאילו) הוא באנגלית.

  • IE9 לא אוהב את ה - IIS הפנימי של Visual Studio, כשמריצים מתוך VS דף אינטרנט זה עולה מאוד לאט ובנוסף בהרבה מקרים הוא יחזיר שגיאה 404 וצריך ללחוץ על F5 כדי להביא את הדף.

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

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

  • אני לא אוהב את העובדה שהטאבים ושורת הכתובת הם באותה שורה - אמנם אפשר להגדיל את שורת הכתובת על ידי גרירה אבל זה יבוא על חשבון מספר הטאבים.

  • אין כלום בסטטוס בר.

 

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

במצגת והקוד מההרצאה שלי בקבוצת המשתמשים

 

ב - 19/09 העברתי הרצאה על פיתוח לפי בתקנים וכיצד IE8 ו - IE9 עובדים לפי התקן, ראינו גם קצת HTML5 ו - CSS3 ועוד הרבה דברים מעניינים. (מי שלא היה הפסיד)
 
 
לצערי עקב הזמן המוגבל לא הספקנו לראות איך מגדירים WebSlice, Search Providers, Accelerators (אולי בפעם הבאה).
 
 
 
אני מקווה שהקהל נהנה - אני נהניתי.
 
 
 
 
 
בקרוב כשנעלה את ה - Sela Collage Channel אני אעביר שוב את ההרצאה בשידור חי.

Get innerText in Firefox

 

עבודה עם innerText בכמה דפדפנים.

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

function InnerText(element, text) {

   if (!text)

       return GetInnerText(element);

 

   if (BrowserDetect.browser == "Firefox") {

       element.textContent = text;

   }

   else {

       element.innerText = text;

   }

}

 

function GetInnerText(element) {

   if (BrowserDetect.browser == "Firefox") {

       return element.textContent;

   }

   else {

       return element.innerText;

   }

}

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

innerText in Firefox

 

כיצד להכניס טקסט לתוך אלמנטים גם ב - Firefox.

 
הבעייה ידועה, innerText קיים ב - Internet Explorer ואילו ב - Firefox קיים textContent. (חיים קשים הם עושים לנו).
 
כדי להתמודד עם זה כתבתי את הקוד הבא
 

function InnerText(element, text) {

    if (BrowserDetect.browser == "Firefox") {

        element.textContent = text;

    }

    else {

        element.innerText = text;

    }

}

 

 
ה - BrowserDetect מגיע מהפוסט הקודם
 
את המידע על textContent קראתי כאן
 
השימוש הוא די פשוט.
 

InnerText(document.getElementById('elemId'), 'New Text');

איזה דפדפן מריץ הלקוח

 

כיצד לדעת מהו הדפדפן (והגרסה) שהגולש מריץ כרגע.

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

if (BrowserDetect.browser == "Firefox") {

}

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

onkeydown in Internet Explorer and in Firefox

 

כיצד לטפל באירוע של onkeydown ולדעת מהו התו שהמשתמש לחץ גם ב - Firefox.

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

<input type="text" onkeydown="return SearchInputClick(event);" />

 

function SearchInputClick(event) {

    var charCode = (event.which) ? event.which : event.keyCode

    if (charCode == 13) {

        //....

    }

}

 
למעשה ה - event ב - IE מוכר בתוך המתודה גם בלי שנשלח אותו - הסיבה לשליחה הוא עבור Firefox.
 
כמו כן ב - IE מוכר event.keyCode ואילו ב - Firefox מוכר evemt.which .
 
ו - Firefox הוא גם הסיבה ל - return לפני הקראיה לפונקצייה.

DateTime Format in javascript

 

איך להציג ב - javascript תאריכים בפורמט שאתם רוצים.

 
כידוע האובייקט Date של javascript הוא נחמד אבל חסר בו משהו אחד חשוב, הוא לא נותן את האפשרות לקבל מחרוזת של התאריך בפורמט שאתם רוצים (כמו שיש לנו ב - #C).
 
 
ב - Sela College Channel יהיה כמו שכתבתי ערוץ שידור שיהיה בו כל הזמן הרצאות (מתוך הארכיון או בשידור חי), בכל מקרה היינו צריכים להציג את "התוכניות הבאות" מתי הם יתחילו וכו'.
 
לא יכולנו לעשות את זה מצד השרת (אני אסביר למה באחד מהפוסטים הבאים) והיינו צריכים לעשות את זה מ - javascript, הבעייה כמו שכתבתי היא - שרצינו לצורך העניין להציג את זה בפורמט הבא
Tue, Aug 31, 9:30AM 
או בעברית - ד' אוג', 9:30 AM
 
אחרי קצת חיפושים בגוגל מצאתי פרוייקט נחמד ב - CodePlex בשם: JavaScript date format .NET style.
 
קובץ ה - javascript שיש שם הוא קטן מאוד אבל יעיל ביותר, למשל כדי לקבל את הפורמט (באנגלית) שרצינו - כתבנו קוד כזה
 

var x = new Date();

var formatDate = x.format("ddd, dd MMM, HH:mm tt", 1033);

 
כשהפרמטר הראשון הוא הפורמט שאנחנו רוצים לקבל והפרמטר השני הוא ה - culture שאנחנו רוצים לקבל (1033 שייך ל - en-US)
בקובץ יש הגדרה עבור 1033 (en-US) ו - 1043 ששייך להולנדים).
 
אפשר בקלות להוסיף חדשים (אנחנו הוספנו את 1037 ששייך לישראל).
 
כדי לקבל מצד השרת מה ה - culture הנוכחי של הגולש (במידה ונתתם אפשרות לגולש לבחור בין מספר שפות)
תוכלו לכתוב קוד כזה.
 

var LCID = '<%= Thread.CurrentThread.CurrentUICulture.LCID.ToString() %>';