MIT CS
1. Introduction to Computer Science and Programming in python
2. Fundamentals of Programming (NOT MIT)
3. Software Construction
4. Mathematics for Computer Science
5. Introduction to Algorithms
6. Computability and Complexity Theory
7. Computer Systems Engineering
8. Introduction to Low-level Programming in C and Assembly
9. Computation Structures
Select one of the following:
Introduction to Probability
Introduction to Inference
Introduction to Probability and Statistics
Linear Algebra
Linear Algebra and Optimization
1. Introduction to Computer Science and Programming in python
2. Fundamentals of Programming (NOT MIT)
3. Software Construction
4. Mathematics for Computer Science
5. Introduction to Algorithms
6. Computability and Complexity Theory
7. Computer Systems Engineering
8. Introduction to Low-level Programming in C and Assembly
9. Computation Structures
Select one of the following:
Introduction to Probability
Introduction to Inference
Introduction to Probability and Statistics
Linear Algebra
Linear Algebra and Optimization
👌4
TorhamDev | تورهام 😳
MIT CS 1. Introduction to Computer Science and Programming in python 2. Fundamentals of Programming (NOT MIT) 3. Software Construction 4. Mathematics for Computer Science 5. Introduction to Algorithms 6. Computability and Complexity Theory 7. Computer…
اگه خواستید با سر فصلا MIT بخونید و پیش برید استفاده کنید.
اگه کلا چیزی از کامپیوتر نمیدونید که از اول برید. مگرنه میتونید موضوعی ببینیدشون
اگه کلا چیزی از کامپیوتر نمیدونید که از اول برید. مگرنه میتونید موضوعی ببینیدشون
https://www.inferable.ai/blog/posts/postgres-nodejs-longpolling.mdx
مقاله کوتاه و جالبی بود. گاهی راه حل ساده تر بهتره :)
@TorhamDevCH
مقاله کوتاه و جالبی بود. گاهی راه حل ساده تر بهتره :)
@TorhamDevCH
www.inferable.ai
Back to Basics: Why We Chose Long Polling Over WebSockets
Learn how we implemented real-time updates using Node.js, TypeScript, and PostgreSQL with HTTP long polling. A practical guide to building scalable real-time systems without WebSockets.
👍6
خبر: مایکروسافت در یک حرکت شجاعانه تصمیم گرفت به جای پورت کردن nano داخل ویندوز یک ادیتور تحت ترمینال بزاره و اسمش رو به زیبایی Edit گذاشته.
@TorhamDevCH
@TorhamDevCH
🤣27🔥2👌2
TorhamDev | تورهام 😳
ها راستی. امروز روز اول کاریم بود. در شرکت گراف
برای اونایی که پرسیدن، دیگه اومدم تهران ریموت نیست D:
🤩22
تاحالا شده دلتون بخواد built-in های پایتون تبدیل به async بشن؟
اگه آره ابزار gevent این کار میکنه!.
با استفاده از geven و ایموپرت کردن و صدا زدن مانکیپچ میتونید اینکار انجام بدید.
import gevent
gevent.monky_patch()
با این کار اونها تبدیل میشن به async. اما باید توجه کنید کنه مانکیپچ ابزارهایی 3rd پارتی و کتابخونههاتون رو نمیتونه async کنه. برای مثال روی requests بخوایید همچین کاری کنید این اتفاق نخواهد افتاد. ابزارها باید مانکیپچینگ رو ساپورت کنن تا این اتفاق بیوفته. اما اگه بخوایید requests رو async ران کنید چی؟
اسم gevent از greenlet میاد. یک ابزار pesudo-thread هستش. یعنی چی؟
ما ۲ مدل مولتی تردینگ داریم، یک مدلش که یک مدلهست که خود os هندل میکنه. داخل اون کانتکس سوییچ توسط os انجام میشه و بسیار سختگیر هستش!
برای مثال هر ترد ۵ ثانیه زمان اجرا داره و برای os مهم نیست که اون ترد کجای کار هستش. اون رو متوقف میکنه و بقیه رو اجرا میکنه.
کانتکس سوییچ چیه؟ همین که گفتم :). همین جابجا شدن رو میگن کانتکس سوییچ.
یک مدل ترد داریم که بهشون cooperative threading میگن. ابزارهایی مثل greenlet از این سبک استفاده میکنن. این ابزار یک ایونت لوپ برای خودش داره که از ایونت لوپ asyncio و بقیه چیزا جدا هستش. و وقتی چندتا ترد رو spawn میکنه این تردها باهم همکاری میکنن ولی یعنی چی؟
یعنی اگر ترد اول یک ریکوئست http زده و نیاز داره صبر کنه خودش میگه من رو متوقف کن تا دیتایی که لازم دارم بیاد و بقیه رو ران کن.
حالا تمام اینا گفتم که بگم شما میتونید با استفاده از ساختن gevent و درنهایت spawn کردن یا همون ران کردنش اونا اجرا کنید.
با این ابزار میشه parallel هم چیز میزا رو ران کرد. که بعدا اگه خوشتون اومد مینویسم.
در نهایت باید توجه داشته باشید که این ابزار برای اینکه GIL اذیتش نکنه صرفا رو یک ترد اجرا میشه و ایونت لوم خودش داره.
نکته بعدی که هست این ابزار برای تسکهای I/O bound خوبه و اگ میخوایید cpu bound کار کنید احتمالا همون ترد عادی بهتر خواهد بود
آره خلاصه :)
@TorhamDevCH
اگه آره ابزار gevent این کار میکنه!.
با استفاده از geven و ایموپرت کردن و صدا زدن مانکیپچ میتونید اینکار انجام بدید.
import gevent
gevent.monky_patch()
با این کار اونها تبدیل میشن به async. اما باید توجه کنید کنه مانکیپچ ابزارهایی 3rd پارتی و کتابخونههاتون رو نمیتونه async کنه. برای مثال روی requests بخوایید همچین کاری کنید این اتفاق نخواهد افتاد. ابزارها باید مانکیپچینگ رو ساپورت کنن تا این اتفاق بیوفته. اما اگه بخوایید requests رو async ران کنید چی؟
اسم gevent از greenlet میاد. یک ابزار pesudo-thread هستش. یعنی چی؟
ما ۲ مدل مولتی تردینگ داریم، یک مدلش که یک مدلهست که خود os هندل میکنه. داخل اون کانتکس سوییچ توسط os انجام میشه و بسیار سختگیر هستش!
برای مثال هر ترد ۵ ثانیه زمان اجرا داره و برای os مهم نیست که اون ترد کجای کار هستش. اون رو متوقف میکنه و بقیه رو اجرا میکنه.
کانتکس سوییچ چیه؟ همین که گفتم :). همین جابجا شدن رو میگن کانتکس سوییچ.
یک مدل ترد داریم که بهشون cooperative threading میگن. ابزارهایی مثل greenlet از این سبک استفاده میکنن. این ابزار یک ایونت لوپ برای خودش داره که از ایونت لوپ asyncio و بقیه چیزا جدا هستش. و وقتی چندتا ترد رو spawn میکنه این تردها باهم همکاری میکنن ولی یعنی چی؟
یعنی اگر ترد اول یک ریکوئست http زده و نیاز داره صبر کنه خودش میگه من رو متوقف کن تا دیتایی که لازم دارم بیاد و بقیه رو ران کن.
حالا تمام اینا گفتم که بگم شما میتونید با استفاده از ساختن gevent و درنهایت spawn کردن یا همون ران کردنش اونا اجرا کنید.
با این ابزار میشه parallel هم چیز میزا رو ران کرد. که بعدا اگه خوشتون اومد مینویسم.
در نهایت باید توجه داشته باشید که این ابزار برای اینکه GIL اذیتش نکنه صرفا رو یک ترد اجرا میشه و ایونت لوم خودش داره.
نکته بعدی که هست این ابزار برای تسکهای I/O bound خوبه و اگ میخوایید cpu bound کار کنید احتمالا همون ترد عادی بهتر خواهد بود
آره خلاصه :)
@TorhamDevCH
2👍9❤4🤔1
TorhamDev | تورهام 😳
تاحالا شده دلتون بخواد built-in های پایتون تبدیل به async بشن؟ اگه آره ابزار gevent این کار میکنه!. با استفاده از geven و ایموپرت کردن و صدا زدن مانکیپچ میتونید اینکار انجام بدید. import gevent gevent.monky_patch() با این کار اونها تبدیل میشن به async.…
parallel with gevent
تو پست قبلی گفتم که gevent چی هست و چطور خوبه ازش استفاده و به چه دردی میخوره. یکی از کارهایی دیگه که باهاش میتونید انجام بدید true parallelism هستش. یعنی چندین تسک رو به صورت همزمان اجرا کنید. برای این کار باید از تکنیکی استفاده کنید به اسم prefork (پریفورک).
اما prefork چی هست؟
پریفورک به شکل ساده میشه زمانی که یک ترد میخاد اجرا بشه و قبل از اجرا شدنش چندین ترد دیگه رو هم اجرا میکنه و این ترد خودش به عنوان ترد master عمل میکنه و بقیه تردها رو کنترل میکنه.
برای مثال ابزار گونیکورن که خیلیهاتو باهاش آشنا هستید و داخل پروژه های جنگو و ... ازش استفاده میکنید دقیقا همچین کاری میکنه. زمانی که شما یک پروژه جنگو رو با استفاده از گونیکورن اجرا میکنید به استفاده از کانفیگهای شما و کانفیگهای پیشفرض و دیفالتش چندتا به اصطلاح خودش worker اجرا میکنه. این ورکرها داخل تردهای مختلف هستند اما همشون به یک پورت گوش میدن و اگر شما گونیکورن رو متوقف کنید اونها هم متوقف میشن و به شکل کلی گونیکورن master اون ورکرها محصوب میشه.
حالا اینارو گفتم که بگم شما میتونید داخل کد همچین کاری رو با فانکشنهاتون و ... انجام بدید!
به این شکل چندین wsgi سرور توسط خود یکی از ماژولهای gevent به اسم pywsgi که از خود gevent ایمپورت میشه انجام بدید و درنهایت تسکهای ساخته شده رو با استفاده از کتابخونه multiprocessing یک پروسس کنید و به هم جوین کنید.
اما شما نه تنها میتونید این کار کنید بلکه میتونید فانکشنا معمولی رو هم به این سبک ران کنید. اما به این کار دیگه true parallelism نمیگن و بهش میگن concurrent I/O و برای مثال اگر بخواییم ۵ تا ریکوئست همزمان با استفاده از requests بزنیم میتونید همچین کاری کنیم:
فزض کنید فانکشنی به اسم fetch داریم که ورودی یک url میگیره و با requests درخواست http میده و urls هم لیست تمام urlهایی که میخواییم درخواست بزنیم.
آره خلاصه ابزار خوبیه gevent :)
@TorhamDevCH
تو پست قبلی گفتم که gevent چی هست و چطور خوبه ازش استفاده و به چه دردی میخوره. یکی از کارهایی دیگه که باهاش میتونید انجام بدید true parallelism هستش. یعنی چندین تسک رو به صورت همزمان اجرا کنید. برای این کار باید از تکنیکی استفاده کنید به اسم prefork (پریفورک).
اما prefork چی هست؟
پریفورک به شکل ساده میشه زمانی که یک ترد میخاد اجرا بشه و قبل از اجرا شدنش چندین ترد دیگه رو هم اجرا میکنه و این ترد خودش به عنوان ترد master عمل میکنه و بقیه تردها رو کنترل میکنه.
برای مثال ابزار گونیکورن که خیلیهاتو باهاش آشنا هستید و داخل پروژه های جنگو و ... ازش استفاده میکنید دقیقا همچین کاری میکنه. زمانی که شما یک پروژه جنگو رو با استفاده از گونیکورن اجرا میکنید به استفاده از کانفیگهای شما و کانفیگهای پیشفرض و دیفالتش چندتا به اصطلاح خودش worker اجرا میکنه. این ورکرها داخل تردهای مختلف هستند اما همشون به یک پورت گوش میدن و اگر شما گونیکورن رو متوقف کنید اونها هم متوقف میشن و به شکل کلی گونیکورن master اون ورکرها محصوب میشه.
حالا اینارو گفتم که بگم شما میتونید داخل کد همچین کاری رو با فانکشنهاتون و ... انجام بدید!
به این شکل چندین wsgi سرور توسط خود یکی از ماژولهای gevent به اسم pywsgi که از خود gevent ایمپورت میشه انجام بدید و درنهایت تسکهای ساخته شده رو با استفاده از کتابخونه multiprocessing یک پروسس کنید و به هم جوین کنید.
اما شما نه تنها میتونید این کار کنید بلکه میتونید فانکشنا معمولی رو هم به این سبک ران کنید. اما به این کار دیگه true parallelism نمیگن و بهش میگن concurrent I/O و برای مثال اگر بخواییم ۵ تا ریکوئست همزمان با استفاده از requests بزنیم میتونید همچین کاری کنیم:
jobs = [gevent.spawn(fetch, url) for url in urls]
gevent.joinall(jobs)
فزض کنید فانکشنی به اسم fetch داریم که ورودی یک url میگیره و با requests درخواست http میده و urls هم لیست تمام urlهایی که میخواییم درخواست بزنیم.
آره خلاصه ابزار خوبیه gevent :)
@TorhamDevCH
👍5🔥3⚡1👎1
TorhamDev | تورهام 😳
This media is not supported in your browser
VIEW IN TELEGRAM
تلگرام کسب و کار باتهای هیدن چت و غیره رو کساد کرد 🥰
👍15❤2🔥1
اگه یادگرفتن با انجام دادن رو دوست دارید ( learn by doing ) و احتمالا میخوایید لینوکس رو از پایه یاد بگیرید و حال نگاه کردن ۱۲ ساعت دوره و این چیزا رو ندارید. دلتون میخوایید بخونید و تست کنید میتونی از اینجا شروع کنید
https://linuxjourney.com/
بعد از این که linux journey رو تموم کردید یا همزمان با اون میتونید برید داخل over the write و چالش لینوکسیش رو انجام بدید.
https://overthewire.org/wargames/bandit/
این طوری دیگه لازم نیست دوره ببینید یک عمر صرفا بخونید تا اخرش یک دستور ببینید و بگید واستا این چی بود؟
خلاصه دیگه دستور بزنید و خراب کاری کنید یاد بگیرید.
@TorhamDevCH
https://linuxjourney.com/
بعد از این که linux journey رو تموم کردید یا همزمان با اون میتونید برید داخل over the write و چالش لینوکسیش رو انجام بدید.
https://overthewire.org/wargames/bandit/
این طوری دیگه لازم نیست دوره ببینید یک عمر صرفا بخونید تا اخرش یک دستور ببینید و بگید واستا این چی بود؟
خلاصه دیگه دستور بزنید و خراب کاری کنید یاد بگیرید.
@TorhamDevCH
❤25🔥1🤝1
بچه ها فعلا ssh tunnel خوب جواب میده اگه حتی سرور خارجی دارید که فعلا ip بلاک نشده میتونید بهش ssh tunnel بزنید.
👎9👍4