- ทุกครั้งที่ค้นหาตั๋วเครื่องบินราคาประหยัด จะมีขั้นตอนที่ซับซ้อนซึ่งต้องตรวจสอบข้อกำหนดหลายอย่างพร้อมกัน เช่น วีซ่า หนังสือเดินทาง และเงื่อนไขการเป็นผู้มีถิ่นที่อยู่ทางภาษี
- ระบบตรวจคนเข้าเมืองและภาษีของแต่ละประเทศคำนวณ ‘จำนวนวันพำนัก’ ด้วยเกณฑ์ที่ต่างกัน จนทำให้เกิดความสับสน
- เพื่อแก้ปัญหานี้ จึงพัฒนาแอป ‘Residency’ ที่ตรวจสอบประวัติการเดินทางและกฎเกณฑ์เหมือนคอมไพเลอร์
- แอปจะ คำนวณบนเครื่องในเครื่องโดยตรง และตรวจสอบ วันหมดอายุหนังสือเดินทาง วีซ่า IDP และเงื่อนไขการเป็นผู้มีถิ่นที่อยู่ทางภาษี โดยอัตโนมัติ
- แอปทำหน้าที่เป็น เครื่องมือที่ช่วยจัดการประวัติการเดินทางของแต่ละคนและกฎทางปกครองอย่างสอดคล้องกัน เพื่อระบุความเสี่ยงล่วงหน้าก่อนข้ามพรมแดน
20 นาทีก่อนซื้อตั๋วเครื่องบิน
- เมื่อผู้เขียนพบตั๋วไปไอซ์แลนด์ราคาถูกมาก ก็ต้องรีบตรวจสอบ วีซ่า หนังสือเดินทาง ใบขับขี่ และเงื่อนไขการเป็นผู้มีถิ่นที่อยู่ทางภาษี ทันที
- กระบวนการนี้ใช้เวลาราว 20 นาที และไม่ใช่แค่การเปรียบเทียบราคาอย่างเดียว แต่เป็นการทบทวนเงื่อนไขทางปกครองหลายอย่างพร้อมกัน
- ตลอด 10 ปีที่ผ่านมา ผู้เขียนจัดการเรื่องวีซ่าและการยื่นขอสัญชาติต่าง ๆ โดยอาศัย สเปรดชีต ที่บันทึกประวัติการเดินทางไว้
- แต่เห็นว่าวิธีนี้ไม่มีประสิทธิภาพ จึงเริ่มออกแบบระบบที่ตัดสินโดยอัตโนมัติได้ว่า “ทริปนี้จะก่อปัญหาหรือไม่?”
‘สถานะ(State)’ ที่ระบบไม่บอกคุณ
- ระบบต่าง ๆ เช่น Schengen, สหราชอาณาจักร, ถิ่นที่อยู่ทางภาษี, ระยะเวลาที่หนังสือเดินทางยังใช้ได้ ต่างใช้เกณฑ์คนละแบบในการตัดสินสถานะของบุคคล
- Schengen ใช้กฎ 90/180 วัน, สหราชอาณาจักรใช้ จำนวนครั้งที่ข้ามเที่ยงคืนตามปีภาษี, ส่วนหนังสือเดินทางใช้ วันหมดอายุและจำนวนหน้าว่าง เป็นเกณฑ์
- ข้อมูลเหล่านี้ ไม่ได้ถูกเปิดเผยให้ผู้ใช้เห็นโดยตรง และโดยมากมีเพียงเจ้าหน้าที่ตรวจคนเข้าเมืองที่เข้าถึงได้
- ผู้เขียนนิยามสิ่งนี้ว่าเป็น “ปัญหาของการ parse State” — ต้องตีความทั้งมุมมองของรัฐบาลและสถานะของระบบไปพร้อมกัน
กรณียกเว้นในโลกงานปกครอง
- เมื่อต้องยื่นขอสัญชาติอังกฤษ จำเป็นต้องพิสูจน์ว่า ในวันเดียวกันเมื่อครบ 5 ปีก่อนนับจากวันยื่น ผู้ยื่นอยู่ในสหราชอาณาจักร
- หากคลาดเคลื่อนแม้เพียงวันเดียว อาจต้องรอหลายเดือนก่อนถูก ปฏิเสธคำขอ และต้องเสียค่าใช้จ่ายในการยื่นใหม่
- เวลาต่อเครื่องที่สนามบินในสหราชอาณาจักร จะถูกนับเป็น ‘การพำนัก’ ก็ต่อเมื่อมี กิจกรรมที่ไม่เกี่ยวกับการเดินทางโดยตรง (เช่น ซื้อของว่าง หรือไปดูการแสดง)
- การเปลี่ยนเขตเวลาในโมร็อกโกระหว่างรอมฎอน (UTC↔UTC+1) อาจทำให้การคำนวณจำนวนวันพำนักต่างออกไป
- กฎเหล่านี้กระจัดกระจายอยู่ตามเว็บไซต์ของรัฐบาลและไฟล์ PDF หลายแห่ง ทำให้ผู้ใช้ต้องตีความเอง
การจำลองการเดินทางในฐานะ ‘คำเตือนของคอมไพเลอร์’
- ผู้เขียนนำแนวคิด linter มาใช้เพื่อตรวจสอบแผนการเดินทางจากมุมมองว่า “คอมไพล์ผ่านหรือไม่?”
- ใช้ตัวอย่างเส้นทางเดินทาง (DUB→EWR→MEX→LHR→TFS) เพื่อเปรียบเทียบ ความแตกต่างของการนับวันพำนักในแต่ละประเทศ
- ไอร์แลนด์ 0 วัน, สหรัฐฯ 0 วัน, เม็กซิโก 2 วัน, สหราชอาณาจักร 0~1 วัน, Schengen 1 วัน
- ผลลัพธ์แต่ละอย่างอาจเปลี่ยนได้ตาม เวอร์ชันของฐานข้อมูลเขตเวลา จึงต้องตรึงเวอร์ชันไว้และคำนวณใหม่เมื่อมีการเปลี่ยนแปลง
- เป้าหมายคือการสร้าง ระบบตรวจสอบอัตโนมัติที่ใช้เกณฑ์ตัดสินแบบเดียวกับเจ้าหน้าที่ตรวจคนเข้าเมือง
โครงสร้างและความสามารถของแอป Residency
- แอปจำลองผลลัพธ์ของคำถามแบบ “ถ้าทำสิ่งนี้แล้วจะเกิดอะไรขึ้น” ได้หลายรูปแบบ
- ตัวอย่างเช่น เมื่อต้องจองทริปไปเทือกเขาแอลป์ แอปสามารถบอกได้ว่าจะเกินจำนวนวันพำนักใน Schengen หรือไม่ หรือการออกนอกประเทศก่อนสิ้นปีภาษีจะมีผลอย่างไร
- กฎของแต่ละประเทศถูกเก็บเป็น ข้อมูลตีความแบบมีการจัดการเวอร์ชัน (blob) เพื่อให้ยังรักษาประวัติเดิมไว้ได้เมื่อกฎเปลี่ยน
- ความถูกต้องของหนังสือเดินทาง วีซ่า และ IDP ก็ถูกจัดการด้วย state machine
- เช่น เมื่อแวะเปลี่ยนเครื่องที่ดูไบ กรณีที่ “ยังใช้ได้ตอนเดินทางมาถึง” แต่ “ใช้ไม่ได้แล้วตอนออกเดินทาง” จะถูกตรวจจับโดยอัตโนมัติ
- ผู้ใช้สามารถกำหนด เป้าหมายด้วยตนเอง (เช่น จำกัดจำนวนวันพำนักในบางประเทศ) และแอปจะเตือนตามเงื่อนไขนั้น
การออกแบบแบบ local-first และการคุ้มครองความเป็นส่วนตัว
- การคำนวณทั้งหมดทำ ภายในอุปกรณ์ และใช้งานได้แม้ไม่มีการเชื่อมต่อเครือข่าย
- การตัดการสื่อสารกับเซิร์ฟเวอร์ออกไปช่วยหลีกเลี่ยงปัญหาเรื่อง ความเร็ว ความเป็นส่วนตัว และความรับผิดทางกฎหมาย
- ไม่รองรับการซิงก์ผ่านคลาวด์ แต่สามารถส่งออกเป็นไฟล์ได้โดยตรง
- ตอนแรกแอปรองรับเพียงการคำนวณจำนวนวัน Schengen แต่ภายหลังได้เพิ่ม กฎภาษีของสหราชอาณาจักร การหมดอายุของเอกสาร และความสามารถในการจำลองสถานการณ์
- เหตุผลที่เปิดตัวแอปคือ อยากให้ผู้ใช้อื่นลดความไม่แน่นอน 20 นาทีแบบเดียวกันนี้ลงได้
ผลการใช้งานจริงและบทสรุป
- ก่อนซื้อตั๋วไปไอซ์แลนด์ แอปคำนวณได้อย่างแม่นยำว่า ไม่จำเป็นต้องใช้ IDP, ยังเหลือวันใน Schengen อีก 34 วัน และจะสิ้นสุดสถานะถิ่นที่อยู่ทางภาษีเมื่อใด
- เมื่อตอนเข้าประเทศจริง การตัดสินของเจ้าหน้าที่ที่สนามบิน Keflavík ก็ตรงกับผลลัพธ์จากแอป
- แอปมีชื่อว่า Residency ให้ใช้งานบน iOS และเป็น การซื้อขาดครั้งเดียว ไม่มีค่าสมัครสมาชิก
- โดยสรุป ข้อความสำคัญคือ “พรมแดนไม่สามารถเรียกด้วย cURL ได้ แต่คุณสามารถติดตามสถานะของตัวเองเพื่อให้ได้คำตอบแบบเดียวกับรัฐบาลได้”
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ไม่เคยรู้เลยว่าสำหรับคนที่ไม่ใช่พลเมือง EU การเดินทางต้องมีขั้นตอนที่ซับซ้อนขนาดนี้
กฎที่ว่าตอนยื่นขอสัญชาติอังกฤษ ต้องพิสูจน์ให้ได้ว่าคุณอยู่ในสหราชอาณาจักรจริงในวันเดียวกันนั้นเมื่อ 5 ปีก่อนนับจากวันยื่นคำขอ ฟังดูน่าขันมาก
ถ้าพลาดไปแม้แต่วันเดียว ก็อาจถูกปฏิเสธหลังรอมาหลายเดือน และต้องจ่ายค่าธรรมเนียมแพง ๆ ใหม่อีกครั้ง
เลยสงสัยว่ากฎแบบนี้เกิดขึ้นมาได้อย่างไร
ซึ่งอาจคลาดเคลื่อนไปได้หลายวันตามความเร็วในการจัดส่งของ Royal Mail
ก่อนยื่นสมัคร ฉันเคยขอบันทึกการเข้าออกประเทศจาก Home Office แล้วพบว่าพวกเขาแทบไม่รู้เลยว่าฉันอยู่ที่ไหนเมื่อ 5 ปีก่อน
การเดินทางของฉันถูกบันทึกไว้แค่ประมาณครึ่งเดียว และหลายครั้งก็มีแค่ขาเดียว ระบบจัดการเละเทะมาก
ดูเหมือนคนรุ่นนี้จะมองว่าสิทธิประโยชน์ของการเป็นพลเมือง EUเป็นเรื่องปกติเกินไป
คนที่อยู่นานกว่านั้นคือพวก “ดิจิทัลโนแมด” ซึ่งส่วนใหญ่ก็กำลังทำงานอย่างผิดกฎหมาย
อาจมีการพูดให้ความลำบากดูเวอร์ขึ้นเล็กน้อย
ใช้เวลา 15 นาทีก็เสร็จ แน่นอนว่าอันนี้ไม่ใช่ในอังกฤษ แต่เป็นยุโรปแผ่นดินใหญ่
ถ้าความคิดแรกของใครตอนเปลี่ยนเครื่องที่สนามบินคือ “ไปซื้อ sausage roll ที่ Greggs กินดีกว่า” คนนั้นก็มีคุณสมบัติพอจะได้สัญชาติแล้ว
บทความดีมาก แต่ชื่อแปลก ๆ
เนื้อหาเป็นเรื่องข้อกำหนดรายประเทศเกี่ยวกับถิ่นที่อยู่ทางภาษี วีซ่า สัญชาติ ฯลฯ แต่คำว่า “Downloading a border” ฟังดูคลุมเครือ
น่าจะเป็นอุปมาหมายถึง “ข้อมูลทางการกระจัดกระจายอยู่ตาม PDF และเว็บไซต์หลายแห่ง จนต้องไล่รวบรวมเอง”
ญาติของฉันบางคนเข้ายุโรปด้วยวีซ่าท่องเที่ยวแล้วทิ้งตั๋วกลับประเทศและอยู่เกินกำหนดอย่างผิดกฎหมาย
หลายปีต่อมาก็ได้รับสถานะถูกกฎหมายจนได้สัญชาติ แต่ฉันที่ทำตามกฎหมายกลับยังอยู่ที่เดิม
มันน่าอึดอัดที่ไม่มีคุณสมบัติตรงตามข้อกำหนดวีซ่าทำงานแบบถูกกฎหมาย
ฉันเห็นคนจำนวนมากเข้ามาด้วยวีซ่าท่องเที่ยว มาทำงาน แล้วภายหลังก็ได้รับการทำให้ถูกกฎหมาย
ในขณะที่คนการศึกษาสูงที่เข้ามาอย่างถูกต้องด้วยวีซ่าทำงาน กลับเสียสปอนเซอร์เพราะบริษัทปรับโครงสร้าง และต้องหางานใหม่ภายใน 30 วัน
นโยบายแบบนี้ให้ความรู้สึกเหมือนเป็นความไม่สมดุลที่ตั้งใจสร้างขึ้น
ทึ่งกับความละเอียดของงานที่ผู้เขียนทำ
ฉันเองก็เคยพยายามทำเครื่องคิดเลข Schengen 90/180 วัน และตัวติดตามถิ่นที่อยู่ทางภาษี โดยลองใช้ Claude แต่คณิตศาสตร์มันยากเกินไป
สุดท้ายก็ต้องสร้างโปรเจกต์ใหม่เอง
เลยสงสัยว่าผลลัพธ์ของแอปนี้ได้รับการตรวจสอบด้วยมือว่าแม่นยำหรือไม่ เพราะสำหรับแอปแบบนี้ การทดสอบและการตรวจสอบความถูกต้อง คือหัวใจสำคัญ
จะทำให้แก้กฎได้ง่าย และ unit test ก็มีประโยชน์มากเป็นพิเศษ
เพราะในโครงสร้างแบบ input→algorithm→output มันมี edge case เยอะมาก
แม้บทความจะไม่ได้พูดไว้อย่างชัดเจน แต่แอปที่ผู้เขียนทำสามารถดาวน์โหลดได้สำหรับทุกคน
https://drobinin.com/apps/residency/
ถ้าไม่ใช่ Android ฉันคงอยากลองใช้เอง
เพิ่งนึกได้ว่าผู้เขียนคนนี้คือคนที่เคยทำระบบเข้าใช้ยิมด้วย Apple Watch มาก่อน
ตอนนั้นบทความก็ดี และครั้งนี้ก็ชอบเหมือนกัน
ลิงก์บทความก่อนหน้า
สไตล์การเขียนแบบ โอ้อวดตัวเอง ที่เหมือนพยายามส่งภาพว่า “ฉันเป็นคนสากลและดูมีคลาส” มันน่ารำคาญ
แอปทางการไม่ค่อยดีอยู่แล้ว ก็เลยไม่จำเป็นต้องหยิบโทรศัพท์ออกมา
อ่านบทความนี้แล้วทำให้ฉันตระหนักอีกครั้งถึงคุณค่าของการเดินทางแบบยกเว้นวีซ่าที่พาสปอร์ตของฉันมีให้
มันทำได้ก็จริง แต่เป็นกระบวนการที่ไม่มีประสิทธิภาพและกินเวลามาก
สงสัยว่าทำไมบางประเทศถึงกำหนดว่าตอนเข้าประเทศ หนังสือเดินทางต้องเหลืออายุอีกอย่างน้อย n เดือน
ไม่เข้าใจว่าถ้าอายุพาสปอร์ตเหลือน้อยกว่าระยะเวลาพำนักแล้วมันมีปัญหาอะไร
เลยสงสัยว่ากฎแบบนี้ป้องกันการกระทำผิดกฎหมายหรือปัญหาเศรษฐกิจอะไรได้จริงหรือไม่
ถ้าเกิดบาดเจ็บหรือมีเหตุให้เดินทางกลับช้า หนังสือเดินทางก็ยังต้องใช้ได้อยู่ และในเชิงระบบ ระยะเวลาวีซ่าก็มักออกเป็นหน่วยตายตัวเท่านั้น
วันหมดอายุของพาสปอร์ตเป็นสิ่งที่รู้อยู่ล่วงหน้าอยู่แล้ว ดังนั้นอาจเป็นแค่การบอกให้จัดการเรื่องนี้อย่างรับผิดชอบก็ได้
บทความนี้น่าประทับใจ
มันแสดงให้เห็นได้ดีว่าทำไมกฎเกณฑ์ที่สมเหตุสมผลส่วนใหญ่จึงมีดุลยพินิจทางปกครอง (administrative discretion) รวมอยู่ด้วย