Melfex | فرشاد عسکری
64 subscribers
17 photos
3 files
20 links
SOON

• YouTube : youtube.com/@EduFarshad
• GitHub : github.com/Melfex
• Twitter / X : Twitter.com/@ItFrshd
• Insta : Instagram.com/askari_farshad

📧 Contact me : @FarshadXD
Download Telegram
درود.

این‌جا قراره خیلی راحت و بدون تشریفات خاصی، چیز هایی که یاد می‌گیرم، چالش های برنامه‌نویسی، پروژه‌ها و کار هایی که انجام می‌دم و حتی روزمرگی‌هام رو بنویسم. ی فضای دور از کانال آموزشیِ کلاسیک یا رسانه خبری، اسمش رو می‌ذارم باغچه‌ی دیجیتال ( DIGITAL GARDEN ) XD.

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

خوش اومدین به باغچه‌ دیجیتالی من.
‌

➖➖➖➖➖➖➖➖➖
📚• #FReading@Melfex | مطالب خواندنی

👤• #FromFarshad@Melfex | پی‌نوشت

⌨️• #DevEdu@Melfex | محتوای تخصصی توسعه
50⚡22🤡6❤4💘3👍2🥰2🍌2💋2💔1
مدتیه دارم روی زیرساخت و سر فصل‌های ی دوره و پروژه جدید کار می‌کنم که فکر کنم جاش خیلی خالیه و حس می‌شه : « دوره جامع و MASTERCLASS ساخت بات تلگرامی ».

تفاوت این دوره با آموزش و دوره‌های مشابه، توی "عمیق" بودنشه. قرار نیست در نهایت فقط چندتا متد رو کال کنیم. برنامه و ساختار دوره بصورت زیر هست:

١ فاز STRUCTURAL مستقل از زبان؛
بصورت خیلی دقیق و ریز پروتکل تلگرام رو کالبد شکافی و درک عمیق از API تلگرام، مدیریت آپدیت‌ها، تفاوت عملیاتی پولینگ و وب‌هوک و کار با متد‌های خام ایجاد می‌کنیم و در نهایت قصد دارم اول بفهمیم "چرا" و "چطور" ی بات واحد کار می‌کنه، قبل از این‌که "چطور" کدش رو بنویسیم.

٢ فاز DEEP DIVE روی AIOGRAM 3.X؛
بعد از رسیدن به ی درک معقول از مفاهیم اولیه، شیفت می‌کنیم روی یکی از قدرت‌مند‌ ترین فریم‌ورک پایتونی یعنی آیوگرام، از ROUTER و MIDDLEWARE های پیشرفته گرفته تا مدیریت STATE ها و FSM توی مقایس بالا. البته سعی بر اینه که جوری مانور بدیم که مفاهیم ارائه شده صرفا فقط صرف آیوگرام رو پوشش نده و در نهایت بتونیم با درک جامع ایجاد شده، با تمامی فریم‌ورک های موجود تا حد خیلی خوبی ارتباط برقرار کنیم.

٣ پروژه نهایی و REAL-WORLD APP؛
در نهایت و ته ماجرا ی بات کامل کد نویسی و به صورت کامل دیپلوی می‌کنیم.


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

Edit 02/03:
پ‌ن؛ نه دل‌و‌دماغ و نه شرایط‌ش هست، به امید روز های بهتر.. :).
1🔥9🍓3🤡1💋1💘1
سی و اندی روز هست که فیلترنت غالبِ غالبِ غالب هست.

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

خواستم بگم چقدر سریع عادت می‌کنیم و بر می‌گردیم به غارنشینی دیجیتال :)


👤• #FromFarshad@Melfex
💔9
این چند وقت که اینترنت حسابی قفل بوده و هست ی جورایی اجبارا رفتم توی فاز "DEEP WORK".

از اون‌جایی ترک عادت موجب مرض هست اما تصمیم گرفتم به‌جای این‌که مثل همیشه چندتا کار رو همزمان پیش ببرم، روی فلاتر و الپیک فوکوس کنم. فلاتر رو خیلی جدی و حرفه‌ای تر دارم دنبال می‌کنم و الپیک رو هم استارتش رو زدم، این وسط برای امرار معاش و صد البته سرگرمی چندتا پروژه بات ( بازو :)) ‌) بله هم گرفتم و انجام دادم.

قطع اینترنت ی‌جورایی نعمت شد و مجبورم کرد عمیق‌تر شم و خلاصه این دوره آفلاین بودن برام تبدیل شد به ی دوره "باغچه دیجیتالی" واقعی. بدون سر و صدا، بدون اسکرول سوشال‌مدیا ها، فقط یادگیری و کار عمیق.


👤• #FromFarshad@Melfex
🔥5❤1💋1💘1
اگه توسعه‌دهنده بات تلگرامی هستید، توی شرایط فعلی پروژه Simula یکی از کامل‌ترین راه‌حل‌ها برای شبیه‌سازی لوکال Telegram Bot API هست. می‌تونید بدون نیاز به اینترنت، کل روند توسعه و تست بات رو روی لوکال هاست خودتون انجام بدید.


بعد از دانلود پروژه، کافیه:
• توی ویندوز فایل run-web.bat
• توی لینوکس run-web.sh
ران کنید. سپس توی سورس‌کدتون بیس یو آر ال پیش‌فرض تلگرام رو به http://127.0.0.1:8081 تغییر و توکن بات رو 123456:TESTTOKEN ست کنید.


📦 github.com/laraXgram/Simula


⌨• #DevEdu@Melfex
⚡6❤1🔥1
اگه شما هم مثل من کمال‌گرایی زیادی توی یادگیری دارید، این جمله رو به خاطر بسپارید؛

عمق رو نباید فدای گستردگی کرد!


خطر تلنبار کردن سطحی دانش خیلی زیاد هست، چون:
• اعتماد به‌نفس کاذب می‌ده
• هیچ‌کدوم از مهارت‌ها به حد حرفه‌ای نمی‌رسه
• باعث فرسودگی و نهایتا رها کردن می‌شه

من چی‌کار می‌کنم؟! از قانون ٨٠/٢٠ استفاده می‌کنم:
• ٨٠ درصد یادگیری رو صرف ی مهارت اصلي می‌کنم
• ٢٠ درصد باقی مونده‌ رو واسه آشنایی علوم/ابزار مکمل


👤• #FromFarshad@Melfex
🔥4👏2❤‍🔥1💘1
به پيشنهاد یکی از دوستان، شروع کردم به خوندن کتاب "عادت های اتمی". کتاب خیلی خوبی به نظر می‌رسه و تصمیم گرفتم از این به بعد هر کتابی رو که می‌خونم، جملات و پاراگراف‌های مهم از نظر خودم رو هم این‌جا کوت کنم.

از این پس می‌تونید با هشتگ هر کتاب، این پاراگراف‌ها رو دنبال کنید.


📚• #FReads@Melfex
❤3👍1
• معجزه ۱٪ بهتر شدن؛
اگر بتوانی هر روز فقط ۱٪ بهتر شوی، در پایان سال ۳۷ برابر بهتر خواهی شد. انتخاب ۱٪ بهتر یا ۱٪ بدتر در لحظه بی‌اهمیت به نظر می‌رسد، اما در طول یک عمر، همین انتخاب‌های کوچک تعیین می‌کنند که چه کسی هستی و چه کسی می‌توانستی باشی.

• عادت‌ها، بهره مرکب خودسازی؛
عادت‌ها بهره مرکب خودسازی هستند. همانطور که پول با بهره مرکب چند برابر می‌شود، تأثیر عادت‌های تو نیز با تکرارشان چندبرابر می‌شود. یک عادت اتمی، یک عادت کوچک است که بخشی از یک سیستم بزرگ‌تر است. همانطور که اتم‌ها بلوک‌های سازنده مولکول‌ها هستند، عادت‌های اتمی هم بلوک‌های سازنده نتایج شگفت‌انگیزند.

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


📚• #FReading@Melfex | #عادت_های_اتمی
❤3🔥1
اگه این روز‌ها اندروید استدیو و بلید Gradle و میرورهاش دهن شما رو هم آسفالت کرده، کافیه مراحل زیر رو یک‌بار طی کنید تا نجات پیدا کنید.


1⃣• برای فلاتر میرور ست کنید؛
Pub Host: https://dart.devneeds.ir
Fluuter Storage: https://flutter.devneeds.ir

2⃣• کش‌های موجود اندروید رو دیلیت و از نو بگیرید؛
flutter precache --force --android


3⃣• محتویات دایرکتوری gradle. رو دیلیت کنید؛
- ی پوشه init.d بسازید.
- فایل داخل کامنت رو داخل فولدر پیست کنید.

4⃣• ی پروژه جدید فلاتری ایجاد کنید و وارد دایرکتوری android/gradle/wrapper بشید؛
- فایل gradle-wrapper.properties رو باز کنید.
- توی لاین آخر، services.gradle.org رو به maven.myket.ir/gradle تغییر بدید.

5⃣• داخل دایرکتوری فعلی ( gradle ‌) ی ترمینال باز کنید و دستورات زیر رو وارد کنید؛
flutter clean
flutter pub get
./gradlew.bat assembleDebug


و تمام! از حالا به بعد می‌تونید بدون دردسر بیلد کنید، برای پروژه‌های بعدی هم فقط نیاز هست مرحله ۴ رو تکرار کنید.


⌨• #DevEdu@Melfex
❤4
اگه شما هم از سنگین شدن، اکانت اجباری، لودینگ‌های رو مخ و مودی بودن ابزارهایی مثل Postman یا Insomnia خسته شدید، وقتشه سیستم تست اِی‌پی‌آی‌تون رو به Bruno مهاجرت بدید. برونو ی ابزار تست API کاملاً اوپن‌سورس و سبکه که چند ویژگی متمایزش واقعاً نجات‌دهنده‌ست:

• کاملاً آفلاین کار می‌کنه. هیچ کلاد، اکانت یا سینک اجباری نداره و تمام دیتای پروژه روی سیستم خودت می‌مونه.

• گیت‌فرندلی واقعی؛ درخواست‌ها رو به جای یه فایل جیسون بزرگ یا دیتابیس داخلی، با فرمت متنی ساده bru. ذخیره می‌کنه. این یعنی می‌تونی پوشه کالکشن رو مستقیم کنار سورس‌کد پروژه بذاری و با گیت خیلی تمیز کامیت و مرج کنی.

• افزونه‌ها و قابلیت‌های Environment کاملاً رایگان هست و بر خلاف خیلی از ابزارها، ویژگی‌های تیم‌ورک رو پشت Paywall قایم نکرده.

📦 github.com/usebruno/bruno


⌨• #DevEdu@Melfex
👍3🆒1
تو به بلندای اهدافت پرواز نمی‌کنی؛ تو به سطح هویت/سیستمت سقوط می‌کنی.


مشکل از اراده‌ نیست، مشکل از سیستم‌هاست. هر کاری که امروز انجام میدیم، ی رأی به سمت کسی هست که می‌خوایم بشیم. هر بار که ورزش می‌کنیم، داریم به خودمون ثابت می‌کنیم «من یه آدم فعال هستم».

از امروز به جای «دوست دارم کتاب بخونم» بگو «من کتابخونم». چون وقتی هویت عوض بشه، رفتارها برای همیشه قفل می‌شن.


📚• #FReading@Melfex | #عادت_های_اتمی
⚡3👏1💋1
چند ساعت پیش یکی از بچه‌ها سورس‌کد بات تلگرامیش رو ارسال کرد که دیباگ و بررسیش کنم. چالشی که داشت، یکی از همون به اصطلاح باگ‌های خاموش توی سطح پروداکشن بود؛ با وجود این‌که سمت کلاینت فقط یک‌بار ریکوئست ارسال شده بود و هیچ لوپ اضافه‌ای هم داخل کد وجود نداشت، اما پراسس‌ و تراکنش‌های باتش چندین بار تکرار می‌شدن.

بررسی لاجیک و سینتکس پایتون هیچ ایراد و باگی رو نشون نمی‌داد و ریشه مشکل بر می‌گشت به ضعف توی درک استراکچرال پروتکل تلگرام و غفلت از ریکوئست‌های تکراری داخل وبهوک‌ها.

سناریو از این قراره که وقتی بات شما زیر ترافیک Heavy لود قرار می‌گیره، یا سرور تلگرام به هر دلیلی ( مثل نتورک تایم‌اوت یا کندی کوئری دیتابیس و.. ‌) ریسپانس 200 رو در زمان مقرر دریافت نمی‌کنه، مکانیزم Retry تلگرام فعال و همون آپدیت رو مجدد سمت سرور شما ارسال می‌کنه. اگه ساختار هندلر‌های شما Idempotent ( یعنی مقاوم در برابر ریکوئست‌های تکراری نباشه، خودمم امشب این اصطلاح رو یاد گرفتم، LOL ‌) نباشن، این ریکوئست‌های تکراری وارد بیزینس‌لاجیک می‌شه و همون فاجعه‌ی پراسس‌ مجدد رخ می‌ده.

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

همون‌طور که قبلا توی سرفصل‌های دوره پیش رو اشاره کردم؛ توسعه بات صرفا کال کردن ی متد نیست، درک عمیق رفتار پروتکل‌ها و هندل کردن اصولی همین Edge کیس‌ها هست که مرز ها رو مشخص می‌کنه ( اصلا هم تبلیغی واسه دوره نیست 😆 ‌).


⌨• #DevEdu@Melfex | #TelegramBot
🔥6👏2❤‍🔥1🍓1
اگه شما هم از اون دسته توسعه‌دهندگان هستید که برای هندل کردن چندتا تسک همزمان توی لینوکس، ترمینالتون پر از تب‌های باز و درهم‌ریخته می‌شه، یا از حفظ کردن شورت‌کات‌های عجیب‌وغریب و کانفیگ‌های بی‌پایانِ تیماکس خسته شدید، وقتشه سوییچ کنید روی Zellij.


زلیج یه ترمینال مالتی‌پلکسرِ مدرنه که با زبان راست نوشته شده و اومده تا همون کاری که تیماکس می‌کرد رو بدون دردسر و کانفیگ‌های اولیه براتون انجام بده. چندتا ویژگی خفنش که باعث شد سوئیچ کنم:

• اوت-آف-د-باکس کار می‌کنه؛ برخلاف ابزارهای قدیمی که باید ساعت‌ها وقت بذارید و فایل کانفیگ براشون بنویسید تا تازه قابل استفاده بشن، زلیج از همون ثانیه اول یه UI کاربردی و منوی راهنمای کلیدها رو پایین صفحه بهتون می‌ده.

• پنل‌های شناور و تب‌های هوشمند؛ خیلی راحت می‌تونید محیط ترمینالتون رو به هر شکلی که می‌خواید تقسیم‌بندی کنید، اون هم با چیدمان کاملاً ریسپانسیو.

• پرفورمنس بالا؛ به لطف راست به شدت سبکه و حتی زیر سنگین‌ترین لودها و پروسه‌های سیستم هم کم نمیاره و کرش نمی‌کنه.

📦 github.com/zellij-org/zellij


⌨• #DevEdu@Melfex
❤2👏1🎄1🦄1
خیلی وقت‌ها به اسم بالا بردنِ بهره‌وری، روزها وقتمون رو صرف پیدا کردن بهترین تم ادیتور، کانفیگ کردن دقیق Zsh، یا شخصی‌سازی ریزبه‌ریز محیط دسکتاپ می‌کنیم. ذهن ما این کارها رو به عنوان "کار مفید" ثبت می‌کنه، در صورتی که در واقعیت داریم از انجام دیپ‌وورک و کد زدن واقعی فرار می‌کنیم. یادمون باشه؛ وسواس روی ابزارها، توهمِ پیشرفت می‌ده.


• محیط کارت باید "به اندازه کافی خوب" باشه، نه بی‌نقص.

• اگه کانفیگ کردنِ یه ابزار بیشتر از ارزشی که تو طول هفته برات خلق می‌کنه زمان می‌بره، درجا رهاش کن.

• یه محیط ساده و خسته‌کننده که توش روزی هزار خط کد بزنی، شرف داره به یه سیستم به شدت شخصی‌سازی شده که فقط به دردِ اسکرین‌شات گرفتن و Neofetch می‌خوره!


از ابزارها برای خلق کردن استفاده کنید، نه این‌که خود ابزارها بشن پروژه اصلی‌تون.


👤• #FromFarshad@Melfex
👏3❤‍🔥1💋1🦄1
اگه شما هم موقع توسعه فرانت‌اَند یا مینی‌آپ‌های تلگرام، از ستاپ کردن سرورهای فیک، نوشتن ماک‌های طولانی توی کد یا قطعی اینترنت و بالا نیومدن اِی‌پِی‌آی‌های تست خسته شدید، وقتشه با Mockoon آشنا بشید.


ماکون یک ابزار فوق‌العاده سبک، اوپن‌سورس و کاملاً آفلاین برای شبیه‌سازی اِی‌پِی‌آی‌های REST هست که پروسه توسعه و تست رو به شدت سریع می‌کنه:

• راه‌اندازی در چند ثانیه: بدون نیاز به ساخت اکانت، کلاد یا کثیف‌کاری‌های مرسوم؛ خیلی راحت می‌تونید چندتا روتِ فیک با ریسپانس‌های جیسون دلخواه بسازید و به عنوان لوکال‌هاست به فرانت یا ابزار تستون متصلش کنید.

• شبیه‌سازی محیط واقعی: می‌تونید برای روت‌ها شرط بذارید؛ مثلاً اگه فلان هدر توی ریکوئست بود ریسپانس ۲۰۰ برگرده و اگه نبود ارور ۴۰۱ یا ۴۰۳ برگردونده بشه. حتی می‌تونید روی روت‌ها دِلِی داینامیک ست کنید تا رفتار نتورک تو شرایط واقعی و اینترنت ضعیف رو تست کنید.

• محیط کاملاً گیت‌فرندلی: تمام محیط‌ها و روت‌هایی که می‌سازید توی یک فایل جیسون ساده ذخیره می‌شن.

📦 github.com/mockoon/mockoon


⌨• #DevEdu@Melfex
❤‍🔥4⚡1💅1
امروز سعی داشتم ی سیستم واسه دیلیت کردن مسیج‌ها با ی دیلی مشخص پیاده سازی کنم. چیزی که توی وهله اول به فکرم رسید، استفاده ترکیبی از asyncio.sleep و asyncio.create_task بود، ولی خب خیلی مشکل داشت، واسه همین با چندتا سرچ به ماژول heapq رسیدم.


پایتون ماژولی تحت عنوان heapq داره که ساختمان داده‌ی Min-Heap رو پیاده سازی می‌کنه. به زبون ساده، داخل ی آرایه‌ی Min-Heap، سیستم این تضمین رو میده که کوچیک‌ترین عنصر ( توی معماری مد نظر من، نزدیک‌ترین تایم برای حذف کردن پیام ‌)  همیشه داخل ایندکس صفر وجود داره.

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

استفاده عملی از این ماژول رو می‌تونید توی آخرین کامیت این ریپو ببینید 👀؛

📦 github.com/Melfex/telegram-msg-bridge/blob/main/util/scheduler.py


⌨• #DevEdu@Melfex | #TelegramBot
⚡2🔥1💘1
​شاید یکی از بزرگترین تله‌هایی که ما برنامه‌نویس‌ها توش می‌افتیم، سندروم « Shiny Object Syndrome » باشه.


​روال کار این‌جوریه: داری روی ی پروژه با پایتون کار می‌کنی، یهو ی مقاله می‌خونی که "Rust آینده رو تسخیر می‌کنه!". پروژه رو نصفه ول می‌کنی و می‌ری سراغ سینتکس راست. هفته بعد ی ویدیو می‌بینی درباره قابلیت‌های جدید Next.js، دوباره شیفت می‌کنی سمت فرانت‌اند. ​نتیجه؟! ده‌ها پروژه نصفه‌کاره، ی گیت‌هاب پر از ریپوهای Hello World و دانشی که مثل ی اقیانوس به عمق یک سانتی‌متره.

​تکنولوژی‌ها و ابزارهای جدید فقط "ابزار" هستن، نه هدف نهایی. ارزش واقعی تو بازار کار و مهندسی نرم‌افزار، توانایی "حل مسئله" و "تمام کردنِ" پروژه‌هاست، نه دونستن سینتکس ده تا زبان مختلف.


​پیشنهاد همون قانون ٨٠/٢٠ هست؛ ی زبان یا فریم‌ورک رو به عنوان چکش اصلیت انتخاب کن و انقدر باهاش میخ بکوب تا استادش بشی. بقیه چیزها رو فقط در حد نیاز و برای رفع کنجکاوی بخون.

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



👤• #FromFarshad@Melfex
❤3🔥2💘2👍1