DCSIMG
קוד נכון - שלמה גולדברג (הרב דוטנט)
Sign in | Join | Help

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

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

Browse by Tags

Exception handling in application
05 December 11 09:40 AM | Shlomo | 1 comment(s)
טיפול נכון בשגיאות הוא אחד הדברים המאתגרים בפיתוח אפליקציות, לדעתי אחד הדברים השגויים לעשות זה לכתוב בכל קטע קוד try, catch בלי לעשות כלום בקטע ה - catch רק כדי לבלום את התרסקות האפליקצייה. הסיבה שהגישה הזו לא נכונה לדעתי, היא ש"טיפול" מסוג זה (כלומר לא לטפל רק להתעלם) יגרום בהכרח להתרסקות האפליקצייה במקום אחר מכיוון שאם קוד מסויים התרסק ולא עשה את העבודה כמו שצריך סביר להניח שקוד אחר המבוסס על הקוד שהתרסק לא יעבוד כמו שצריך, ובסוף התהליך כשנתרסק לא נדע את הסיבה האמיתית להתרסקות האפליקציה...
עצלנות של מפתחים ואבטחת מידע - והפעם שימוש ב - reflector
17 November 11 08:43 AM | Shlomo | 2 comment(s)
בפוסט הקודם תיארתי כיצד לעקוף את הבדיקה של טלריק האם המוצר נקנה או שהוא גרסת ניסיון - על הדרך הבטחתי לספר איך להשתמש ב - reflector. אמנם פוסט זה לא כל כך קשור לאבטחת מידע (או לעצלות של מפתחים) אבל הוא דומה לפוסט הקודם. למי שלא מכיר את reflector ה - reflector הוא אחד מהכלים המדהימים ביותר שיצאו אי פעם כדי לעזור למפתחים, לצערי הרב מתי שהוא הם החליטו לגבות כסף על התוכנה (35$ לגרסה הבסיסית ו - 95$ לגרסה המלאה). כרגיל אני אדגיש שאני חלילה לא מעודד לגנוב אותם, אלא רק מראה עד כמה חשוב לכתוב קוד נכון. במידה...
עצלנות של מפתחים ואבטחת מידע - והפעם כיצד לעקוף את הבדיקה שטלריק עושים האם קניתם את המוצר
16 November 11 08:49 PM | Shlomo | 2 comment(s)
בפוסט הקודם הראיתי עד כמה מפתחים לא חושבים מספיק על כל הנושא של אבטחת מידע. היום אני אראה משהו דומה ונראה עד כמה מפתחים כותבים לפעמים בצורה מגוכחת. אחד הכלים החשובים ביותר בכל סביבת פיתוח - היא הפקדים של טלריק , בכל סביבה שבה אני עובד (win form, web, wpf, silverlight) אני משתדל שיהיה לי את היכולת להשתמש בפקדים שלהם. כמובן שהפקדים עולים כסף (ובכלל לא זול - בסביבות 1000$ עבור סביבה אחת - אבל זה שווה כל שקל), חשוב שיהיה ברור שאני לא מעודד לגנוב אותם חלילה - מטרתי בפוסט זה היא רק להראות עד כמה חשוב לכתוב...
עצלנות של מפתחים ואבטחת מידע
12 November 11 10:20 PM | Shlomo | 4 comment(s)
קיימים הרבה גורמים לבעיות באבטחת מידע אבל אחד מהגורמים העיקריים לבעיות אלו זה אנחנו - המפתחים - לפעמים אנחנו לא מודעים (או מתעצלים להיות מודעים) לכתיבה של קוד נכון שיהיה מאובטח לפחות ברמה מינימלית. חבר הראה לי משחק טריוויה באתר נענע בשם "לעוף על המליון" - אני לא משחק במחשקי מחשב בכלל, אבל כשהוא הראה לי את המשחק ה - Fiddler היה פתוח (אני מאוד מקווה שאתם מכירים את הכלי הזה - אחרת רוצו ללמוד אותו). בכל מקרה, הצצתי על הפידלר ולתדהמתי אני רואה שבכל פעם שיש שאלה חדשה נשלח כמובן Request עם בקשה...
Disposable Property
09 February 10 09:16 AM | Shlomo | 3 comment(s)
עדי הראה לי רעיון מאוד מעניין למימוש שמירת אובייקט זמני בזיכרון. למה הכוונה ? נניח שיש לנו קוד כזה public class FileLogger : ILogger { } public class MockLogger : ILogger { } public class Person { public ILogger Logger { get ; set ; } } ויש לנו את פונקצייה שמקבלת כפרמטר Person אבל בחלק מהקוד של הפונקצייה לא רוצים שה - Logger יהיה FileLogger אלא MokeLogger - מן הסתם נעשה קוד כזה public void Func( Person person) { ILogger original = person.Logger; person.Logger = new MockLogger (); //work..... person...
עבודה עם Services ו - Console Application
19 January 10 09:48 AM | Shlomo | 1 comment(s)
הרבה פעמים כשאנחנו עובדים עם Services ה - host שלהם הוא Windows Service, מה שמתסכל לעבוד בצורה הזאת זה שבזמן פיתוח כדי לדבג צריך כל פעם לעשות Attach to process ובכל קומפילציה צריך לעצור את ה - Serivce ולהפעיל אותו מחדש אחרי הקופמילציה (מה שלוקח קצת זמן). אני משתמש ברעיון מעניין (נדמה לי שזה שייך לאלכס מחברת QualiSystems ) נוסיף למחלקה שיורשת מ - ServiceBase את המתודת הבאות public void Open() { OnStart( null ); } public void Close() { OnStop(); } כעת ב - Main נכתוב את הקוד הבא bool console = args...
Session Manager
20 December 09 02:05 PM | Shlomo | 3 comment(s)
אחד מהדברים שאני לא אוהב בעבודה עם Session זה העובדה שאחנו עובדים איתו עם מחרוזות. בפרוייקטים בינוניים פתאום מתחילים לשכוח עם איזה שם השתמשנו והאם השתמשנו בשם מסויים, והעניינים מתחילים להסתבך. ידיד יקר שי קרן כתב class בשם SessionManager שפותר את הבעיות האלו, מכיוון שהשימוש ב - Session הוא בעזרת enum. אפשר להוריד את הקוד מכאן (אני משתמש בו כבר שנתיים בכל הפרוייקטים שלי) זה עובד בצורה הבאה. (אני מציג כאן רק חלק מהקוד - הקוד המלא ניתן להורדה מהלינק למעלה) יש enum עם כל השמות שנרצה להשתמש ב - Session...
קדימות של אופרטור + על פני אופרטור ==
21 September 09 10:19 PM | Shlomo | 1 comment(s)
לפעמים כשמדבגים מאוד נוח להכניס מחרוזות ל - trace/console. בקיצר כתבתי את הקוד הבא: Console .WriteLine( "myObj == null " + myObj == null ); להפתעתי זה הדפיס רק את הערך false ללא המחרוזת: myObj == null. (גם כשהערך היה אמור להחזיר את התוצאה true) לאחר קצת מחשבה נזכרתי שהאופרטור + הוא לפני אופרטור ההשוואה - כלומר - מה שקרה זה הדבר הבא: חיבור של המחרוזת myObj == null למשתנה myObj ואת התוצאה השוונו ל - null, מה שתמיד החזיר את הערך false. כמובן שאחרי ההבנה הקוד שנכתב היה - Console .WriteLine...
הודעות שגיאה אנושיות - בבקשה
15 July 09 08:29 AM | Shlomo | 4 comment(s)
לפעמים יש תוכנות שהייתי רוצה להכיר את המתכנתים שלהם. יש לנו סורק (שמאפשר לסרוק מקוד). הנחנו את הדף לא לגמרי במקום המתאים, והנה הודעת השגיאה שקבלנו: מבינים, לא שמתי את הדף בדיוק במקום ולא רק שאני לא מקבל פירוט על השגיאה, אני מקבל הודעה שמשהו קטסטרופלי קרה. אז, כשאתם מפתחים תנסו לתפוס את השגיאות ולתת הודעות אנושיות.
The Difference Between Equals and Static Equal
28 May 09 12:39 PM | Shlomo | with no comments
כשהראתי לסטודנטים שאני מלמד את הפוסט של ספיריטוס שמדבר על ההבדלים בין Equal ל - ==, שאלו אותי - מה ההבדל בין ה - Equal שיורשים מ - object לבין ה - Equal הסטטי ? במחשבה ראשונה עניתי - שלמעשה הקריאה - Equal(obj1, obj2 מפעילה את obj1.Equal(obj2. וכמובן שהשאלה הבאה הייתה, אז מה ההבדל ביניהם, והתשובה הייתה נפתח את ה - reflector ונראה. אז הנה הקוד של Equal public static bool Equals( object objA, object objB) { return ((objA == objB) || (((objA != null ) && (objB != null )) && objA.Equals...