DCSIMG
January 2009 - Posts - Adiel Sharabi

Adiel Sharabi

Life, the Universe, and Everything (.Net for instance)

January 2009 - Posts

Compile and anti-virus performance

בזמן האחרון אני עובד כמעט תמיד עם Process Explorer פתוח על המחשב. מכל מיני סיבות.
כאשר ממזערים אותו הוא משאיר ב Systray איקון שמתעדכן לפי מצת ה CPU הנוכחי. אם עוברים מעליו רואים מי ה"כוכב" התורן שמשתמש בהכי הרבה משאבים.
שמתי לב לתופעה שהאנטי וירוס (Nod32) משגע את המערכת כל כמה זמן.
שלחתי להם פידבק ולא קיבלתי כלום ):
 
היום צד את עיני קשר מעניין בין Build  לבין הפעילות החריגה שלו.
 
בום! זה ברור בכל קומפילציה יש המון (תלוי מה הרמה והעומק שלה) קבצים חדשים והוא מסכן עובד קשה.
לא רק זה. גם כל פעם שאני מעלה גרסה ל SVN , מוריד אחת וכו' מתעדכנות המון תקיות מערכת של ניהול הגרסאות (SVN משתמש בתקייה נסתרת בתוך כל תקייה!)
כך שזה מחרפן אותו.
מסכן ואני עוד האשמתי אותו…
 
פתרון: אני מתאר לעצמי שבכל אנטי וירוס יש אפשרות להסיר איזור מסויים מהאחריות – אצלי זאת הייתה תקיית Project  של VS 2008 שהיא שורש לתקיות הקוד.
 
דוגמא ל 2 קומפילציות לפני ואחרי.
החצים מסמנים את  ה VS והאזור האדום שמיד אחרי הקומפלציה הראשונה את האנטי וירוס.
אגב גם הקפיצות האחרות שייכות לאנטי וירוס.
 
image
 
אגב עכשיו אני שוקל להוציא ממנו גם את האחריות לבסיסי הנתונים.
אבל זה דיון נוסף.
 
ובא לציון גואל!

WCF Callback Contract & OneWay property…

כל יום לומדים דברים חדשים.
משהו חדש שלמדתי היום (על בשרי כרגיל)
 
מימשתי לשם הדגמה תבנית של Pub/Sub עם WCF. לא משהו מסובך ולא בפעם הראשונה.
כתבתי פונקציה Subscribe כדי לרשום לקוחות חדשים. (מתחת לממשק מתאים)
ומשום מה זה לא עבד.
אז בגלל עצלנות וחיפזון לא הרמתי את השירות מקומית אצלי אלא ישירות בשרת המיועד להדגמה.
וזה לא עובד.
הפונקציה יושבת לה בקליינט ולא עוזבת עד שנגמר הזמן.
 
מאחר ובבסיס השתמשתי ב DualHttpBinding  אז אולי יש חסימות בדרך?
סבבה. משחק הלוך ושוב עם הכתובות לא שינה כלום.
 
אוקי – עוברים ל NetTcpBinding (שהוא גם ככה יותר נחמד).
לא עובד!
 
לאחר כל מיני לוגים שמוגים למינהם הסתבר שהקריאה לחלוטין מגיעה לשרת רק הלקוח נתקע.
 
הסתבר לי שבטבעיות שמתי IsOneWay = true  מעל ה Subscribe (כי זה נראה לי מאד הגיוני באותו רגע שזו פעולה חד כיוונית…)
רק שזה גורם לכך שהשרת לא מחזיר כלום ללקוח (void  אמרנו? )
אבל במקרה של Callback Contract הוא מחזיר לו משהו (מה אני לא יודע) אולי כלום אבל גם כלום זה משהו לא?
בכל מקרה מסתבר שהלקוח מחכה לכלום הזה בכיליון עיניים.
 
ובא לציון גואל…
בהצלחה

VS Silent crach when open xaml files

תקלה ללא פתרון נכון לעכשיו!   פתרון!!!!
משום מה אני פותח קבצי Xaml  ו VS פשוט עף. בשקט בשקט, עף!
בעיה דומה דווחה כאן וכאן וכאן כל מיני שיטות מוזרות לפתרון. אצלי הן לא עובדות …
 
הדרך היחידה לפתוח אותם זה באמצעות xml editor ולא באמצעות ה Designer  של VS – מה שכמובן לא מאפשר תצוגה מקדימה.
נו עם זה אחיה בנתיים.
 
 
אגב בלנד פותח ללא בעיות.
הסרתי את כל התוספים (ReSharper etc)
כלום!!!
 
פרויקט חדש של WPF שאני מוסיף עובד ללא תקלות.
 
אגב זה קורה על שני מחשבים נפרדים כלומר משהו הולך איתי דרך ה SVN.
 
אם מישהו נתקל בבעיה אשמח לתגובה.
 
אמשיך ואעדכן בעז"ה אם אמצא פתרון.

הודעות שגיאה למתכנתים

image

אם במקרה קיבלתם משו כזה וגם אתם מתכנתים וגם זה היה דף שמעניין אתכם אתם בבעיה.
זה לא אומר כלום על הבעיה. אפילו אין מה לגגל :)
 
פתרון -
tools->Internet options->advanced
 
image
 
מעיפים את הסימון סוגרים ופותחים מחדש ומקבלים:
 
image
 
לא הרבה יותר טוב. אבל לפחות מקום להתחיל...
בהצלחה.
 
 
 
 

SelectConflictUpdatedRowsCommand and Change Tracking

SelectConflictUpdatedRowsCommand and Change Tracking

 

אני עובד כרגע על איזה פרויקט המשתמש ב Sync Framework  כדי למלא בסיס נתונים מקומי ולסנכרן אותו עם שרת.
אז יש הדרכה נחמדה שחוסכת המון כאבי ראש כדי לנתק את הקשר בין הלקוח לשרת ע"מ להריץ את זה דרך WS.
רק מה?
כדי להעביר את בסיס הנתונים לבדיקות חוזרות ונשנות מכמה לקוחות, אני מעוניין ל"אפס"  את השרת מפעם לפעם (בכל זאת סנכרון ואני לא מעוניין בתוצאות של הבדיקות הקודמות)
אז אפשר להעלות בסיס נתונים "נקי" ולהחליף (רק שצריך להפסיק כל הזמן את השרת...)
ואפשרות נוספת (שהיא שימושית גם להתקנות) זה שימוש בקובץ SQL עם סקריפט שמוחק ומאתחל את הטבלאות.
אז כמתכנת עצלן השתמשתי ב SQL  Server Publishing Wizard  שמאפשר לייצא את הסכמה ו/או נתונים לקובץ SQL.
נחמד.
רק שאז התחלתי לקבל שגיאה מוזרה - Failed to execute the command 'SelectConflictUpdatedRowsCommand' for table
טוב אז קודם כל זה עבד בחלק מהמקרים ובחלק לא.
הבעיה הזו ממש מבצעת תרגילי התחמקות מהראדר.
נסיון לחדש את הסינכרון עובד לפעמים ולפעמים לא!
 
מחיקה של בסיס הנתונים לא עוזרת.
 
נסיון חוזר לייצר מחדש את הקליינט של הסינכרון עובד!
ואח"כ מפסיק.
בקיצור מעצבן!!!
 
בידוד של מאפיינים.
הזרקת לוגים ושום דבר לא עובד.
 
טוב אז הלבשתי Prifiler על בסיס הנתונים והתחלתי לבדוק מה בדיוק הוא נשאל.
ואחרי נסיון להריץ את השאילתה ישירות על בסיס הנתונים קיבלתי הודעה שאין לטבלה הזו Change Tracking !!!
 
ואז הפתרון היה קצר.
כאשר מייצרים לקוח דרך האשף של VS לבסיס נתונים SQL Server 2008  ישנה אפשרות (מבורכת ורצויה) להשתמש במנגנון מובנה של מעקב אחרי שינויים.
כחלק מהתהליך מופעלת התכונה הזו (שהיא כבויה כברירת מחדל) בבסיס הנתונים ובטבלאות הרצויות.
 
האשף של הייצוא מתעלם מכך ובסקריפט המיוצא אין הפעלה של התכונות הללו.
 
אז הפתרון הזריז - מעתיקים מתוך קבצי הסקריפט המחוללים ע"י האשף את החלק שמפעיל את המעקב על בסיס הנתונים ועל הטבלאות.
ובא לציון גואל...
 
 

SQL Compact Edition & .NET 3.5 sp1

לא יודע לכמה אנשים זה יעזור אבל תקלה מעצבנת שנתקלתי בה אתמול.
ביצענו שילוב של כמה מרכיבים שביחד אמורים לעשות את הדבר הבא - רישום אירועים מסוימים לבסיס נתונים מקומי של SQL CE וביצוע סינכרון מול שרת כל פרק זמן מסוים.
על תחנות העבודה הכל עבד מצויין.
על תחנת בדיקה (ללא VS וכו') זה פשוט נפל. ללא יותר מידי הערות.
לאחר הוספת מספיק לוגים וקטעי Try-Catch הסתבר שבפתיחת בסיס הנתונים המקומי מתעורר חריג
cannot find provider  או משו כזה.
זה הרמז היחיד.
חיפוש קצר העלה שישנה בעיה כזו עם מערכות 64 ביט אבל התחנה הייתה 86...
לבסוף הניחוש המוצלח היה - המנוע של ה SQL הותקן לפני .net 3.5.
הסרה שלהם -> התקנה מחדש - הכל עובד פיקס...

TypeMock Isolator 5.2 release

TypeMock  היא תשתית אשר מאפשרת בדיקות ברמה טובה.
אני משתמש בה על בסיס יומיומי ונהנה מאד.
יש כמה פוסטים מתבשלים בנושא אולם הפוסט הזה מוקדש למעשה לבקשה שלהם (ששכרה בצידה) פירסום של גרסת השחרור הנוכחית בדגש על התמיכה ב VB.
מאחר ואני נהנה מהמוצר אשמח לעזור...
אז הנה הפרסום המבוקש.
 
Programming Visual Basic applications?

Typemock have released a new version of their unit testing tool, Typemock Isolator 5.2.
This version includes a new friendly VB.NET API which makes Isolator the best Isolation tool for unit testing A Visual Basic (VB) .NET application.

Isolator now allows unit testing in VB or C# for many ‘hard to test’ technologies such as SharePoint, ASP.NET MVC, partial support for Silverlight, WPF, LINQ, WF, Entity Framework, WCF unit testing and more.

Note that the first 25 bloggers who blog this text in their blog and tell us about it, will get a Free Full Isolator license (C#, VB, and Sharepoint included - worth $139 !!!). If you post this in a VB.NET dedicated blog, you'll get a license automatically (even if more than 25 submit) during the first week of this announcement.

Go ahead, click the following link for more information on how to get your free license.

 

בהצלחה לכם!!!

SkyDrive and Firefox

SkyDrive  הוא שירות איכסון של מיקרוסופט שנכון לעכשיו מאפשר 25GB! חינם. (במגבלת 50MB לקובץ כך שאין מה לדבר על סרטים…)
בכל אופן נכנסתי לשם פעם פעמיים ודי התאכזבתי כדי להעלות קבצים צריך לבחור 5 קבצים כל פעם אחד אחד!?!?
היה לי מוזר.
אתמול התפנתי שוב לבדוק את הנושא.
חיפשתי איזה כלי שולחני שיוכל לבצע את זה.
מצאתי איזה כלי (Gladinet) בגרסת ניסוי שעף והעיף אותי לכל הרוחות כל פעם מחדש.
חיפוש קצא העלה סרטון או שניים שמאפשר גרירה של כמה קבצים לתוך הדפדפן…
אז מסתבר שישנו כלי רק שהוא ActivX – כלומר רץ רק באספלורר שאני פותח רק כשאין ברירה…
אז אין ברירה ופתחתי אקספלורר – עכשיו הכל רץ
 
image
 
(ככה זה נראה באקספלורר)
 
image
 
(ככה זה נראה בפיירפוקס)
 
 
 
 
 
 
 

WPF Visual studio preview with resources from different project

הבדל מסוים שראיתי בין בלנד (Expression Blend) לבין Cider – שהוא העורך הויזואלי של VS ל WPF הוא שכאשר ישנו שימוש במשאב שמוגדר בפרוייקט אחר בבלנד רואים את זה תקין ואילו ב VS זה כאילו לא קיים.
דוגמא פשוטה
ב App.xaml  מוגדרת איזו מברשת.
בפרויקט אחר ישנו שימוש במברשת זו.
בבלנד זה נראה עם המברשת ובVS זה ללא.
image

 

background – מוגדר ב App.xaml
 
image
 
כאשר היוזר קונטרול ממוקם בפרויקט אחר
 
בבלנד זה נראה ככה - (מאד מתוחכם!!!)
 
image
 
ב VS- זה נראה ככה  - (אפילו יותר מתוחכם)
 
image
 
 
אז איך אפשר לראות את זה נכון גם ב VS?
הפתרון הוא בקישור לקובץ המשאבים (App.Xaml במקרה זה)
2 דרכים – אחת מהבלנד ואחת מ VS.
 
מהבלנד -
הולכים לפרויקט –> כפתור ימין –> Link to existing Item  -> ובוחרים ב app.xaml.
שמירה ומעבר ל VS.
בשלב זה הפרויקט לא יתקמפל בגלל הגדרה לא נכונה ב Build Action – אז על הקישור ל App.xaml  ומאפיינים – לשנות ל None  (במקור – ApplicationDefinition)
ובא לציון גואל.
 
מ VS – שוב מוסיפים פריט קיים לפרויקט רק שבמקום ללחוץ על ADD לוחצים על החץ הקטן ואז Add as Link.
image
 
ואז לשנות במאפיינים שלו ב
Custom tools – לשנות ל MSBuild:Compile
וב Buil Action  ל None.
 
ואז רואים גם ב VS את האלמנט נכון וגם הכל עובד ומתקמפל
בהצלחה.