خب سلام، توی این کانال سعی میکنم مطالبی رو به صورت راحت و بدون مقدمه و پیچیدگی های مرسوم، منتشر کنم، لزوما هم تمامی مطالب فنی نیستند و با چاشنی سلیقه و اعتقاد شخصی و تعصب هم احتمالا همراه باشه
و مطمئنا تعداد اعضا یا مخاطبین هم اهمیت خاصی در روند و فرایند ایجاد نمیکنه، اینجا میتونه انباری برای ارشیو یا رفرنس به مطالب باشه
اولین بحثی که باهاش شروع میکنم، درمورد گنو/لینوکس هست،
اگه با گنو/لینوکس و کاربردش آشنا نیستید این مقالهای که چند سال پیش نوشتم رو میتونید بخونید، سایت به لحاظ فنی منسوخ هست ولی محتوا کماکان ولید هست
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