1 คะแนน โดย GN⁺ 1 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บางส่วนของ Wandering Thoughts และ CSpace จะแสดงหน้าบล็อกเมื่อ User-Agent ของเบราว์เซอร์ที่เก่าเกินไป ไปตรงกับกฎป้องกันครอว์เลอร์
  • ตั้งแต่ต้นปี 2025 มีครอว์เลอร์จำนวนมากเพิ่มขึ้น และบางส่วนดูเหมือนมีเป้าหมายเพื่อ เก็บข้อมูลสำหรับฝึก LLM โดยใช้ User-Agent ของ Chrome รุ่นเก่า
  • กำลังทดลองบล็อก User-Agent ของเบราว์เซอร์รุ่นเก่าเพื่อลดภาระของเว็บไซต์ และอาจมีกรณี ตรวจผิดพลาดกับผู้ใช้จริง ได้
  • หากถูกบล็อกแม้ใช้เบราว์เซอร์รุ่นใหม่ สามารถติดต่อผ่านหน้าเว็บส่วนตัวของมหาวิทยาลัยโตรอนโตได้ และควรส่งทั้งชื่อเบราว์เซอร์กับ สตริง User-Agent ที่ถูกต้องไปด้วย
  • สำหรับตระกูล archive.* นั้น แยกแยะได้ยากเพราะใช้ User-Agent ของ Chrome รุ่นเก่าและ IP แบบกระจาย จึงแนะนำให้ใช้ archive.org สำหรับเก็บถาวร Wandering Thoughts

เหตุผลที่หน้าบล็อกถูกแสดง

  • เมื่อเข้าถึงบางส่วนของ Wandering Thoughts หรือ CSpace หากเวอร์ชันของเบราว์เซอร์ถูกจัดว่าเป็นสิ่งน่าสงสัยตามกฎป้องกันครอว์เลอร์ของเว็บไซต์ ก็จะมีการแสดงหน้าบล็อก
  • ณ ต้นปี 2025 มีครอว์เลอร์จำนวนมากเพิ่มขึ้น และบางส่วนดูเหมือนมีจุดประสงค์เพื่อเก็บข้อมูลสำหรับฝึก LLM โดยใช้ Chrome User-Agent รุ่นเก่ารวมถึง User-Agent ของเบราว์เซอร์เก่าอื่น ๆ
  • กำลังมีการทดลองบล็อก User-Agent ของเบราว์เซอร์รุ่นเก่าเพื่อลดภาระเว็บไซต์ และผู้ใช้ปกติก็อาจติดกฎนี้ได้เช่นกัน
  • หากใช้เบราว์เซอร์รุ่นใหม่แต่ยังถูกบล็อก สามารถติดต่อผ่านหน้าเว็บส่วนตัวของมหาวิทยาลัยโตรอนโต และถ้าเป็นไปได้ควรส่งทั้งเบราว์เซอร์ที่ใช้อยู่และ สตริง User-Agent ที่ถูกต้องไปพร้อมกัน

หมายเหตุแยกตามผู้ใช้

  • ผู้ใช้ Inoreader

    • ตัวดึงฟีดของ Inoreader เองไม่ได้เป็นเป้าการบล็อก และในความเป็นจริงยังดึงฟีดตามรอบอยู่เป็นประจำ
    • Inoreader อาจดึงฟีดหรือหน้าด้วย HTTP User-Agent ของเบราว์เซอร์รุ่นเก่าหรือด้วยเบราว์เซอร์เก่าจริง ๆ แล้วนำหน้าบล็อกที่ได้รับมาแสดงให้ผู้ใช้เห็น
    • ผลลัพธ์ของคำขอ HTTP ล่าสุดอาจแตกต่างกันไปตาม HTTP User-Agent ที่ใช้ และมีข้อมูลที่เกี่ยวข้องอยู่ใน HTTPResultsAndUserAgents
  • ผู้ใช้ Vivaldi

    • เนื่องจากการโจมตีที่กำลังเกิดขึ้น แม้แต่ Vivaldi รุ่นใหม่ก็อาจถูกบล็อกได้หากถูกระบุว่าเป็น Google Chrome
    • อาจต้องเปลี่ยนการตั้งค่า "User Agent Brand Masking" เพื่อให้ Vivaldi ถูกระบุว่าเป็น Vivaldi ไม่ใช่ Google Chrome
  • ผู้ใช้ archive.*

    • คุณอาจเห็นหน้าบล็อกนี้ผ่าน archive.today, archive.ph, archive.is เป็นต้น
    • archive.* ใช้ Chrome User-Agent รุ่นเก่า คลานเว็บจากบล็อก IP ที่กระจายกว้าง และบาง IP ยังมีรายการ reverse DNS ปลอมที่อ้างว่าเป็น googlebot IP ทำให้แยกออกจากผู้ไม่หวังดีได้ยาก
    • หากต้องการเก็บถาวร Wandering Thoughts แนะนำให้ใช้ archive.org ซึ่งเป็นครอว์เลอร์สำหรับเก็บถาวรที่ทำงานได้ดีกว่า

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

 
GN⁺ 1 시간 전
ความคิดเห็นจาก Lobste.rs
  • สำหรับบางภาษา การแนะนำให้ Eglot เริ่มทำงานอัตโนมัติอาจเป็น ความคิดที่แย่มากถึงขั้นอันตราย ได้ เซิร์ฟเวอร์ LSP ของหลายภาษานั้นไม่ปลอดภัยพอสำหรับใช้กับโค้ดที่ไม่น่าเชื่อถือ และแค่เปิดไฟล์ในโปรเจ็กต์ Rust หรือ Elixir ที่ผู้โจมตีควบคุม ก็อาจทำให้เครื่องถูกเจาะได้
    ถ้าไม่ใช่ภาษาที่มี LSP server ซึ่งเป็นที่รู้กันว่าปลอดภัย ก็ควรหลีกเลี่ยง การเปิดใช้ LSP อัตโนมัติ หลักฐาน: https://rust-analyzer.github.io/book/security.html

    • ถ้าจะดูโค้ดที่อาจเป็นอันตราย สุดท้ายก็ควรทำงานทั้งหมดภายใน ขอบเขตความปลอดภัยจริง อยู่ดี แม้แต่ git status ก็อาจเป็นพื้นผิวการโจมตีได้: https://github.com/justinsteven/advisories/…
      ความต่างคือกรณีข้างต้นต้องมี exploit อยู่ในตัวรีโพเอง แต่ฝั่ง LSP ปัญหาอาจมาจาก dependency ได้ด้วย ถึงอย่างนั้น ถ้าชินกับการเปิด LSP ติดเป็นนิสัยแล้ว ก็ดูยากที่จะไม่ค่อย ๆ ด้านชาต่อคำเตือน
    • อีกเหตุผลที่ควรหลีกเลี่ยงการเริ่มอัตโนมัติคือ ความต้องการทรัพยากร ของ language server บางตัวสูงมาก แค่เปิดไฟล์สักครู่ในโปรเจ็กต์ Rust ขนาดกลาง ก็อาจทำให้โปรเซส rust-analyzer กินแรม 4GB วิ่งอยู่นานหลายนาที และสร้างไดเรกทอรี target/debug/ ขนาดเกิน 1GB ได้
    • เอาจริง ๆ พอรัน cargo build ไปแล้ว ก็แทบถือว่าจบเหมือนกัน แน่นอนว่า การโหลด LSP อัตโนมัติ กับคำสั่งที่ผู้ใช้รันเองโดยชัดเจนนั้นต่างกันมาก แต่ในการใช้งานจริง ความต่างอาจเล็กกว่าที่คิด
    • ถ้าต้องการความอัตโนมัติ วิธีที่ดีกว่าคือให้ถามก่อนเปิดใช้งานแบบ lsp-mode แล้วค่อยเพิ่มโปรเจ็กต์เข้า allowlist ถ้ามี hook ที่ “รันอัตโนมัติ” อยู่แล้ว ก็เขียนให้ read-from-minibuffer ถามก่อนว่า “คุณเชื่อถือโฟลเดอร์นี้ไหม?” ได้ในราว 10 บรรทัด และถ้าใช้ projectile หรืออะไรคล้ายกันช่วยกำหนดไดเรกทอรีฐาน ก็จะได้ประโยชน์ด้านความปลอดภัยเกือบทั้งหมด
      การตั้งค่าของฉันใช้ allowlist ของ lsp-mode แต่ลบทิ้งทุก session เพื่อให้ต้องยืนยันใหม่เป็นรายโปรเจ็กต์ทุกครั้งที่เปิด Emacs ขึ้นมาใหม่ เดิมทีน่าจะทำแบบนี้เพราะเรื่องประสิทธิภาพ และ lsp-mode เคยมีจังหวะที่สปินหลายโปรเซสขึ้นมาก่อนจะเปิดบางโปรเจ็กต์เสียอีก ความเสี่ยงด้านความปลอดภัยมีอยู่จริง แต่การทำเวิร์กโฟลว์ที่ใช้งานได้ดีก็ไม่ได้ยากมากนัก
  • สิ่งที่น่ารำคาญที่สุดใน Eglot คือมันไม่ค่อยเปิดคำสั่งส่วนใหญ่เป็นฟังก์ชัน แต่ไปนิยามไว้บน อินเทอร์เฟซของ Emacs อย่าง xref แทน พอมีทั้งแบ็กเอนด์ xref ของ CIDER และ clojure-lsp แบบใน Clojure ก็เลยมักอยากเลือกฝั่ง CIDER ที่รู้สถานะรันไทม์จริงของโค้ดที่โหลดอยู่มากกว่า
    การวิเคราะห์แบบสแตติกของ clojure-lsp โดยเฉพาะในเวิร์กโฟลว์ REPL ระยะไกล อาจซิงก์คลาดกันได้ ใน lsp-mode คุณยังเรียกฟีเจอร์อย่างกระโดดไปยัง definition เป็นคำสั่งโดยตรง พร้อมกับใช้ xref ต่อไปได้ แต่ใน Eglot การตัดแบ็กเอนด์ xref บางตัวออกโดยเฉพาะนั้นค่อนข้างยุ่งยาก คำสั่งอื่น ๆ ที่มีใน lsp-mode ก็หายไปจาก Eglot ด้วย ทั้งที่จริงแล้วเป็นฟีเจอร์ที่น่าจะให้ผ่านจุดเชื่อมต่อการทำงานกับ Emacs คล้าย xref ได้

  • เคยลองใช้ lsp-mode ครั้งหนึ่ง แต่มีป๊อปอัปและการแจ้งเตือนที่ชวนสับสนเยอะเกินไป เลยลบทิ้งทันที Eglot ให้ประสบการณ์ LSP ที่ เงียบกว่าเยอะ
    เปิดทิ้งไว้ แล้วค่อยใช้ฟีเจอร์เมื่อพร้อมก็พอ น่าสนใจดีที่ ~cks ใช้วิธีเข้าหาจากอีกทิศหนึ่งพร้อมพูดถึงทิปและทางเลือกหลายแบบ

    • ฉันปิดฟีเจอร์หลายอย่างใน lsp-mode เลยใช้งานด้วยอินเทอร์เฟซที่ค่อนข้างเงียบได้ เคยคิดจะย้ายไป Eglot แต่ตอนนั้นดูเหมือนไม่มีการผสานการทำงานที่อยากได้ เลยไม่ได้ลองต่อ
      สิ่งที่อยากได้จริง ๆ คือ LSP server ที่รับมือกับ รีโพขนาดใหญ่มาก ได้ นี่เป็นข้อจำกัดที่เจอบ่อย จนเริ่มคิดว่าควรทำอะไรสักอย่างที่สร้างดัชนีซอร์สโค้ดครั้งเดียวแล้วเอาไปใช้ซ้ำกับงานสไตล์ LSP หลายอย่างได้หรือเปล่า แต่ก็กลัวว่าจะกลายเป็นการพยายามต้มมหาสมุทรอีก
  • Eglot กับ lsp-mode เป็น LSP client สำหรับ Emacs ที่ดังที่สุดก็จริง แต่ก็ยังมีทางเลือกอย่าง lspce และ lsp-bridge
    ฉันใช้ Eglot มาหลายปีอย่างพอใจ แต่ก็มี ข้อจำกัดด้านการออกแบบ ที่อาจกลายเป็นปัญหามากขึ้นในอนาคต มันตั้งสมมติฐานว่า 1 บัฟเฟอร์ต่อ 1 ไคลเอนต์ ซึ่งตอนที่ Eglot ถูกสร้างขึ้นมาถือว่าสมเหตุสมผล แต่ตอนนี้กรณีที่อยากรัน LSP server หลายตัวในบัฟเฟอร์เดียวเริ่มพบได้บ่อยขึ้น คำแนะนำปัจจุบันคือใช้โปรแกรมแยกต่างหากเป็นตัว multiplex LSP

    • สำหรับจุดประสงค์นั้นมี this
  • เมื่อ 4 วันก่อนฉันย้ายจาก lsp-mode ไป Eglot สำหรับ Python และพอใจมาก
    ตอนนี้เผยแพร่เวอร์ชันขั้นต่ำของการตั้งค่าปัจจุบันไว้ที่นี่: https://discuss.afpy.org/t/configuration-emacs-minimale-en-2026/3001

    • ฉันเปลี่ยนจาก elpy ไปเป็น eglot + basedpyright เกือบ 1 ปีที่แล้ว และฉันก็พอใจมากเหมือนกัน
      แต่อย่างไรก็ยังมีจุดน่าหงุดหงิดเรื่องการเติมโค้ดอยู่บ้าง เช่น ถ้ากด foo<tab><tab> บางครั้ง basedpyright จะ auto-import ของแปลก ๆ ทั้งที่มีสัญลักษณ์ที่ตรงกับสโคปปัจจุบันอยู่แล้ว และฉันก็ยังหาวิธีให้มันเติมแค่สตริงร่วมที่ยาวที่สุดไม่ได้ นอกนั้นถือว่าค่อนข้างดี
  • อิจฉาคนที่ทำให้ Emacs ใช้งานเหมือน IDE สมัยใหม่ได้ ฉันใช้คีย์ไบน์ดิงของ Emacs อยู่ แต่ต่อให้ลงเวลาไป 6–8 ชั่วโมงก็ยังทำให้ Emacs ทำงานเหมือน IDE ไม่ได้
    เมื่อก่อนเคยพยายามปรับให้เข้ากับ FB Flow ซึ่งใช้แทน TypeScript ในสภาพแวดล้อมพัฒนา Linux และ FreeBSD แล้วก็ยอมแพ้ และเมื่อสุดสัปดาห์ที่แล้วก็ลองทำสภาพแวดล้อม Python แบบครบฟีเจอร์บน Windows พร้อม tree-sitter ก่อนจะยอมแพ้อีกครั้ง มีอะไรให้ตั้งค่าเยอะเกินไป แถมยังต้องไปโหลด DLL อย่างตัวแยกวิเคราะห์ tree-sitter อีกหลายตัวแยกต่างหาก สิ่งที่ต้องมีเพื่อให้มันกลายเป็น IDE ที่ดีนั้นเยอะเกิน ตอนนี้เลยไม่อยากทุ่มเวลาแล้ว แต่ก็ยังชอบตรงที่บางครั้งพิมพ์ emacs -nw ในเทอร์มินัลไหนก็ได้ แล้วได้สภาพแวดล้อมแก้ไขที่คุ้นเคยขึ้นมาทันที

    • ถ้าเป็น Python แค่ตั้งค่าแบบ ขั้นต่ำ ด้วย fido-vertical-mode, which-key-mode, global-completion-preview-mode, yasnippet, eglot-ensure, basedpyright ก็น่าจะเริ่มต้นได้สบายแล้ว
      ถ้า basedpyright อยู่ใน path ก็จะได้ทั้งการเติมโค้ดและ syntax highlighting ที่ใช้งานได้ดีแม้ไม่มีไวยากรณ์ tree-sitter นี่เป็นเวอร์ชันที่ตัดทอนให้เหลือขั้นต่ำจากการตั้งค่าทั้งหมด และการตั้งค่าเต็มอยู่ที่ my full config
    • ลองใช้ doom emacs ก็น่าสนใจ ตั้งค่าง่ายมากและส่วนใหญ่ใช้งานได้ดีตั้งแต่ค่าเริ่มต้น ถ้าไม่ชอบ evil-mode ก็เปลี่ยนกลับไปใช้ คีย์ไบน์ดิงของ Emacs ได้