2 คะแนน โดย GN⁺ 2025-12-31 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • FediMeteo เป็น บริการข้อมูลสภาพอากาศระดับโลก ที่เริ่มต้นจาก FreeBSD VPS ราคา 4 ยูโร และโพสต์สภาพอากาศของแต่ละเมืองแบบอัตโนมัติผ่าน Fediverse
  • แต่ละประเทศถูกแยกและจัดการด้วย FreeBSD jail โดยใช้ซอฟต์แวร์ snac และ Open-Meteo API เพื่อดึงข้อมูลและเผยแพร่ในรูปแบบ Markdown
  • ระบบมีการอัปเดตอัตโนมัติทุก 6 ชั่วโมง, รองรับ 39 jail, 38 ประเทศ 2937 เมือง และเติบโตจนมี ผู้ติดตามมากกว่า 7700 คน
  • แม้จะเผชิญปัญหาในการดำเนินงานหลายอย่าง เช่น API key รั่วไหล, ข้อผิดพลาดในการคำนวณพิกัด, และ ปัญหาการแปลภาษา แต่ก็ทำให้ระบบเสถียรขึ้นได้ด้วยการแคชและการปรับปรุงการรองรับหลายภาษา
  • ได้รับการประเมินว่าเป็นกรณีตัวอย่างที่แสดงให้เห็นว่าแม้จะใช้อินฟราต้นทุนต่ำ ก็สามารถสร้าง บริการระดับโลกที่มีประสิทธิภาพและทำงานได้อย่างอัตโนมัติ

ภาพรวมของโครงการ

  • FediMeteo คือ บริการแจ้งเตือนสภาพอากาศอัตโนมัติบน Fediverse ที่เริ่มจากความสนใจส่วนตัว
    • ผู้สร้างเริ่มต้นจากความคิดที่ว่าอยากเห็นสภาพอากาศของเมืองตัวเองได้โดยตรงบนไทม์ไลน์
    • บริการนี้สร้าง บัญชีแยกตามเมือง (bot) เพื่อโพสต์สภาพอากาศของแต่ละเมืองเป็นระยะ
  • เลือกใช้ FreeBSD เป็นระบบปฏิบัติการ และแยก jail ตามประเทศเพื่อให้ง่ายต่อการจัดการและเพิ่มความปลอดภัย
  • การทดสอบช่วงแรกดำเนินการบน VPS ในเยอรมนี และปัจจุบันให้บริการอยู่บน VPS ราคา 4 ยูโรในมิลาน ประเทศอิตาลี

หลักการออกแบบ

  • แยกอินสแตนซ์ตามประเทศ เพื่อเสริมทั้งการจัดการและความปลอดภัย และสามารถย้ายเป็นรายส่วนได้เมื่อจำเป็น
  • แหล่งข้อมูล เลือกได้ระหว่าง wttr.in และ Open-Meteo โดยให้ความสำคัญกับความเป็นมิตรต่อโอเพนซอร์สและความน่าเชื่อถือ
  • เพิ่มการเข้าถึง: ใช้ภาษาท้องถิ่น, รองรับ text browser, ใช้อีโมจิ, และ ไม่พึ่งพา JavaScript
  • ยึดตาม ปรัชญา Unix ด้วยโครงสร้างที่ประกอบจากส่วนย่อยเล็ก ๆ ที่ทำงานร่วมกัน
  • เลือกใช้ snac เป็นซอฟต์แวร์หลัก โดยรองรับ ActivityPub, สร้าง RSS ได้, ใช้ทรัพยากรต่ำ, และคอมไพล์ได้รวดเร็ว

การติดตั้งใช้งานทางเทคนิค

  • แต่ละ jail ทำงานอย่างอิสระ และมี สคริปต์ Python ดึงข้อมูลของแต่ละเมืองแล้วแปลงเป็น Markdown
    • ใช้ geopy คำนวณพิกัด จากนั้นเรียก Open-Meteo API
    • ส่งโพสต์ด้วยคำสั่ง note ของ snac โดยไม่จำเป็นต้องจัดการ API key ภายนอก
  • สคริปต์ post.sh จะวนลูปทุกเมืองเพื่อสร้างและเผยแพร่โพสต์โดยอัตโนมัติ
    • cron ทำงานทุก 6 ชั่วโมง และใช้ Uptime-Kuma เพื่อติดตามสถานะระบบ
  • ชื่อเมืองถูกจัดการผ่านไฟล์ (cities.txt) และเมื่อเพิ่มเมืองใหม่ ระบบจะนำไปใช้โดยอัตโนมัติ

การเติบโตและการตอบรับ

  • ช่วงแรกทดสอบโดยเน้นอิตาลี ก่อนขยายไปยังประเทศต่าง ๆ ในยุโรป
  • หลังจาก FediFollows แนะนำโครงการนี้ จำนวนผู้ติดตามเพิ่มขึ้นอย่างรวดเร็ว และมีคำขอจากผู้ใช้ในหลายประเทศมากขึ้น
  • มีการเพิ่มฟีเจอร์ รองรับหลายภาษา, การใช้อีโมจิ, และ การโพสต์แบบไม่แสดงในรายการสาธารณะ (unlisted)
  • ฟีดแบ็กที่รวดเร็วจากชุมชนนักพัฒนาช่วยให้มีการปรับปรุงฟีเจอร์อย่างต่อเนื่อง

การขยายตัวและความท้าทายทางเทคนิค

  • เมื่อขยายสู่ระดับโลก พบปัญหาเรื่อง การแปลงหน่วย (เซลเซียส/ฟาเรนไฮต์), ความต่างของเขตเวลา, และ การแยกเมืองชื่อซ้ำกัน
  • เมื่อลุยตลาด สหรัฐฯ และแคนาดา มีการเพิ่มเมืองมากกว่า 1200 แห่ง และใช้ตัวคั่น __ เพื่อแยกตามรัฐ
  • หลังเกิดปัญหาเกินลิมิตของ Open-Meteo ฟรี API ก็ได้รับ API key เฉพาะ สำหรับใช้งาน
  • ด้วย ประสิทธิภาพของ FreeBSD และ snac จึงสามารถให้บริการหลายประเทศได้แม้ใช้ VPS เพียงเครื่องเดียว

ประสิทธิภาพของระบบและอินฟรา

  • สเปก VPS: FreeBSD 14.3-RELEASE, จัดการ jail ด้วย BastilleBSD
    • รวม 39 jail, มี ZFS snapshot ทุก 15 นาที และแบ็กอัปภายนอกทุกชั่วโมง
    • ใช้ RAM 501MB, และจะเพิ่มขึ้นเล็กน้อยระหว่างอัปเดต
  • ภาระ CPU เฉลี่ยต่ำกว่า 10%, แต่ระหว่างอัปเดตขนาดใหญ่จะเพิ่มขึ้นถึง 70~75%
  • อินสแตนซ์สหรัฐฯ โพสต์โดยเว้นช่วง 5 วินาทีระหว่างเมือง และใช้เวลาประมวลผลทั้งหมดประมาณ 2 ชั่วโมงครึ่ง

ตัวอย่างการแก้ปัญหา

  • API key รั่วไหล: เกิดจากโค้ดดีบัก ทำการแก้ไขทันทีและออกคีย์ใหม่
  • ข้อผิดพลาดของ geopy: เมื่อ Nominatim ตอบกลับล้มเหลว จึงแก้ด้วยการแคชพิกัด
  • ปัญหาด้านภาษา: แก้ไขกรณีแปลหลายภาษาไม่ครบและเลือกภาษาท้องถิ่นผิดพลาด

สถานะปัจจุบัน (ณ ธันวาคม 2025)

  • ประเทศที่รองรับ: 38 ประเทศ, จำนวนเมือง 2937 เมือง
  • ผู้ติดตามบน Fediverse มากกว่า 7707 คน, ส่วนจำนวนผู้ติดตาม RSS ไม่สามารถประเมินได้
  • ครอบคลุมเมืองสำคัญใน ยุโรป, อเมริกาเหนือ, เอเชีย, และโอเชียเนีย
  • ระบบยังคงทำงานได้อย่างเสถียร และยังมีศักยภาพในการขยายไปยังประเทศเพิ่มเติม

บทสรุป

  • FediMeteo พิสูจน์ให้เห็นว่าสามารถสร้างบริการระดับโลกได้แม้ใช้อินฟราต้นทุนต่ำ
  • เป็นตัวอย่างที่แสดงคุณค่าของ อธิปไตยด้านข้อมูล, โครงสร้างที่เรียบง่าย, และ ความร่วมมือแบบโอเพนซอร์ส
  • ผู้สร้างเน้นว่า ผ่านโครงการนี้ สภาพอากาศได้กลายเป็นสื่อกลางทางสังคมที่เชื่อมผู้คนเข้าด้วยกัน

1 ความคิดเห็น

 
GN⁺ 2025-12-31
ความคิดเห็นจาก Hacker News
  • ชอบมากที่ได้เห็นโปรเจ็กต์เล็ก ๆ แบบนี้ เติบโตจนประสบความสำเร็จ
    รู้สึกว่า FreeBSD มีส่วนเกินน้อยกว่าและหน่วงต่ำกว่า ดิสโทร Linux
    ผมตั้งค่า FreeBSD VM ราคา 4 ดอลลาร์ต่อเดือนบน Vultr (RAM 1GB, 1vCPU) แล้วแม้จะรัน Caddy อยู่ การใช้ RAM ก็แค่ 12% เท่านั้น
    ถ้าเป็น VM 4GB RAM, 4vCPU ก็น่าจะรับทราฟฟิกได้เยอะพอสมควร
    ผมอยากทำบล็อกส่วนตัวให้เป็น เว็บแอปแบบข้อความสไตล์ Retro BBS — ใช้เซิร์ฟเวอร์แบบมัลติเธรดของ Nim + sqlite รันบน FreeBSD ด้วยไบนารีไฟล์เดียวขนาด 4MB โดยไม่ต้องมีคอนเทนเนอร์หรือไลบรารี JS
    บทความนี้ทำให้ผมมั่นใจมากขึ้นว่าจะไปทาง FreeBSD

    • Linux ต่างกันไปตามดิสโทรและการตั้งค่า
      วันนี้ลองทดสอบด้วย mkosi(https://github.com/systemd/mkosi) แล้วพบว่า Fedora 43 แบบติดตั้งขั้นต่ำใช้ RAM ราว 130MiB ส่วน Debian ใช้ประมาณ 100MiB
      จำได้ว่าตอนเคยลง FreeBSD แบบขั้นต่ำก็กินพอ ๆ กัน หรืออาจมากกว่านิดหน่อยขึ้นอยู่กับการตั้งค่า ZFS
    • จำได้ว่าเมื่อ 20 ปีก่อน Linux ใช้ทรัพยากรแค่ครึ่งเดียว ของตอนนี้
      การเปลี่ยนมาใช้ x64 อาจเป็นสาเหตุหนึ่ง
      น่าแปลกที่ทำงานเท่าเดิมแต่กลับใช้ RAM เป็นสองเท่า แต่ข้อดีก็คือตอนนี้แทบจะใช้ RAM ได้ไม่จำกัดแล้ว
    • ยังมีดิสโทรเบา ๆ อย่าง Alpine อยู่
      แค่ SSH login ก็เร็วกว่า Ubuntu มากแล้ว และ apk package manager ก็เร็วมาก
    • ยูทิลิตีของ BSD อ่านเข้าใจง่ายกว่ายูทิลิตีของ GNU มาก ถ้าต้องการทำความเข้าใจการทำงานภายใน
      เรื่องไลเซนส์ผมชอบฝั่ง GNU มากกว่า แต่ตัวโค้ดเองผมชอบสไตล์ BSD มากกว่า
    • ถ้าพูดถึง “retro BBS-like web app” ก็สงสัยว่าหมายถึง BBS แบบ dial-up สมัยก่อน หรือหมายถึงเว็บบอร์ดแนวฟอรัม
      ถ้าเป็นอย่างหลัง ลองดู FlaskBB ได้
  • ผมก็กำลังทำระบบพยากรณ์คลื่นสำหรับเล่นเซิร์ฟส่วนตัวโดยใช้ open-meteo คล้าย ๆ กัน
    แม้ตอนนี้จะรองรับแค่พื้นที่เดียว แต่ขยายต่อได้ง่าย
    มันเอาข้อมูลทะเลจาก open-meteo มารวมกับพยากรณ์อากาศระยะสั้นและระยะยาว แล้วใช้ LLM แปลงข้อมูลเชิงปริมาณให้เป็นคำอธิบายเชิงคุณภาพ
    เหมือนเป็นการทำสิ่งที่ผมเคยประมวลผลเองในหัวให้เป็นระบบอัตโนมัติ
    ถ้ามีไอเดียอะไรอยากให้บอกได้เลย
    https://surfrash.xyz/

    • เจ๋งมาก น่าจะมีประโยชน์กับชายหาดไหนก็ได้
      ผมชอบ อินเทอร์เฟซที่เน้นคำอธิบาย มากกว่ากำแพงข้อมูล
      อยากขอเพิ่มพื้นที่ Manly (NSW, Australia) ด้วย
  • อ่านสนุกมาก
    ถ้าตอนหนุ่มกว่านี้ผมสนใจ *BSD มากกว่านี้ก็คงดี แต่ตอนนี้ชินกับ Linux มากเกินไปแล้วเลยเปลี่ยนยาก
    ดูเหมือนว่า ZFS กับ ฟีเจอร์ jail จะช่วยให้การดูแลจัดการลื่นไหลดี
    ผมใช้ podman อยู่ แต่บน Linux ยังไม่เคยลอง ZFS
    มีแผนจะทำคลังข้อมูลส่วนตัว เลยตั้งใจจะใช้ deduplication ของ ZFS

    • ผมก็คิดเหมือนกัน
      กำลังพยายามลดความซับซ้อนของสแตกแบบ Docker และแม้จะมี systemd อยู่แล้ว แต่แนวคิดเรื่อง jail หรือ sandbox ก็น่าสนใจมาก
      ผมชอบเครื่องมือที่ทำงานได้ดีตั้งแต่ค่าเริ่มต้น
  • สเปกของ “VPS 4 ยูโร” น่าทึ่งมาก
    อย่างเช่น VPS ราคาต่ำสุดของ Hetzner ให้ 2 vCPU, 4GB RAM, 40GB NVMe SSD แต่ไม่มีการเชื่อมต่อ 1Gb/s
    ที่ถูกที่สุดที่ผมหาเจอคือ Contabo

    • LowEndBox เป็นเว็บยอดนิยมที่รวบรวมข้อมูล VPS แบบนี้
    • Netcup VPS 500 G11s ก็น่าดูเหมือนกัน
    • ต้องระวังเรื่อง การเทียบประสิทธิภาพ vCPU ระหว่างผู้ให้บริการ VPS
      เซิร์ฟเวอร์ราคาถูกมักเป็นเครื่องรุ่นเก่าหรือถูกแชร์หนักเกินไป
      4 vCPU อาจช้ากว่า 2 vCPU บนเครื่องรุ่นใหม่ก็ได้
      แต่ถ้าเป็นแอปที่เน้น RAM ก็อาจเป็นตัวเลือกที่ดี
    • Oracle Cloud ให้ฟรี 4 oCPU (ARM), 24GB RAM, 200GB NVMe SSD, แบนด์วิดท์ 4Gb/s
      แม้จะมีคนบอกว่าจับจองอินสแตนซ์ยาก แต่ผมก็ใช้มาเกิน 2 ปีได้ปกติดี
      แนะนำว่าแปลงเป็นบัญชีแบบเสียเงินจะปลอดภัยกว่า เพราะบัญชีฟรีอาจถูกยกเลิกได้
    • เมื่อก่อนผมเคยใช้ VPS ของ buyvm ราคา 5 ดอลลาร์ต่อปี (RAM 256MB) ซึ่งก็มีประโยชน์มากสำหรับงานง่าย ๆ
  • ชอบที่ได้เห็นการ สร้างโปรเจ็กต์เรียบง่ายด้วยตัวเอง โดยไม่ต้องพึ่งโครงสร้างพื้นฐานขนาดใหญ่ (Kubernetes, AWS, DynamoDB ฯลฯ)

  • ตัว Hacker News เองก็รันอยู่บน เซิร์ฟเวอร์ FreeBSD 4 คอร์
    ลิงก์ที่เกี่ยวข้อง

    • จริง ๆ แล้วเป็นโครงสร้าง 2 CPU package × 4 คอร์ × 2 เธรด รวมเป็น 16 เธรด
    • ถึงอย่างนั้นก็ยังเป็น คอร์แบบ dedicated ที่ไม่ได้แชร์กับ tenant อื่น
  • ผมก็เพิ่งซื้อเซิร์ฟเวอร์สเปกใกล้เคียงกันมาราว 5 ดอลลาร์
    มีพื้นที่เก็บข้อมูล 400~500GB และเริ่มต้นจากโปรโมชัน 8 ดอลลาร์สำหรับ 3 เดือน
    หลังจากนั้นจะเปลี่ยนเป็นเดือนละ 5 ดอลลาร์ และ ความสนุกกับความอินของการดูแล VPS เอง นั้นมีมากจริง ๆ
    OVH เด่นเรื่องราคาถูกและ นโยบาย egress ไม่จำกัด
    ส่วน Upcloud ก็มีทีมซัพพอร์ตที่ยอดเยี่ยม
    ยังเคยได้ยินเคล็ดลับว่าถ้าจะติดต่อซัพพอร์ต OVH ให้ลองผ่าน Twitter หรือ Discord
    กระบวนการเปรียบเทียบราคาเซิร์ฟเวอร์กับคุณภาพซัพพอร์ตแล้วปรับให้เหมาะที่สุดนั้นสนุกในตัวมันเอง

  • ผมเคยคิดไอเดียจะซื้อโดเมนชื่อ “freeofcharge.org” แล้วเปิดให้บริการฟรีที่ อยู่ใน RAM ได้ ผ่านซับโดเมนต่าง ๆ
    แนวคิดคือรวมบริการที่มีประโยชน์และรันได้ในงบไม่เกิน 10 ดอลลาร์ต่อเดือน

  • ผมก็อยากทำเครื่องมือคล้าย ๆ กัน คือ แปลงประกาศเตือนสภาพอากาศของบางพื้นที่ให้อ่านง่ายในรูปแบบ HTML/Markdown
    ไม่ได้ทำเพื่อ fediverse แต่ทำเป็นระบบแจ้งเตือนอากาศที่เข้าถึงง่ายเฉย ๆ

  • เรื่องความเห็นที่ว่า “ควรให้พยากรณ์เป็นภาษาท้องถิ่น”
    ผมคิดว่าไม่จำเป็นต้อง เขียนทับการตั้งค่าภาษาเริ่มต้นของเบราว์เซอร์ เพราะมีผู้ใช้จำนวนมากที่ไม่รู้ภาษาท้องถิ่นเหมือนกัน

    • เป้าหมายของโปรเจ็กต์ไม่ใช่การรองรับหลายภาษา แต่คือการส่งพยากรณ์ให้ผู้ใช้โดยตรง
      แทนที่จะทำหลายภาษา ก็ใช้ อีโมจิเป็นการสื่อสารที่เข้าใจง่าย เพื่อลดกำแพงทางภาษา