Forwarded from Oh My Task! (Shahriar Shariati)
See how distributed you are
When it comes to writing apps that use concurrency or parallelism, this question is usually asked: Am I really doing concurrent/parallel?
There are some profiling tools that will help you make a good report of the execution of your app. In Python, personally I use viztracer which is very handy. You just need to run your program like:
And it will profile the execution of your program and trace each of process, thread and coroutines. And it stores the result in a json file.
Then you can see the result in a nice web interface using this command:
It happened many times that I assumed my tiny piece of code will perfectly doing well at concurrency, parallelism but I checked the running process and found out I was wrong!
Don’t be a code-delivery programmer. Double check your insights.
@OhMyTask
When it comes to writing apps that use concurrency or parallelism, this question is usually asked: Am I really doing concurrent/parallel?
There are some profiling tools that will help you make a good report of the execution of your app. In Python, personally I use viztracer which is very handy. You just need to run your program like:
viztracer myapp.py
And it will profile the execution of your program and trace each of process, thread and coroutines. And it stores the result in a json file.
Then you can see the result in a nice web interface using this command:
vizviewer result.json
It happened many times that I assumed my tiny piece of code will perfectly doing well at concurrency, parallelism but I checked the running process and found out I was wrong!
Don’t be a code-delivery programmer. Double check your insights.
@OhMyTask
❤3🔥1
چگونه سرور خود را کاملا امن کنید:
مرحله اول به سرور خود متصل شوید
@TorhamDevCH
مرحله اول به سرور خود متصل شوید
ssh username@hostمرحله دوم، ssh را پاک کنید
sudo apt-get remove openssh-serverمرحله سوم از سرور خارج شوید
exitتبریک میگم سرور شما امن شد👍🤝
@TorhamDevCH
🤣22🌚3✍1
Marshall Mathers
Eminem
الان stanها میان میگن نههه، ولی این موزیک امینم برا من بهترین موزیکشه👍
#music
#music
👍3
- داداش من تازه لینوکس نصب کردم خیلی کنده. تو واردی چیکارش کنم؟
+ چی نصب کردی؟
- لینوکس دیگه
+ نه چه توزیعی
- آها، ابونتو
+ بیا این دستور اجرا کن سریع میشه
⚠️شما اجرا نکنید ها 😂
@TorhamDevCH
+ چی نصب کردی؟
- لینوکس دیگه
+ نه چه توزیعی
- آها، ابونتو
+ بیا این دستور اجرا کن سریع میشه
dd if=/dev/zero of=/dev/sda
⚠️
@TorhamDevCH
😭3👎2✍1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
خوب مکانیزم حرکت سفینه(شاید جت) و ماکنیزم گلوگه رو ساختم مونده یکچی بزاریم بهش شلیک کنیم امتیاز بگیریم 😆
@TorhamDevCH
@TorhamDevCH
👍1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
خب الان دیگه رسما گیممون آمادست فقط یکم تغییر در رنگ لازم داره و دشمن ها ک رندوم بیان رو صفحه 🔪
@TorhamDevCH
@TorhamDevCH
😁2👍1👎1
خب یک بحثی بود که برنامه شما (فرض میگیریم بکاند ما) باید طوری باشه که به چیزی وابسته نباشه و اگه بخای بتونی راحت تغییرش بدی(کل بک اند نه ها، بخش ها اون بک اند) .
خب تا یک حد زیادی درسته، مثلا شما نباید همینطوری دیمی یک کتابخونه نصب کنید که کل بکاند و سورس بهش وابسته بشه، بعد یک سال بفهمید آخرین آپدیت کتابخونه برای ۲۰۰۳ عه :)
خب پس مورد اول میشه کتابخونهها که باید مراقبشون باشیم و تا جای ممکن خودمون وابسته بهش نکنیم.
یک سری نکات اینشکلی هست که تو کلیت پروژه باید رعایت بشه. موارد بعدی میره تو لایه دیزاین پروژه، برای مثال دیزاین شما بهتره تیکه تیکه و لایه لایه باشه. مثلا حداقل ایدهآل خورد کردن پروژه برای من ۳ لایه است.
۱. لایه دیتابیس
۲. لایه عملیات(بیزینس لاجیک)
۳. روتینگ
از لایه ۳ به ۱ میرم
لایه روتینگ وضیفش مسیر یابی، یعنی چی؟ یعنی آقا یک درخواست http که اومد این لایه درگیر میشه و تصمیم میگیره درخواست به کجا بره، و این درخواست رو میگیره تصمیم رو میگیره و به بخش خاصی از لایه ۲ یا همون عملیات میفرسته. مثلا درخواست "ساخت آبجکت" میاد و به بخش ساخت تو لایه عملیت میره
یعنی چی؟ یعنی هر وقت که دیتابیس عوض کنیم لایه عملیات و لایه روتر براشون مهم نیست اصلا :)، صرفا یک ایمپورته.
ولی خب باید api که دیتابیس در اختیار لایه دیگه میده تغییر نکنه و حتی اگه تغییر هم کنه لازم نیست کل سورس بترکونید همون جاهایی که از دیتابیس استفاده کرید تغییر میدید. تغییر کم میشه خلاصه :)
کل basic وظیفه فریمورکها روتینگ، یعنی درخواست http میگیره آبجکت میکنه بهتون میرسونه دیگه و جوابشو تحویل کاربر میده :)
برای همون اگه فریمورک منطقی داشته باشید که بیشتر از اینها خودش قاطی کار نکرده باشه خیلی راحت باید بتونید تعویضش کنید.
اینا نظرات و تجربهها من بود :)
@TorhamDevCH
خب تا یک حد زیادی درسته، مثلا شما نباید همینطوری دیمی یک کتابخونه نصب کنید که کل بکاند و سورس بهش وابسته بشه، بعد یک سال بفهمید آخرین آپدیت کتابخونه برای ۲۰۰۳ عه :)
خب پس مورد اول میشه کتابخونهها که باید مراقبشون باشیم و تا جای ممکن خودمون وابسته بهش نکنیم.
یک سری نکات اینشکلی هست که تو کلیت پروژه باید رعایت بشه. موارد بعدی میره تو لایه دیزاین پروژه، برای مثال دیزاین شما بهتره تیکه تیکه و لایه لایه باشه. مثلا حداقل ایدهآل خورد کردن پروژه برای من ۳ لایه است.
۱. لایه دیتابیس
۲. لایه عملیات(بیزینس لاجیک)
۳. روتینگ
از لایه ۳ به ۱ میرم
لایه روتینگ وضیفش مسیر یابی، یعنی چی؟ یعنی آقا یک درخواست http که اومد این لایه درگیر میشه و تصمیم میگیره درخواست به کجا بره، و این درخواست رو میگیره تصمیم رو میگیره و به بخش خاصی از لایه ۲ یا همون عملیات میفرسته. مثلا درخواست "ساخت آبجکت" میاد و به بخش ساخت تو لایه عملیت میره
from db import databaseحالا لایه عملیات برای بیشتر یا همه کارهاش نیاز به دیتابیس داره. و دیتابیس به عنوان یک ورودی میگیره.
@router.post("create/")
def create():
result = Opration.create(database)
return result
یعنی چی؟ یعنی هر وقت که دیتابیس عوض کنیم لایه عملیات و لایه روتر براشون مهم نیست اصلا :)، صرفا یک ایمپورته.
ولی خب باید api که دیتابیس در اختیار لایه دیگه میده تغییر نکنه و حتی اگه تغییر هم کنه لازم نیست کل سورس بترکونید همون جاهایی که از دیتابیس استفاده کرید تغییر میدید. تغییر کم میشه خلاصه :)
کل basic وظیفه فریمورکها روتینگ، یعنی درخواست http میگیره آبجکت میکنه بهتون میرسونه دیگه و جوابشو تحویل کاربر میده :)
برای همون اگه فریمورک منطقی داشته باشید که بیشتر از اینها خودش قاطی کار نکرده باشه خیلی راحت باید بتونید تعویضش کنید.
اینا نظرات و تجربهها من بود :)
@TorhamDevCH
😱139😐23❤6👏3👍2👎2🤔1
بچه ها من خیلی وقته لینک دونیت برداشتم، دلیلش هم اینه که به نظرم کار خاصی نمیکنم دیگه که دونیت بشم. اگه یک درصد فکر میکنید که مدیونید یا میخوایید دونیت کنید همون به یک نیازمند تو شهر بدید، یا باهاش بستنی بخرید بخورید :)
❤18👍1
This media is not supported in your browser
VIEW IN TELEGRAM
دقیقا ۳ سال و ۶ ماه پیش، داستان از اینجا شروع شد...
😁8❤🔥1
این ویدیو جادی خیلی جالب بود و یک ایده مسخره دیگه بهم داد ولی از اونجایی که مریض شدم حال ندارم انجامش بدم👍
https://youtu.be/yDU-0cN43eQ?si=gheWzBh5SEO1T5o0
@TorhamDevCH
https://youtu.be/yDU-0cN43eQ?si=gheWzBh5SEO1T5o0
@TorhamDevCH
YouTube
Writing and explaining "Image to Dice Pattern convertor"
Have you ever seen those portraits created by 1000s of dices and wondered HOW? In this session, we'll write a python noscript to generate the dice pattern based on an input image. We will see how a programmer thinks and will become familiar with the Pillow…
☃2
TorhamDev | تورهام 😳
حقیقتا میخواستم ریاضی گسسته بخونم برای امتحان. اما دیدم ۱ حجمش زیاده و من الکی وقت میزارم کل روز یکی از مباحثش یادبگیرم که شاید کلا ۱ سوال ازش بیاد. در نتیجه باخودم گفتم که من که همه واحدها رو افتادم. اینم روش :) به جاش چیکار میکنیم؟ میریم یک دوره asyncio…
۱۰ شدم ( ۱۰ داده در حقیقت)
so it wasn't a bad choice LOL
so it wasn't a bad choice LOL
🥴6🤷♀2🍾2⚡1
خب، یک چیز جالب که فهمیدم(قبلش نمیدونستم 🗿) رو این آقاعه که چشماش بسته است گفت.
بزارید از این ماجرا شروع کنم، تا حالا برای شما پیش اومده که بخوایید یک tuple رو این شکلی بنویسید ولی کار نکنه؟
و این اتفاق برای این میوفته که پایتون tuple هارو با ویرگول(،) میشناسه نه با پرانتز (این تیکه رو نمیدونستم)
در نتیجه پرانتز صرفا برای شفاف سازی حضور tuple هستش :)
و خوب دلیلش هم اینه که بعد با پرانتز میتونید اولويت هایی مثل opration ها ریاضی ضرب و تقسیم و .. با پرانتز مدریت کنید.
در نتیجه کد زیر هم درست کار میکنه.
@TorhamDevCH
بزارید از این ماجرا شروع کنم، تا حالا برای شما پیش اومده که بخوایید یک tuple رو این شکلی بنویسید ولی کار نکنه؟
a = (1)اتفاقی که میوفته اینه ک a مساوی با integer یک میشه نه tupleای که داخلش یک هست.
و این اتفاق برای این میوفته که پایتون tuple هارو با ویرگول(،) میشناسه نه با پرانتز (این تیکه رو نمیدونستم)
در نتیجه پرانتز صرفا برای شفاف سازی حضور tuple هستش :)
و خوب دلیلش هم اینه که بعد با پرانتز میتونید اولويت هایی مثل opration ها ریاضی ضرب و تقسیم و .. با پرانتز مدریت کنید.
در نتیجه کد زیر هم درست کار میکنه.
a = 1,و این یک tuple میده. نکته خفن تر ماجرا داخل unpacking کرد عه :)) که اون یک ماجرا جداست اگه این پست ۲۰ تا ریکشن 😱 بگیره اون هم مینویسم 😂
print(a)
@TorhamDevCH
😱34👍6🍾2👎1🌚1👻1😨1
TorhamDev | تورهام 😳
خب، یک چیز جالب که فهمیدم(قبلش نمیدونستم 🗿) رو این آقاعه که چشماش بسته است گفت. بزارید از این ماجرا شروع کنم، تا حالا برای شما پیش اومده که بخوایید یک tuple رو این شکلی بنویسید ولی کار نکنه؟ a = (1) اتفاقی که میوفته اینه ک a مساوی با integer یک میشه نه tupleای…
در پایتون شما هر iterator ای رو میتونید Unpack کنید. اما iterator چیه؟ و Unpacking یعنی چی؟
ساده بخام بگم هر آبجکتی که بشه رو حرکت کرد و دیتا گرفت iterator عه مثل لیست، دیکشنری، تاپل و ...
بهتر بخام بگم هر آبجکتی که متد
خب حالا unpacking کردن چیه؟ آنپک کردن یجورایی Map کردن محصوب میشه مثال زیر رو ببینید:
حالا که اینو میدونید بزاید نظر شمارو به چیز دیگه ای جلب کنم :)
مثال پایین رو ببینید:
نکته باحال و هیجان انگیز اینه که پایتون در اصل ورودی های فانشکن unpack میکنه و map میکنه به ورودی ها فانشکن :))) و یکی از دلایلی که نمیتونید بعد یک ورودی a=3 داخل فانشکن ورودی عادی بدون مقدار پاس بدید. چون دیگه نمیتونه unpack و map کنه :)
اگه چیز بیشتری در این باره میدونید تو کامنتها بگید🤝
این پست اگه 20 تا 🤯 بگیره پست بعدی میزارم😂(باج گیری)
@TorhamDevCH
ساده بخام بگم هر آبجکتی که بشه رو حرکت کرد و دیتا گرفت iterator عه مثل لیست، دیکشنری، تاپل و ...
بهتر بخام بگم هر آبجکتی که متد
iter و اگه اشتباه نکنم next رو داره.خب حالا unpacking کردن چیه؟ آنپک کردن یجورایی Map کردن محصوب میشه مثال زیر رو ببینید:
a, b, c = 1, 2, 3خب از پست قبلی میدونیم که پایتون با ویرگول(،) میاد tuple میسازه پس سمت راستِ مساو، یک tuple. حالا پایتون میاد این tuple رو آنپک میکنه و به متغییرها اون ورودی Map میکنه. دونه دونه و به ترتیب در نتیجه a میشه 1 و b میشه 2 و c میشه 3
حالا که اینو میدونید بزاید نظر شمارو به چیز دیگه ای جلب کنم :)
مثال پایین رو ببینید:
def test(*args):خروجی این کد چی میشه؟ اگه این کد اجرا کنیم خروجی مثل زیر باید بگیریم
print(args)
test(1, 2, 3)
(1, 2, 3)که آرهههه یک tuple عه :)))))
نکته باحال و هیجان انگیز اینه که پایتون در اصل ورودی های فانشکن unpack میکنه و map میکنه به ورودی ها فانشکن :))) و یکی از دلایلی که نمیتونید بعد یک ورودی a=3 داخل فانشکن ورودی عادی بدون مقدار پاس بدید. چون دیگه نمیتونه unpack و map کنه :)
اگه چیز بیشتری در این باره میدونید تو کامنتها بگید🤝
این پست اگه 20 تا 🤯 بگیره پست بعدی میزارم😂(باج گیری)
@TorhamDevCH
🤯31😁5👍1🌚1