An Inspired Engineer – Telegram
An Inspired Engineer
1.32K subscribers
63 photos
17 videos
4 files
91 links
اینجا در مورد performance, distributed systems و کرنل لینوکس مینویسم

https://aieideas.com/
Download Telegram
درود دوستان

سال جدیدتون مبارک باشه و امیدوارم توی سال جدید چیزای جدید یاد بگیرین و بترکونین!

یه مدته فعالیتم کم شده ولی دیگه خیلی پست میزام و میترکونم اینجارو 🚀🤘


@knowpow
24💯1
اینم تارگت امسالمون 🚀

@knowpow
🔥49👍83👎2😢2🎉1
Forwarded from دِرَنـــگ
🔷 انتگرال‌گیرهای کلوین و ماکسول

داشتم دربارهٔ تاریخچهٔ کامپیوترهای آنالوگ جست‌وجو می‌کردم که به مقاله‌هایی از کلوین و ماکسول برخوردم. آن‌قدر نکات جالب و هیجان‌انگیز در این مقاله‌ها و مرتبط با این مقاله‌ها پیدا کردم که حیفم آمد آن‌ها را با همراهان دِرَنــگ در میان نگذارم.

▪️ موضوع اصلی هر دو مقاله طراحی ابزارهایی است برای محاسبهٔ انتگرال‌های معین. شاید امروز کسانی مانند کلوین و ماکسول بیشتر به‌عنوان فیزیک‌دان نظری شناخته شوند ولی در زمان خودشان ترکیبی از ریاضی‌دان، فیزیک‌دان و مهندس بوده‌اند.

▪️مقالهٔ کلوین در سال ۱۸۷۶ در مجله‌ٔ
Proceedings of the Royal Society of London
چاپ شد. عنوان مقاله‌اش این است: «دربارهٔ ابزاری برای محاسبهٔ انتگرال حاصل‌ضرب دو تابع داده‌شده».

در ابتدای مقاله توضیح می‌دهد که مدت‌های طولانی داشته به طراحی ابزاری فکر می‌کرده که با آن بتوان محاسبات سنگین انتگرال‌های معین را به‌سادگی انجام داد. دلیلش هم این بوده که برای پیدا کردن تبدیل فوریهٔ توابع نیاز به محاسبه‌ٔ این انتگرال‌ها داشته. طرحی به ذهنش می‌رسد و طرح را با برادرش در میان می‌گذارد:

«ماشین پیشنهادی خود را چند روز پیش برای برادرم پروفسور جیمز تامسون توضیح دادم و او در پاسخ دربارهٔ نوعی انتگرال‌گیر مکانیکی برایم صحبت کرد که سال‌ها پیش به ذهنش رسیده بود ولی هیچ شرحی از آن منتشر نکرده بود. فوراً متوجه شدم که ماشین او خیلی ساده‌تر از هرآنچه قبلاً به آن فکر کرده بودم مرا به هدفم می‌رساند. گزارشی از انتگرال‌گیر او در همین شماره از مجله‌ٔ انجمن سلطنتی همراه با مقالهٔ‌ حاضر منتشر می‌شود.»

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

▪️گزارش جیمز تامسون دربارهٔ ماشین انتگرال‌گیری‌اش هم در همین شماره از مجله و قبل از مقالهٔ کلوین آمده است: «دربارهٔ یک ماشین انتگرال‌گیری با یک اصل سینماتیکی جدید». در همین مقاله به کارهای ماکسول و مقالهٔ او در این زمینه اشاره شده است. مقالهٔ ماکسول بیش از بیست سال قبل از آن، یعنی در سال ۱۸۵۵، در مجله‌ٔ
Transactions of the Royal Scottish Society of Arts
چاپ شده بود. تامسون می‌گوید که ماکسول ایدهٔ کارش را از ماشین انتگرال‌گیری دیگری گرفته بود که در سال ۱۸۵۱ در نمایشگاه بزرگ لندن دیده بود. آن ماشین از نظر ماکسول ایرادهایی داشت و برای رفع آ‌ن‌ها خودش شروع کرده بود به طراحی یک ماشین دیگر.

▪️نمایشگاه بزرگ (Great Exhibition) که جیمز تامسون از آن یاد می‌کند نمایشگاهی بین‌المللی از اختراعات و تولیدات صنعتی بود که در سال ۱۸۵۱ در هایدپارک لندن برگزار شد. نمایشگاه بیش از پنج ماه دایر بود و بیش از شش میلیون نفر از آن بازدید کردند. (لطفاً یک بار دیگر به عددها توجه کنید!)

▪️نکته‌ای که در همه‌ٔ این مقاله‌ها جلب‌توجه می‌کند این است که متن آن‌ها را تقریباً به راحتی متن‌های امروزی می‌توان خواند. بازهٔ زمانی میان انتشار این دو مقاله (۱۸۵۵ تا ۱۸۷۶) حدوداً مقارن است با نیمهٔ اول دوره‌ٔ سلطنت ناصرالدین‌شاه. بعید می‌دانم متن‌‌های فارسی آن دوره را بتوان به راحتی متن‌های فارسی امروزی خواند.

▪️حالا که داریم تاریخ‌ها را مقایسه می‌کنیم، شاید بد نباشد به این هم اشاره کنیم که نمایشگاه بزرگ لندن در همان سالی برگزار شد که دارالفنون تأسیس شد.

▪️مقاله‌های کلوین و برادرش را می‌توانید در این فایل پی‌دی‌اف ببینید. در این فایل دو مقالهٔ کوتاه دیگر هم هست که در آن‌ها کلوین به کاربرد ماشین انتگرال‌گیر برای حل معادله‌های دیفرانسیل می‌پردازد.

▪️مقالهٔ ماکسول در کتابی که دانشگاه کمبریج از مجموعه‌ٔ مقاله‌های علمی او منتشر کرده بازنشر شده است (مقالهٔ شمارهٔ ۹). سال چاپ نخست این مجموعه ۱۸۹۰ است؛ یازده سال پس از درگذشت ماکسول. طرح‌وارهٔ ماشین پیشنهادی ماکسول را هم در انتهای همین مجموعه می‌توانید پیدا کنید.

▫️مطالعه‌ٔ تاریخ علم همیشه آموزنده و هیجان‌انگیز است. واینبرگ هم در چهار درس طلایی‌اش تأکید می‌کند که از مطالعه‌ٔ تاریخ علم غافل نشوید.

@k1samani_channel
👍152😢1
An Inspired Engineer
اپدیت پروژه‌ی market data handler:
خب گفتم که هدفم zero context switch هست و باید برای اون معماری رو تغییر میدادم، حالا کاری که کردم اینه که اومدم یه io_context تعریف کردم که هر فید برای خودش، تایمراش و کانکشنایی که داره با این context کار میکنن، یعنی فرض کنین من میخوام با binance_feed وصل بشم به بایننس و مجبورم براش یه io context بسازم، هر io context یه ترد داره که میاد boost::asio::io_context رو روی یه ترد پین میکنه و روی اون اجرا میکنه.

حالا قسمت زیبای ماجرا اینجاست که این io context رو حتما باید به یه هسته ی cpu پین کنیم تا کرنل نیاد با عشق خودش بین هسته ها این ترد رو بازی بده، پس تا اینجا داریم که یه io context میسازیم و به یه هسته پینش میکنیم و بعد پاس میدیم به یه feed.

این پیاده سازی چند تا دلیل اصلی داره:

۱- من دارم کتابخونه توسعه میدم، پس نباید جای کاربر استفاده کننده تصمیم بگیرم که کدوم ورکر باید روی کدوم ترد اجرا بشه، باید تصمیم گیری روش تردینگ رو به خودش واگذار کنم، شاید بخواد اصلا همه ی feed هاش روی یه هسته باشه. شایدم بخواد بگه binance بره رو هسته ی اول، نوبیتکس بره روی هسته ی دوم و...

۲- الان داریم میگیم که binance_feed که روی هسته ی اول پین شدی بیا و فقط جفت btcusdt رو شما داشته باشه، بعد یه binance_feed_2 بسازیم حالا پینش کنیم روی هسته ی دوم بعد بیاییم بگیم که اوکی تو بیا فقط ethusdt رو داشته باش. اینجوری ما اومدیم یه کانکشن مخصوص ethusdt ساختیم که همه چیش روی یه هسته اس و اصلا context switch نداره، و بدون دخالت با btcusdt داره کارش رو انجام میده.

برای ورژن اول فقط میخوام کار کنه و بعد بریم توی عمق پرفورمنس و سی++

سوالی بود بپرسید، بریم ببینیم چی میشه

این پروژه در راستای این پیامه.

#market_data_handler

@knowpow
🔥9👍3
نحوه ی observe کردن یه جفت توی پیاده سازی جدید:

این پروژه در راستای این پیامه.

#market_data_handler

@knowpow
👍71👎1
An Inspired Engineer
خب گفتم که هدفم zero context switch هست و باید برای اون معماری رو تغییر میدادم، حالا کاری که کردم اینه که اومدم یه io_context تعریف کردم که هر فید برای خودش، تایمراش و کانکشنایی که داره با این context کار میکنن، یعنی فرض کنین من میخوام با binance_feed وصل…
نیازه که برای پایین‌ اوردن Context Switching کرنل رو تغییر بدیم؟!

الان نیازی به تغییر کرنل نیست، چون حتی اگه کرنل رو هم اپتیمایز کنیم، برنامه‌های خارج از کنترل ما مثل سرویس‌های دیگه همچنان ممکنه روی همون هسته‌ی CPU اجرا بشن، حتی ممکنه که چند تا هسته رو کاملاً اختصاص بدی به پروسس خودت طوری که حتی کرنل و تردهای دیگه اصلاً اونجا اجرا نشن! اینا دیگه میره تو کارای دواپس فکر کنم که کانفیگ کرنل رو باید یکم تغییر بدن و به ما بگن که کدوم هسته های برای ما تخصیص شده تا ترد رو بهشون پین کنیم

‏هدف من تو این فاز اینه که برنامه‌ ی خودم رو طوری طراحی کنم که خودش باعث Context Switch نشه، یعنی با thread migration یا lock contention کش CPU رو reset نکنه. فقط در صورتی میرم سمت کانفیگ کرنل که بدونم سیستم نهایی قراره روی سرور خاصی مثل multi-socket بیاد دیپلوی بشه یا بخوام واقعا بوست کنم سیستم رو (که توی دنیای واقعی هم میشه و انجام میدن)

‏مورد بعدی که میشه باهاش بازی کرد همین Preemption هست، همون ماجرایی که کرنل وسط اجرای یه thread میاد اونو متوقف میکنه تا یه task با اولویت بالاتر رو اجرا کنه، شاید بگین مگه مریضه؟ نه اقا این رفتار ذاتیه توی کرنل‌هایی مثل لینوکس که Preemptive Scheduling هستن. که اونم با pthread میشه تنظیم کرد

سوالی بود بپرسید، بریم ببینیم چی میشه

این پروژه در راستای این پیامه.

#market_data_handler

@knowpow
👍9🔥2
راستی این ریپو خیلی قشنگ و تمیزه، برای یادگیری

یکی از بهترین سورسا برای یادگیری معماری‌های async و سیستم‌های real-time با performance بالا، مخصوصاً وقتی بخواین درک عمیقی از memory management، threading، و IO داشته باشین.

این Seastar یکی از خفن‌ترین انجین‌های event-driven برای C++ هست. طراحی‌ شده تا با حداکثر performance روی ماشین‌های چند هسته‌ای کار کنه، مخصوصاً با zero-copy و thread-per-core architecture. همین باعث شده پایهٔ ScyllaDB باشه، که یه جایگزین سریع‌تر برای Cassandra محسوب میشه.

معماری thread-per-core architecture همون معماریه که ما هم برای پروژه ی market استفاده میکنیم. بهش Shared-nothing هم میگن. در موردش مینویسم حتما خیلی خفنه

https://github.com/scylladb/seastar

@knowpow
24💯1
Please open Telegram to view this post
VIEW IN TELEGRAM
19😁3
چرا از بوست متنفرم:
یک و نیم روز دقیقا وقتم رو گرفته تا بیلدش کنم، اخرشم اینه!

داستان اینه که میخوام پروژه ای که برای یه برد arm embedded linux نوشتم رو کامپایل کنم، چون زور چیپست خود برد به کامپایل نمیرسه میاییم روی یه سیستم قوی تر با معماری متفاوت حتی بیلد و کامپایل میکنیم و بعد باینری رو به معماری مدنظرمون انتقال میدیم.

@knowpow
🔥7😁6👏2🤔1
زیون ابزاره، تکنیک یاد بگیرید
👍322
An Inspired Engineer
راستی این ریپو خیلی قشنگ و تمیزه، برای یادگیری یکی از بهترین سورسا برای یادگیری معماری‌های async و سیستم‌های real-time با performance بالا، مخصوصاً وقتی بخواین درک عمیقی از memory management، threading، و IO داشته باشین. این Seastar یکی از خفن‌ترین انجین‌های…
امروز اومدم اینو بالاخره بیلد گرفتم تا اجراش کنم، خیلی راحت با اسکریپتایی که خودشون نوشته بودن رو مانجارو تونستم بیلد بگیرم.

چرا میگم راحت؟ چون اکثر پروژه های اینجوری رو کسی دانلود و بیلد نمیکنه مگه اینکه واقعا بخواد مشارکت کنه، اوناییم که مشارکت میکنن فکر میکنن مشکل بیلد نشدن با اسکریپت های خود پروژه فقط مختص سیستم خودشونه و بقیه ندارنش و اگه داشتن حتما جامعه حلش میکرد. در حالی که یه اسکریپت خوب برای بیلد باید بتونه ورژن کتابخونه های استفاده شده رو با ماشینی که داره روش بیلد میشه تطبیق بده و اگه مشکلی یا کانفلیکتی هست اعلام کنه، مثلا ریپوی redpanda اصلا برای آرچ کامند نداره و کسی هم چیزی اضافه نکرده. یه عالمه باهاش سر و کله زدم اخرش سر نسخه‌ی ssl ترکید، حالا من باید برم همه داکیومنتا رو زیر و رو کنم ببینم چه ورژنی استفاده میکنن، در حالی که همین کارو اسکریپت install-deps میتونست خیلی بهتر انجام بده


@knowpow
🔥8👍3😢1
پنهان کاری جدید متا بروی اندروید

گویا متا با استفاده از پورت‌های UDP باز روی localhost که نیازی به مجوز یا هشدار از سمت مرورگر یا سیستم‌عامل نداشت، از WebRTC برای جابجایی کوکی _fbp تو فیلد ice-ufrag و ارسال اون به اپ‌ های Facebook/Instagram روی پورت‌های 12580–12585 (و بعد 12586–12591) استفاده می‌کرد تا لینک بین کوکی های وب و شناسه‌های کاربری موبایل برقرار بشه.

حالا دلیل اینکه از webRTC استفاده کردن چیه؟

اپ‌ های فیسبوک و اینستاگرام با دسترسی ساده به INTERNET یک socket UDP روی loopback (127.0.0.1) تو پورت 12580 تا 12585 باز می‌کنن و مرورگرها هم بدون اجازه کاربر می‌توانند به این پورت‌ها پکت UDP بفرستن، و از اونجایی که API‌ خام UDP/TCP تو JS وجود نداره تنها مسیری که اجازه ارسال بسته‌های UDP رو بهشون میده استفاده از WebRTC بوده، بعد اپ‌های متا این بسته رو دریافت و کوکی رو استخراج میکنن و با توکن کاربر و مشخصاتش به سروراشون میفرستن.

با این تکنیک هر اپ آلوده‌ای که روی این پورت‌ ها گوش بده میتونه تاریخچه مرور و داده‌های کاربر رو به دست بیاره.

گزارش کاملش:
https://localmess.github.io/

@knowpow
👍22😁2
An Inspired Engineer
پنهان کاری جدید متا بروی اندروید گویا متا با استفاده از پورت‌های UDP باز روی localhost که نیازی به مجوز یا هشدار از سمت مرورگر یا سیستم‌عامل نداشت، از WebRTC برای جابجایی کوکی _fbp تو فیلد ice-ufrag و ارسال اون به اپ‌ های Facebook/Instagram روی پورت‌های 12580–12585…
البته یکم در مورد اجرا توی بک‌گراند توی گزارش اغراق کرده که من فکر نمیکنم اینطور باشه، بنظرم وقتی اپ های متا باز باشن یا توی بک گراند باشن این اتفاق میوفته

یا حداقل برای صفحاتی که توی وب ویو داخلی اپ های متا باز میشن انجام میشه

@knowpow
👍7
Forwarded from logcat (Ali Nasrabadi .)
جلسه ۴۵ لاگ‌کت
جلسه بعدی لاگ‌کت سه‌شنبه ۲۷ خرداد ماه ۱۴۰۴ ساعت ۱۸:۰۰ تا ۲۰:۰۰ با حمایت «دیوار» برگزار خواهد شد.

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

🔸 شبکه سازی: توی این قسمت قراره بیشتر با همدیگه آشنا بشیم و درباره تجربیات هم بیشتر صحبت کنیم.

🔸 آدرس محل برگزاری: تهران، خیابان میرداماد، نبش نلسون ماندلا، پلاک ۴۰۴، ساختمان میکاناتس، آمفی‌تئاتر

لینک ثبت‌نام:https://evand.com/events/logcat45
🔥15
Audio
Mohsen Namjoo [SariMusic.IR]
دست به هر جای جهان که کشیدیم
سُر بود و بالا رفتن مشکل
هیچ بادامکی بر سفره ما نگذشت
هیچ کار معلوم نشد
به باد رفتیم بر هر چه که وزیده بود قبل از ما
وزیده بود باد فنا
دست به هر چیز زدیم، تکان ضربات تن بود
چند بار لرزیدیم؟ چند بار؟
چند بار گزش زنبور شد این کودکی را
چند بار آخ گفتیم،آنگونه که دل گریست
14
Forwarded from The Tofighi Times
ارتباط به سرویس‌های گوگل

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

روی کامپیوتر می‌شه با تریکی بقیه‌ی سرویس‌های گوگل رو هم باز کرد.
ایران الآن گوگل رو روی آی‌پی سیف‌سرچ باز کرده که ملت دیگه زیاد اعصابشون داغون نشه و حداقل گوگل داشته باشند. حالا می‌شه همین آی‌پی رو روی چیزای دیگه ست کرد و به بقیه‌ی سرویس‌های گوگل هم دسترسی داشت!

خب این هم یه چیز جالب دیگه:
این آی‌پی علاوه بر خود گوگل، می‌تونه gmail.com و mail.google.com و https://colab.research.google.com/drive/ و اینا رو هم پشتیبانی کنه.
برای همین مثلا با چنین تنظیمی من با نت ملی به جیمیل هم اکسس دارم:

در لینوکس، تغییر /etc/hosts و اضافه کردن این‌ها بهش:

216.239.38.120 google.com
216.239.38.120 www.google.com
216.239.38.120 mail.google.com
216.239.38.120 gmail.com
216.239.38.120 accounts.google.com
216.239.38.120 colab.research.google.com
216.239.38.120 ssl.gstatic.com
216.239.38.120 fonts.googleapis.com
216.239.38.120 lh3.googleusercontent.com
216.239.38.120 fonts.gstatic.com
216.239.38.120 www.gstatic.com
216.239.38.120 clients1.google.com
216.239.38.120 clients2.google.com
216.239.38.120 clients3.google.com
216.239.38.120 clients4.google.com
216.239.38.120 clients5.google.com
216.239.38.120 clients6.google.com
216.239.38.120 ogads-pa.clients6.google.com
216.239.38.120 play.google.com



بعد همین کارو توی ویندوز هم می‌شه کرد.

فایله توی ویندوز توی مسیر:
C:\Windows\system32\drivers\etc
هست. باید با Run As Administrator ادیت بشه.

مراقب باشید این فایل فایل مهمیه خرابش نکنید یه وقت.

@Tofighi_Times
👍177👏1
Forwarded from جادی | Jadi
به مناسبت شرایط جنگی و بی اینترنت و بقیه خباثت‌ها، محتوای دوره جدید «جامع پایتون» من در مکتبخونه حالا صد در صد رایگانه تا شاید کمکی باشه برای تمرین و یاد گرفتن و دور شدن از جنگی که برامون درست کردن.

برای تخفیف صد در صد، تیک «دسترسی کامل» رو بردارید، به سبد اضافه کنید و کد PEACE رو بزنید.

https://maktabkhooneh.org/course/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-mk346/
14👍3