خب سلام، توی این کانال سعی میکنم مطالبی رو به صورت راحت و بدون مقدمه و پیچیدگی های مرسوم، منتشر کنم، لزوما هم تمامی مطالب فنی نیستند و با چاشنی سلیقه و اعتقاد شخصی و تعصب هم احتمالا همراه باشه
و مطمئنا تعداد اعضا یا مخاطبین هم اهمیت خاصی در روند و فرایند ایجاد نمیکنه، اینجا میتونه انباری برای ارشیو یا رفرنس به مطالب باشه
اولین بحثی که باهاش شروع میکنم، درمورد گنو/لینوکس هست،
اگه با گنو/لینوکس و کاربردش آشنا نیستید این مقالهای که چند سال پیش نوشتم رو میتونید بخونید، سایت به لحاظ فنی منسوخ هست ولی محتوا کماکان ولید هست
https://erfanmola.ir/gnu-linux/
بعد از اشنایی احتمالا بخواهید شروع کنید و وارد دنیای گنو/لینوکس بشید که در این مرحله من توصیه میکنم با اوبونتو یا فدورا شروع کنید
منتهی قبل از شروع به نصب یک توزیع، یکی از مهمترین مراحل نصب معمولا پارتیشنبندی هست و خب به خودی خود خطری نداره، ولی خب حتی قاشق هم دست بچهای که استفاده ازش رو بلد نیست خطرناکه، برای همین توصیه میکنم اول با پارتیشنها در گنو/لینوکس اشنا بشید، این پستی که من توی سایت منتشر کرده بودم میتونه نقطه خوبی برای شروع باشه :
https://erfanmola.ir/linux-partitioning/
بعدش میتونید برید سراغ نصب یک توزیع معقول
برای اوبونتو میتونید از این اموزشی که چند سال پیش ضبط کردم استفاده کنید، کیفیت و صدا خوب نیست ولی محتواش همچنان ولید هست، یا هم که میتونید هر آموزش نصب اوبونتویی که دوست دارید رو ببینید و ورژن هم معمولا مهم نیست چون اوبونتو بالای ده سال هست که نحوه نصبش تغییری نداشته
https://erfanmola.ir/install-ubuntu-20-04/
اگه هم که میخواهید با فدورا یا ... شروع کنید، با یک سرچ ساده میتونید آموزش نصبش رو پیدا کنید
چیز هایی که من برای شروع توصیه نمیکنم : کالی، ارچ، پروت، بلکارچ و هرگونه توزیعی که صرفا بخاطر هک گوشی دوست دخترتون نصب میکنید
درمورد دلایل عدم شروع با موارد بالا مفصل صحبت میکنیم #بعدا اگر فرصت شد
بعد از طی کردن مراحل بالا، انتظار میره که یک توزیع گنو/لینوکسی نصب کرده باشید و دنبال یادگیری بیشتر باشید
برای اشنایی با فلسلفه و تاریخچه گنو/لینوکس
https://t.me/ErfanMola/472
برای اشنایی با پکیجمنیجرها در گنو/لینوکس (#بعدا)
https://t.me/ErfanMola/440
و البته سایر مطالبی که میتونه براتون مفید باشه :
آموزش نصب آرچ لینوکس (#بعدا)
https://erfanmola.ir/install-arch-linux/
آموزش نصب و شخصی سازی میزکار XFCE
https://erfanmola.ir/install-xfce/
آموزش نصب و شخصیسازی میزکار گنوم
https://t.me/ErfanMola/460
آموزش نصب و شخصیسازی مدیرپنجره i3
https://t.me/ErfanMola/465
اگه با گنو/لینوکس و کاربردش آشنا نیستید این مقالهای که چند سال پیش نوشتم رو میتونید بخونید، سایت به لحاظ فنی منسوخ هست ولی محتوا کماکان ولید هست
https://erfanmola.ir/gnu-linux/
بعد از اشنایی احتمالا بخواهید شروع کنید و وارد دنیای گنو/لینوکس بشید که در این مرحله من توصیه میکنم با اوبونتو یا فدورا شروع کنید
منتهی قبل از شروع به نصب یک توزیع، یکی از مهمترین مراحل نصب معمولا پارتیشنبندی هست و خب به خودی خود خطری نداره، ولی خب حتی قاشق هم دست بچهای که استفاده ازش رو بلد نیست خطرناکه، برای همین توصیه میکنم اول با پارتیشنها در گنو/لینوکس اشنا بشید، این پستی که من توی سایت منتشر کرده بودم میتونه نقطه خوبی برای شروع باشه :
https://erfanmola.ir/linux-partitioning/
بعدش میتونید برید سراغ نصب یک توزیع معقول
برای اوبونتو میتونید از این اموزشی که چند سال پیش ضبط کردم استفاده کنید، کیفیت و صدا خوب نیست ولی محتواش همچنان ولید هست، یا هم که میتونید هر آموزش نصب اوبونتویی که دوست دارید رو ببینید و ورژن هم معمولا مهم نیست چون اوبونتو بالای ده سال هست که نحوه نصبش تغییری نداشته
https://erfanmola.ir/install-ubuntu-20-04/
اگه هم که میخواهید با فدورا یا ... شروع کنید، با یک سرچ ساده میتونید آموزش نصبش رو پیدا کنید
چیز هایی که من برای شروع توصیه نمیکنم : کالی، ارچ، پروت، بلکارچ و هرگونه توزیعی که صرفا بخاطر هک گوشی دوست دخترتون نصب میکنید
درمورد دلایل عدم شروع با موارد بالا مفصل صحبت میکنیم #بعدا اگر فرصت شد
بعد از طی کردن مراحل بالا، انتظار میره که یک توزیع گنو/لینوکسی نصب کرده باشید و دنبال یادگیری بیشتر باشید
برای اشنایی با فلسلفه و تاریخچه گنو/لینوکس
https://t.me/ErfanMola/472
برای اشنایی با پکیجمنیجرها در گنو/لینوکس (#بعدا)
https://t.me/ErfanMola/440
و البته سایر مطالبی که میتونه براتون مفید باشه :
آموزش نصب آرچ لینوکس (#بعدا)
https://erfanmola.ir/install-arch-linux/
آموزش نصب و شخصی سازی میزکار XFCE
https://erfanmola.ir/install-xfce/
آموزش نصب و شخصیسازی میزکار گنوم
https://t.me/ErfanMola/460
آموزش نصب و شخصیسازی مدیرپنجره i3
https://t.me/ErfanMola/465
| Erfan's Notes |
کتابخونه جالبی برای انیمیشن و موشنگرافی توی جاوا اسکریپت : https://mojs.github.io/
This media is not supported in your browser
VIEW IN TELEGRAM
از SVG استفاده میشه و خبری از Canvas نیست، برای همین طرحها وکتور هستند یا به اصطلاح خودش : Retina Ready هستند، جلوه تمیزی داره و به مراتب سریعتر از Canvas هست چون مرورگرها معمولا بهینه شدند برای رندر و انیمیت کردن المنت تا Canvas
یکی از مباحث جالبی که همیشه سعی میکنم درموردشون یاد بگیرم، ارتباط بین برنامهنویسی با سایر علوم هست و همچنین کاربرد برنامهنویسی در سایر علوم
صرفا قرار نیست که برنامهنویس وبسایت یا اپ موبایل و دسکتاپ بسازه ! میتونه با کدنویسی مشکلات و مسائل مختلف رو پیشبینی کنه یا حل کنه یا ...
یکی از پروژه های مفید در این زمینه Z3 هست که یک Theorem Prover هست و SMT Solver ای که از فرمت SMTLib پشتیبانی میکنه
در تخصص من نیست، ولی برای اثبات قضیهها و فرمولها و مقایسه روشها و اعتبارسنجی و سنجش میزان صحت روشها و ... میتونه کاربرد داشته باشه
برای شروع میتونید پروژه گیتهاب اش رو ببینید و درموردش بخونید، پروژه توسط مایکروسافت توسعه پیدا میکنه :
https://github.com/Z3Prover
صرفا قرار نیست که برنامهنویس وبسایت یا اپ موبایل و دسکتاپ بسازه ! میتونه با کدنویسی مشکلات و مسائل مختلف رو پیشبینی کنه یا حل کنه یا ...
یکی از پروژه های مفید در این زمینه Z3 هست که یک Theorem Prover هست و SMT Solver ای که از فرمت SMTLib پشتیبانی میکنه
در تخصص من نیست، ولی برای اثبات قضیهها و فرمولها و مقایسه روشها و اعتبارسنجی و سنجش میزان صحت روشها و ... میتونه کاربرد داشته باشه
برای شروع میتونید پروژه گیتهاب اش رو ببینید و درموردش بخونید، پروژه توسط مایکروسافت توسعه پیدا میکنه :
https://github.com/Z3Prover
GitHub
Z3 Theorem Prover
Z3 Theorem Prover has 9 repositories available. Follow their code on GitHub.
🔥3
یکی از باحالترین پروژه هایی که وجود داره به نظر من، پروژه Puppeteer هست، چرا ؟ چون گوگل خودش توسعهاش میده
کاربردش چیه ؟ باهاش میتونید بهصورت برنامهنویسی یک مرورگر کروم رو کنترل کنید
کار هایی که باهاش میتونید بکنید بینهایت هست، میتونید یک سایت رو لود کنید و رندر اش کنید و اسکرینشات بگیرید
یا یه سایتی رو لود کنید و داخلش با کدنویسی لاگین کنید و کار های باحال بکنید
یا هر گونه استفاده دیگهای که از مرورگر میتونید داشته باشید رو با استفاده از کدنویسی انجام بدید
مطمئنا فرد عادی انقدر بیکار نیست که وبگردی عادیاش رو با کد انجام بده، بیشتر جنبه این پروژه برای اتوماسیون کارها هست، مثلا میتونید اسکریپت بنویسید که : وقتی پروژه رو پوش کردم، یک کروم بالا بیار و برو سایت Trello و تسکی که برای پوش داشتم رو تیک بزن
نحوه کار اش هم به این شکل هست که یک کروم بهصورت Headless یا همون CLI بالا میاره و شامل تمامی بخش های مختلف مرورگر میشه، از جمله انجین JS و CSS و DOM و BOM و ...، در کل همون کروم هست صرفا اینکه GUI اش رو به شما نشون نمیده که کممصرفتر باشه (:
پروژه های مشابهای هم توی زبان های مختلف وجود داره، مثلا سلنیوم برای پایتون هست، ولی نکته خوب Puppeteer این هست که از طریق خود کروم عادی میتونید براش ماکرو رکورد کنید، یک کاری رو انجام بدید و کروم براتون ضبط اش کنه و یک ماکرو قابل استفاده توی کد بهتون بده
در کل خیلی باحال هست و توصیه میکنم چک اش کنید
https://github.com/puppeteer/puppeteer
کاربردش چیه ؟ باهاش میتونید بهصورت برنامهنویسی یک مرورگر کروم رو کنترل کنید
کار هایی که باهاش میتونید بکنید بینهایت هست، میتونید یک سایت رو لود کنید و رندر اش کنید و اسکرینشات بگیرید
یا یه سایتی رو لود کنید و داخلش با کدنویسی لاگین کنید و کار های باحال بکنید
یا هر گونه استفاده دیگهای که از مرورگر میتونید داشته باشید رو با استفاده از کدنویسی انجام بدید
مطمئنا فرد عادی انقدر بیکار نیست که وبگردی عادیاش رو با کد انجام بده، بیشتر جنبه این پروژه برای اتوماسیون کارها هست، مثلا میتونید اسکریپت بنویسید که : وقتی پروژه رو پوش کردم، یک کروم بالا بیار و برو سایت Trello و تسکی که برای پوش داشتم رو تیک بزن
نحوه کار اش هم به این شکل هست که یک کروم بهصورت Headless یا همون CLI بالا میاره و شامل تمامی بخش های مختلف مرورگر میشه، از جمله انجین JS و CSS و DOM و BOM و ...، در کل همون کروم هست صرفا اینکه GUI اش رو به شما نشون نمیده که کممصرفتر باشه (:
پروژه های مشابهای هم توی زبان های مختلف وجود داره، مثلا سلنیوم برای پایتون هست، ولی نکته خوب Puppeteer این هست که از طریق خود کروم عادی میتونید براش ماکرو رکورد کنید، یک کاری رو انجام بدید و کروم براتون ضبط اش کنه و یک ماکرو قابل استفاده توی کد بهتون بده
در کل خیلی باحال هست و توصیه میکنم چک اش کنید
https://github.com/puppeteer/puppeteer
GitHub
GitHub - puppeteer/puppeteer: JavaScript API for Chrome and Firefox
JavaScript API for Chrome and Firefox. Contribute to puppeteer/puppeteer development by creating an account on GitHub.
🔥3
یکی از جالبترین فرایندها توی برنامهنویسی، مبحث بهینهسازی کد هست، سعی میکنم توی یکسری پستها نکاتی درمورد کدنویسی بهینهتر بگم
و شروعی که میکنم با حلقه
احتمالا توی تمامی زبان های برنامهنویسیای که استفاده کردید، کدی مشابه کد زیر برای حلقه فور نوشتید :
این کد ظاهرا مشکلی نداره، ولی در 99 درصد مواقع بهینهترین حالت نیست! دلیلش هم این هست که توابع داخل سربرگ حلقه، در هر iteration یا بهعبارتی در هر چرخش فراخوانی میشن
فرض کنید ارایه
راه بهینهتر این هست که همیشه تا حد امکان، سایز حلقهمون یک مقدار استاتیک باشه، نسخه اصلاح شده کد بالا میتونه به این شکل باشه :
البته چنین بهینهسازی هایی در مقیاس عادی و مثلا برای ۱۰۰۰ ایتم، تفاوت اش در حد میلیثانیه میتونه باشه، چرا که ۱۰۰۰ بار شمردن یک ابجکت برای کامپیوتر کار پیچیدهای نداره با توجه به کلاک پردازنده های فعلی، ولی در نهایت اگه دیدگاه تون این باشه که دارید ۲ برابر زحمت بیشتری میکشید برای نتیجهای ثابت، میتونید درک کنید که حتی نانوثانیهها هم مهم هستند، چه برسه میلیثانیه
و شروعی که میکنم با حلقه
for هستاحتمالا توی تمامی زبان های برنامهنویسیای که استفاده کردید، کدی مشابه کد زیر برای حلقه فور نوشتید :
for ($i = 0; $i <= count($arr); $i++) { }این کد ظاهرا مشکلی نداره، ولی در 99 درصد مواقع بهینهترین حالت نیست! دلیلش هم این هست که توابع داخل سربرگ حلقه، در هر iteration یا بهعبارتی در هر چرخش فراخوانی میشن
فرض کنید ارایه
$arr دارای یک میلیون ایتم باشه، در این صورت تابع count($arr) به تعداد یک میلیون بار فراخوانی میشه! چون در هر دور چرخش حلقه کال میشهراه بهینهتر این هست که همیشه تا حد امکان، سایز حلقهمون یک مقدار استاتیک باشه، نسخه اصلاح شده کد بالا میتونه به این شکل باشه :
for ($i = 0, $count = count($arr); $i <= $count; $i++) { }البته چنین بهینهسازی هایی در مقیاس عادی و مثلا برای ۱۰۰۰ ایتم، تفاوت اش در حد میلیثانیه میتونه باشه، چرا که ۱۰۰۰ بار شمردن یک ابجکت برای کامپیوتر کار پیچیدهای نداره با توجه به کلاک پردازنده های فعلی، ولی در نهایت اگه دیدگاه تون این باشه که دارید ۲ برابر زحمت بیشتری میکشید برای نتیجهای ثابت، میتونید درک کنید که حتی نانوثانیهها هم مهم هستند، چه برسه میلیثانیه
🔥8
این تصویر Life Cycle هر ریکوئست در PHP هست
ابتدا G INIT و سپس M INIT و بعد وارد فاز ریکوئست میشه و R INIT صورت میگیره
و بعد اجرای کد و در نهایت Shutdown های مربوطه و بستن پروسس
درمورد هرکدوم از مراحل و روش های حذف/بهینهسازی مراحل در آینده سعی میکنم صحبت کنم و به هر مرحله بهصورت دقیق و با جزئیات بپردازم
ابتدا G INIT و سپس M INIT و بعد وارد فاز ریکوئست میشه و R INIT صورت میگیره
و بعد اجرای کد و در نهایت Shutdown های مربوطه و بستن پروسس
درمورد هرکدوم از مراحل و روش های حذف/بهینهسازی مراحل در آینده سعی میکنم صحبت کنم و به هر مرحله بهصورت دقیق و با جزئیات بپردازم
🔥10
Forwarded from | Erfan Mola |
💠 پارتیشنها و فایلسیستمها
⭕️ Eyfan.ir/partitions-and-filesystems
💡 توی این پست درمورد مفهوم پارتیشنها و فایلسیستمها حرف میزنیم و نحوه ذخیره شدن دیتا روی پارتیشنها در گنو/لینوکس و ویندوز رو بررسی میکنیم
💎 @ErfanMola
⭕️ Eyfan.ir/partitions-and-filesystems
💡 توی این پست درمورد مفهوم پارتیشنها و فایلسیستمها حرف میزنیم و نحوه ذخیره شدن دیتا روی پارتیشنها در گنو/لینوکس و ویندوز رو بررسی میکنیم
💎 @ErfanMola
🔥5
Media is too big
VIEW IN TELEGRAM
توی این ویدیو درمورد مبحث «همزمانی در توسعه نرمافزار» توضیح دادم
درمورد مباحث Multi Processing و Multi Threading و Couroutine و Async حرف میزنیم و تفاوت های هرکدوم رو بررسی میکنیم
این ویدیو رو فعلا توی یوتیوب منتشر نکردم بهصورت عمومی، هفته های آینده بهصورت عمومی توی کانال اصلی منتشر میکنم
اگر سوالی داشتید کامنت کنید، یا موضوعی برای ویدیو/ویس های بعدی، چون قصد دارم روزانه یک ویس درمورد یک مبحث ضبط کنم و قرار بدم
درمورد مباحث Multi Processing و Multi Threading و Couroutine و Async حرف میزنیم و تفاوت های هرکدوم رو بررسی میکنیم
این ویدیو رو فعلا توی یوتیوب منتشر نکردم بهصورت عمومی، هفته های آینده بهصورت عمومی توی کانال اصلی منتشر میکنم
اگر سوالی داشتید کامنت کنید، یا موضوعی برای ویدیو/ویس های بعدی، چون قصد دارم روزانه یک ویس درمورد یک مبحث ضبط کنم و قرار بدم
🔥6
کتابخونه Paper.js که اخیرا باهاش آشنا شدم، یک کتابخونه فوقالعاده در زمینه سر و کله زدن با SVG و Canvas توی HTML هست، درمورد اینکه کاربردش چیه نمیشه بهصورت کلامی توضیح داد، بهتره دمو هاش رو ببینید
معمولا ابزار یا کتابخونهای نیست که همینطوری باهاش آشنا بشید و یهویی شروع به استفاده کنید، بلکه معمولا نیاز به یک عملی روی SVG یا Canvas دارید و سرچ میزنید و با راهنمایی های گوگل و استکاورفلو و ... متوجه میشید که چنین قابلیتی توی Paper.js وجود داره و از اون لحظه هست که میتونید استفاده کنید و کاربردش رو درک کنید
مثال های جالبی هم داره که میتونید ببینید :
http://paperjs.org/examples/tadpoles/
معمولا ابزار یا کتابخونهای نیست که همینطوری باهاش آشنا بشید و یهویی شروع به استفاده کنید، بلکه معمولا نیاز به یک عملی روی SVG یا Canvas دارید و سرچ میزنید و با راهنمایی های گوگل و استکاورفلو و ... متوجه میشید که چنین قابلیتی توی Paper.js وجود داره و از اون لحظه هست که میتونید استفاده کنید و کاربردش رو درک کنید
مثال های جالبی هم داره که میتونید ببینید :
http://paperjs.org/examples/tadpoles/
🔥5
اگه از PHP استفاده میکنید و مثل من روی پرفرمنس وسواس دارید، یک کیت به اسم Zephir وجود داره که با استفاده از اون میتونید با یک سینتکس نسبتا جالب و شبیه PHP، اکستنشن هایی برای PHP بنویسید که بهصورت .so قابل استفاده هستند و به C کامپایل میشن
در چه سناریو هایی میتونه کاربرد داشته باشه ؟
فرض کنید که ما یک برنامهای با PHP نوشتیم که نیاز به محاسبات پیچیده و عجیب و غریب داره که CPU Bound هستند
مثلا برای بنچمارک، یک فانکشن نوشتیم که ضرب ماتریسی انجام میده و این عملیات ضرب ماتریسی رو بهتعداد یک میلیون بار، روی دو تا ماتریس 500x500 انجام میدیم
در حالت عادی با خود PHP نتیجه حدود 8 ثانیه طول میکشه
در حالتی که فانکشنمون رو با Zephir بنویسیم و به اکستنشن PHP با زبان C کامپایلش کنیم، حدود 2 ثانیه طول میکشه و این یعنی 4x بهینهسازی در زمان اجرا
البته میتونید متوجه بشید که، این اعداد و ارقام، توی سناریو های دنیای واقعی ما که معمولا وبسایتها هستند، زیاد نمیتونند تفاوت ایجاد کنند، چون معمولا یک وبسایت نیاز نداره که یک میلیون بار دو تا ماتریس 500x500 رو به هم ضرب کنه و گلوگاه ما در وبسایتها معمولا IO هست و نه CPU، ولی خب در حالت کلی، اگر متد یا کلاس یا تابع یا ... ای دارید که بهصورت انبوه فراخوانی میشه و پرفرمنس جالبی نداره، در مرحله اول الگوریتمتون رو بهینه کنید و در مرحله دوم، از چنین ابزار هایی استفاده کنید برای نوشتن و کامپایل کردن اونها بهصورت اکستنشن
نظر خود من درمورد این قضیه ؟ طبق Use Case های من کاربرد آنچنانی نداره، ولی اگر میکرو ثانیهها براتون مهم هست و میخواهید Development Time رو فدای Performance میکرو ثانیهای بکنید، میتونه بیارزه، هرچند خودم هم سعی میکنم توی یکی از پروژه های واقعی آیندهمون استفاده کنم و اگر شد نتیجهاش رو اینجا بگم
https://zephir-lang.com/en
در چه سناریو هایی میتونه کاربرد داشته باشه ؟
فرض کنید که ما یک برنامهای با PHP نوشتیم که نیاز به محاسبات پیچیده و عجیب و غریب داره که CPU Bound هستند
مثلا برای بنچمارک، یک فانکشن نوشتیم که ضرب ماتریسی انجام میده و این عملیات ضرب ماتریسی رو بهتعداد یک میلیون بار، روی دو تا ماتریس 500x500 انجام میدیم
در حالت عادی با خود PHP نتیجه حدود 8 ثانیه طول میکشه
در حالتی که فانکشنمون رو با Zephir بنویسیم و به اکستنشن PHP با زبان C کامپایلش کنیم، حدود 2 ثانیه طول میکشه و این یعنی 4x بهینهسازی در زمان اجرا
البته میتونید متوجه بشید که، این اعداد و ارقام، توی سناریو های دنیای واقعی ما که معمولا وبسایتها هستند، زیاد نمیتونند تفاوت ایجاد کنند، چون معمولا یک وبسایت نیاز نداره که یک میلیون بار دو تا ماتریس 500x500 رو به هم ضرب کنه و گلوگاه ما در وبسایتها معمولا IO هست و نه CPU، ولی خب در حالت کلی، اگر متد یا کلاس یا تابع یا ... ای دارید که بهصورت انبوه فراخوانی میشه و پرفرمنس جالبی نداره، در مرحله اول الگوریتمتون رو بهینه کنید و در مرحله دوم، از چنین ابزار هایی استفاده کنید برای نوشتن و کامپایل کردن اونها بهصورت اکستنشن
نظر خود من درمورد این قضیه ؟ طبق Use Case های من کاربرد آنچنانی نداره، ولی اگر میکرو ثانیهها براتون مهم هست و میخواهید Development Time رو فدای Performance میکرو ثانیهای بکنید، میتونه بیارزه، هرچند خودم هم سعی میکنم توی یکی از پروژه های واقعی آیندهمون استفاده کنم و اگر شد نتیجهاش رو اینجا بگم
https://zephir-lang.com/en
Zephir Website
Zephir is an open source, high-level/domain specific language designed to ease the creation and maintainability of extensions for PHP with a focus on type and memory safety
🔥8
از جمله مفاهیمی که معمولا بهدلیل درک اشتباه، بهجای هم بهصورت اشتباه بهکار میرن، مفاهیم Concurrency و Parallelism هستند
مفهوم Parallelism یعنی اینکه، ما یک CPU داریم و 4 تا هسته داره، پس بهتره یک برنامهای بنویسیم که 4 تا پروسس مختلف ایجاد کنه و از طریق IPC یا همون Inter Process Communication پروسسها با همدیگه حرف بزنند و از پتانسیل کامل CPU استفاده بشه، بهعبارتی، چهار تا کارگر استخدام کنیم تا کارمون رو پیش ببره
مفهوم Concurrency یعنی اینکه، ما یک CPU داریم که بر فرض مثال، یک هسته داره، پس ما محدود به یک هسته هستیم و باید نهایت استفاده مون رو از این هسته ببریم، نباید اجازه بدیم IO Blocking پیش بیاد، تا حد امکان کدنویسی async و couroutine انجام بدیم تا Thread اصلی برنامه بلاک نشه و همزمان کار های مفید بیشتری رو انجام بده، یا بهعبارتی، تا حد امکان، لنگ این نباشه که یکی بهش دیتا برسونه
مفهوم Parallelism یعنی اینکه، ما یک CPU داریم و 4 تا هسته داره، پس بهتره یک برنامهای بنویسیم که 4 تا پروسس مختلف ایجاد کنه و از طریق IPC یا همون Inter Process Communication پروسسها با همدیگه حرف بزنند و از پتانسیل کامل CPU استفاده بشه، بهعبارتی، چهار تا کارگر استخدام کنیم تا کارمون رو پیش ببره
مفهوم Concurrency یعنی اینکه، ما یک CPU داریم که بر فرض مثال، یک هسته داره، پس ما محدود به یک هسته هستیم و باید نهایت استفاده مون رو از این هسته ببریم، نباید اجازه بدیم IO Blocking پیش بیاد، تا حد امکان کدنویسی async و couroutine انجام بدیم تا Thread اصلی برنامه بلاک نشه و همزمان کار های مفید بیشتری رو انجام بده، یا بهعبارتی، تا حد امکان، لنگ این نباشه که یکی بهش دیتا برسونه
🔥3
کل دنیا و تمامی برنامهها و بازیهای موجود توی دنیا، از ویندوز گرفته تا مک و اندروید و ...، همگی اوپن سورس هستند!
فقط کافیه که اسمبلی بلد باشید 🚶🏻♂️
فقط کافیه که اسمبلی بلد باشید 🚶🏻♂️
🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
با استفاده از slidev میتونید اسلاید هایی با استفاده از کدنویسی، به جای استفاده از پاورپوینت بسازید
انعطاف و شخصیسازی خوبی داره و مناسب کسانی هست که کار کردن با موس و دیزاین اسلاید و ... براشون آسون نیست، بهعبارتی، کسانی که دستبهکیبوردشون خوبه
محتواش از Markdown هم پشتیبانی میکنه
https://github.com/slidevjs/slidev
انعطاف و شخصیسازی خوبی داره و مناسب کسانی هست که کار کردن با موس و دیزاین اسلاید و ... براشون آسون نیست، بهعبارتی، کسانی که دستبهکیبوردشون خوبه
محتواش از Markdown هم پشتیبانی میکنه
https://github.com/slidevjs/slidev
🔥2
زبان PHP یکی از راحتترین روشها رو برای تعریف آرایه داره، تفاوتی نداره که بخواهیم آرایه ترتیبی تعریف کنیم یا آرایه کلیدی یا آرایه تو در تو یا ...، معمولا همه اینها با استفاده از
برای حل این مشکل توی اکثر زبانها حتی جاوا اسکریپت، آرایه هایی داریم تحت عنوان ArrayBuffer که یک بافر از Array هست با تایپ ثابت با هدف پرفرمنس بهتر، که این افزونه زیر برای PHP که با C نوشته شده، میتونه قابلیت تعریف Array Buffer های پرفرمنس عالی رو برامون فراهم کنه و توی سطوح پایینتر هم سر بار(Overhead) کمتری داره
تایپ های بافری که ساپورت میکنه:
Int8Array
UInt8Array
Int16Array
Uint16Array
Int32Array
UInt32Array
FloatArray
DoubleArray
https://github.com/nikic/buffer
[] تعریف میشن که به لحاظ راحتی، راحت هست، ولی به لحاظ پرفرمنس توی مقیاس های میلیونی یا میلیاردی، عالی نیستندبرای حل این مشکل توی اکثر زبانها حتی جاوا اسکریپت، آرایه هایی داریم تحت عنوان ArrayBuffer که یک بافر از Array هست با تایپ ثابت با هدف پرفرمنس بهتر، که این افزونه زیر برای PHP که با C نوشته شده، میتونه قابلیت تعریف Array Buffer های پرفرمنس عالی رو برامون فراهم کنه و توی سطوح پایینتر هم سر بار(Overhead) کمتری داره
تایپ های بافری که ساپورت میکنه:
Int8Array
UInt8Array
Int16Array
Uint16Array
Int32Array
UInt32Array
FloatArray
DoubleArray
https://github.com/nikic/buffer
GitHub
GitHub - nikic/buffer: PHP extension for buffer based typed arrays
PHP extension for buffer based typed arrays. Contribute to nikic/buffer development by creating an account on GitHub.
🔥4
سورس کد TDLib حدود نیم میلیون خط کد هست و از حدود ۵۰۰٫۰۰۰ خط کد، فقط و فقط ۲۰٫۰۰۰ خط کد مربوط به پروتکل MTProto و ارسال و دریافت دیتا و اینکریپشن و ... هست
مابقی ۴۰۰٫۰۰۰ خط کد، اکثرا برای ولیدیشن دیتا و پارامتر های دریافتی از کاربر برای متدها هست، که بشه براش پاسخ مناسب داد، مثلا کسی بهعنوان chat id مقدار bool نده و موارد مشابه
این مورد برای اکثر پروژه های بزرگ دیگه هم صدق میکنه، ولیدیشن دیتا بخش بزرگی از کد های ما رو تشکیل میده، و نکته جالب اینجاست که بعد از این همه سال، هنوز استاندارد واحدی برای این مورد نیست، به خصوص در زبان های سطح پایین
دفعه بعدی که کامپایل TDLib تون یک ساعت طول کشید، بدونید که بالای نود درصد تایم مصرفی تون برای کامپایل تعدادی انبوهی if بوده
مابقی ۴۰۰٫۰۰۰ خط کد، اکثرا برای ولیدیشن دیتا و پارامتر های دریافتی از کاربر برای متدها هست، که بشه براش پاسخ مناسب داد، مثلا کسی بهعنوان chat id مقدار bool نده و موارد مشابه
این مورد برای اکثر پروژه های بزرگ دیگه هم صدق میکنه، ولیدیشن دیتا بخش بزرگی از کد های ما رو تشکیل میده، و نکته جالب اینجاست که بعد از این همه سال، هنوز استاندارد واحدی برای این مورد نیست، به خصوص در زبان های سطح پایین
دفعه بعدی که کامپایل TDLib تون یک ساعت طول کشید، بدونید که بالای نود درصد تایم مصرفی تون برای کامپایل تعدادی انبوهی if بوده
🔥8