پیدا کردن منبع یک بوق مرموز
آدرس مقاله: https://simonwillison.net/2026/Nov/9/mysterious-beeps/ آدرس نظرات: https://news.ycombinator.com/item?id=50434310 امتیاز: 312 # نظرات: 161
خانه ما یک اتاق جعبه دارد، پر از جعبه هایی که هنوز از آخرین حرکتمان باز نکرده ایم. چند هفته پیش چیزی در آن اتاق به طور متناوب شروع به بوق زدن کرد. بوقها به اندازهای از هم فاصله داشتند که ایستادن در اتاق و تلاش برای تعیین منبع صدا ناامیدکننده بود، و من واقعا نمیخواستم هر یک از آن جعبهها را زیر و رو کنم. بنابراین من از Claude Code خواستم که Beep Locator را بسازد، یک سیستم نرم افزاری برای مثلث سازی منبع یک بوق مرموز با استفاده از چندین دستگاه پراکنده در اطراف اتاق.
پس از مدتی کارکردن Beep Locator چگونه به نظر می رسد:
شما سرور وب پایتون را اجرا می کنید تا رابط کاربری اصلی را نشان دهد، و سپس از کد QR یا URL برای اتصال هر چه بیشتر دستگاه هایی که می توانید برای انجام شنونده استفاده کنید استفاده می کنید - من از دو آی پد، یک تلفن، یک مک بوک پرو و یک سرفیس اولترا استفاده می کردم.
سپس دستگاهها صداهایی را با یکدیگر پخش میکنند تا به تخمین مکان آنها کمک کنند. این بهخوبی کار نکرد، بنابراین یک «حالت خشن» اضافه کردم که در آن میتوانید نمادهای آنها را در فضا بکشید تا مکانهای ناهمواری را ارائه کنید که سپس بر اساس آن صداها تنظیم میشوند.
پس از تنظیم، همه دستگاه ها به صدای بوق گوش می دهند!
من یک حالت کف زدن نیز اضافه کردم تا بتوانم آن را با دست زدن در مکانهای مختلف اطراف اتاق آزمایش کنم – که به صورت الماس روی نقشه نمایش داده میشود. این به من کمک کرد تا اطمینان حاصل کنم که می تواند یک صدا را پیدا کند.
بوقها روی نقشه بهعنوان X نشان داده میشوند، بهعلاوه یک خط در گزارش «صداها واقع شدهاند». می توانید این صداها را (از هر دستگاه به نوبه خود) دوباره پخش کنید تا تأیید کنید که آنها همان بوق مرموز مورد نظر شما هستند، سپس روی "This is the Mystery Beep" کلیک کنید تا آنها را به عنوان علامت گذاری کنید.
هنگامی که فرکانس بوق مرموز را تأیید کردید، سیستم به آن گوش می دهد، فاصله بین بوق ها را اندازه گیری می کند و از مکان های مثلثی برای قفل کردن محتمل ترین مکان روی نقشه استفاده می کند.
سیستم طبق برنامه کار کرد. موقعیت بوق را در حدود 40 سانتیمتر به من نشان داد، سپس آن انبوه جعبههای خاص را حفر کردم و یک آشکارساز مونوکسید کربن قدیمی پیدا کردم که به شدت میخواست باتریهایش تعویض شود.
هنگامی که کار را برای حل این مشکل با کلود شروع کردم، به سرعت BeepBeep را کشف کرد: یک سیستم مبتنی بر آکوستیک با دقت بالا برای محدودهبندی و محلیسازی با استفاده از دستگاههای COTS، مقالهای در سال 2007 توسط Chunyi Peng، Guobin Shen، Yongguang Zhang، Yanlin Li و Kun Tan. چکیده آن مقاله در اینجا آمده است:
ما طراحی، پیادهسازی و ارزیابی BeepBeep را ارائه میکنیم، یک سیستم محدودهبندی مبتنی بر آکوستیک با دقت بالا. این در یک زمینه خودجوش، موقت، و دستگاه به دستگاه بدون استفاده از زیرساخت های از پیش برنامه ریزی شده عمل می کند. این یک راهحل مبتنی بر نرمافزار خالص است و فقط از ابتداییترین مجموعه سختافزار کالا - بلندگو، میکروفون، و نوعی ارتباط دستگاه به دستگاه - استفاده میکند، به طوری که به راحتی برای بسیاری از پلتفرمهای حسگر ارزانقیمت و برای اکثر دستگاههای تلفن همراه تجاری مانند تلفنهای همراه و PDA قابل استفاده است.
از طریق ترکیبی از سه تکنیک به دقت بالایی دست می یابد: سنجش دو طرفه، خود ضبط و شمارش نمونه.
دقیقا شبیه چیزی بود که ما باید بسازیم!
Beep Locator یک سرور برنامه وب پایتون را اجرا می کند که بیشتر کار را انجام می دهد. سپس دستگاه های شنود از طریق WebSockets به آن سرور متصل می شوند و یک رابط کاربری ارائه می دهند که درخواست دسترسی به میکروفون مرورگر را می دهد. شنوندگان عمدتا با ضبط یک بافر 60 ثانیه ای از صدای اخیر کار می کنند. آنها همچنین یک الگوریتم تشخیص بوق ساده را اجرا می کنند (به detector.js مراجعه کنید)، که از تبدیل فوریه سریع و یک فیلتر بالاگذر برای شناسایی بوق های احتمالی استفاده می کند. این رویدادها را به سرور اصلی ارسال می کند.
هنگامی که یک بوق گزارش میشود، سرور از دستگاهی میخواهد صدای جیر جیر کوتاهی را پخش کند (دستگاهی که کمترین زمان رفت و برگشت به سرور را دارد)، سپس از هر شنونده میخواهد یک کلیپ را از حدود 0.6 ثانیه قبل از صدای بوق تا 0.8 ثانیه بعد از آن صدای جیر جیر آپلود کند. این صدای جیر جیر به گیره ها اجازه می دهد تا با یکدیگر هماهنگ شوند، که گامی مهم در مکان یابی بیپ است.
من این پروژه را با استفاده از Claude Code Cloud از طریق آیفون خود شروع کردم، با Opus 5.5 که در حالت تلاش اضافی اجرا می شود. در اینجا آن جلسه شروع مشترک است که با این دستور در برابر یک مخزن خالی GitHub تازه ایجاد شده آغاز شد:
یک فایل problem.md بنویسید که مشکلی را که میخواهیم حل کنیم را توضیح دهد
دستگاهی در اتاقی بیپ می کند و من نمی توانم آن را پیدا کنم
من میخواهم چندین دستگاه - لپتاپ، تلفن، آیپد - را در اطراف اتاق راهاندازی کنم که همه به طور همزمان گوش میکنند و از آنها بخواهم به مثلثسازی کمک کنند که صدای بوق از کجا میآید.
باید یک برنامه وب پایتون وجود داشته باشد که همه آن را هماهنگ کند - یک دستگاه یک صفحه وب را برای برنامه نشان می دهد، دستگاه های دیگر به یک URL می پیوندند که آنها را به شنونده تبدیل می کند - همه از طریق مرورگر WebAudio و WebSockets به برنامه سرور پایتون باز می گردند.
در حالت ایدهآل، من نیازی به وارد کردن دستی مکانهای نسبی دستگاهها ندارم - شگفتانگیز خواهد بود که آنها بتوانند صداها را با یکدیگر پخش کنند تا یکدیگر را در فضای دوبعدی قرار دهند - آیا این امکان وجود دارد؟
این فایل مشکل.md را برای من به ارمغان آورد. به عنوان بخشی از نوشتن آن، کلود مقاله BeepBeep را پیدا کرد و خواند، که در آن فایل توضیح داده شده است.
خوب سعی کنید آن را بسازید، مکانیزمی اضافه کنید تا بتوانید کد جدیدی را برای شنوندگان ارسال کنید که سپس آنها به طور خودکار اجرا می شوند - به این ترتیب من می توانم همه چیز را در اتاق تنظیم کنم و سپس شما را تنها بگذارم تا به هک کردن و آزمایش ادامه دهید در حالی که من کار دیگری انجام می دهم.
این من را به این نقطه رساند - بیشتر سیستم ساخته شده بود، اما هیچ چیز واقعا آن را اجرا نکرده بود.
من مخزن جدید را در لپ تاپم کلون کردم و کلود کد را فعال کردم... و سپس Fable 5.2 منتشر شد، و این پروژه فرصتی عالی برای اجرای آن به نظر می رسید.
من Claude Code را روی لپتاپم داشتم که سرور را شروع به کار کرد، سپس مطمئن شدم که میتواند اتفاقات را ببیند و در حین اجرا تغییراتی را در نرمافزار ایجاد کند.
این قبلا در نرمافزار ساخته شده بود: Opus 5.5 یک متد installModule() روی شنوندگان ساخته بود که میتوانست از طریق اتصال WebSocket راهاندازی شود، به این معنی که سرور مدیریت میتواند کد جدید دلخواه را روی هر یک از کلاینتهای خود اجرا کند.
در برخی از دستگاهها، صفحات وب که با میکروفون گوش میدهند، هر زمان که صفحه مجددا بارگیری میشود، از کاربر اجازه درخواست میکنند. مکانیسم ماژول hot-swap به این معنی است که میتوانیم کد جدیدی را بدون نیاز به تعامل دستی با هر یک از دستگاههای شنود به نوبه خود مستقر کنیم.
از آن نقطه به بعد، مشارکت من عمدتا این بود که در کنار لپتاپ بنشینم و با Fable 5.2 درباره آنچه در حال رخ دادن است صحبت کنم و گهگاه درخواست ویژگیهای جدید کنم. در اینجا برخی از دستورات ویژگی که اجرا کردم آمده است:
فکر میکنم باید این کار را انجام دهیم تا بتوانم چیزها را روی نقشه در "حالت ناهموار" بکشم، جایی که وظیفه من این است که آنها را تقریبا در جایی که هستند قرار دهم، سپس از حالت خشن خارج شوم و تلاش میکند آنها را دقیق نشان دهد.
این به من این توانایی را داد که شنوندگان را در اطراف نقشه بکشم.
من تعجب می کنم راه خوبی برای آزمایش این برای من چیست؟ آیا میتوانیم آن را بخواهیم برای کف زدن گوش کند، سپس من میتوانم کف بزنم و بتواند محل کف زدن را شناسایی کند؟ [...]
Claps باید از نمادی متفاوت از بوق روی نقشه استفاده کند
این چیزی را اضافه کرد که هر بار که دست می زدم به عنوان نمادی متفاوت از بوق ها روی نقشه نشان داده می شد.
هر نماد روی نقشه باید دارای مهر زمانی HH:MM:SS باشد
این امر تشخیص اینکه کدام نماد احتمالا کدام صدای دنیای واقعی را منعکس می کند آسان تر می کند.
گزارش باید بوق ها و کف زدن ها را با مهرهای زمانی خود نشان دهد و یک دکمه پخش کوچک داشته باشد که با کلیک کردن، نویز ضبط شده از هر یک از شنوندگان را به ترتیب (با متن واضح روی صفحه نشان می دهد که کدام شنونده کدام قطعه را ضبط کرده است) را پخش می کند و در حین پخش مجدد، ضبط میکروفون را موقتا خاموش می کند.
حالا میتوانستم صداها را دوباره پخش کنم و تشخیص اینکه کدام کلیپ ضبطشده همان بیپ مرموزی است که به دنبالش بودم، بسیار آسانتر میشود.
باید یک دکمه در کنار صدای ضبط شده برای "This is the Mystery Beep" وجود داشته باشد - سپس می توانم پخش مجدد را فشار دهم تا ببینم و سپس تأیید کنم که صدای مرموز بوده است اگر به دنبال آن هستم.
سپس سیستم میتواند نویزها را در آینده دستهبندی کند تا ببیند آیا به احتمال زیاد همان بوق مرموز وجود دارد یا خیر و از آن اطلاعات برای ایجاد ایده دقیقتری از مکان استفاده کند.
در این مرحله داشتم نزدیک میشدم - تصور دقیقی از اینکه صدای بوق از کجا میآید، داشتم، اما آیا اگر بتوانم شنوندگان را در اطراف آن نقطه تغییر موقعیت بدهم تا مکان دقیقتری داشته باشم، خوب نیست؟
من یک ویژگی برای این میخواهم، نمیخواهم مجبور باشم هر دستگاه شنود را دوباره راهاندازی کنم، میخواهم بتوانم روی دکمه «Reposition the devices» کلیک کنم که به من امکان میدهد تغییر موقعیت بدهم، سپس روی «Repositioned» کلیک میکنم و من را در حالت Rough قرار میدهد و از من میخواهد که تقریبا آنها را پیدا کنم، سپس این کار را انجام میدهم و کلیک میکنم، سپس دوباره راهاندازی میشود. جلسه قبلی را می توان از طریق برنامه فقط خواندنی مشاهده کرد.
و از آنجایی که من یک دستگاه یدکی داشتم، گفتم:
بر اساس دادههای جمعآوریشده تا کنون، یک ویژگی اضافه کنید که در آن نقشه شامل یک نقطه باشد که پیشنهادی برای مکانی است که افزودن شنونده در آن مفید است.
فکر میکنم جالبترین بخش این پروژه این است که نشان دادم که میتوان به کلود کد گوش داد.
کلود (هنوز ورودی صوتی بومی) ندارد، اما می تواند کدهای جاوا اسکریپت و پایتون را اجرا کند که می تواند صدای ضبط شده توسط میکروفون را تجزیه و تحلیل کند.
من به آن گفتم که یک وب سرور با اتصال WebSocket به چندین دستگاه شنود اجرا کند، سپس آن را هم یک میکروفون WebAudio روی آن دستگاه ها اجرا کند و هم آنها را متصل کند تا بتوانند کد جاوا اسکریپت جدید را برای اجرا از طریق آن WebSocket ارسال کنند.
سپس تقریبا میتوانم کلود را تنها بگذارم، مشکل را هک کند، گزارشهای صوتی را جستجو کند، و گوشهایش را دوباره پیکربندی کنم تا به حل مشکل کمک کند.
یاد هک مشابهی افتادم که چند هفته پیش در GitHub Universe درباره آن شنیدم، جایی که مارتین وودوارد به من گفت که رایانههای نشان GitHub Universe را با وصل کردن آنها به رایانه از طریق USB-C و سپس نشان دادن وبکم به روی صفحهشان، اشکال زدایی میکرده است، بنابراین عامل برنامهنویسی او میتواند تشخیص دهد که آیا بهروزرسانیها درست کار میکنند یا نه.
کشف راه هایی که به عوامل برنامه نویسی اجازه دهید دنیای اطراف خود را درک کنند بسیار سرگرم کننده است.
متن اصلی (انگلیسی)
Locating the source of a mysterious beep
Article URL: https://simonwillison.net/2026/Nov/9/mysterious-beeps/ Comments URL: https://news.ycombinator.com/item?id=50434310 Points: 312 # Comments: 161