TGViewer
Channel Public Channel
نوشته‌های ترمینالی

نوشته‌های ترمینالی

@terminal_stuff

virgool.io/@rsharifnasab
github.com/rsharifnasab
Subscribers
3.51K
Photos
434
Videos
12
Links
2.4K

Showing posts older than #3262 · Back to latest

Older Posts 20 shown
Post #3260 1.94K

Forwarded from Zoomit | زومیت

روایتی از ۵ روز نفس‌گیر؛ زومیت چگونه هک شد و چه درس‌هایی گرفتیم؟

🔺هک شدن زومیت یک بحران پنج روزه را رقم زد؛ حمله‌ای سایبری که از لایه مجازی‌سازی شبکه داخلی شروع شد و دسترسی به سرویس‌ها را مختل کرد. پس از تلاشی نفس‌گیر، زیرساخت‌ها کاملاً ایمن شده و سرویس‌ها بازگشته‌اند.

🔺مسعود یوسف‌نژاد، مدیرعامل زومیت، جزئیات فنی این نفوذ، آسیب‌ها و راهکارهای بازیابی را در یک ویدیو تشریح می‌کند. هدف، انتقال تجربه‌ است تا دیگر کسب‌وکارها مسیرهای نفوذ مشابه را بشناسند و از بروز چنین رخدادهایی پیشگیری کنند. این یک مسئولیت اجتماعی برای شفافیت و کمک به جامعه فناوری است.

#ویدیو #زومیت

🔗 جزئیات فنی هک زومیت و راهکارهای امنیتی

🆔 @thezoomit
  • ❤ 3
  • 🔥 2
Post #3259 2.15K
توی طراحی دیتابیس، یک سری قاعده داریم به اسم Armstrong Axiom.

این‌ها در واقع یه سری قانون رسمی برای استنتاج Functional Dependency‌ها هستن؛ یعنی کمک می‌کنن بفهمیم از روی یه‌سری وابستگی، چه وابستگی‌های دیگه‌ای منطقی نتیجه می‌شن.
کاربردش؟ وقتی می‌خوایم نرمال‌سازی انجام بدیم، کلید کاندید پیدا کنیم یا بررسی کنیم یه decomposition درسته یا نه.

این ویدیو رو خیلی رندوم پیدا کردم ولی خیلی خوب و تمیز توضیح داده. اگه به بحث‌های تئوری دیتابیس علاقه دارید، مخصوصاً بخش dependency و نرمال‌فرم‌ها، توصیه می‌کنم حتماً ببینید.
https://www.youtube.com/watch?v=TWAiz3BWHsw&t=7s
YouTube Armstrong's Axioms I hope this video will help you understand how Armstrong's Axioms are used in database design. When I learn the theory I had a hard time to explain it without the math, so I decide to use PowerPoint to explain the way I see the axioms working within my imagination.…
  • ❤ 4
  • 👍 3
Post #3258 2.43K
وقتی با AI کدی تولید میکنیم چطوری باهاش رفتار کنیم؟ به عنوان درفت اولیه در نظر بگیریمش. ریویو کنیم، به نحوی که انگار یک جونیور نوشته و بعد مسئولیت کد رو ما قبول کنیم.

مطلب جالبی بود و من دیدش رو دوست داشتم.

https://addyo.substack.com/p/treat-ai-generated-code-as-a-draft
Substack Treat AI-Generated code as a draft Keep human eyes, judgment, and ownership at the center of AI written code
  • ❤ 7
  • 👌 6
  • 🤬 1
Post #3257 1.97K
مساله ژنرال‌های بیزانسی: چرا رسیدن به اجماع سخته؟

یکی از کارهای جالب دیگه‌ی لزلی لمپورت، طراحی یک مساله ذهنی به اسم ژنرال‌های بیزانسی و مطرح کردن خطای بیزانسی بود. تو این مساله چند تا ژنرال وجود دارد و می‌خوان به توافق برسن که یا همه با هم حمله کنن یا همه با هم حمله نکنن ولی چالش‌هایی دارن مثلا پیام‌هاشون به همدیگه ممکنه نرسه یا چند تا imposter بینشون باشه.
لازم به ذکره که این مساله توی بلاکچین هم خیلی کاربرد داره و بهش توجه می‌شه چون عملا رسیدن به اجماع در مورد این که چی در سیاهه‌/ledger بیتکوین (برای مثال) وجود داره خیلی برای کارکرد شبکه مهمه.


توضیح فارسی خوب:
https://blog.magicbytes.ir/byzantine-generals-problem/

توضیح اولیه با ویدیو:
https://www.youtube.com/watch?v=dfsRQyYXOsQ

توضیح خوب صورت سوال و جواب:
www.youtube.com/watch?v=Bvj72wN0OVk
  • ❤ 4
Post #3256 1.65K

Forwarded from Armon technical logs (armon Taheri)

من حفظ کرده بودم که کانتینر از طریق دو فیچر c group و namespace ایزوله سازی می‌کنه ولی درک کاملی نداشتم که دقیقا معنیش چیه
این ویدیو پرکتیکال کانتینر رو با محوریت ایزوله سازی از اسکرچ پیاده سازی می‌کنه
https://youtu.be/MHv6cWjvQjM
YouTube What Have Namespaces Done for You Lately? Liz Rice - Technology Evangelist, Aqua Security Containers are made with namespacing and cgroups, but what does that really mean? In this talk we'll write a container from scratch in Go, using bare system calls, and explore how the different namespaces affect…
  • ❤ 7
  • 👍 3
Post #3255 1.99K
ساعتی که توی سیستم‌ها داریم معمولا با یه کریستال کوارتزی کنترل می‌شه و خب خطا هم داره. برای حل خطاش معمولا سیستم‌ها به یکسری سرور وصل می‌شن و تایمشون رو آپدیت می‌کنن، مثلا با پروتوکل NTP (یا همون network time protocol) که خیلی پروتوکل جالبیه و پیچیدگی‌های بامزه‌ای رو حل می‌کنه (ویدیوی اول رو ببینید)
این تنظیم زمان اگرچه خوبه اما یه گارانتی مهم رو از سیستم حذف میکنه: زمان دیگه فقط صعودی نیست!‌ ممکنه بین دو بار پرسیدن زمان، زمان اول از دوم بیشتر باشه!
این موضوع به همراه تاخیر شبکه و این که دقت NTP هم بینهایت نیست باعث می‌شه که ما نتونیم تو یه سیستم distributed با خوندن تایم فعلی سیستم و مقایسه‌ش با تایم فعلی یک سیستم دیگه، بفهمیم کدوم یکی از اتفاقات زودتر افتاده.
لزلی لمپورت در مقاله معروفش به این مشکل پرداخته.
Time, Clocks, and the Ordering of Events in a Distributed System

لزلی لمپورت در اصل فیزیک‌دان بوده و با دید فیزیک وارد distributed systemها می‌شه و چیزهای جالبی مثل الگوریتم Paxos و جنرال‌های بیزانسی (یا تحمل خطای بیزانسی) رو اختراع کرده.

لمپورت در زمینه ساعت‌ها یه مدل ارائه می‌ده که در اصل یه شمارنده‌ست که سیستم نرم‌افزاری بر اساس اتفاقاتی که برای خودش می‌افته یا پیام‌هایی که می‌فرسته یا می‌گیره بروزرسانی می‌کنه. این ساعت دیگه سعی نمی‌کنه «زمان واقعی دنیا» رو اندازه بگیره، بلکه فقط ترتیب علّی (causal ordering) اتفاقات رو مدل می‌کنه؛ یعنی اگر رویدادی باعث رویداد دیگه‌ای شده باشه، عدد ساعتش هم این رابطه رو حفظ می‌کنه. به این ترتیب بدون اینکه به ساعت فیزیکی یا هماهنگ‌سازی جهانی وابسته باشیم، می‌تونیم بفهمیم کدوم اتفاق قبل از کدوم یکی رخ داده و از همین مفهوم ساده، کلی الگوریتم و تضمین مهم در سیستم‌های توزیع‌شده ساخته می‌شه.


https://www.youtube.com/watch?v=Ihm6AYNFUKA
https://sookocheff.com/post/time/lamport-clock/
https://martinfowler.com/articles/patterns-of-distributed-systems/lamport-clock.html
https://lamport.azurewebsites.net/pubs/time-clocks.pdf
YouTube الپیک ۱ - ۰۶۲ - ماجول ۱۰۸.۱ - ۲/۲ - مدیریت زمان سیستم، سرویس‌های تنظیم زمان بر اساس NTP نگهداری زمان در سیستم‌عامل بسیار مهم است. برای کارهای مختلف، دانستن زمان دقیق الزامی است و در نتیجه حتی زمانی که کامپیوتر خاموش است هم باید بتواند زمان را تا حدی نگهداری کند تا بتواند در زمان روشن شدن، به عملکرد صحیح خود ادامه دهد. در بخش قبلی با زمان سنج…
  • ❤ 17
  • 👍 1
  • 👎 1
Post #3253 2.21K
یکی از مسائل دنیای واقعی که توی سیستم‌های distributed خیلی کاربرد داره به اجماع رسیدنه (یا همون consensus)
مساله از این قراره که ما کامپیوترهای متفاوتی داریم که از طریق شبکه با هم در ارتباط هستن ولی ممکنه هم خودشون از کار بیفتن هم شبکه به درستی کار نکنه و تاخیر داشته باشه. پس نیاز داریم با یکسری مکانیسم کاری کنیم به اجماع برسن و حالت‌های متفاوت مثل کرش سیستم های مختلف یا از دست رفتن شبکه‌شون (partition شدن اصطلاحا) رو در نظر بگیریم.

راه‌های ساده و ابتدایی برای این قضیه 2 phase commit و 3 phase commitئه که مشکلات خاص خودشو داره مثلا سیستم بلاک می‌شه تا همه جواب بدن.
روش‌های بهتر شامل Paxos میشه که تضمین‌های خوبی در زمینه ددلاک نشدن سیستم (liveness) و تحمل خطای بالاتر داره ولی روش نسبتا پیچیده‌ایه، هم از نظر فهم هم از نظر پیاده‌سازی. نسخه‌ی ساده‌تر و قابل پیاده‌سازیش ارائه شده به اسم Raft که همون تضمین‌ها رو می‌ده همچنان در عین سادگی.

یه قسمت paxos که برام جالب بود هم براتون توضیح می‌دم: توی paxos، پروپوزال در واقع یه پیشنهاده که یه نود (proposer) برای انتخاب شدن یه مقدار می‌فرسته. هر پروپوزال یه شماره‌ی یکتا و صعودی داره که ترتیب و اولویت رو مشخص می‌کنه. نودها (acceptorها) فقط به پروپوزالی جواب مثبت می‌دن که شماره‌ش از همه‌ی شماره‌هایی که قبل‌تر دیدن بزرگ‌تر باشه. این مکانیزم شماره‌گذاری باعث میشه حتی با وجود رقابت چند proposer یا کرش بعضی نودها، در نهایت فقط یه مقدار به عنوان مقدار نهایی انتخاب بشه و خاصیت safety حفظ بشه.


در اینجا خوبه به Byzantine Failure هم اشاره کنم. تا اینجا خطایی که باهاش مواجه بودیم این بود که سیستم کرش کرده یا قابل دسترس نیست ولی پاسخ غلط نمیده ولی مدل خطا ممکنه این باشه که سیستم به خاطر نویز یا هرچیزی پاسخ غلط هم می‌ده. در این حالت الگوریتم‌های دیگه‌ای استفاده میشه و تعداد خطای کمتری رو می‌تونن تحمل کنن. مثلا اگر paxos تا نصف خطا رو تحمل می‌کنه، روش‌هایی که خطای Byzantine رو تحمل می‌کنن نهایتا تا یک سوم خطا رو تحمل میکنن.

https://en.wikipedia.org/wiki/Consensus_(computer_science)
https://en.wikipedia.org/wiki/Two-phase_commit_protocol
https://en.wikipedia.org/wiki/Paxos_(computer_science)
  • 👍 6
  • ❤ 3
  • 🤔 1
Post #3252 1.9K
چطور سرویس‌های ایمیل متوجه میشن ایمیل از سرور درستی بهشون رسیده؟

SPF, DKIM, and DMARC help authenticate email senders by verifying that the emails came from the domain that they claim to be from. These three authentication methods are important for preventing spam, phishing attacks, and other email security risks.


https://www.cloudflare.com/learning/email-security/dmarc-dkim-spf/
Cloudflare What are DMARC, DKIM, and SPF? SPF, DKIM, and DMARC help authenticate email senders by verifying that the emails came from the domain that they claim to be from. These three authentication methods are important for preventing spam, phishing attacks, and other email security risks.
  • 👍 4
  • ❤ 1
Post #3251 2.11K
یکسری مسائل دنیای واقعی هستن که توی کامپیوترها هم پیش میان، مخصوصا توی شبکه و سیستم‌های توزیع‌شده، این جور چیزها زیاد وجود داره.

یکی از ساده‌ترین مشکلات که اینه که بفهمیم یک کامپیوتر دیگه توی شبکه زنده هست یا نه. یکی از کاربردهاش توی باز نگه داشتن سوکت tcpئه. سیستم ما لازم داره بدونه این کانکشن tcpای که باز کرده و الان دیتایی توش نمیاد آیا به خاطر اینه که دیتای خاصی نداریم به هم بفرستیم یا اصلا سمت مقابل سرور در دسترس نیست و الکی منابع سیستم رو مشغول نگه نداریم و کاربر رو امیدوار نکنیم.

راه اولی که به ذهن میاد اینه که به طرف مقابل بگیم هروقت داشتی خاموش می‌شدی خبر بده. اگرچه که این روش برای یکسری حالت‌ها مثل خاموش شدن سیستم جواب میده (سیستم عامل طرف مقابل می‌تونه پیام خاتمه بفرسته گ) ولی خیلی حالت‌ها هست که جواب نمی‌ده مثلا قطع شدن ناگهانی شبکه یا رفتن برق یا کرش داخل سیستم‌عامل و ...

راه دومی که به نظر میاد اینه که هر از گاهی حال کامپیوتر دیگه رو بپرسیم. این روش رو بهش heartbeat میگن و به این شکل کار می‌کنه که در بازه‌های منظمی پیام بدون محتوا برای طرف می‌فرستیم هم برای این که بگیم ما زنده هستیم هم برای این که طرف مقابل زنده بودن خودشو اعلام کنه.
همونطور که گفتم معمولا دو نقش متفاوت توی این ماجرا داریم. کامپیوتر مبدا که مدام heartbeat اولیه رو می‌فرسته و کامپیوتر مقصد که به اونا پاسخ می‌ده و اگر هم پاسخ نده مبدا متوجه می‌شه که مقصد از دست رفته و اگر مقصد چند تا heartbeat نگیره متوجه میشه مبدا از دست رفته. (البته خیلی بستگی به کاربرد و پیاده سازی داره)

https://en.wikipedia.org/wiki/Heartbeat_(computing)
  • ❤ 15
  • 👍 2
  • 👌 2
  • 🔥 1
Post #3249 2.54K
چطور یک سیستم online dating رو طراحی کنیم؟
به چشم سوال system design به تیندر نگاه کنید نکات جالبی می‌تونه داشته باشه.

https://www.systemdesignhandbook.com/guides/design-tinder/
System Design Handbook Design Tinder: How to Design a Scalable Dating App Learn how to design Tinder for System Design interviews. Explore architecture, matching, scalability, real-time chat, and common trade-offs in detail.
  • ❤ 6
  • 😁 5
  • 👍 2
Post #3248 3.73K
توی مهندسی نرم‌افزار، سعی می‌کنیم پیچیدگی یک نرم‌افزار بزرگ رو مدیریت کنیم و یکسری ابزار برای این کار هم داریم. یکی از بهترین ابزارها شکستن کد به ماژول‌های متفاوته. توی طراحی این ماژول‌ها سعی می‌کنیم چیزهای شبیه هم که به هم ربط زیادی دارن در یک ماژول باشن و در عوض چیزهایی که در ماژول‌های دیگه هستن خیلی ربطی به ماژول ما نداشته باشن.

اینجا دو تا مفهوم داریم که خوبه با اسم اصلیشون هم آشنا باشیم. Cohesion به وابستگی و شباهت داخل ماژول برمی‌گرده که انتظار داریم بالا باشه و سعی می‌کنیم بیشینه‌اش کنیم. اما Coupling به وابستگی بین یک ماژول و ماژول‌های دیگه برمی‌گرده و سعی می‌کنیم کمش کنیم.

این که انواع Coupling چیا می‌تونه باشه بسته به نرم‌افزار و سطحی که توش صحبت می‌کنیم می‌تونه خیلی متفاوت باشه ولی اگه بخوام ساده مثال بزنم ممکنه ماژول ما انتظار داشته باشه دیتای تولیدشده توسط یه ماژول دیگه یه جایی باشه. یا این که متدهای یک کلاس متدهای کلاس دیگری رو صدا بزنن.

در این زمینه تلاش‌های متفاوتی شده که به شکل عددی بیایم دو تا معیار رو اندازه‌گیری کنیم ولی من چیز به درد بخور عملی‌ای ندیدم!

https://en.wikipedia.org/wiki/Coupling_(computer_programming)
  • ❤ 18
  • 👍 1
Post #3247 4.89K
من اعتقاد دارم برنامه نویسی یاد گرفتن پیش‌نیاز کار به عنوان برنامه‌نویس یا مهندس نرم‌افزار یا شغل های مشابه هست، ولی اصلا کافی نیست، بلکه نیاز به دانش تئوری هم داریم که هم تو دانشگاه یاد میدن، هم جاهای دیگه میشه یاد گرفت.

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

فرض کنید که یک redis داریم که موقع ذخیره RDB در دیسک، با خطا مواجه می‌شه. در مرحله اول خطا رو می‌خونیم و سرچ میکنیم. خب خطای OOM داریم یعنی مموری پر شده، پس بیایم حافظه بیشتری بهش تخصیص بدیم، ولی این حافظه فقط برای ذخیره RDB استفاده میشه، پس آیا ارزش داره؟ احتمالا نه.
پس می‌تونیم چیکار کنیم؟ اگر با CoW یا همون copy on write و memory overcommit آشنا باشیم می‌دونیم که پروسسی از ردیس که قراره اطلاعات رو توی دیسک بنویسه، اگرچه فورکی از پروسس اصلیه ولی نیاز نیست همون مموری رو کپی کنه چون نیاز نیست write انجام بده و فقط میخواد اطلاعات رو بخونه. البته این رو سیستم‌عامل از قبل نمی‌دونه و مجبوره حافظه برای حالتی که پروسس بخواد در مموری خودش بنویسه در نظر بگیره. برای این که سیستم عامل بدونه بهش میگیم اجازه داری overcommit کنی! مسئولیتش با من.

https://redis.io/docs/latest/develop/get-started/faq/#background-saving-fails-with-a-fork-error-on-linux
Docs Redis FAQ Commonly asked questions when getting started with Redis
  • 👍 29
  • ❤ 5
  • ❤‍🔥 3
Post #3246 2.45K
دیروز نسخه جدید گولنگ بعد از ۶ ماه معرفی شد. نسخه 1.26.0 هم امکانات جدیدی داره هم بهبودهای پرفورمنسی خوبی داشته.

اول از همه، زباله‌روب (Garbage Collector) جدیدی که قبل‌تر معرفی شده بود، الان به طور پیش‌فرض فعاله و انتظار می‌ره که باعث بهبود پرفورمنس در اکثر workloadها بشه، البته که اگر دوستش نداشتید میتونید با یه متغیر محیطی غیرفعالش کنید.
نکته‌ی جالب برای من اینه که بعد از گذشت ۱۰ سال هنوز هم یکی از ویژگی‌های اساسی زبون بهبود پیدا می‌کنه و روی بازدهیش کار می‌شه.

بهبود های پرفورمنسی البته به همین خلاصه نمیشه و روی صدا زدن توابعی که با C نوشته شده (cgo) هم بهبود ۳۰ درصدی سربار رو داشتیم. اگه از کتابخونه‌هایی که با c نوشته شدن استفاده می‌کنید سعی کنید آپدیت رو در اولویت قرار بدید، مثلا confluent یا gmf یا h3.

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

یکسری بهبود tooling هم داشتیم که profiling و تشخیص go routine leak و بهبود ساب‌کامند go fix جزوشه.

اطلاعات بیشتر در بلاگ رسمی گولنگ:
https://go.dev/doc/go1.26
go.dev Go 1.26 Release Notes - The Go Programming Language
  • ❤ 18
  • 👍 9
  • 👎 1
  • 🤬 1
Post #3245 2.75K
Post #3244 3.08K
دیپلوی در چهارشنبه (روز آخر هفته) مجاز باشه یا نه؟
این مطلب چیزهای خوبی میگه در این که کی خوبه مجاز باشه و کی نباشه و در نهایت تصمیم با خود تیمه.

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

https://charity.wtf/2025/12/24/on-friday-deploys-sometimes-that-puppy-needs-murdering-xpost/


و در ادامه این مطلب:
https://www.linkedin.com/posts/michael-davis-7033548_friday-deploy-freezes-are-exactly-like-murdering-activity-7408181339444707328-8GjS
  • ❤ 7
  • 😐 1
Post #3242 2.9K
یکی از بهترین مطالبی که خوندم:
چطور کد جدید رو ببریم روی پروداکشن؟ چقدر تست کنیم؟ محیط تست داشته باشیم؟ برای همه کاربرها فعال کنیم یا برای تعداد کمی؟
اگه تجربه پروداکشن نداشتید یا فقط تو شرکت های سایز مشخص کار کردید (یا فقط کوچک یا فقط بزرگ) بهتون توصیه میکنم بخونید.
  • ❤ 5
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →