2013-03-19

אבני הבניין של האינטרנט: URL


ה URL הוא אולי החלק הכי מוכר באינטרנט, כל דודה יודעת במה מודבר. מדוע בחרתי להקדיש לו פוסט בבלוג מקצועי?

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

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

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

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


פוסט זה הוא חלק מהסדרה: אבני הבניין של האינטרנט.







מבנה ה Universal Resource Locator

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

להלן מבנה ה URL הרשמי:

(1) סכמה
לרוב זהו שם הפרוטוקול כגון http או https[א], או אפילו ftp, git, gg או אחד מני רבים אחרים.
הסכמה יכולה לכלול Psuedo-Protocol שאלו בעצם שמות שנשמרו ע"י הדפדפן בכדי לגשת לפונקציונליות פנימית מבלי לבצע קריאת HTTP. לדוגמה:
  • about:blank טוען דף HTML ריק. משמש לבדיקות ולאיתור זליגות זיכרון ע"י מתכנתי ג'אווהסקריפט. רשימת פקודות about בדפדפנים השונים.
  • :javascript - בכדי להריץ פקודת ג'אווהסקריפט
  • :data - בכדי לקודד מסמך (קצר) inline בתוך ה URL כגון:
data:text/plain, hello%20world!


השימוש העקרי של סכמה זו היא הטמעה של תמונות קטנות בתוך המסמך בכדי לחסוך roundtrips לשרת.

(2) //
המבטאים שמדובר ב URL בעל חלק היררכי.
למשל: mailto:name@example.com?a=b הוא URL תקני ללא חלק היררכי.

(3) פרטי החיבור
משמש לפרוטוקולים ספציפיים כגון ftp או Https.

(4) כתובת
הכתובת יכולה להיות מתוארת באחת מ 3 סכמות:

Hostname
כתובת ה hostname היא כתובת טקסטואלית שמשמשת כ alias ל IP Address. כתובות IP הן דינמיות ועשויות להשתנות לאורך הזמן. תהליך ההפיכה של הכתובת הטקסטואלית (hostname) לכתובת IP היא תהליך שנקרא DNS Lookup. שרת ה (Domain Name Servers (DNS שאליו פנינו כעת יקרא לשורה של DNS אחרים בכדי ללמוד על הכתובות, כל שרת DNS אחד בתורו יודע לפרש חלק מהכתובת.
לדוגמה, עבור הכתובת http://ynet.co.il תחילה קוראים לשרת ה ROOT כדי ללמוד על כתובת ה IP של שרת ה "il" (מפרשים את כתובת ה hostname מהסוף להתחלה). בשלב הבא תהיה פנייה ל DNS של "il" וללמוד ממנו את כתובת ה IP של שרת ה "co" ורק אז מקבלים את הכתובת ה IP של השרת של YNET בכבודו ובעצמו. כמובן ששרתי DNS שומרים cache, כך שסביר ששמות נפוצים יחזרו מה cache ולא יהיה צורך לפנות לשרתי DNS אחרים.

אתר יכול להוסיף לעצמו תחיליות ל hostname לצורך חלוקה פנימית. לדוגמה, לאחר שהדומיין ynet.co.il נמצא, ynet יכולים להפנות ל"תתי אתרים / אפליקציה" שלהם בשם mail.ynet.co.il או en.ynet.co.il.

התחילית www היא תחילית לכל דבר ממש כמו mail או en שכל שרת יכול לבחור אם להשתמש בה או לא. www הוא קיצור של world-wide-web ובשנות ה-90 זו הייתה קונבנציה מאוד מקובלת. אם אתם נגשים לאתר ללא תחילית www הוא לרוב פשוט יפנה אתכם לכתובת האתר עם התחילית. או שלא.
יש דיון ארוך שנים העוסק בשאלה האם נכון להמשיך בקונבנציה דיון1 דיון2, ללא שום מסקנה ברורה באופק.

כתובת IPv4
כתובת ה IP שמוזנת ידנית ע"י המשתמש, כך שניתן לדלג על ה DNS Lookup (בהנחה שכתובת ה IP לא השתנתה).
כתובת ה IPv4 מורכבת בעיקרה מ4 octets של 0-255, כגון 10.3.0.163. URL הכולל כתובת IPv4 יכולה להראות כך: http://10.3.0.163/yo#hey.

כתובת IPv6
פרוטוקול IP גרסה 6 נוצר בכדי להתמודד עם המחסור שנוצר בכתובות ה IPv4 הזמינות. בערך לפני כחצי שנה היו אמורות להיגמר כל כתובת ה IPv4 בעולם וכדי למנוע זאת היה מעבר מסיבי לכתובות ארוכות יותר שיספיקו לעוד מספר רב של שנים.
כתובת IPv6 מכילה 8 קבוצות של מספרים hexdecimal ארבע-ספרתיים כגון 2001:0db8:85a3:0000:0000:8a2e:0370:7334. על מנת לחסוך באורך הכתובת ניתן לכתוב את אותה הכתובת כ 2001:db8:85a3:0:0:8a2e:370:7334 או אפילו כ 2001:db8:85a3::8a2e:370:7334.

לכתובות ה IPv6 יש עוד מספר חוקים שונים ומשונים. ניתן לקרוא עליהם כאן.

(5) Port
מספר בין 1-65536. הטווח 0-1023 שמור לרוב עבור מערכת ההפעלה ואין להשתמש בו כשאתם פותחים server socket. אם לא הוקלד ערך ב http - הערך יקבע על 80, וב https - יקבע על 443. כאשר יש שירות שנענה גם ל http וגם ל https, מקובל שמספרי הפורט יהיו עוקבים, למשל 5000 ו 5001.

(6) רשימה היררכית של Resources.
רוב הדפדפנים יקבלו גם "\" בתור ה Separator.
סטייה מהתקן על מנת "להקל" על המשתמש  - היא התנהגות נפוצה בקרב דפדפנים.

(7) Query String
אנשים נוטים להניח שהפורמט של Query Sting נדרש להיות key1=value1&key2=value2 – אבל זו סתם קונבנציה שהשתרשה במשך השנים והיא איננה מחייבת. לדוגמה: מותר להשתמש ב ? בתוך ה Query String בכדי לבצע separation בין ערכים.
פעם כתבתי קוד שהניח שיש רק ? אחד ב URL - וכך נכשל. שיחה קצרה עם המפתח שכתב את הקוד שגרם לכשלון למדה אותי על החוקיות של מבנה ה Query String.

בפועל Query String הוא BLOB ש:
  • מיוצג בתווי ASCII. אם אתם רוצים באמת להעביר מידע בינארי (מותר) עליכם להשתמש ב Encoding שנקרא Base64.
  • נתחם ע"י סימן ה # הראשון שמופיע.
Query String משמש לרוב על מנת להעביר פרמטרים לשרת. Query String הוא חלק לכל דבר ועניין מה URL כך ששינוי בתו יחיד בתוך ה Query String משמעו - URL אחר.

(8) Fragment ID
בניגוד ל Query String שמיועד לצד-השרת, ה FID מיועד לצריכה ע"י קוד צד-לקוח. קונבנציה מקובלת היא שה Fragment מתאר מיקום במסמך. לדוגמה: אם תבצעו inspect למסמך ותמצאו id של אלמנט ב DOM, תוכלו להוסיף אותו ל URL כ FID כך שמעתה הדפדפן יציג את הדף כאשר בראש המסך הוא יציג את האלמנט עם ה ID שצוין.

באפליקציות מודרניות משתמשים ב FID על מנת לתאר את ה State של האפליקציה, לדוגמה: איזה טאב נבחר ואיזה Panels הם פתוחים. אין מניעה לקודד state מורכב כ BLOB על ה FID. שינוי ה FID-בלבד ב URL לא יגרום לטעינה מחודשת של הדף אלא יזרוק event מסוג hashChange. ה FID לא אמור להישלח לשרת.

ע"פ התקן, אגב, לא אמורה להיות מגבלה על אורך ה URL אולם IE8 ו IE9 מוגבלים ל 2048 תווים, ודפדפנים אחרים מתירים פי 2 או 3 מכך (בזה אני מעודכן כמה שנים אחורה, אולי דברים השתנו...).


Relative URL

עוד נקודה אחרונה ורלוונטית היא היכולת להתייחס ל "URL יחסי", כלומר URL יחסית ל URL של ה Document (דף ה HTML) הנוכחי. URL יחסי אמור לעבוד מכל הבחינות בדיוק כמו URL מלא.

נניח שאני כרגע בכתובת
http://amazon.com/product/ref=fs_cl/index.html?w=1

URL יחסי שאינו מתחיל ב "/", למשל "gogo/a/b" שקול ל:

http://amazon.com/product/ref=fs_cl/gogo/a/b 


URL יחסי שמתחיל ב "/" למשל "gogo/a/b/" שקול ל:

http://amazon.com/gogo/a/b


כללי ה path הבסיסיים של unix תקפים כך שה URL היחסי "a/b/.." שקול ל

http://amazon.com/product/a/b


בהגדרה, URL יחסי הוא כזה שלא מתחיל בפרוטוקול (למשל http) וגם לא מכיל את האינדיקטור ל URL היררכי "//".

URL יחסי תקני הוא "www.walla.co.il//" - שמצביע לאתר וואלה עם הפרוטוקול שכרגע בשימוש בדפדפן (למשל ftp).
דוגמה אחרת היא ה URL היחסי "details#" - שהוא URL יחסי לכתובת הדפדפן הנוכחית עם FID בשם details. שימוש ב details# לא תגרום לדף להיטען מחדש (מכיוון שה FID הוא חלק ה URL הרלוונטי לצד-הלקוח בלבד).

אם תקלידו בדפדפן מודרני URL יחסי בכתובת, רוב הפעמים הוא יפנה אתכם לחיפוש (גוגל). URL יחסיים כן יעבדו אם יהיו לינק בתוך ה HTML markup.


שיהיה בהצלחה!



---

[א] Https הוא Http שמוצפן על גבי פרוטוקול שנקרא SSL (או בגרסה היותר חדשה: TLS). השימוש ב Http יעשה באתרים שמכילים מידע פרטי או מסווג (למשל קופת חולים או בנק). במערכות ארגוניות נהוג להשתמש בעיקר ב https משיקולי אבטחה.

פוסט רלוונטי (כולל כמה נקודות על Encoding של URL): http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding

2013-03-13

מה חדש באופיס 2013?

כארכיטקט תוכנה, יוצא לי לעבוד עם חבילת אופיס דיי הרבה. יותר מאשר עם IDE. שימוש באופיס מתקשר לעתים לניתוק מהפרטים הטכנים, אבל בפועל אפשר לעשות הרבה עבודה טכנולוגית בוורד, PowerPoint ו Visio.

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


כללי

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



SkyDrive הוא שירות אכסון הקבצים בענן של מייקרוסופט, ממש כמו DropBox או גוגל דרייב. אני מחבב מאוד את השירות והפכתי אותו כבר מזמן לשירות אכסון הקבצים בענן המרכזי שאני משתמש בו.
  • כרגע SkyDrive מספק 7GB אחסון בחינם, שזה יותר מכל מתחרה אחר - ככל הידוע לי. 
  • האפליקציה של SkyDrive למובייל ולדפדפן מציגה היטב קובצי אופיס מכל הסוגים - שזה ייתרון לא קטן. 
  • האפליקציה ל iOS, לפחות ע"פ Battery Doctor, צורכת כמעט חצי מתצרוכת החשמל של Google Drive: עוד בונוס קטן.



Touch Mode
מכיוון שמייקרוסופט מכוונת כיום לטאבלטים ומחשבים ניידים עם מסכי-מגע, חבילת אופיס 2013 עברה התאמה לטאצ'. בשימוש בעכבר - נוחים יותר ריווחים קטנים מכיוון שהעכבר הוא מדוייק ואנו רוצים לגלול אותו כמה שפחות. מצד שני לאצבע אנושית עדיפים ריווחים גדולים יותר כדי לא ללחוץ בטעות על כפתור אחר מזה שהתכוונו. המרחק הגדול יותר שיש לעבור בין הכפתורים אינו מפריע, מכיוון שהאצבע נעה מהר ללא מאמץ.

באופיס 2013 ניתן לעבור בין "מצב עכבר" (ריווחים קטנים) ו"מצב טאצ'" (ריווחים מוגדלים):



הרעיון של ריווח התפריטים עבור טאצ' איננו ייחודי למייקרוסופט. הנה גרסת הבטא של דפדפן כרום 26 שחשפה ריווח המתאים לטאצ'. ככל שידוע לי הגרסה המרווחת תהיה הברירה היחידה (כלומר, על חשבון המשתמשים בעכבר):


פ'יצרים שהוסרו
לחבילת אופיס 2013 יש מספר תכונות שהוסרו, הבולטות שבהן הן:
  • Clip Art Organazier 
  • SharePoint Workspace (לשעבר Groove) - אפליקציה לשיתוף קבצים.
  • Office Picture Manager (אפליקציה עצמאית לעריכת תמונות) 
ככל הנראה רוב המשתמשים לא יבחינו בחסרונן.


אופיס RT
עבור חלונות 8 RT (המבוססת מעבדי ARM) יש גרסה מצומצמת של אופיס הכוללת: וורד, אקסל, פאוורפוינט ו OneNote (בולט בהעדרו: אאוטלוק). אופיס 2013 RT מסופקת ביחד עם מערכת ההפעלה Windows 8 RT, כלומר - כלולה במחיר. על פניה חבילת אופיס RT נראית אותו הדבר, אך בפועל יש מספר פיצ'רים קטנים שלא זמינים בה. ע"פ מה שהבנתי, לאופיס RT לא תהיה אפשרות להוסיף Plug-Ins.


וורד 

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


זוכרים את הבלונים הצבעונים של הערות כאשר אתם עושים Review למסמך?
בוורד 2013 ניתן להגיב על ההערות במקום לכתוב הערות אחת על השנייה:


נחמד מאוד!

בנוסף יש מצב Review שנקרא "Simple Markup" (במקום ה "Final: show Markup") בו במקום לראות את כל תיקוני העריכה והערות בתוך המסמך - רואים פשוט סימון קטן אדום בשוליים לכל פסקה שהיה בה שינוי. לחיצה קטנה על הסימן האדום מחליפה מצבים עבור הפסקה: הצגת כל השינויים או הצגת המצב הסופי (מצב ברירת-מחדל). יכולת זו שימושית למדי לתהליכי Review של מסמכים!




וורד ו PowerPoint

הנה כמה תכונות המשותפות גם לוורד וגם לפאוורפוינט.

תוך כדי שאנו גוררים אובייקטים (תיבת טקסט, תמונה כו') יציעו לנו לעמד אותם לאובייקטים אחרים במסמך, או לשוליים ע"י הצוות קווים מנחים, מה שנקרא alignment guides. כפי שאתם זוכרים יכולת זו קיימת עוד באופיס 2010 (אולי אפילו 2007?), אבל בגרסה 2013 היא השתפרה מאוד ומזכירה קצת את הרמה של הפיצ'ר ב Visual Studio כאשר מסדרים פקדים ב WPF או Windows Forms. מאוד אפקטיבי.



יכולת קטנה נחמדה נוספת היא שבעת פתיחת מסמך שכבר פתחנו בעבר, מופיע popup בשוליים בשם "Welcome Back" המציע לנו בלחיצת כפתור לקפוץ לדף האחרון שהיה פתוח במסמך. שמירת המיקום נעשית איפשהו במקום מרכזי ולא מבצעת שמירה או שינוי במסמך. נחמד.


Visio

אני צרכן כבד למדי של Visio בצורך יצירת תרשימי "Light UML" ו Marchitecture.
אני כ"כ רגיל לעבוד איתו שלפעמם אני משתמש בו, תוך כדי ישיבה, בכדי לסכם את תוכנה בצורת תרשים וטקסט. מכיוון שאני לא משתמש ב Templates המובנים (הם מסורבלים מדי לשימוש. יש לי סט צורות משלי) -  מאז גרסה 2003 לא היה שום שיפור שהיה משמעותי עבורי.
Visio 2010 (משמאל) מול 2013 (מימין). שימו לב לאיכות הצל והרקע ההדרגתי.
ממש שמחתי לראות שב Visio 2013, סופסופ, הטמיעו את מנוע הרינדור התלת-מימדי של Office 2007 לתוך Visio. התוצאות -  ניכרות.
Visio 2013 הוסיפה גם לצורות מרקם Gradient כתכונה טבעית, כך ששינוי הרקע שומר על ה Gradient. יש גם Themes משופרים ועוד כמה צעצועים ל"עיצוב אוטומטי" - אבל לא נראה לי שהייתי באמת משתמש בהם.

במשך השנים נוכחתי שתרשים יפה מסייע לשכנע אנשים לא פחות יותר מתרשים מדוייק או בעל UML-תקני יותר. היכולת "ליפיף" את התרשימים באמת הייתה חסרה לי, במיוחד עבור תרשימי "Markitechture". עבור השיפורים בתוכנת Visio - אני מחכה לגרסת 2013 בציפיה.


אאוטלוק

למרות שאני עובד בחברה גדולה בה יש מערכת סליחה: מספר מערכות עם פרטי העובדים, מערכות אלו לרוב אינן מעודכנות באופן תדיר. בנוסף, לעתים עלי לבצע מספר רב של לחיצות על מנת להגיע לפרטי איש-הקשר אשר בפרטיו אני מעוניין. כשמישהו שאני לא מכיר כותב לי מייל ואני מנסה להבין מי הוא, גיליתי שהדרך הכי קצרה היא לחפש אותו ב LinkedIn בכדי להבין במי מדובר.
ב Outlook 2013 הוסיפו פי'צר שנראה מאוד שימושי: חיבוריות לרשתות חברתיות (לינק-אין, פייסבוק ועוד) כך שאקבל בתוך האאוטלוק תקציר על האדם מהרשתיות החברתיות. ניתן גם לראות גם את ה Activities אחרונים ברשתות - דבר שיכול להיות שימושי עבור אנשים שאני בקשר עבודה קרוב איתם (אני כנראה צריך להיות חבר שלהם ברשתות החברתיות על מנת לראות מידע זה).
לא יכולתי לנסות את הפ'יצר מול המיילים של העבודה (ביצעתי התקנה בבית) בכדי להבין עד כמה יכולת זו עובדת טוב בפועל - אבל זה משהו שבהחלט היה יכול להיות שימושי עבורי.



אקסל

לאקסל יש פיצ'ר מגניב חדש: אלגוריתם השלמה אוטומטית משופר שמזהה תבניות מתוכחמות יותר.
בדוגמה למטה: אקסל מזהה שעמודה D (שם מלא) מורכבת מעמודה A (שם משפחה) ו B (שם פרטי). כשערך שני מתאים לתבנית מוקלד לעמודה D - אקסל מציע להחיל את התבנית (בלחיצה על Enter) על כל הערכים בטבלה.


עד כמה משוכללות התבניות שאקסל מזהה? האם זה כולל גם Formatting משוכלל יותר? - אינני יודע לענות. בכל מקרה פיצ'ר זה יכול לחסוך עבודת copy-paste מייגעת במקרים מסוימים. נחמד.


סיכום

שאלת השאלות: האם שווה לשלם x דולרים עבור עדכון גרסת אופיס? יש לי הרגשה שגרסה 2013, לפחות עבורי, משפרת יותר מגרסאות קודמות.
בחישוב שעות נטו, ייתכן מאוד ושדרוג גרסת אופיס אינו משתלם, אך פסיכולוגית - אולי כן. רק כדי שהעובדים בארגון ירגישו שמשקיעים בהם ומחדשים להם את סביבת העבודה. אני מדבר על עובדים שאוהבים שינויים בסביבת העבודה הממוחשבת שלהם - כגון עובדי הייטק, למשל.


עדכון (6/6/2013): לאחר ניסיון ממושך יותר באופיס 2013 יש לי שתי תלונות:

  • קביעת SkyDrive כ Default הייתה נוחה לי בזמן נתון, כי אני באמת מנהל את רוב המסמכים שם. כאשר רציתי לעבוד עם דיסק מקומי בעיקר - זה נהיה דיי מטרד. בנוסף: כששומרים מסמך ב SkyDrive אופיס מחכה שהטעינה ל SkyDrive תסתיים. אני מעדיף לשמור מהר ושהסנכרון ייעשה ברקע.
  • משהו ב selections של Visio 2013 דיי מרגיז: הוא לא מאפשר למתוח קו (או רץ) לתוך צורה - רק לתוך ההיקף שלה. לעתים רבות אני יוצר תרשימים "free style" ו"התיקון" הזה מאוד מפריע. עד כדי לחזור ל Visio 2007.