מפתח שחרר אינדקס חינמי וניתן לחיפוש המפרט כל נמל ימי וכל שדה תעופה על פני כדור הארץ — 3,804 נמלים ו-9,640 שדות תעופה — ללא צורך בהרשמה או בתשלום. האתר, theportindex.online, מאפשר למשתמשים לדפדף בנתונים או להוריד את מערך הנתונים המלא בפורמט CSV או JSON.
למה היה צורך באינדקס
היוצר ביקש למצוא רשימה נקייה ומעודכנת של הנמלים הימיים בעולם ונתקל במחסום: רוב ההצעות המסחריות נמצאות מאחורי חומות תשלום (paywalls), והרשימות הזמינות לציבור הן לעיתים קרובות מיושנות בשנים. הסתמכות על נתונים חסרים או מיושנים מאלצת אנליסטים לבזבז שעות על ניקוי גיליונות אלקטרוניים, עלות שמצטברת לאורך כל התעשייה. על ידי איסוף של שלושה מקורות ציבוריים — אינדקס נמלים של ממשלת ארה"ב, ספריית קודי מיקום בינלאומית ומאגר שדות תעופה מבוסס קהילה (crowdsourced) — המפתח אסף מקור רפרנס יחיד ומאוחד שכל אחד יכול להשתמש בו באופן מיידי.
מקורות הנתונים שמאחורי הקלעים
- NGA World Port Index – קובץ של ממשלת ארה"ב המספק פרטים בסיסיים עבור כל נמל ימי מוכר.
- UN/LOCODE – מערכת קודי המיקום של האומות המאוחדות, המוסיפה מזהים סטנדרטיים לנמלים ולשדות תעופה.
- OurAirports – אוסף מידע על שדות תעופה המתוחזק על ידי הקהילה, כולל אורכי מסלולי נחיתה וקואורדינטות.
כל מקור מציע חלק אחר של התמונה, אך אף אחד מהם לבדו אינו מספק קטלוג מוכן לשימוש וניתן לחיפוש. מיזוגם דרש יותר מסתם העתקה והדבקה; המפתח נאלץ לפתור חוסר עקביות, רשומות כפולות ושדות חסרים.
ניקוי הנתונים: שלושה לקחים שהושגו במאמץ רב
- ירידות שורה מוטמעות שוברות מנתחים (parsers) פשוטים – קבצי CSV המכילים ירידות שורה בתוך שדות מצוטטים אינם יכולים להתפצל באמצעות פקודת
split on newlineבסיסית. מנתח CSV תקין הוא חיוני כדי לשמור על השורות שלמות. - ערכי קיצון מסתירים טעויות – חלק מטרמינלי הנפט צוינו בעומקים של 900 מטרים, נתון השייך למצופים ולא לנמלים. סינון מספרים לא סבירים היה נחוץ כדי לשמור על אמינות הדירוגים המבוססים על עומק.
- אפסים הם לעיתים קרובות "ממלאי מקום" (placeholders) – עומק שמתועד כ-0 בדרך כלל אומר שהמדידה אינה ידועה, ולא שהמים שטוחים. התייחסות לאפס כאל נתון חסר שומרת על שלמות כל ניתוח התלוי בעומק.
הוספת ערך מעבר למספרים גולמיים
האינדקס עושה יותר מרק רשימת קואורדינטות. עבור נמלים, הוא מתרגם עומק לסוגי כלי השיט שיכולים לעגון בבטחה, ובכך הופך מדד בודד לכלי עזר פרקטי לקבלת החלטות. עבור שדות תעופה, אורך מסלול הנחיתה ממופה לסוגי המטוסים שיכולים לפעול שם, מה שמעניק לטייסים ולמתכננים הערכה מהירה של היכולות.
רשת מרחבית (spatial grid) מקשרת כל נמל לשדות התעופה הקרובים אליו ולהיפך, מה שהופך את האתר לכלי לחקירה. משתמשים יכולים לגלות, למשל, אילו שדות תעופה נמצאים בנסיעה קצרה מנמל מסוים — תכונה שימושית לתכנון לוגיסטיקה רב-מודלית (multimodal).
בניית מנוע אתר סטטי בקנה מידה גדול
כל הצד של המשתמש (front end) רץ על Next.js עם יצירה סטטית (static generation). במהלך תהליך הבנייה, כ-14,000 דפים — אחד לכל נמל ושדה תעופה — מרונדרים מראש. מכיוון שאין בסיס נתונים או לוגיקה בצד השרת, האתר אינו כרוך בעלויות מחשוב שוטפות; הוא חי על רשת הפצת תוכן (CDN) המגישה דפים באופן מיידי ברחבי העולם.
מלכודות SEO והפתרון לבעיית "תוכן דליל"
העלאת אלפי דפים מבוססי תבנית עלולה לעורר חשד אצל מנועי חיפוש, שעלולים לסווג את האתר כ"תוכן דליל" (thin content) ולהטיל עליו סנקציות בדירוג. המפתח נתקל בבעיה זו כאשר בקשת AdSense נדחתה. הפתרון היה להשאיר את כל קבוצת הדפים זמינים למבקרים, אך להוסיף הנחיית noindex לכל הדפים פרט ל-400 הדפים האיכותיים ביותר בכל קטגוריה. זה אומר לסורקים (crawlers) שרק הדפים בעלי הערך הרב ביותר צריכים להופיע בתוצאות החיפוש, מה ששומר על האמינות תוך הצגת מערך הנתונים המלא.
מי מרוויח, ומהן המגבלות
- חברות לוגיסטיקה יכולות לאמת במהירות האם אוניית מטען מתאימה למגבלות העומק של נמל מבלי לחפור במספר קבצי PDF.
- מתכנני תעופה מקבלים גישה מיידית למיפוי מסלולי נחיתה למטוסים, דבר שימושי למחקרי היתכנות של מסלולים.
- מפתחים וחוקרים מקבלים קובץ נתונים נקי וניתן לקריאה על ידי מכונה שניתן לייבא לכלים מותאמים אישית.
מה הלאה עבור הפרויקט
היוצר מבקש מהקהילה משוב על תכונות נוספות.
שורה תחתונה
באמצעות התמודדות עם כאבי הראש של ניקוי נתונים, הוספת שכבות הסקה ועקיפת עלויות שרת באמצעות יצירה סטטית, המפתח מראה שארכיטקטורה רזה יכולה לספק כלי שימושי ברמה עולמית — אם אתם מוכנים לקבל עדכונים תקופתיים ולעקוב אחר הנחיות מנועי החיפוש.
