| Erfan's Notes |
188 subscribers
81 photos
10 videos
102 links
Download Telegram
کل دنیا و تمامی برنامه‌ها و بازی‌های موجود توی دنیا، از ویندوز گرفته تا مک و اندروید و ...، همگی اوپن سورس هستند!

فقط کافیه که اسمبلی بلد باشید 🚶🏻‍♂️
🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
با استفاده از 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
🔥4
سورس کد TDLib حدود نیم میلیون خط کد هست و از حدود ۵۰۰٫۰۰۰ خط کد، فقط و فقط ۲۰٫۰۰۰ خط کد مربوط به پروتکل MTProto و ارسال و دریافت دیتا و اینکریپشن و ... هست

مابقی ۴۰۰٫۰۰۰ خط کد، اکثرا برای ولیدیشن دیتا و پارامتر های دریافتی از کاربر برای متدها هست، که بشه براش پاسخ مناسب داد، مثلا کسی به‌عنوان chat id مقدار bool نده و موارد مشابه

این مورد برای اکثر پروژه های بزرگ دیگه هم صدق می‌کنه، ولیدیشن دیتا بخش بزرگی از کد های ما رو تشکیل میده، و نکته جالب اینجاست که بعد از این همه سال، هنوز استاندارد واحدی برای این مورد نیست، به خصوص در زبان های سطح پایین

دفعه بعدی که کامپایل TDLib تون یک ساعت طول کشید، بدونید که بالای نود درصد تایم مصرفی تون برای کامپایل تعدادی انبوهی if بوده
🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
با استفاده از این کتابخونه می‌تونید توی پروژه‌های وب‌تون با کم‌ترین تعداد خط ممکن، یک Easter Egg برای ساعت های هوشمند بزارید

https://github.com/ramonszo/watchface.js
ظاهرا توی نسخه 9 از PHP که در حال توسعه هست و اواخر 2023 لانچ میشه، قراره سیستم JIT Compile جدیدی معرفی بشه

پروژه‌اش مدتی هست که استارت خورده و تقریبا در مراحل اولیه هست و لینک گیت‌هابش هم می‌زارم، برای مطالعه و واچ کردن می‌تونه خوب باشه

چند ماه می‌تونیم پروژه‌اش رو واچ‌ کنیم و حتی اگر خودمون سواد مشارکت و توسعه‌اش رو نداشته باشیم، باز هم مفید و جالب هست دیدن اینکه هر تیکه از پازل به مرور‌ زمان چطوری تکمیل می‌شه و یکی از Core feature های یک زبان چطوری توسعه و تکامل پیدا می‌کنه

https://github.com/dstogov/ir
🔥3
با استفاده از این کتابخونه می‌تونید توی PHP یک سند HTML رو به PDF تبدیل کنید

کاربردش بیشتر می‌تونه برای ایجاد فاکتور قابل چاپ یا ... باشه

البته از اونجایی که تبدیل توی محیط خارج از مرورگر و توسط انجین PHP اتفاق می‌افته، نباید انتظار های تبدیل HTML های پیچیده یا هوشمندی و اصلاح پیچیده و عجیب داشته باشیم، صرفا HTML های Valid رو می‌تونه به‌شکل درست تبدیل کنه

درمورد CSS هم که چیزی نگم بهتره

https://github.com/dompdf/dompdf
🔥2
| Erfan's Notes |
یکی از جالب‌ترین فرایند‌ها توی برنامه‌نویسی، مبحث بهینه‌ساز‌ی کد هست، سعی می‌کنم توی یک‌سری پست‌ها نکاتی درمورد کدنویسی بهینه‌تر بگم و شروعی که می‌کنم با حلقه for هست احتمالا توی تمامی زبان های برنامه‌نویسی‌ای که استفاده کردید، کدی مشابه کد زیر برای حلقه…
در ادامه مباحث بهینه‌سازی کد، گاهی اوقات پیش میاد که نیاز داریم بررسی کنیم و ببینیم که آیا یک آرایه خالی هست یا دارای عضو

مرسوم‌ترین روشی که به ذهن می‌رسه چنین چیزی هست :
if (count($arr) > 0) { }

یا اگر کاربر قدیمی باشیم، به جای count از اسم دیگه‌اش sizeof استفاده می‌کنیم

این روش به نظر معقول می‌رسه، یک شرط کاملا معقول، منتهی مشکل اینجاست که ما اگر یک ارایه داشته باشیم که یک میلیون ایتم داشته باشه، شمردن تعداد ایتم صرفا برای دونستن اینکه بزرگ‌تر از صفر هست یا نه، معقول نیست

(البته PHP لزوما همیشه تعداد ایتم ها رو نمی‌شماره، در اکثر اوقات تعداد رو به صورت یک مقدار در کنار خود هش تیبل داره مگر اینکه دچار تغییرات عجیب بشه)

راه حل بهینه برای این مشکل، استفاده از isset هست

کد بالا به این شکل بهینه می‌شه :
if (isset($arr[0])) { }

به همین سادگی، به جای اینکه تعداد ایتم های یک ارایه رو بشماریم، صرفا چک می‌کنیم که ایا اندیس صفر داره یا نه

و البته این روش روی ارایه‌ها جواب میده، نه روی دیکشنری های key value based

برای دیکشنری‌ها می‌تونیم از این تکنیک استفاده کنیم :
if ($arr !== []) { }

به‌صورت خلاصه، اولویت با isset هست و در مرحله بعدی مقایسه با ارایه خالی و در مرحله بعد هم استفاده از count و …

البته مطمئنا تفاوت این متد ها در حدی نیست که ما متوجه بشیم، ولی در مقیاسی که تعداد ایتم ها میلیونی باشه، تفاوت‌شون در حد میلی‌ثانیه نمایان می‌شه

و البته باز هم ذکر می‌کنم که الزاما PHP با صدا کردن count نمیاد ارایه یا ابجکت رو بشمره، بلکه معمولا این تعداد رو از قبل توی مموری در کنار متا دیتا های متغیر ذخیره کرده و صرفا پوینتر روی بخش مربوطه ست می‌کنه و می‌خونه و تحویل میده
🔥9
This media is not supported in your browser
VIEW IN TELEGRAM
با استفاده از کتابخونه Vanta.js می‌تونید بدون داشتن دانش یا حرفه‌ خاص، پس‌زمینه های سه‌بعدی متحرک به وبسایت‌تون اضافه کنید

⭕️ نمایش در گیت‌هاب
⭕️ نمایش وبسایت
🔥4
Grafana + Prometheus
🔥8
| Erfan's Notes |
Grafana + Prometheus
یکی از ابزار هایی که در طول سال های اخیر شنیده بودم، ولی به‌دلایل عدم تمایل تغییر یا استفاده از چیز جدید، ازش استفاده نمی‌کردم پروژه Prometheus بود که امروز امتحانش کردم و نتیجه استفاده ازش واقعا لذت‌بخش بود

ابزار Prometheus در واقع یک سیستم جامع جمع‌آوری آمار هست، حالا چه آماری ؟ هر آماری که فکرش رو بکنید

در واقع یک Query Language مخصوص داره برای اینکه شما بتونید بهش آمار پاس بدید، یا ازش آمار پس بگیرید، بدون اینکه وارد پیچیدگی های خاصی بشید

این ابزار به خودی خودش صرفا یه ابزار و سرویس آمارگیر هست و می‌تونید Interval هایی رو تعریف کنید که در زمان های مشخص، به تعدادی Job که تعریف می‌کنید (و خودش Exporter نام‌گذاری می‌کنه) درخواست بزنید و بگید که بهم آمار بده!

این نرم‌افزار آمار ها رو دریافت می‌کنه، ولی به خودی خودش راه خوبی برای نمایش اون آمار و اعداد و ارقام نداره، تا اینکه پای Grafana به این وسط باز می‌شه

گرافانا در واقع یک پنل خیلی شیک بر بستر وب هست که می‌تونید از Prometheus به‌عنوان دیتا سورس استفاده کنید و داده های پرومیتیس رو به‌صورت زیبا و بصری نمایش بدید، البته گرافانا صرفا پنل نیست، بلکه پنل‌ساز هست! خودتون می‌تونید بی‌نهایت چینش و ترکیب و ... از پنلی که می‌خواهید داشته باشید

صرفا کافی هست که داخل پروژه‌تون یک endpoint ایجاد کنید که Prometheus راس زمان های مشخص بهتون درخواست بزنه و آماری که می‌خواهید رو بگیرید، بعدش می‌تونید از طریق گرافانا اون آمار رو Visualize کنید، وظیفه نگه‌داری زمانی و ... اون آمار بر عهده Prometheus هست

البته اگر از فریمورک‌ها یا ابزار های معروف مثل لاراول یا جنگو یا NodeJS یا ... استفاده می‌کنید، مطمئنا کتابخونه‌ای از قبل وجود داره که کار شما رو آسون‌تر می‌کنه و آماری از قبل تعداد درخواست و آپ‌تایم و مصرف سرور و ... رو می‌تونه برای Prometheus گزارش کنه و شما رو زیاد درگیر نکنه، اگر هم کتابخونه‌ای وجود نداشته باشه باز هم خودتون می‌تونید به‌راحتی با یه سرچ ساختار مورد نیاز برای دریافت آمار رو سرچ کنید و بهش تحویل بدید

و صد البته که خودش Exporter های آماده زیادی داره برای جمع‌آوری آمار سیستم‌عامل و مصرف رم و دیسک و سی‌پی‌یو و ... و الزاما برای وبسایت نیست، برای هرچیزی که فکرش رو بکنید می‌تونه کاربرد داشته باشه

من خودم واقعا حال کردم با این دو ابزار که زوج آسمانی هستند، برای تمامی سرویس هایی که نوشتم هم آمارگیرش رو نوشتم و اضافه کردم، توصیه می‌کنم شما هم انجام بدید

⭕️ prometheus.io
⭕️ grafana.com
🔥8
اگر با ابزار curl آشنا باشید و کار کرده باشید، احتمالا ابزار جدید trurl هم براتون جالب باشه، یکی از ابزار هایی که جای خالی‌اش واقعا حس می‌شد و جدیدا توسعه داده شده و معرفی شده

ابزار trurl رو سازنده curl نوشته و در واقع بخش زیادی از کدش هم از libcurl استفاده شده و در عمل، یک ابزار همه کاره برای ساخت/تجزیه انواع مختلف URL با پروتکل های مختلف هست

در واقع مثل ابزار tr روی url هست و البته که استفاده اش صرفا به tr محدود نمی‌شه، یک ابزار قدرتمند همه کاره که می‌تونید بهش هرنوع url ای بدید و بهتون به‌شکل های مختلف parse کنه و مقادیری مثل scheme و domain و query و port و protocol و ... بده

یا می‌تونید برعکس اینکار رو انجام بدید و بهش مقادیر مختلف رو بدید تا براتون کار یک URL Builder رو انجام بده

معمولا ما برای هندل کردن URL هامون از Regex استفاده می‌کنیم در زبان های مختلف، که تا حدودی هم جواب می‌ده ولی خب URL ها خیلی خیلی می‌تونند پیچیده باشند،‌ برای همین چنین ابزاری واقعا جای خالی‌اش حس می‌شد

مثلا برای یک IP می‌تونیم رجکس بنویسیم که 127.0.0.1 رو تشخیص بده، ولی آی‌پی بالا در واقع معادل 127.1 هست و کاملا هم ولید هست، ولی کم‌تر جایی پیدا می‌شه که آی‌پی دو بخشی رو هندل کرده باشه، این ابزار می‌تونه چنین کار هایی رو برامون آسون‌تر کنه

درمورد اینکه آیا از این به بعد باید توی پروژه‌هامون استفاده کنیم یا نه، جای بحث وجود داره، چون که ابزار جدیدی هست و به‌صورت دیفالت روی همه محیط‌ها نصب نیست و باید به‌صورت جداگانه نصب بشه،‌ ولی خب با گذشت یکی دو سال حدس می‌زنم مثل curl جا بیوفته و توی اکثر محیط‌ها به‌صورت دیفالت نصب باشه و بتونیم استفاده کنیم

البته منظورم از نصب بودن دیفالت، برای محیط های هاستینگ یا ... هست که دسترسی روت نداریم،‌ اگر سرور یا سیستمی دارید که می‌تونید روش پکیج نصب کنید، قطعا trurl می‌تونه کمک خوبی بکنه

https://github.com/curl/trurl
🔥6
یکی از علایق من توی دنیای PHP به اکستنشن OpenSwoole هست که به‌عبارتی یک تقویت‌کننده یا SuperCharger یا انرژی‌زا برای PHP هست، ولی متاسفانه این اکستنشن توسط یک عده حرفه‌ای بی‌حوصله نوشته شده و Maintain می‌شه و راهنما و مستندات درست و حسابی نداره، حتی مستنداتش هم زود به زود منسوخ می‌شن

در اصل یک فورک از Swoole هست، که خب باز Swoole مستندات بهتری داره ولی اکثرا به زبون نقاشی خرچنگ و قورباغه‌ای هست (نمی‌دونم چینیه یا ژاپنی یا کره‌ای)

در حالت کلی، حداقل من کامیونیتی فعالی از اوپن‌سوله ندیدم و به همین دلیل تصمیم گرفتم که یک گروه براش بزنم به‌آدرس @OpenSwoole و اگر علاقه‌مند بودید بهش می‌تونید جوین بشید

داخلش هم سعی می‌کنیم درمورد اوپن‌سوله و پرفرمنس توی PHP و قصه های این مدلی صحبت کنیم، هرچند که الزاما قرار نیست گروه خیلی اکتیو باشه، بیشتر برای همون پرسش و پاسخ یا سوال درمورد سوله می‌تونه مفید باشه
🔥6
افزونه CArray همونطوری که از اسمش هم پیداست، یک جایگزین پرسرعت برای آرایه های عددی PHP هست که می‌تونید برای محاسبات‌تون استفاده کنید

طبق گفته خودش، از کد NumPy الگو گرفته و برای محاسبات روی آرایه های عددی گزینه خیلی خیلی سریع‌تر و با Memory Footprint کم‌تری هست

https://github.com/phpsci/phpsci-carray
🔥4
شاید براتون جالب باشه، کتابخونه‌ای وجود داره که بهتون اجازه میده با سینتکس CSS برای تلگرام، ربات بنویسید

https://github.com/Bannerets/css-telegram-bot-api
🔥6
اگه از آرچ‌لینوکس یا توزیع های مبتنی بر آرچ استفاده می‌کنید یا به هر دلیل دیگه‌ای پکیج‌منیجرتون Pacman هست، توصیه می‌کنم که Cache اش رو هر از گاهی پاک کنید

پکیج منیجر پک‌من به‌صورت دیفالت هر پکیجی که نصب/آپدیت می‌کنید رو داخل Cache اش نگه می‌داره و بعد از یک‌سال استفاده و پاک نکردن کش می‌تونید به وضعیتی که توی عکس فرستادم دچار بشید و براتون 60GB کش ایجاد کنه

برای اطلاع از حجم کش می‌تونید از دستور زیر استفاده کنید:
du -sh /var/cache/pacman/pkg/

و برای پاک کردن کش:
sudo rm -rf /var/cache/pacman/pkg/*

و البته که این روش دستی هست و اگر دنبال روش اتوماتیک هستید می‌تونید یک Pacman Hook بنویسید که اینکار رو براتون انجام بده، اگه هم که از دستور rm نمی‌خواهید استفاده کنید می‌تونید از ابزار paccache برای پاک کردن استفاده کنید
🔥8
اگه داخل پروژه های وبی که می‌زنید و داخل موبایل تست می‌کنید، نیاز به کنسول دارید، توصیه می‌کنم از eruda استفاده کنید

یکی از مشکلاتی که معمولا وب دولوپرها حین توسعه وبسایت برای موبایل‌ها دارند، عدم دسترسی به Console هست و بدون دسترسی به کنسول هم منطقا نه دسترسی به لاگ ارورها هست و نه دسترسی به درخواست‌ها و ...

اگه دیوایس‌تون اندرویدی باشه، می‌تونید از Chrome Dev Tools استفاده کنید که راه‌اندازی‌اش دردسر داره و اگر هم که iOS باشید کلا هیچ راهی ندارید معمولا

برای رفع این مشکل می‌تونید از پکیج Eruda استفاده کنید که با لود کردن کتابخونه‌اش در پروژه‌تون، خیلی راحت و بی‌دردسر بهتون یک Console می‌ده که محیط کاملا مشابه به کنسول اصلی مرورگرها رو داره و می‌تونید به لاگ و ارورها و درخواست‌ها و کلی چیز های دیگه دسترسی داشته باشید

سمپل آنلاین پروژه:
https://eruda.liriliri.io/

نحوه استفاده از پروژه هم ساده هست و کافیه این دو خط رو به تگ head تون اضافه کنید:
<script src="//cdn.jsdelivr.net/npm/eruda"></script>
<script>eruda.init();</script>

لینک گیت‌هاب پروژه:
https://github.com/liriliri/eruda
🔥7
زبان TACT یک زبان جدیدی هست که توسط TON یا به عبارتی The Open Network جدید و Telegram Open Network قدیم توسعه داده شده

تیم توسعه‌اش ارتباط مستقیمی با تلگرام نداره ولی در نهایت بی‌ربط به تلگرام نیست و TON قرار بود در انحصار تلگرام باشه و به‌دلیل محدودیت های اپل از انحصار تلگرام در اومد

در کل، زبان TACT برام جالب بود، که برای TON اومدند و زبانی اختصاصی با کامپایلر و ... نوشتند صرفا برای اینکه Smart Contract بنویسید بر بستر TON

https://tact-lang.org/
🔥8
اگه با گنو/لینوکس کار کرده باشید یا با سرورها سر و کار داشته باشید، قطعا به اهمیت یک ادیتور CLI خوب پی بردید، چون واقعا بدون یک ادیتور معقول، آدم پیر می‌شه تا بتونه یک فایل رو ویرایش کنه یا بنویسه

گزینه های مرسومی که آدم‌ها سمتش میرن معمولا nano برای مبتدی‌ها هست و vi یا vim برای حرفه‌ای‌ها و گیک‌ها، ولی در نهایت من خودم شخصا نه به محیط vim تونستم عادت کنم در طول سالیان و نه به محیط nano، تا اینکه بالاخره امروز ادیتور cli مورد علاقه‌ام رو پید کردم

اسم این ادیتور، میکرو یا Micro هست و واقعا کم‌حجم و سریع و دم‌دست و زیبا و هرچیز خوب دیگه‌ای که فکر رو بکنید، هست

محیطی که توی تصویر بالا می‌بینید در واقع داخل ترمینال هست و بهتون قابلیت Split کردن پنجره رو می‌ده بدون نیاز به tmux و ...، بهتون شورتکات های معقولی میده و یک command bar قدرتمند هم در اختیارتون قرار میده، با کلی تم و ... خوشگل

اگه از nano یا vim مهاجرت می‌کنید به میکرو، یه‌مقداری اوایل کار عادت کردن به شورتکات‌ها سخته، ولی در نهایت به امتحانش می‌ارزه، اگر شد سعی می‌کنم یک آموزش درمورد خودش و کاربردش و شورتکات‌هاش ضبط کنم

micro-editor.github.io
🔥9