Forwarded from جادی | Jadi
بحث دکوریتورها از بحث های نسبتا پیشرفته برنامه نویسی است و توی دوره جدید پایتون که دارم ضبط می کنم و احتمالا یکی دو ماه دیگه با مکتبخونه منتشر می شه پوشش دادم. بعد فکر کردم خوبه این تیکه رو انگلیسی هم ضبط کنم و نتیجه اش شد ویدئوی زیر. گفتم اینجا هم بذارم تا هم به نفع زبان انگلیسی مون بشه و هم زودتر از دوره مفهوم دکوریتورها رو (با استفاده از پایتون) خوب درک کنیم و شاید حتی خودمون هم بنویسیم.
Struggling with #Python decorators? 🐍 In this short video, I’ll simplify the concept, show why they’re useful, and how to create one step by step. Watch and start writing your own decorators today! 🚀 #Programming
https://youtu.be/0B01tgso7qw
Struggling with #Python decorators? 🐍 In this short video, I’ll simplify the concept, show why they’re useful, and how to create one step by step. Watch and start writing your own decorators today! 🚀 #Programming
https://youtu.be/0B01tgso7qw
YouTube
Master Python Decorators: A Hands-On Programming Guide
Confused about Python decorators? In this hands-on session, I’ll break down what decorators are, why they’re so powerful, and how you can use them in your own projects. From understanding the basics to writing your own custom decorators, this video is packed…
Forwarded from a pessimistic researcher (Kc)
“Sir, you are at risk of winning the argument.”
برای مرحوم E. Allen Emerson
—————————————————————
دو روز بعد اینکه تصمیم گرفتم در اینجا رو تخته کنم، یعنی ۱۶ اکتبر، توی توییتر دیدم که آقای Rajeev Alur اعلام کردند که متأسفانه آقای E. Allen Emerson فوت کردند. یادم میاد که روز خیلی تلخی بود اون روز. من از روزی که به شکل جدی وارد آکادمیک شدم همواره مشغول کار روی Model Checking بودم و حالا میبینم که دومین نفر از سه نفری که شروع کنندهی این داستان بودن فوت کردند. یادمه هفته بعدش یعنی ۲۳ اکتبر که روپاک سر کلاس Software Verification مبحث Enumerative Model Checking رو تموم کرد، درب ماژیک رو بست و بعد از چند ثانیه سکوت همراه با افسوس رو به ما کرد و گفت که جا داره یادی کنیم از Emerson که متأسفانه هفته پیش فوت کردند. واقعا از دست دادن ایشون یک افسوس بزرگ برای حوزهی ما خواهد بود، من در کنفرانسهای زیادی ایشون رو دیدم و باهاشون صحبت کردم و واقعا نمیدونم چطور بگم که چقدر انسان دوست داشتنیای بودند.
دوست داشتم همون روزی که این خبر رو فهمیدم بیام اینجا و چیزی بنویسم. همونطور که حدس میزدم هیچ یک از دوستان در کانالهاشون سخن و اشارهای به این خبر نداشتند و این غم لابهلای خیلی از سخنها و خبرهای شاید مهمتر محو شد. تا اینکه امروز یک سر ستون در والیوم ۶۷ ام مجلهی CACM که ۵ روز پیش منتشر شد خوندم که یادوارهی آقای Emerson بود و بهانهای دستم داد تا این خبر تلخ رو غبار روبی کنم.
آقای Allen Emerson زمانی که در Harvard دکتریشون رو با آقای Edmund Clarke شروع کردند تصمیم گرفتن که تز دکتریشون رو معطوف کنند به Verification ویژگیهای فرمالشده روی سیستمهای Finite-state. تقریبا یک روز که ایشون داشتن با Clarke در حیاط محوطهی Harvard قدم میزدن، اصطلاح Model Checking رو خلق کردند. ۲۵ سال بعد به پاس تلاشهای ایشون و آقای Clarke و آقای Joseph Sifakis برای خلق و توسعهی Model Checking و کاربرد موثر این تکنیک در Verification نرمافزارها و سختافزارها، به هر سهی این عزیزان جایزهی Turing Award اهدا شد. آقای Clarke متأسفانه در سال ۲۰۱۹ بر اثر ابتلا به بیماری کرونا فوت کردند و حالا هم نوبت به اولین دانشجوی دکتریشون رسید. شاید حالا که از آقای Clarke یادی کردیم، اشارهای کنیم به پستی با عنوان "صفحات پایانی ۳".
آقای Emerson دو منبع مهم الهامشون برای توسعهی مدل چکینگ رو مقالهی Proof of a Program : Find نوشتهی آقای Tony Hoare و یک سخنرانی از آقای Zohar Manna با عنوان Fixpoints and the Tarski-Knaster Theorem عنوان کردند. حالا که اسم این بزرگواران رو آوردم، بد نیست که ارجاع بدم شما رو به دو پست "ارمغان پیری" و "زهر منا".
آقای Emerson بعد از اتمام دکتریشون، وارد دپارتمان CS دانشگاه TU Austin در تگزاس شدند. جایی که آقای Edsger Dijkstra هم حضور داشتند و یکی از مخالفین سر سخت Model Checking بودند. حالا که یادی از دایکسترا شد همینجا شما رو ارجاع میدم به خوندن پست "واحد اندازهگیری غرور : نانو Dijkstra" در کانال. او معتقد بود که برنامه نویسها خودشون باید در مورد درستی برنامهشون reasoning کنند و نباید روی ابزارهای Automated Program Checker اتکا کنند. سال ۱۹۸۵ آقای Emerson مقالهای رو با عنوان Modalities for model checking (extended abstract): branching time strikes back در کنفرانس POPL منتشر میکنند. آقای Dijkstra در اون سال در یکی از جلسات معروف Austin Tuesday Afternoon Club شون تصمیم میگیرند که به بررسی این مقاله بپردازن. همینجا شما رو ارجاع میدم به خواندن پستی که قدیما با عنوان "کلوب سه شنبه ها، بعد از ظهر" منتشر کردم.
توی اون جلسه آقای دایکسترا شروع میکنند به نقد این مقاله و نقدشون رو در قالب یک یادداشت تند برای آقای Emerson مینویسند، یک هفته بعد آقای Emerson به عنوان جوابیه یک یادداشت برای آقای دایکسترا مینویسند و تمام حملات آقای دایکسترا رو جواب میدن. آقای دایکسترا در نهایت میپذیرند که نقدهاشون نادرست بوده و با آقای Emerson دوست صمیمی میشن. آقای Emerson میگن که آقای دایکسترا واقعا به مفید بودن Model Checking پی بردند و با اون غرور معروفی که داشتند یه روز به آقای Emerson میگن :
“Sir, you are at risk of winning the argument.”
خیلی برام سخته که میبینم دارم تو حوزهای کار میکنم که اکثر pioneer هاش دیگه بین ما نیستن. از بین تمام افرادی که توی این پست ازشون یاد کردم فقط دو سه نفرشون زندهاند. امیدوارم قبل از اینکه نوبت به من هم برسه بتونم روزی به هدفی که در ابتدای دکتری برای خودم تعیین کردم برسم، Unlocking Software Model Checking.
با این شعر از سایه خاتمه بدیم.
نآمدگان و رفتگان از دو کرانهی زمان
سوی تو میدوند هان! ای تو همیشه در میان
برای مرحوم E. Allen Emerson
—————————————————————
دو روز بعد اینکه تصمیم گرفتم در اینجا رو تخته کنم، یعنی ۱۶ اکتبر، توی توییتر دیدم که آقای Rajeev Alur اعلام کردند که متأسفانه آقای E. Allen Emerson فوت کردند. یادم میاد که روز خیلی تلخی بود اون روز. من از روزی که به شکل جدی وارد آکادمیک شدم همواره مشغول کار روی Model Checking بودم و حالا میبینم که دومین نفر از سه نفری که شروع کنندهی این داستان بودن فوت کردند. یادمه هفته بعدش یعنی ۲۳ اکتبر که روپاک سر کلاس Software Verification مبحث Enumerative Model Checking رو تموم کرد، درب ماژیک رو بست و بعد از چند ثانیه سکوت همراه با افسوس رو به ما کرد و گفت که جا داره یادی کنیم از Emerson که متأسفانه هفته پیش فوت کردند. واقعا از دست دادن ایشون یک افسوس بزرگ برای حوزهی ما خواهد بود، من در کنفرانسهای زیادی ایشون رو دیدم و باهاشون صحبت کردم و واقعا نمیدونم چطور بگم که چقدر انسان دوست داشتنیای بودند.
دوست داشتم همون روزی که این خبر رو فهمیدم بیام اینجا و چیزی بنویسم. همونطور که حدس میزدم هیچ یک از دوستان در کانالهاشون سخن و اشارهای به این خبر نداشتند و این غم لابهلای خیلی از سخنها و خبرهای شاید مهمتر محو شد. تا اینکه امروز یک سر ستون در والیوم ۶۷ ام مجلهی CACM که ۵ روز پیش منتشر شد خوندم که یادوارهی آقای Emerson بود و بهانهای دستم داد تا این خبر تلخ رو غبار روبی کنم.
آقای Allen Emerson زمانی که در Harvard دکتریشون رو با آقای Edmund Clarke شروع کردند تصمیم گرفتن که تز دکتریشون رو معطوف کنند به Verification ویژگیهای فرمالشده روی سیستمهای Finite-state. تقریبا یک روز که ایشون داشتن با Clarke در حیاط محوطهی Harvard قدم میزدن، اصطلاح Model Checking رو خلق کردند. ۲۵ سال بعد به پاس تلاشهای ایشون و آقای Clarke و آقای Joseph Sifakis برای خلق و توسعهی Model Checking و کاربرد موثر این تکنیک در Verification نرمافزارها و سختافزارها، به هر سهی این عزیزان جایزهی Turing Award اهدا شد. آقای Clarke متأسفانه در سال ۲۰۱۹ بر اثر ابتلا به بیماری کرونا فوت کردند و حالا هم نوبت به اولین دانشجوی دکتریشون رسید. شاید حالا که از آقای Clarke یادی کردیم، اشارهای کنیم به پستی با عنوان "صفحات پایانی ۳".
آقای Emerson دو منبع مهم الهامشون برای توسعهی مدل چکینگ رو مقالهی Proof of a Program : Find نوشتهی آقای Tony Hoare و یک سخنرانی از آقای Zohar Manna با عنوان Fixpoints and the Tarski-Knaster Theorem عنوان کردند. حالا که اسم این بزرگواران رو آوردم، بد نیست که ارجاع بدم شما رو به دو پست "ارمغان پیری" و "زهر منا".
آقای Emerson بعد از اتمام دکتریشون، وارد دپارتمان CS دانشگاه TU Austin در تگزاس شدند. جایی که آقای Edsger Dijkstra هم حضور داشتند و یکی از مخالفین سر سخت Model Checking بودند. حالا که یادی از دایکسترا شد همینجا شما رو ارجاع میدم به خوندن پست "واحد اندازهگیری غرور : نانو Dijkstra" در کانال. او معتقد بود که برنامه نویسها خودشون باید در مورد درستی برنامهشون reasoning کنند و نباید روی ابزارهای Automated Program Checker اتکا کنند. سال ۱۹۸۵ آقای Emerson مقالهای رو با عنوان Modalities for model checking (extended abstract): branching time strikes back در کنفرانس POPL منتشر میکنند. آقای Dijkstra در اون سال در یکی از جلسات معروف Austin Tuesday Afternoon Club شون تصمیم میگیرند که به بررسی این مقاله بپردازن. همینجا شما رو ارجاع میدم به خواندن پستی که قدیما با عنوان "کلوب سه شنبه ها، بعد از ظهر" منتشر کردم.
توی اون جلسه آقای دایکسترا شروع میکنند به نقد این مقاله و نقدشون رو در قالب یک یادداشت تند برای آقای Emerson مینویسند، یک هفته بعد آقای Emerson به عنوان جوابیه یک یادداشت برای آقای دایکسترا مینویسند و تمام حملات آقای دایکسترا رو جواب میدن. آقای دایکسترا در نهایت میپذیرند که نقدهاشون نادرست بوده و با آقای Emerson دوست صمیمی میشن. آقای Emerson میگن که آقای دایکسترا واقعا به مفید بودن Model Checking پی بردند و با اون غرور معروفی که داشتند یه روز به آقای Emerson میگن :
“Sir, you are at risk of winning the argument.”
خیلی برام سخته که میبینم دارم تو حوزهای کار میکنم که اکثر pioneer هاش دیگه بین ما نیستن. از بین تمام افرادی که توی این پست ازشون یاد کردم فقط دو سه نفرشون زندهاند. امیدوارم قبل از اینکه نوبت به من هم برسه بتونم روزی به هدفی که در ابتدای دکتری برای خودم تعیین کردم برسم، Unlocking Software Model Checking.
با این شعر از سایه خاتمه بدیم.
نآمدگان و رفتگان از دو کرانهی زمان
سوی تو میدوند هان! ای تو همیشه در میان
Forwarded from a pessimistic researcher (Kc)
آخرین ورژن منتشر شدهی JMC طبق benchmark هامون میتونه یک برنامهی مالتیترد Java که تعداد equivalent class های Execution trace هاش ۲۵۰ هزارتاست رو توی ۱۵ دقیقه Model Check کنه. دو ماهه که با شیرینیدی refactoring و optimization این ابزار رو شروع کردیم و چیزی به انتشار نهاییش نمونده. توی نسخهی جدید این زمان به کمتر از ۵ ثانیه میرسه و این یعنی یک قدم دیگه نزدیک شدیم به آرمانمون، Unlocking Software Model Checking :)
GitHub
GitHub - mpi-sws-rse/jmc: jmc: Java Model Checker
jmc: Java Model Checker. Contribute to mpi-sws-rse/jmc development by creating an account on GitHub.
Forwarded from نوشتههای ترمینالی
If I was stranded on an island and the only way to get off the island was to make a pretty UI, I’d die there.
- Linus Torvalds
https://blog.ted.com/the-quotable-linus-torvalds-live-onstage-at-ted/
- Linus Torvalds
https://blog.ted.com/the-quotable-linus-torvalds-live-onstage-at-ted/
Ted
The quotable Linus Torvalds, live onstage at TED | TED Blog
I am not a visionary. I'm an engineer. [As a kid] I was into computers, I was into math, I was into physics. I don't think I was particularly exceptional. My sister said my biggest exceptional quality was that I would not let go. Q.
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
🔸territorial
یک بازی جذاب پیکسی سبک و انلاین که میتونه شمارو معتاد کنه
قلمرو خودتون گسترش میدید-متحد میشید-کمک میگیرید و میفرستید-حمله میکنید و... هم تحت وب هم اندروید هم ios
https://territorial.io
#معرفی
@TheRaymondDev
یک بازی جذاب پیکسی سبک و انلاین که میتونه شمارو معتاد کنه
قلمرو خودتون گسترش میدید-متحد میشید-کمک میگیرید و میفرستید-حمله میکنید و... هم تحت وب هم اندروید هم ios
https://territorial.io
#معرفی
@TheRaymondDev
Forwarded from CleverDevs (Mammad)
دوستان اگر در مورد آیندتون جدی هستید و میخواید موفق بشید، به نظرم این کانال میتونه کمکتون بکنه، از دستش ندید 👇🏻:
@hamidreza01
@hamidreza01
Forwarded from Decrypt
Only 0.4% of Pump.fun Traders Have Made More Than $10,000
Pump.fun has made just 294 millionaires so far, with just 0.4% of wallets profiting $10,000 on meme coins.
Pump.fun has made just 294 millionaires so far, with just 0.4% of wallets profiting $10,000 on meme coins.
Forwarded from محتوای آزاد سهراب
آلفا پنجم از میزکار کازمیک عرضه شد.
https://blog.system76.com/post/cosmic-alpha-5-released
@SohrabContents
https://blog.system76.com/post/cosmic-alpha-5-released
@SohrabContents
Forwarded from Geek Alerts
امروز، ۱۰م ژانویه، سالروز تولد دانلد کَنوت است.
دانلد اروین کنوت(Donald Ervin Knuth) متولد ۱۰ ژانویه ۱۹۳۸(امروز ۸۷ ساله شد)، دانشمند علوم رایانه، برنده جایزه تورینگ و استاد افتخاری در دانشگاه استنفورد آمریکا است. او در سن ۳۶ سالگی برنده جایزه تورینگ شد که اینطور او رو تبدیل به جوانترین شخصی کرد که تا به حال به این جایزه که معادل نوبل در علوم کامپیوتر است، رسیدهست. همچنین او برنده جایزههای دیگری همچون جایزه جان فون نویمان، جایزه کیوتو و نشان ملی علوم است.
شهرت او عمدتا مربوط به نویسندگی مجموعه کتابهای The art of computer programming است که یک سری کتاب محبوب در حوزه علوم کامپیوتر است.
او عملاً پایهگذار رشته آنالیز الگوریتمها است و سهم فراوانی در گسترش مبانی نظری شاخههای گوناگون علوم رایانه داشته است. دانلد همچنین طراح سیستم TeX و سامانه طراحی حروف Metafont نیز هست.
https://en.wikipedia.org/wiki/Donald_Knuth
hadi @geekalerts
دانلد اروین کنوت(Donald Ervin Knuth) متولد ۱۰ ژانویه ۱۹۳۸(امروز ۸۷ ساله شد)، دانشمند علوم رایانه، برنده جایزه تورینگ و استاد افتخاری در دانشگاه استنفورد آمریکا است. او در سن ۳۶ سالگی برنده جایزه تورینگ شد که اینطور او رو تبدیل به جوانترین شخصی کرد که تا به حال به این جایزه که معادل نوبل در علوم کامپیوتر است، رسیدهست. همچنین او برنده جایزههای دیگری همچون جایزه جان فون نویمان، جایزه کیوتو و نشان ملی علوم است.
شهرت او عمدتا مربوط به نویسندگی مجموعه کتابهای The art of computer programming است که یک سری کتاب محبوب در حوزه علوم کامپیوتر است.
او عملاً پایهگذار رشته آنالیز الگوریتمها است و سهم فراوانی در گسترش مبانی نظری شاخههای گوناگون علوم رایانه داشته است. دانلد همچنین طراح سیستم TeX و سامانه طراحی حروف Metafont نیز هست.
https://en.wikipedia.org/wiki/Donald_Knuth
hadi @geekalerts
Forwarded from توسعه دهندگان
cleancode.pdf
11.2 MB
Forwarded from code2 - تکنولوژی و فناوری (Mahdi Taleghani)
Forwarded from Linuxor ?
توی کامپیوتر ما یه trade-off بین زمان و حافظه داریم، یعنی باید یکیش رو بر اون یکی ترجیح بدیم مثلا میتونیم بجای اینکه فایل رو مستقیم روی دیسک ذخیره کنیم اونو فشرده کنیم و ذخیره کنیم که فضای کمتری بگیره اما دسترسی به فایل زمان بر تر میشه.
این trade-off به صورت بیولوژیکی توی حیوانات هم وجود داره مثلا گربه از قبل روی DNA و سیستم عصبیشون برنامه ریزی شده که بتونه سریع واکنش نشون بده و نیازی به محاسبه و تصمیمگیری کردن توی اون لحظه نداشته باشه اما انسان برای رسیدن به عکس العمل سریع باید محاسبه و تجزیه و تحلیل انجام بده.
@Linuxor
این trade-off به صورت بیولوژیکی توی حیوانات هم وجود داره مثلا گربه از قبل روی DNA و سیستم عصبیشون برنامه ریزی شده که بتونه سریع واکنش نشون بده و نیازی به محاسبه و تصمیمگیری کردن توی اون لحظه نداشته باشه اما انسان برای رسیدن به عکس العمل سریع باید محاسبه و تجزیه و تحلیل انجام بده.
@Linuxor
Forwarded from Linuxor ?
Forwarded from 🎄 یک برنامه نویس تنبل (The Lazy 🌱 Raymond)
🔶 بالاخره صندلی رو خریدم.
https://www.digikala.com/product/dkp-14631665/صندلی-گیمینگ-مدل-g555/
قیمت : ۳.۴۵۰.۰۰۰ تومان
دوستان ممنون از راهنمایی 🙏
#متفرقه
@TheRaymondDev
https://www.digikala.com/product/dkp-14631665/صندلی-گیمینگ-مدل-g555/
قیمت : ۳.۴۵۰.۰۰۰ تومان
دوستان ممنون از راهنمایی 🙏
#متفرقه
@TheRaymondDev
Forwarded from Curious Geek ⚡️
ORPC - Open API RPC
این پروژه با هدف سازگارسازی RPC با استاندارد های Open API اومده ،
همون طور که با MTProto میتونیم به RPC تلگرام وصل بشیم و I/O رو به 20 درصد کاهش بدیم ،
میتونه در پیاده سازی API های باز مفید باشه.
🔗 orpc.unnoq.com
🆔 @Hiradsajde
این پروژه با هدف سازگارسازی RPC با استاندارد های Open API اومده ،
همون طور که با MTProto میتونیم به RPC تلگرام وصل بشیم و I/O رو به 20 درصد کاهش بدیم ،
میتونه در پیاده سازی API های باز مفید باشه.
🔗 orpc.unnoq.com
🆔 @Hiradsajde
Forwarded from Gopher Academy
🔵 عنوان مقاله
betteralign 0.6: Make Your Programs Use Less Memory.. Maybe
🟢 خلاصه مقاله:
مقالهای که مورد بحث قرار گرفته، ابزاری را شرح میدهد که برای شناسایی ساختارهای دادهای (structs) در زبان برنامهنویسی Go طراحی شده است. این ابزار، نسخهای تغییر یافته از ابزار fieldalignment استاندارد Go میباشد. تفاوت اصلی آن در این است که فایلهای تولید شده یا فایلهای آزمایشی را نادیده میگیرد، همچنین از بررسی ساختارهای دادهای که دارای فیلدهای ناشناخته یا بدون نام هستند خودداری میکند. به علاوه، این ابزار نظرات موجود در کد را حذف نکرده و دارای بهبودهایی در تجربه توسعهدهندگان (DX improvements) است. هدف اصلی از این ابزار، کمک به برنامهنویسان برای بازسازی و ترتیب مجدد فیلدهای درون ساختارها به گونهای است که حافظه کمتری مصرف کنند و بهینهسازی مموری را تسهیل کند.
🟣لینک مقاله:
https://golangweekly.com/link/163987/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
betteralign 0.6: Make Your Programs Use Less Memory.. Maybe
🟢 خلاصه مقاله:
مقالهای که مورد بحث قرار گرفته، ابزاری را شرح میدهد که برای شناسایی ساختارهای دادهای (structs) در زبان برنامهنویسی Go طراحی شده است. این ابزار، نسخهای تغییر یافته از ابزار fieldalignment استاندارد Go میباشد. تفاوت اصلی آن در این است که فایلهای تولید شده یا فایلهای آزمایشی را نادیده میگیرد، همچنین از بررسی ساختارهای دادهای که دارای فیلدهای ناشناخته یا بدون نام هستند خودداری میکند. به علاوه، این ابزار نظرات موجود در کد را حذف نکرده و دارای بهبودهایی در تجربه توسعهدهندگان (DX improvements) است. هدف اصلی از این ابزار، کمک به برنامهنویسان برای بازسازی و ترتیب مجدد فیلدهای درون ساختارها به گونهای است که حافظه کمتری مصرف کنند و بهینهسازی مموری را تسهیل کند.
🟣لینک مقاله:
https://golangweekly.com/link/163987/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - dkorunic/betteralign: Make your Go programs use less memory (maybe)
Make your Go programs use less memory (maybe). Contribute to dkorunic/betteralign development by creating an account on GitHub.
Forwarded from Anophel | آنوفل
💢 تا حالا به این فکر کردی چجوری میشه یه کاری رو دقیقاً تا یه لحظه مشخص زمانبندی کرد و مطمئن شد که یا تموم میشه یا لغو؟
تو Go و ابزار context میتونی عملیاتهاتو دقیقاً با یه مهلت مشخص (Deadline) کنترل کنی.
مثلاً فرض کن یه کدی داریم که باید یه تابع به اسم ()work رو اجرا کنه. این تابع قراره 100 میلیثانیه طول بکشه. حالا دو تا سناریو داریم:
1️⃣سناریوی اول: مهلت کافیه (150+ میلیثانیه)
اینجا Deadline رو 150 میلیثانیه تعیین میکنیم، یعنی کد ما زمان کافی داره.
func main() { deadline := time.Now().Add(150 * time.Millisecond)
ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel()
res, err := execute(ctx, work)
fmt.Println(res, err) // نتیجه درست برمیگرده
}
✅ خروجی:
کد بدون مشکل اجرا میشه چون زمان کافی داشتیم.
2️⃣ سناریوی دوم: مهلت کافی نیست (50+ میلیثانیه)
حالا Deadline رو 50 میلیثانیه میذاریم، اما ()work حداقل 100 میلیثانیه نیاز داره.
func main() { deadline := time.Now().Add(50 * time.Millisecond)
ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel()
res, err := execute(ctx, work)
fmt.Println(res, err) // نتیجه لغو میشه
}
❌خروجی:
عملیات لغو میشه (context.Canceled) چون مهلت کافی وجود نداشت.
💠فرق بین WithTimeout و WithDeadline چیه؟
بله WithTimeout یه مقدار زمان مشخص میگیره (مثلاً 5 ثانیه)، اما WithDeadline دقیقاً یه زمان مشخص (مثلاً 23:00:05).
جالبیش اینه که WithTimeout خودش از WithDeadline استفاده میکنه:
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}
�چچطوری بفهمیم کانتکست Deadline داره؟
با متد Deadline، میتونیم زمان مشخص شده رو ببینیم.
اگه کانتکست با WithTimeout یا WithDeadline ساخته شده باشه، یه زمان مشخص میده.
اما اگه با WithCancel یا Background ساخته شده باشه، میگه نه!
ctx, _ := context.WithCancel(context.Background())
deadline, ok := ctx.Deadline()
fmt.Println(deadline, ok) // نتیجه: false
ctx = context.Background()
deadline, ok = ctx.Deadline()
fmt.Println(deadline, ok) // باز هم false
⭐️اگر تجربه ای ازش داری،تجربههات رو برامون بگو!
#گو #گولنگ #Go #Golang
تو Go و ابزار context میتونی عملیاتهاتو دقیقاً با یه مهلت مشخص (Deadline) کنترل کنی.
مثلاً فرض کن یه کدی داریم که باید یه تابع به اسم ()work رو اجرا کنه. این تابع قراره 100 میلیثانیه طول بکشه. حالا دو تا سناریو داریم:
1️⃣سناریوی اول: مهلت کافیه (150+ میلیثانیه)
اینجا Deadline رو 150 میلیثانیه تعیین میکنیم، یعنی کد ما زمان کافی داره.
func main() { deadline := time.Now().Add(150 * time.Millisecond)
ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel()
res, err := execute(ctx, work)
fmt.Println(res, err) // نتیجه درست برمیگرده
}
✅ خروجی:
کد بدون مشکل اجرا میشه چون زمان کافی داشتیم.
2️⃣ سناریوی دوم: مهلت کافی نیست (50+ میلیثانیه)
حالا Deadline رو 50 میلیثانیه میذاریم، اما ()work حداقل 100 میلیثانیه نیاز داره.
func main() { deadline := time.Now().Add(50 * time.Millisecond)
ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel()
res, err := execute(ctx, work)
fmt.Println(res, err) // نتیجه لغو میشه
}
❌خروجی:
عملیات لغو میشه (context.Canceled) چون مهلت کافی وجود نداشت.
💠فرق بین WithTimeout و WithDeadline چیه؟
بله WithTimeout یه مقدار زمان مشخص میگیره (مثلاً 5 ثانیه)، اما WithDeadline دقیقاً یه زمان مشخص (مثلاً 23:00:05).
جالبیش اینه که WithTimeout خودش از WithDeadline استفاده میکنه:
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}
�چچطوری بفهمیم کانتکست Deadline داره؟
با متد Deadline، میتونیم زمان مشخص شده رو ببینیم.
اگه کانتکست با WithTimeout یا WithDeadline ساخته شده باشه، یه زمان مشخص میده.
اما اگه با WithCancel یا Background ساخته شده باشه، میگه نه!
ctx, _ := context.WithCancel(context.Background())
deadline, ok := ctx.Deadline()
fmt.Println(deadline, ok) // نتیجه: false
ctx = context.Background()
deadline, ok = ctx.Deadline()
fmt.Println(deadline, ok) // باز هم false
⭐️اگر تجربه ای ازش داری،تجربههات رو برامون بگو!
#گو #گولنگ #Go #Golang
Forwarded from Anophel | آنوفل
مثلاً فرض کن یه کدی داریم که باید یه تابع به اسم ()work رو اجرا کنه. این تابع قراره 100 میلیثانیه طول بکشه. حالا دو تا سناریو داریم:
اینجا Deadline رو 150 میلیثانیه تعیین میکنیم، یعنی کد ما زمان کافی داره.
func main() {
deadline := time.Now().Add(150 * time.Millisecond)
ctx, cancel := context.WithDeadline(context.Background(), deadline)
defer cancel()
res, err := execute(ctx, work)
fmt.Println(res, err) // نتیجه درست برمیگرده
}کد بدون مشکل اجرا میشه چون زمان کافی داشتیم.
حالا Deadline رو 50 میلیثانیه میذاریم، اما ()work حداقل 100 میلیثانیه نیاز داره.
func main() {
deadline := time.Now().Add(50 * time.Millisecond)
ctx, cancel := context.WithDeadline(context.Background(), deadline)
defer cancel()
res, err := execute(ctx, work)
fmt.Println(res, err) // نتیجه لغو میشه
}
عملیات لغو میشه (
context.Canceled) چون مهلت کافی وجود نداشت. ithTimeout و WithDeadline چیه؟بله WithTimeout یه مقدار زمان مشخص میگیره (مثلاً 5 ثانیه)، اماWithDeadline دقیقاً یه زمان مشخص (مثلاً 23:00:05).
جالبیش اینه که WithTimeout خودش از WithDeadline استفاده میکنه:
func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
return WithDeadline(parent, time.Now().Add(timeout))
}با متد Deadline، میتونیم زمان مشخص شده رو ببینیم.
اگه کانتکست با WithTimeout یا WithDeadline شده باشه، یه زمان مشخص میده.
اما اگه با WithCancel یا Background ساخته شده باشه، میگه نه!
ctx, _ := context.WithCancel(context.Background())
deadline, ok := ctx.Deadline()
fmt.Println(deadline, ok) // نتیجه: false
ctx = context.Background()
deadline, ok = ctx.Deadline()
fmt.Println(deadline, ok) // باز هم false
#گو #گولنگ #Go #Golang
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Syntax | سینتکس (Daimon)
سوال درباره داکر و داکر کمپوز
سوال:
فرض کنید ما چند سرویس داریم که در یک پروژه با استفاده از Docker Compose مدیریت میشوند. این سرویسها نیازی به ارتباط با خارج از شبکه داخلی داکر (مانند شبکه هاست یا اینترنت) ندارند و فقط باید بهصورت داخلی با یکدیگر ارتباط برقرار کنند. حتی اگر به اشتباه پورتهایی برای آنها در فایل Docker Compose تعریف شود (مانند
چگونه میتوانیم چنین محدودیتی اعمال کنیم و اطمینان حاصل کنیم که سرویسها کاملاً ایزوله هستند و فقط در شبکه داخلی داکر قابل دسترسیاند؟
(جواب و راه حلی پیشنهادی پست بعدی گذاشته میشه)
#docker #docker_compose
@Syntax_fa
سوال:
فرض کنید ما چند سرویس داریم که در یک پروژه با استفاده از Docker Compose مدیریت میشوند. این سرویسها نیازی به ارتباط با خارج از شبکه داخلی داکر (مانند شبکه هاست یا اینترنت) ندارند و فقط باید بهصورت داخلی با یکدیگر ارتباط برقرار کنند. حتی اگر به اشتباه پورتهایی برای آنها در فایل Docker Compose تعریف شود (مانند
ports)، نباید این پورتها از بیرون شبکه داکر در دسترس باشند. چگونه میتوانیم چنین محدودیتی اعمال کنیم و اطمینان حاصل کنیم که سرویسها کاملاً ایزوله هستند و فقط در شبکه داخلی داکر قابل دسترسیاند؟
(جواب و راه حلی پیشنهادی پست بعدی گذاشته میشه)
#docker #docker_compose
@Syntax_fa
👍1