לפני הכל, אציין כי האירוע הראשון של ALT.NET בארץ היה מעולה מכל הבחינות, הכנס אורגן בצורה מצויינת, והאנשים, הסשנים והתכנים היו מעניינים מאוד.
הכנס הזה מאוד שונה מכנסים אחרים למפתחים. אין בו הרצאות שהכינו מבעוד מועד, או תכנים שנקבעים מראש. התכנים ומהלך הסשנים נקבעים על ידי המשתתפים - והם אלו שמובילים אותם.
הכנס יתקיים ב - 2, 3 באפריל (יום חמישי בערב ויום שישי מהבוקר) בבית קבוצת סלע.
בדף האירוע בפייסבוק תוכלו למצוא מידע נוסף אודות הכנס (ולהרשם אליו), להלן הסבר על הכנס מדף האירוע:
הכנס הזה לא דומה לכנסים אחרים שאתם מכירים. לא מדובר בהרצאות פרונטליות, בהן מספר מצומצם של אנשים בא ללמד את המשתתפים, אלא בדיוני "שולחן עגול". התכנים נקבעים על ידי המשתתפים (זה כולנו) ולא על ידי המארגנים בלבד.
בנוסף תוכלו להתעדכן לגבי הכנס גם בבלוגים של המארגנים: רועי אושרוב, ליאור פרידמן וחן אגוזי.
בשורה תחתונה - לא לפספס.
ב - 28 לנובמבר, יָצָא הספר : Learning ExtJS, זהו הספר הראשון שמוקדש ל - ExtJS Framework. לפי המחברים, מטרת הספר היא ללמד את היסודות של ExtJS, ולהסביר כיצד לעבוד עם רכיבים ופקדים שנכללים בספריה הזו (כגון טפסים, Grids, Drag & Drop וכיו"ב).
מחברי הספר משתתפים בפורומים של ExtJS, וניתן לשאול שאלות ולהגיב על תכני הספר בשרשור שנפתח על הספר בפורום.
פירוט על הספר (מהאתר של Packt Publishing):
As more and more of our work is done through a web browser, and more businesses build web rather than desktop applications, users want web applications that look and feel like desktop applications. Ext JS is a JavaScript library that makes it (relatively) easy to create desktop-style user interfaces in a web application, including multiple windows, toolbars, drop-down menus, dialog boxes, and much more. Both Commercial and Open Source licenses are available for Ext JS.
Ext JS has the unique advantage of being the only client-side UI library that also works as an application development library. Learning Ext JS will help you create rich, dynamic, and AJAX-enabled web applications that look good and perform beyond the expectations of your users.
From the building blocks of the application layout, to complex dynamic Grids and Forms, this book will guide you through the basics of using Ext JS, giving you the knowledge required to create rich user experiences beyond typical web interfaces. It will also provide you with the tools you need to use AJAX, by consuming server-side data directly into the many interfaces of the Ext JS component library.
ניתן לרכוש את הספר גם כ - e-book, וגם באמזון.
מכיוון שעוד לא קראתי את הספר לא אוכל לסקר אותו ולתת ביקורת, אני מקווה שאוכל לעשות זאת בקרוב.
ספר נוסף על ExtJS שעתיד לצאת הוא Practical Ext JS Projects with Gears (Practical Projects), על פי אמאזון ב - 1 למאי 2009. כנראה שיש למה לחכות.
האירוע הראשון בארץ של קהילת ALT.NET:
בתאריכים ה - 7 וה - 8 לאוגוסט יתקיים אירוע של קהילת ALT.NET (מה זה ALT.NET?) במשרדי SQLink ברמת גן.
ניתן למצוא פרטים נוספים על האירוע בבלוג של חן אגוזי, ולהרשם כאן.
האירוע מאורגן ע"י רועי אושרוב, אורן עיני וחן אגוזי.
jQuery היא Framework (אף אחד עוד לא המציא לזה מילה בעברית?) שכתובה ב - JavaScript ונועדה להקל על העבודה בצד לקוח, בייחוד בעבודה מול DOM.
היא מאפשרת לקצר תהליכים (ובעיקר לקצר קוד), ולגשת ל - DOM בקלות מדהימה, ושורת הקוד מדף הבית שלהם ממחישה את היופי שבה:
$("p.surprise").addClass("ohmy").show("slow");
(ואם עוד לא נכנסתם לדף הבית שלהם, אז כנסו והריצו את השורה הזו).
Intellisense?
Lance Fisher יצר תוספת שמאפשרת Intellisense ל - jQuery ב - Visual Studio:
Intellisense for jQuery in Visual Studio 2008
בפוסט קודם הסברתי על עיצוב אתרים באמצעות CSS (בניגוד לעיצוב באמצעות טבלאות, ובאמצעות תגיות ומאפייני HTML).
מה במדריך זה?
בסדרת פוסטים קרובה (שזהו הפוסט הראשון מבינהם), אסביר איך לעצב אתר באמצעות CSS ואיך לשלב את הרעיון של עיצוב באמצעות CSS עם ה - Framework של ASP.NET (כמו Themes, Skins, עיצוב פקדים בעזרת CSS ועוד).
מה לא יהיה במדריך זה?
חשוב לי להבהיר דבר אחד - אני לא מתכוון להסביר את הבסיס של CSS. איך לשלב CSS בדף, מה זה selector, איך להגדיר צבעים, הירראכיות וכיו"ב תוכלו למצוא במדריך CSS באתר Webmaster.org.il (בעברית). אם אינכם יודעים CSS כלל, אני ממליץ לכם להתחיל ממדריך זה.
Box Model
נתחיל בהגדרה של Box Model או מודל הקופסה מתוך אתר W3:
The CSS box model describes the rectangular boxes that are generated for elements in the document tree and laid out according to the visual formatting model.
בגדול, מודל הקופסה מתאר את הקופסאות או התיבות שנוצרות לכל אלמנט HTMLי במסמך.
כל אלמנט בדף אינטרנט תופס מקום בדף, ומודל הקופסה מתאר כיצד האלמנט מתפרס על הדף.
להלן תרשים שממחיש כיצד אלמנט מתפרס:
לכל אלמנט יש את התוכן (הקופסה הפנימית ביותר בתרשים), התוכן מוקף ב - Padding (ריפוד), ה - Border עוטף את האלמנט עם ה - Padding, ומסביבו ה - Margin (שוליים).
חשוב לזכור כי ה - Padding, ה - Border וה - Margin מתווספים לרוחב והגובה של האלמנט.
לדוגמה, אם ניצור div שיקבל את ההגדרות הבאות:
div.Example1
{
background: Red;
margin: 2px;
border: solid 1px Black;
padding: 3px;
width: 40px;
height: 40px;
}
תווצר קופסה אדומה, שרוחבה הפנימי (עד ה - border) יהיה 46px - רוחב התוכן הוא 40px, ואליו מתווספים 3px מכל צד (padding). את הקופסה יעטוף גבול (border) שחור בעובי של 1px, ושוליים של 2px מכל צד.
הגודל הכולל של הקופסה (כולל השוליים) יהיה 52px גובה, ו - 52px רוחב.
Padding ב - Internet Explorer
בגרסאות קודמות של Internet Explorer (עד 5.5, ובמקרים מסויימים גם ב - 6 ו - 7), ה - Padding היה מוכל בתוך ה - Content (ולא מתווסף לרוחבו), כפי שמודגם בתרשים הבא:

(מקור: וויקיפדיה האנגלית)
בעיה זו קיימת גם בגרסה 6, אלא אם הצהרת המסמך של הדף היא XHTML 1.1, ועל פי וויקיפדיה ניתן ליצור התנהגות דומה גם בגרסה 7, לשם תמיכה לאחור.
גרסאות 6, ו -7 יתנהגו בצורה דומה לגרסאות הקודמות, אלא אם יוגדר DOCTYPE מסויים (כמו XHTML, או HTML 4.0). בנוסף בגרסה 6 ההתנהגות גם תהיה זהה לגרסאות קודמות במידה וישנה הגדרת XML לפני ה - DOCTYPE. ניתן למצוא בוויקיפדיה מידע נוסף על התנהגות IE בהתאם להצהרת המסמך.
קריאה נוספת
בפוסט הבא, אסביר על עיצוב עמודים ואראה דוגמאות מעשיות לעיצוב עמודים באמצעות CSS.
לעתים אני נתקל בקוד בסגנון הבא:
try
{
DoSomething();
}
catch (Exception ex)
{
// Some logging operation or whatever...
throw ex;
}
השורה throw ex כביכול זורקת חריג חדש עם אותם הפרטים של ה - Exception הקודם, מה שגורם למחיקת ה - Stack Trace.
במידה וביצענו פעולות כלשהן על חריג, ואנחנו מעוניינים לזרוק אותו מחדש, יש להשתמש במילה throw בלבד, לדוגמה:
try
{
DoSomething();
}
catch (Exception ex)
{
// Some logging operation or whatever...
throw;
}
במקרה הזה ה - Stack Trace המקורי ישאר (כמובן שזה תקף לכל שפה דוטנטית אחרת).
Roy Osherove and the guitar on TechEd 2008, Don't miss it!
(ותסלחו לי על האיכות, רציתי להבהיר קצת את הוידאו, אבל ה - Movie Maker עשה בעיות, ולא מצאתי תוכנה אחרת):
אחת השאלות הנפוצות יותר בפורומים של פיתוח אתרים ו .NET היא "מדוע לא רואים עברית?".
בכמה שלבים פשוטים, אפשר לדאוג שלא יהיו בעיות עם העברית באתרכם:
קידוד
הקידוד המומלץ לעבודה ב - Web (ולא רק בו) הוא Unicode, נקודה.
ה - Unicode הוא תקן בינלאומי לייצוג טקסט, שתומך בריבוי שפות. התקן הזה נתמך במערכות הפעלה רבות, והאינטרנט הולך לכיוונו.
לקריאה נוספת:
Visual Studio
בכדי שהדפים שלנו יתמכו ב - Unicode, יהיה עלינו לשמור אותם בקידוד זה.
ב - Visual Studio בחלון Save \ Save As, מופיע ליד כפתור ה - Save חץ קטן, לחיצה עליו תפתח תפריט עם שתי אפשריות, אחת מהן היא Save With Encoding:
נבחר באופציה השניה, ויפתח חלון נוסף, בו ניתן לבחור את הקידוד:
HTML
כשנשלח דף HTML לדפדפן, יש לידע אותו על הקידוד, אחרת ייתכן והדפדפן יבחר בקידוד שונה (לעתים הקידוד שנקבע בדף האחרון, או ברירת המחדל של הדפדפן).
הגדרת הקידוד של דף HTML מתבצעת באמצעות תג meta:
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" />
XML
אם מדובר על קובץ XML (כמו RSS), הקידוד מוגדר בהצהרה שפותחת את המסמך:
<?xml version="1.0" encoding="utf-8"?>
ASP.NET
בנוסף, יש להגדיר בשרת את הקידוד בו אנו משתמשים. ניתן להגיד זאת בשני מקומות:
- ב - Page Declaration בתחילת כל דף aspx.
- ב - Web.Config תחת התגית Globalization.
יש לציין את ה - RequestEncoding, וה - ResponseEncoding.
ב - Web.Config זה יראה כך:
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"/>
SQL Server
ב - SQL Server ישנם Data Types מיוחדים לשמירת נתונים ב - Unicode. שמם של השדות האלו מתחיל ב - N:
- NChar - המקביל היוניקודי ל - Char.
- NVarChar - המקביל של VarChar.
- NText - המקביל של Text.
ההבדל בין הגרסה ה - Nית, ללא Nית, היא שהשדות שמתחילים ב - N משתמשים בשני בתים בכדי לאחסן תו (בכדי שניתן יהיה לאחסן תו בכל שפה).
יש להשתמש בסוגים אלו בבניית בסיס הנתונים. בנוסף יש לזכור שכל הפרמטרים שמועברים ל - SQL Server צריכים להיות מאותו הסוג.
במידה ולא משתמשים בפרמטרים במשפטי ה - SQL, יש להוסיף את האות N לפני כל String. לדוגמה:
SET MyField = N'Some text';
חשוב לזכור שגם אם לא יישמתם את כל הצעדים, ולא נתקלם בבעיות עם העברית במכונת הפיתוח שלכם, ייתכן ובדפדפנים במחשבים אחרים יצוצו בעיות (אם אין תג meta מתאים), בשרת ה - Production יהיו בעיות בזמן ההעלאה, או שהמסד ישמור את הנתונים בצורה לא תקינה (קרה לא מעט), לכן רצוי לטפל בהכל לפני כל פרוייקט.
עכשיו כשהתפנה לי קצת זמן מהשבוע המטורף (ככה זה כשאתה עובד דירה באמצע תקופת לחץ בעבודה ויש לך חופשה באילת באמצע).
אם נקצר את הפוסט הזה לשתי מילים, אז: חבל שנגמר. זו הייתה חוויה מאוד מהנה.
על הבוקר (כן יצאתי ב - 5:00 בבוקר מהבית), כשהגעתי לשדה התעופה, פגשתי כבר מספר בלוגרים, והתחלנו לקשקש. הנה מספר תמונות מהבלוג של דורון.
לאחר שנחתנו אוטובוס לקח אותנו למלוננו הקט (טוב, לא כ"כ קט), ושם קיבלנו במהרה את החדרים (טוב, חוץ מעדלי, שנתקע קצת).
לאחר מכן נלקחנו אל ה - Business Center במלון הרודס, שם חיכו לנו שני XBoxים עם מסכי ענק, יש כאלו שמבחינתם זה היה הטק אד:
משם המשכנו למפגש הבלוגרים, שם קיבלנו מספר מתנות מדליקות (ערכת בלוגרים בעגה המקצועית) , כאן זה המקום להגיד כל הכבוד לדורון בן דוד על הרעיון הגדול.
וההמשך:
הרצאות הרצאות, אוכל, הרצאות, אוכל אוכל אוכל, הרצאות
פורטיס וסחרוף (ענק) במסיבה בנמל אילת - תמונות מהמסיבה.
הרצאות הרצאות, אוכל, הרצאות, אוכל אוכל אוכל, הרצאות
האוכל היה מעולה, ההרצאות קצת פחות. היו מעט הרצאות ברמה טובה, חלק לא קטן מההרצאות היה על טכנולוגיות חדשות (שכבר אינן כל כך חדשות לקהל) ואיך להשתמש בהן, חלקן היו כבר ב - Dev Academy.
לקראת סוף הכנס נפגשנו (הבלוגרים) שוב בארוחת הבלוגרים. ויצאנו לטיסה.
נהנתי מאוד מהכנס, היה כיף במיוחד להפגש עם כל הבלוגרים ולהתקשקש. הארגון היה מעולה והכל זרם.
פה זה המקום להגיד תודה למיקרוסופט על ששלחו חלק נכבד מהבלוגרים לכנס, ולמיכל שדאגנו לשגע אותה על כל פיפס
.
ואני אציין את הבעיה הכי גדולה בכנס, שנקווה שבפעמים הבאות ילמדו את הלקח: הוא נגמר.
אני עוד מעלה תמונות ואת הוידאו של רועי אושרוב במופע עוצר נשימה (ככה זה כשהספקיות חונקות אותך ב - Upload). אז בקרוב הפוסט האחרון על הכנס.

היום הייתי בשתי הרצאות שנהנתי מאוד מתוכנן ומהמרצים:
ההרצאה של גיא קולביס על Performance Driven Development. גיא סקר את המתודולוגיה של PDD, ואילו כלים מציע Visual Studio על מנת לפתח בצורה נכונה ולבדוק את האפליקציה (מבחינת Performance כמובן).
וההרצאה של רועי אושרוב, על Reflection:
".Net In The Mirror - A Deep Reflection Session", הרצאה ממש טובה, של מרצה ממש ממש טוב, הנה סקירה על ההרצאה בבלוג של שחר.
בנוסף רועי דפק הופעה עם הגיטרה, צילמתי בוידאו, בקרוב אני אעלה לאינטרנט (אחרי שאני אמצא איך מכווצים את הוידאו). בינתיים קבלו תמונה של גיא מרצה:

להלן הוידאו שצולם באמצעות המכשיר של FlixWagon, עם אדיר רון מומחה ל - Workflow ו - Forms. שימו לב איך העובדה שהוא Expert מושכת אליו בחורות:
זהו חלק מה Live Blogging שצולמו ע"י יובל שושן, כשאני מראיין. בקרוב אעלה ראיונות חושפניים שלא תראו בשום מקום אחר - יש למה לצפות.
אז היום הראשון בטק אד כבר עומד להגמר, הנה כמה תמונות מהאירוע. (מאוחר יותר אני אערוך ואעלה עוד תמונות.)
כל התמונות כאן הן לפני ההרצאות (שקיבלנו חוברת עצומה שקצת קשה לבחור לאיזה הרצאות כדאי להכנס) (למעט הרצאת הפתיחה של המפתחים).
נתחיל ביוסי תאגורי צוחק (פשוט תמונה גדולה):
בהחלט קורע.
והנה יוסי ועדלי משחקים ב - Guitar Hero:
יוחאי בהרצאת הפתיחה למפתחים:
ועוד שתי תמונות ממפגש הבלוגרים שהיה באילת, הנה מיכל מרצה לנו:
ומאחור:
ד"א, בקרוב נעלה ראיונות חושפניים בלעדיים שצילמנו אני ויובל שושן. יש למה לחכות...
איתי שקורי כתב בפוסט Blog posts Tags standardization על הבעיה של ריבוי תגיות והבעיה בחיפוש פוסטים על פי תגיות.
אחרי הדיון שהיה שם אפשר להגיע לכמה מסקנות:
- יש תגיות שכנראה לא ניתן יהיה לצמצם (כמו MOSS ו - SharePoint), הפתרון במקרה הזה יהיה לשים את שתי התגיות בקביעות על כל פוסט שנוגע לנושא.
- יש תגיות שבהחלט כדאי לצמצם. אני לא רואה טעם ביותר מתגית אחת עבור .Net Framework 3.5 (אפשר לראות בחיפוש על פי תגיות שיש גם ל - 3.5 שתי תגיות וגם ל - 3.0 שתי תגיות).
בנוסף מיכל כתבה כי "בסיעור המוחות האחרון שהיה גילינו שמעט מאוד אנשים משתמשים בניווט דרך תגיות". לדעתי הגולשים לא ממש מצליחים לנווט באתר עם התגיות, אז הם מוותרים על השימוש בהן.
אם גולש רוצה לחפש פוסטים על Framework 3.5 העובדה שיש שתי תגיות לנושא הזה תגרום לו להבין שאם הוא ילחץ על אחת מהן - כל הפוסטים שמתוייגים בשניה לא יופיעו בתוצאות, וככל שנכנסים עמוק יותר המצב הופך גרוע יותר (מבולבלים? גם אנחנו).
גם אני ניסיתי מספר פעמים להשתמש בתגיות (ודווקא ב - CodePlex הן די שימושיות) והתאכזבתי. אני אישית משתדל לשמור על איזה עקביות עם התגיות שכבר קיימות (למרות שגם זה לא הכי עזר).
בשורה תחתונה אני מאוד תומך ברעיון שאיתי העלה, אני חושב שאולי כדאי להרים את הכפפה, ולשאול - מי מעוניין להצטרף ליוזמה?
אני סבור שתחזוקה טובה של מנגנון התגיות גם תקל על המשתמש וגם תגדיל את הכניסות לבלוג שלכם (מכיוון שהבלוג שלכם תמיד יהיו מתוייג תחת התגיות שרוב המשתמשים ילחצו עליהן).
ועוד רעיון בנוגע לאנגלית: לדעתי הוספה של התגית "English" לכל הפוסטים שכתובים באנגלית תהיה מאוד שימושית עבור גולשים זרים (כך גם יהיה ניתן ליצור דף בית באנגלית שיביא את כל הפוסטים המתוייגים כ - English, וגם אם לא יהיה אחד כזה, הגולש יוכל פשוט ללחוץ על התגית English).
אז מה דעתכם\ן והאם אתם\ן מצטרפים\ות?
השאלה:
יש לי את הקוד הבא בקלאס כל שהוא:
private float _thickness;
internal float _Thickness
{
get
{
return _thickness;
}
set
{
_thickness = value;
}
}
השאלה שלי היא מה ההבדל בין _thickness לבין _Thickness?
אחד מהעקרונות ב - OOP (ר"ת של Object Oriented Programing) הוא Encapsulation (בעברית יכול להקרא גם "כימוס").
נניח שאתה יוצר Class כלשהו שיש לו התנהגות מסויימת, מבחינת המפתח שמשתמש בו, הקלאס (להלן "המחלקה") היא קופסה שחורה שעושה משהו. (לדוגמה המחלקה Random מחזירה מספר רנדומלי. מבחינתך זה לא משנה איך).
בכדי לממש מחלקה שתעשה פעולה כלשהי, לעתים יש צורך בשימוש במשתנים מסויימים. במקרה של הדוגמה שהבאת מדובר על private _thickness. סביר להניח שלא תרצה שהמתכנת שמשתמש במחלקה יוכל לגעת ב - thickness בצורה ישירה, מכיוון שהוא לא יודע איך המחלקה עובדת מאחורי הקלעים, ולכן זה עלול לגרום לתוצאות לא רצויות.
בכדי לחשוף את ה - thickness למפתח (נניח שאתה מעוניין לתת לו לראות מה הערך אך לא לשנות אותו), היה נהוג להשתמש במתודות שנקראות get_Thickness, ובכדי לקבוע את הערך ב - set_Tickness.
ה - set יכול לשמש גם לבדיקות (לדוגמה ה - thickness חייב להיות ערך חיובי, לכן לא תרצה שהמשתמש יוכל לגשת ל - thickness ולשים בו ערך שלילי). הפתרון לזה היה נראה כך (בלי Properties):
internal sealed class MyClass
{
private float _thickness;
public float get_Thickness()
{
return _thickness;
}
public void set_Thickness(float value)
{
if (value <= 0)
throw new InvalidArgumentException("Thickness must be
greater than 0!!!!11");
_thickness = value;
}
}
מיקרוסופט החליטו לתת פתרון למצב הזה (הקוד הזה מאוד מאוד נפוץ בתכנות OOPי), והציגו את ה - Properties,
הקוד עם Properties יראה כך:
internal sealed class MyClass
{
private float _thickness;
public float Thickness
{
get
{
return _thickness;
}
set
{
if (value <= 0)
throw new InvalidArgumentException("Thickness must be
greater than 0!!!!11");
_thickness = value;
}
}
}
ל -get ול - set האלו קוראים Properties, (גם getter ו - setter)
השימוש במחלקה יראה כך (בלי ועם Properties):
// Sample code without properties
MyClass mc = new MyClass();
mc.set_Tickness(1.0);
Console.WriteLine("{0}", mc.get_Tickness());
// Sample code with properties:
MyClass mc = new MyClass();
mc.Thickness = 1.0;
Console.WriteLine("{0}", mc.Thickness);
בשורה תחתונה מדובר על אותה פונקציונליות, רק הקוד נראה יותר אסתטי, ודורש פחות כתיבה עם properties (ה - properties מתורגמים בסופו של דבר לפונקציות get_xxx ו - set_xxx דבר שה - CLR דואגת לו).
דרך אגב Martin Fowler ו - Jeffrey Richter כתבו את דעתם והם לא ממש בעד העניין. מעניין לקרוא את דעתם.
More Posts
Next page »