یک توسعه‌دهنده یک فهرست رایگان و قابل جستجو منتشر کرده است که شامل تمامی بنادر دریایی و فرودگاه‌های جهان — ۳,۸۰۴ بندر و ۹,۶۴۰ فرودگاه — است و برای استفاده از آن نیازی به ثبت‌نام یا پرداخت هزینه نیست. این سایت، theportindex.online، به کاربران اجازه می‌دهد داده‌ها را مرور کنند یا مجموعه داده کامل را در قالب CSV یا JSON دانلود کنند.

چرا به این فهرست نیاز بود

سازنده قصد داشت فهرستی تمیز و به‌روز از بنادر دریایی جهان پیدا کند، اما با مانعی روبرو شد: اکثر پیشنهادهای تجاری پشت دیوارهای پرداخت (paywalls) قرار دارند و فهرست‌های عمومی نیز اغلب سال‌ها قدیمی هستند. تکیه بر داده‌های ناقص یا قدیمی، تحلیلگران را مجبور می‌کند ساعت‌ها وقت خود را صرف پاک‌سازی جداول اکسل کنند؛ هزینه‌ای که در کل این صنعت بسیار سنگین است. توسعه‌دهنده با تجمیع سه منبع عمومی — یک فهرست بنادر دولت ایالات متحده، یک دایرکتوری کدهای مکان بین‌المللی و یک پایگاه داده فرودگاهی مبتنی بر مشارکت جمعی (crowdsourced) — یک مرجع واحد و یکپارچه ایجاد کرد که هر کسی می‌تواند فوراً از آن استفاده کند.

منابع داده در پشت صحنه

  • NGA World Port Index – مجموعه‌ای از دولت ایالات متحده که جزئیات اولیه را برای هر بندر دریایی شناخته‌شده ارائه می‌دهد.
  • UN/LOCODE – سیستم کدهای مکان سازمان ملل متحد که شناسه‌های استاندارد را برای بنادر و فرودگاه‌ها اضافه می‌کند.
  • OurAirports – مجموعه‌ای از اطلاعات فرودگاهی که توسط جامعه کاربری نگهداری می‌شود و شامل طول باند و مختصات است.

هر منبع بخش متفاوتی از تصویر را ارائه می‌دهد، اما هیچ‌کدام به تنهایی یک کاتالوگ آماده و قابل جستجو ارائه نمی‌دهند. ادغام آن‌ها فراتر از یک کپی-پیست ساده بود؛ توسعه‌دهنده مجبور شد ناهماهنگی‌ها، ورودی‌های تکراری و فیلدهای مفقود را برطرف کند.

پاک‌سازی داده‌ها: سه درس آموخته‌شده با سختی

  1. خط‌های جدید (newlines) جاسازی‌شده، تجزیه‌کننده‌های ساده را از کار می‌اندازند – فایل‌های CSV که حاوی شکست خط در داخل فیلدهای داخل کوتیشن هستند، نمی‌توانند با یک دستور ساده‌ی «شکست بر اساس خط جدید» تقسیم شوند. استفاده از یک CSV parser مناسب برای سالم نگه داشتن ردیف‌ها ضروری است.
  2. مقادیر پرت (Outliers) خطاها را پنهان می‌کنند – برخی پایانه‌های نفتی عمق ۹۰۰ متری را ثبت کرده بودند، رقمی که متعلق به بوی‌های مهار (mooring buoys) است، نه بنادر. فیلتر کردن اعداد غیرمنطقی برای معتبر نگه داشتن رتبه‌بندی‌های مبتنی بر عمق ضروری بود.
  3. اعداد صفر اغلب جایگزین (placeholder) هستند – ثبت عمق صفر معمولاً به این معناست که اندازه‌گیری نامشخص است، نه اینکه سطح آب صاف است. برخورد با صفر به عنوان داده‌ی مفقود، یکپارچگی هر تحلیلی را که به عمق وابسته است، حفظ می‌کند.

ارزش‌آفرینی فراتر از اعداد خام

این فهرست کاری فراتر از لیست کردن مختصات انجام می‌دهد. برای بنادر، این ابزار عمق را به کلاس‌های شناورهایی که می‌توانند با ایمنی پهلو بگیرند ترجمه می‌کند و یک معیار واحد را به یک ابزار تصمیم‌گیری کاربردی تبدیل می‌کند. برای فرودگاه‌ها، طول باند به انواع هواپیماهایی که می‌توانند در آنجا فعالیت کنند نگاشت می‌شود و به خلبانان و برنامه‌ریزان امکان ارزیابی سریع قابلیت‌ها را می‌دهد.

یک شبکه فضایی (spatial grid)، هر بندر را به نزدیک‌ترین فرودگاه‌های آن و بالعکس متصل می‌کند و سایت را به یک ابزار اکتشاف تبدیل می‌نماید. برای مثال، کاربران می‌توانند کشف کنند که کدام فرودگاه‌ها در فاصله رانندگی کوتاهی از یک بندر خاص قرار دارند؛ ویژگی‌ای که برای برنامه‌ریزی حمل‌ونقل چندوجهی بار بسیار مفید است.

ساخت یک موتور سایت استاتیک در مقیاس بالا

تمام بخش فرانت‌اند با استفاده از Next.js و تولید استاتیک (static generation) اجرا می‌شود. در طول فرآیند ساخت، تقریباً ۱۴,۰۰۰ صفحه — یکی برای هر بندر و فرودگاه — از پیش رندر می‌شوند. از آنجایی که هیچ پایگاه داده یا منطق سمت سروری وجود ندارد، سایت هیچ هزینه پردازشی مستمری ندارد؛ بلکه روی یک شبکه توزیع محتوا (CDN) قرار دارد که صفحات را فوراً در سراسر جهان ارائه می‌دهد.

تله‌های سئو و راهکار محتوای کم (thin-content)

آپلود هزاران صفحه قالب‌بندی‌شده می‌تواند برای موتورهای جستجو زنگ خطر به صدا درآورد، زیرا ممکن است سایت را دارای «محتوای کم» (thin content) تشخیص داده و رتبه‌بندی آن را جریمه کنند. توسعه‌دهنده زمانی با این مشکل روبرو شد که درخواست AdSense او رد شد. راه حل این بود که مجموعه کامل صفحات برای بازدیدکنندگان فعال بماند، اما دستور noindex به همه صفحات، به جز ۴۰۰ صفحه با کیفیت بالا در هر دسته، اضافه شود. این کار به خزنده‌ها (crawlers) می‌گوید که فقط ارزشمندترین صفحات باید در نتایج جستجو ظاهر شوند، که این امر اعتبار سایت را حفظ کرده و در عین حال مجموعه داده کامل را نیز ارائه می‌دهد.

چه کسانی سود می‌برند و محدودیت‌ها چیستند

  • شرکت‌های لجستیک می‌توانند به سرعت تأیید کنند که آیا یک کشتی باربری با محدودیت‌های عمق یک بندر مطابقت دارد یا خیر، بدون اینکه نیاز باشد چندین فایل PDF را جستجو کنند.
  • برنامه‌ریزان خطوط هوایی به دسترسی فوری به نگاشت‌های باند به هواپیما دست می‌یابند که برای مطالعات امکان‌سنجی مسیر مفید است.
  • توسعه‌دهندگان و پژوهشگران یک خروجی (dump) تمیز و ماشین‌خوان دریافت می‌کنند که می‌تواند به ابزارهای سفارشی وارد شود.

گام بعدی پروژه

سازنده از جامعه کاربری برای دریافت بازخورد در مورد ویژگی‌های اضافی درخواست کرده است.

نکته کلیدی

با رفع دردسرهای پاک‌سازی داده‌ها، افزودن لایه‌های استنتاج و دور زدن هزینه‌های سرور از طریق تولید ایستا (static generation)، توسعه‌دهنده نشان می‌دهد که یک معماری کم‌حجم (lean architecture) می‌تواند ابزاری کاربردی در سطح جهانی ارائه دهد—البته اگر مایل به پذیرش به‌روزرسانی‌های دوره‌ای باشید و قوانین موتورهای جستجو را نیز مد نظر داشته باشید.