August 2007 - Posts
אתמול, פגשתי את ליאור ודיברתי איתו. במהלך השיחה, אמרתי לו שיש לי Windows Server 2008 מותקן
על מכונה וירטואלית. כשחזרתי הביתה, אמרתי לעצמי, למה, לעזאזל, מכונה וירטואלית? הרי שם החוויה הרבה פחות נוחה. ולכן, לקחתי את השטח הפנוי בHD (פירמטתי פה ושם) והתקנתי Windows Server 2008 code name "Longhorn" עליו.
ההתקנה, של Standard Edition ממש מהירה. התקנתי עם הGUI ולא רק את ה Core. ההתקנה לקחה פחות מחצי שעה. באיזור ה 20 דקות.
לאחר ההתקנה פתחתי את ה Server Manager שעבר מקצה שיפורים והרבה יותר שימושי מהמקבילה מגרסאות קודמות.. השרת, מגיע עם אפשרות להתקין הרבה תוכנות נלוות, כולל כאלה שלא הגיעו built in בעבר
(למשל Windows Share Point Services, גם בעברית) במהירות, מתוך ה Server Manager ואפשרות להתקין אוטומטית Roles עבורם.
במהלך ההתקנה, הוא מזהה תלויות אפשריות, שואל האם להתקין ואיך לנהוג לגבי התלויות וכו'.
התאימות לאחור גם מאד מודגשת, בעיקר באיזורים שבהם נעשו שינויים דרסטיים, למשל בIIS. כשאתה בוחר מה להתקין, הוא מיידע אותך שאם לא התקנת רכיבים מסויימים תאבד חלק מהתאימות אחורה (בעיקר לעבודה מול הIIS עם WMI וכדומה) ומציע
לך להתקין אותם אם יש לך צורך.
אתם יכולים לראות את מסך סיכום ההתקנה משמאל ותהליך ההתקנה למטה. לחיצה על כל התמונות פה תפתח אותן בגודלן המלא.

המערכת, כשהיא עולה לראשונה, היא עולה בתור חשבון ה Administrator הראשי, כלומר, אפילו ללא הגבלות ה User Account Control. צעד חיובי מאד ואף נחוץ מאד מצד מיקרוסופט. תחשבו איזה מעצבן זה מצד איש סיסטם, שנחשב למומחה בתחום, כשפתאום תוכנת השרת שלו לא סומכת עליו - "אתה בטוח? 100%? לא תתחרט? שלא תגיד שלא אמרתי לך! נו, טוב, אם אתה כל כך בטוח בעצמך נעשה את זה... אבל תבוא בתלונות רק לעצמך".

בפינת הגיחוך: תוך כדי כתיבת הפוסט הזה, רציתי לשנות משהו בהגדרות של תפריט ה start- כשנכנסתי למאפיינים, רואים בסקרין שוט שם את התפריט כפי שהוא נראה בויסטה עם ה"לוק" החדש, שלא קיים בגרסת השרת. אבל, זה עדיין מה שמופיע בסקרין שוט.
החלק הבא, יפורסם בקרוב, ובו אני אמשיך להראות לכם חלקים שונים מהמערכת.
שבת שלום.
אין לי מילים
מאירועי הפרקים הקודמים:
בפרק הקודם הסברתי שIIS 7, בניגוד לגרסאות הקודמו, בנוי בצורה מודולרית לחלוטין. היות שהוא נבנה מחדש, כמודולים סביב ה Core, אנחנו, המתכנתים המסכנים יכולים לעבוד איתו בצורה יותר נוחה.
אז לפני שניגש ונתחיל לכתוב handlers משלנו, בואו נתחיל מקטן, ונראה איך דרך קוד אנחנו יכולים לשלוט ממש בנוחות על הדברים הקיימים.
נעים להכיר, Microsoft.Web.Administration
תכירו את הניימספייס החדש, Microsoft.Web.Administration. זה זמן מעולה להוסיף אותו כרפרנס לפרוייקט שלכם. המיקון שלו הוא ב %windir%/system32/inetsrv ושמו Microsoft.Web.Administration.dll.
לאחר מכן, בואו נוסיף את שורת ה using:

Server Manager
האובייקט מולו נעבוד הכי הרבה עכשיו הוא ServerManager, שלמעשה, דרכו אנחנו יכולים לשלוט על כל מאפייני השרת.
כשאנחנו יוצרים מופע שלו, אנחנו מקבלים העתק של מצב השרת ברגע יצירת המופע. כל הפעולות שאנחנו מבצעים מול האובייקט הזה, לא נחשבות ולא מופעלות עד שאנחנו מאשרים את השינויים, עבודה א-סינכרונית.
בתור התחלה, הנה דוגמאת קוד קטנה:

אנחנו יוצרים מופע של ServerManager ועוברים בלולאה על כל האתרים ומדפיסים את המידע עליהם. לא ממש מסובך, אפילו די מובן מאליו. הנה דוגמא של תוצאת הריצה:

הייתם מאמינים שעד עכשיו לא היה ניתן לכתוב את הקוד הכ"כ פשוט הזה בצורה נוחה?
כמובן, שאף אחד לא מגביל אותנו רק לקריאת מידע. אנחנו יכולים להוסיף גם. הנה דוגמא לקוד שמקבל מהמשתמש מידע, ועל סמך זה יוצר Website חדש:
את המצב לפני הרצת האפליקציה, אתם יכולים לראות בחלון ה command line למעלה - זוג אתרים בלבד.
עכשיו, כשנריץ את האפליקציה, יוגדרו כל הנתונים, וכשיורץ CommitChanges הם יסונכרנו מול הIIS עצמו. אם נעשה שינוי אחריו, ולא נעשה לו commit, השינוי לא יתרחש.
הפעלתי את האפליקציה, הזנתי את הנתונים, ובאמת התווסף אתר לIIS:

בדיוק לפי הנתונים שהגדרתי. מובן, שבצורה דומה ניתן להוסיף Application Pools, לשנות הגדרות יותר מורכבות וכו'.
למעשה, Server Manger הוא סוג של עידן חדש, שבו ניתן לנהל בקלות את הIIS וממחיש את השינוי המהותי שחל.
בהצלחה.
בפרק הבא:
בפרק הבא נכתוב handler חדש ונגדיר אותו בIIS.
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Windows Server 2008 אוטוטו כאן. רגע לפני שהוא מגיע, זה הזמן הלכיר את החידושים שהוא מביא איתו. מה הוא מחדש לנו, ואיך זה עוזר לנו, כמפתחים.
הדבר הטריוויאלי ביותר להתחיל איתו, הוא ה IIS, או בשמו המלא - Internet Information Services 7.0.
IIS7, היא הגרסא הראשונה זה שנים רבות, שמראה לנו חידוש מהותי באופן העבודה מול הIIS, ועוזרת לנו כמפתחים.
כדי להסביר מה חדש, צריך לדעת מה היה עד כה.
תכירו. מצד שמאל יש את מודל עיבוד הנתונים של IIS6. המודל הה הוא דוגמא מצויינת לקופסא סגורה. המקום היחיד שאנחנו יכולים להתממשק בו אל המודל הזה, ולהגיד לו לחרוג קצת מהדרך שבה הוא תוכנת עלבוד, זה באמצעות כתיבת ISAPI Filter - תענוג מפוקפק, שפעמים רבות אפילו עדיף להימנע ממנו ע"י ביצוע מעקפים כאלה ואחרים.
ASP, ASP.NET,PHP - כל מה שקשור לצורה שבה הIIS מעבד קריאות ומגיב להם מבוצע באמצעות ISAPI Filters.
חוץ מהקושי בפיתוח, המנגנון הזה לא יעיל כלל. כל המנגנון בנוי על זה שכל הנתונים חייבים להיות טעונים בשביל לאפשר לך לבחור במה אתה רוצה להשתמש. כלומר, נניח שאתם לא מעוניינים בסוג אוטנטיקציה מסויים, אתם יכולים להסיר את הסימון שלו בהגדרות הIIS - אבל הקוד הרלוונטי עדיין נטען, עדיין עובד, אבל פשוט לא מבצע כלום.
Modules ו- Handlers
שני מושגים שנשארו ושודרגו, הם Modules ו- Handlers. למעשה, החידוש הוא שכיום ניתן לכתוב Modules ו Handlers ב Managed Code, ב .net בצורה נוחה, ולא תוך הסתבכות נוספת עם ISAPI.
באופן פשוט מאד, Modules אחראים על טיפול בכל הבקשות, פונקציונאליות שמסופקת לכל הבקשות - מודולים של אוטנטיקציה, קשינג וכדומה. Handlers מטפלים רק בבקשות לסיומת מסויימת (עבור טיפול בסיומת ASPX - בצע כך ועבור הסיומת JPG בצע כך...). כיום, ניתן לכתוב את שני אלה בתור Managed Code.
אבל, כמו שבויסטה ובגרסאות החדשות של התוכנות של מיקרוסופט, גם הרכיבים הפנימיים של התוכנה הם הרחבות למעשה לאיזשהו Core בסיסי. כלומר, גם הרכיבים המוכרים לנו נכתבו מחדש בתור הרחבות ל Core הבסיסי של הIIS.
כל התפקודים של IIS6 חולקו לכ-40 מודולים בIIS7. כאשר מכל אחד מהם ניתן לרשת, לדרוס ולשנות.
גם ההוספה שלהם, פשוטה הרבה יותר. היות שIIS7 בנוי בצורה מודולרית, ניתן לשנות את הלוגיקה הקיימת שלו ולהרחיב את חלקיו השונים בקלות.
בIIS7, דרך אגב, אימצו בחום את המודל של קבצים בסגנון web.config להגדרות של השרת, וכיום, זה לא משמש רק להגדרות website, אלא כל הגדרות השרת נמצאות למעשה בקבצי XML מהסוג הזה.
בואו נתחיל לכתוב קוד!
בפרק הבא, שיתפרסם בע"ה מחר, נתחיל לכתוב קוד. אולם, לפני זה, כמה מילים על הפיתוח.
גרסאות Windows Vista השונות מכילות חלקים שונים של הIIS. את הפיתוח מומלץ לעשות מול שרת Server 2008 או מול Windows Vista Ultimate. לנוחותכם, הנה עיקרי ההבדלים בין הגרסאות השונות של הIIS 7 במערכות ההפעלה השונות:
| המודול | Vista Home Premium | Vista Ultimate | Server 2008 |
| ASP.NET | + | + | + |
| ASP | + | + | + |
| CGI | + | + | + |
| ISAPI Extension/Filter | + | + | + |
| Server Side Include | + | + | + |
| BasicAuthentication | + | + | + |
| Windows/DigestAuthentication | - | + | + |
| Metabase | - | + | + |
| WMI | - | + | + |
| FTP | - | + | + |
זאת השוואה חלקית בלבד.
אז מה נכתוב פע הבאה? נתחיל מלהכיר את Microsoft.Web.Administration, נמשיך בכתיבת handlers, בהגדרה שלהם בIIS וביצירת GUI לניהול שלהם, מתוך הIIS.
גיליתי באג קטן ב Windows Vista - היה לי partition ששמו F. בכונן הזה, היה ב root קובץ autorun.inf שהגדיר את האייקון של הכונן לאיזשהו אייקון שהיה שם (באותו מקום שהיה הקובץ autorun, ב root של הכונן). כך זה נראה:
.
היום, קניתי HD נייד חדש, והעברתי את כל תוכן הכונן הזה אליו, לתוך תיקייה מסויימת. כעת, כונן F ריק. אין בו את הקובץ autorun.inf - ויותר מזה, אין שם גם את הקובץ של האייקון - אבל זה עדיין מופיע כך. עדיין מופיע האייקון בצד לשם הכונן. גם אחרי שסגרתי הכל והפעלתי את ה explorer.exe מחדש (למקרה שזה יושב ב cache או משהו כזה), ופתחתי שוב את Computer, זה עדיין מופיע.
באג קטן, קצת לא ברור - אבל לא משהו קריטי.
בשנים האחרונות, עם כניסת סקייפ לשוק, הבאזוורד Voice over IP תופס יותר ויותר נפח. מאות מיליוני אנשים משתמשים בסקייפ, שמיתגה ת עצמה כתוכנת הVOIP הפופולרית ביותר ודי הפכה את כל האחרות ללא רלוונטיות.
בין כל המשתמשים, יש רבים גם שמשתמשים בה כדי לקבל שיחות לתוך התוכנה ולהוציא שיחות, דרכה, החוצה - למספרי טלפון רגילים [שירותים בתשלום].
אני לא משתמש בסקייפ, אבל, בתקופה האחרונה יצא לי להיפגש די הרבה עם VOIP מצד המשתמש - הטלפונייה בחברה שבה אני עובד מבוססת על תוכנת VOIP.
בעבודה מהמשרדים, כשאתה נמצא קרוב לשרת VOIP (הוא איתך בLAN) ומהירות התקשורת איתו מאד גבוהה, איכות השיחה מעולה ונוחה, כמו טלפון רגיל - לא מרגישים הבדל. הבעייה עם כל שירותי ה-VOIP מתחילה כשאתה עובד עם חיבור סטנדרטי, לא נמצא עם שרת ה-VOIP ב LAN. חיבור סטנדרטי, שמהירות ה upload שלו לא משהו, שמדי פעם יש נתק, אפילו של זמן קצרצר וכו'.
ברובם המוחלט של רשתות ה- VOIP , כמעט כל ניתוק/פגיעה באיכות התקשורת, ולו הקטן ביותר, משפיע. הרשת מאד מאד רגישה לעניינים האלה, למרות, שבונים אותה בד"כ בצורה כזאת שהיא תוכל להתמודד עם ניתוקים רגעיים ובעיות תקשורת, עדיין אין עמידות מקסימלית.
והחיסרון הגדול ביותר, שבגללו VOIP זה דבר מגניב אמנם, אבל לא הייתי ממהר לסלק את מכשירי הטלפון בבית, היא העובדה שאתה לא יכול לסמוך עליו כל הזמן. נניח שיש עכשיו הפסקת חשמל, והטלפונייה שלך בבית מבוססת על התקשורת הקווית של 012, שעובדת באמצעות הVOIP - במקרה של הפסקת חשמל, הראוטר שלך לא פעיל, הטלפון לא מתפקד - ולך תתקשר להודיע ל 103 על הפסקת החשמל במידה ואין לך סלולרי על ידך.
מצד שני, כיום, כשכמעט כולם מצויידים בטלפון סלולרי, ואנחנו לא מחוייבים למכשיר הקווי - להרבה אנשים זה ישתלם כלכלית. מאחר שהשימוש בטלפונים קוויים מצטמצם, והרבה מחזיקים אותו למרות שאין להם באמת שימוש בו - להם, זה יכול להשתלם.

עוד לא מצאנו מזיקים. בינתיים.
היום, כחלק מהעבודה, כתבתי שאילתה SELECT ממש בסיסית. כחלק מהתנאי WHERE בשאילתה, עשיתי בדיקה אם שדה מסוג ntext שווה לאיזשהו משתנה. כשהרצתי את זה חטפתי SQL Exception שיידע אותי שאי אפשר להשוות ולמיין לפי שדות של image (הגיוני) ושל text ו ntext. לגבי המיון, זה איכשהו הגיוני עוד. אבל יש למישהו מושג לגגבי השוואה?
השוואה, נניח, ל nvarchar אפשרית. היות שמלכתחילה זה לא היה אמור להיות ntext, אז הסתדרתי. אבל, אם למישהו יש מושג בעניין, אשמח לדעת.
שחר.
אתמול, בכנס של Startupseeds.com הצטרפתי לחבורת המאושרים שיצא להם לנסות ולגעת במכשיר הכי נחשק בישראל (לא ברור למה) ששמו IPhone. בפינת הגאדג'טים המעולה שארגנו שכללה מחשוב לביש (משקפיים מגניבות שכשאתה שם אתה למעשה צופה במסך ענק ויכול לראות סרטים דרך נגן המדיה שלך [רק חבל שהן לא בדיוק עבדו]), היה גם IPhone. בת'כלס, הגליק הגדול במכשיר הזה הוא מסך המגע שלו. אחרי שעברו עליו הרבה אצבעות של כל משתמשי הכנס, היו כתמים די רבים במסך.
אבל, Apple ידעו לנצל בצורה מעולה את העובדה שמדובר במסך מגע. האפקטים שקשורים למסך מגע, למשל של התמקדות בחלקים מסויימים של מסמך, של גרירה ודפדוף ויזואלי לגמרי בעטיפות של אלבומים שונים כדי לבחור - פשוט מדהים. אגב אלבומים, הרמקול המובנה לא משהו בכל מה שקשור לצליל שהוא מפיק.
גם העובדה שכשמטים, בחלק מהמקומות, את המסך לרוחב, התצוגה משתנה והופכת לרוחבית יפה מאד.
את יכולת הדפדפן והתקשורת לא ממש היה ניתן לבחון כי לא הייתה תקשורת. אבל גם אם הייתה תקשורת, כשמדברים על דור 2.75 אי אפשר לצפות למהירות גלישה מטורפת. בזה, ה N95 של נוקיה אמור לנצל את האייפון ללא מאמץ.
אבל, מה זה חשוב שמדובר במכשיר שבארץ אין לו בכלל שימוש, שלפי הביקורות לא בדיוק ידידותי כלפי הבטרייה, עובד עם אינטרנט איטי, מסך מגע שצובר טביעת אצבע בקלות, חיוג וכתיבה לא נוחים במיוחד, כפתור יחיד שלא תמיד מגיב בצורה נורמלית ללחיצות עליו - המכשיר הזה הוא אחד מהנחשקים ביותר. לא בגלל היכולות שלו, אלא בגלל העיצוב שלו והשיווק המטורף של Apple והציפייה הרבה שעוררו.
אז כן, גם אני חבר במועדון האנשים שניסו את IPhone.