این ریپازیتوری بیشتر از ۱۵۰ الگوریتم برنامهنویسی رو به زبان جاوااسکریپت به صورت ویدئو و تصویر و کد توضیح داده:
https://github.com/trekhleb/javanoscript-algorithms
پ.ن: پیادهسازی بعضی از این الگوریتمهای معروف یک حرکت خیلی عالی برای بهتر کردن مهارتهای برنامهنویسی هست. بهبود چنین مهارتهایی هزاران بار مفیدتر از یادگیری ابزارهای پر زرق و برق مثل ریاکت هست
@DevTwitter | <Ali Nazari/>
https://github.com/trekhleb/javanoscript-algorithms
پ.ن: پیادهسازی بعضی از این الگوریتمهای معروف یک حرکت خیلی عالی برای بهتر کردن مهارتهای برنامهنویسی هست. بهبود چنین مهارتهایی هزاران بار مفیدتر از یادگیری ابزارهای پر زرق و برق مثل ریاکت هست
@DevTwitter | <Ali Nazari/>
👍26🔥5❤4👎2
عزیزان ،
اگر صرفا یک Endpoint از OpenAI یا هر AI Service Provider دیگری را صدا میزنید و یک اتفاقی می افتد، شما از خدایان هوش مصنوعی نیستید - باور کنید شما اصلا چیز خاصی نیستید، شما در حال حرام شدن و یک استعداد کشف نشده نیستید، شما صرفا یک صدا کننده یک API هستید - زیاد خودتان را اذیت نکنید !! - کسی هم در هیچ کجای دنیا الاف این تخصص عجیب شما نیست - به همان CRUD ادامه بدهید - خبری هم از حقوق 800 هزار دلاری نیست - بشین سر جات دوست من !
پیروز باشید
@DevTwitter | <Ali Kolahdoozan/>
اگر صرفا یک Endpoint از OpenAI یا هر AI Service Provider دیگری را صدا میزنید و یک اتفاقی می افتد، شما از خدایان هوش مصنوعی نیستید - باور کنید شما اصلا چیز خاصی نیستید، شما در حال حرام شدن و یک استعداد کشف نشده نیستید، شما صرفا یک صدا کننده یک API هستید - زیاد خودتان را اذیت نکنید !! - کسی هم در هیچ کجای دنیا الاف این تخصص عجیب شما نیست - به همان CRUD ادامه بدهید - خبری هم از حقوق 800 هزار دلاری نیست - بشین سر جات دوست من !
پیروز باشید
@DevTwitter | <Ali Kolahdoozan/>
1👍135🍌32👎5🔥4
یه نکته کوچیک ولی مهم برای برنامهنویسهای پایتون
گاهی وقتا یه سری چیزای مهم رو، خیلی ساده از کنارشون رد میشیم.
مثلا تولید OTP!
خیلیها برای ساختن کدهای یکبار مصرف میرن سراغ ماژول random.
ولی واقعیت اینه که random بهصورت پیشفرض «امن» نیست و خروجیهاش قابل پیشبینی هستن. یعنی برای چیزای حساس مثل OTP گزینه مطمئنی به حساب نمیاد.
راهحل؟ استفاده از ماژول secrets
ماژول secrets توی پایتون مخصوص کارهای امنیتی ساخته شده.
چه OTP، چه توکن، چه لینک ریکاوری… هرچیزی که امنیت براش مهمه.
خیلی ساده میتونی یه خروجی غیرقابل حدس تولید کنی.
پس اگر هنوز از random برای OTP استفاده میکنید، وقتشه کوچ کنید سمت secrets.
@DevTwitter | <Mostafa Rasouli/>
گاهی وقتا یه سری چیزای مهم رو، خیلی ساده از کنارشون رد میشیم.
مثلا تولید OTP!
خیلیها برای ساختن کدهای یکبار مصرف میرن سراغ ماژول random.
ولی واقعیت اینه که random بهصورت پیشفرض «امن» نیست و خروجیهاش قابل پیشبینی هستن. یعنی برای چیزای حساس مثل OTP گزینه مطمئنی به حساب نمیاد.
راهحل؟ استفاده از ماژول secrets
ماژول secrets توی پایتون مخصوص کارهای امنیتی ساخته شده.
چه OTP، چه توکن، چه لینک ریکاوری… هرچیزی که امنیت براش مهمه.
خیلی ساده میتونی یه خروجی غیرقابل حدس تولید کنی.
پس اگر هنوز از random برای OTP استفاده میکنید، وقتشه کوچ کنید سمت secrets.
@DevTwitter | <Mostafa Rasouli/>
1👍35🍌16❤8🔥3
توسعه نرم افزار؛ سفری بینقشه در دنیایی بیپایان از ابزارها.
گاهی ما بیش از حد خودمون رو درگیر ابزارها میکنیم. React رو یاد میگیری، فرداش میگن Vue بهتره. وسط یادگیری Vue هستی یهو میبینی Svelte ترند شده.
هر بار به خودت میگی بالاخره این یکی قراره «پایانی برای یادگیری» باشه، ولی نیست.
اینجاست که حس میکنی توی یه چرخهی بیپایان از یادگیری افتادی.
دنیای توسعهی نرم افزار هیچوقت ساکن نمیمونه.
هر سال کلی ابزار جدید معرفی میشن و ترندهای جدیدی شکل میگیرن.
مشکل اینه که وقتی تمرکز اصلیت روی «یادگیری ابزارها» باشه، ذهنت کمکم فرسوده و خسته میشه، چون ابزارها بیپایان هستن.
پیشرفت همیشه به معنی یاد گرفتن یه چیز جدید نیست. گاهی پیشرفت یعنی فهمیدنِ بهترِ همون قدیمیها.
واقعیت اینه که ریشهی همهی این ابزارها، همون جاوا اسکریپتیه که از روز اول باهاش شروع کردیم. تمام ابزارها فقط یه لایه روی این زبان هستن.
هرچی بیشتر تجربه کسب میکنی، میفهمی رشد واقعی به معنی دونستن همهچیز نیست، بلکه داشتن درک عمیق از همین ریشههاست.
ابزارها میان و میرن، ترندها فراموش میشن، ولی زبان همیشه زندست. پس بهجای دویدن دنبال ابزار بعدی، شاید وقتشه یکم عمیقتر بشی زیر پوست همین زبانی که داری باهاش کار میکنی.
ابزار انقلابی بعدی، همچنان روی پایههای جاوا اسکریپت بنا میشه.
@DevTwitter | <Ali Noori/>
گاهی ما بیش از حد خودمون رو درگیر ابزارها میکنیم. React رو یاد میگیری، فرداش میگن Vue بهتره. وسط یادگیری Vue هستی یهو میبینی Svelte ترند شده.
هر بار به خودت میگی بالاخره این یکی قراره «پایانی برای یادگیری» باشه، ولی نیست.
اینجاست که حس میکنی توی یه چرخهی بیپایان از یادگیری افتادی.
دنیای توسعهی نرم افزار هیچوقت ساکن نمیمونه.
هر سال کلی ابزار جدید معرفی میشن و ترندهای جدیدی شکل میگیرن.
مشکل اینه که وقتی تمرکز اصلیت روی «یادگیری ابزارها» باشه، ذهنت کمکم فرسوده و خسته میشه، چون ابزارها بیپایان هستن.
پیشرفت همیشه به معنی یاد گرفتن یه چیز جدید نیست. گاهی پیشرفت یعنی فهمیدنِ بهترِ همون قدیمیها.
واقعیت اینه که ریشهی همهی این ابزارها، همون جاوا اسکریپتیه که از روز اول باهاش شروع کردیم. تمام ابزارها فقط یه لایه روی این زبان هستن.
هرچی بیشتر تجربه کسب میکنی، میفهمی رشد واقعی به معنی دونستن همهچیز نیست، بلکه داشتن درک عمیق از همین ریشههاست.
ابزارها میان و میرن، ترندها فراموش میشن، ولی زبان همیشه زندست. پس بهجای دویدن دنبال ابزار بعدی، شاید وقتشه یکم عمیقتر بشی زیر پوست همین زبانی که داری باهاش کار میکنی.
ابزار انقلابی بعدی، همچنان روی پایههای جاوا اسکریپت بنا میشه.
@DevTwitter | <Ali Noori/>
1👍54❤16👎5🔥4
معرفی HTTP API Ninja - یک کلاینت HTTP قدرتمند و رایگان!
با افتخار از پروژه جدیدم رونمایی میکنم: HTTP API Ninja - یک جایگزین اوپنسورس و کاملاً رایگان برای Postman و Thunder Client که با Flutter ساخته شده!
ویژگیهای کلیدی:
- پشتیبانی کامل از تمام متدهای HTTP (GET, POST, PUT, DELETE, PATCH)
- مدیریت Collection برای سازماندهی درخواستها
- نمایش Response با Syntax Highlighting رنگی
- تم تیره/روشن با طراحی مدرن
- پشتیبانی از 5 زبان (فارسی، انگلیسی، عربی، آلمانی، فرانسوی)
- تولید کد برای 20+ زبان برنامهنویسی
- ذخیره خودکار تمام درخواستها
- رابط کاربری زیبا و کاربرپسند
چرا HTTP API Ninja؟
کاملاً رایگان و اوپنسورس
بدون نیاز به اینترنت برای کار
حریم خصوصی کامل - دادهها روی سیستم شما
سبک و سریع
قابل اجرا روی Windows، macOS و Linux
ویژگیهای در دست توسعه:
- Environment Variables
- Import/Export Collections (Postman format)
- WebSocket Support
- GraphQL Support
- OAuth 2.0 Authentication
- Mock Server
- Team Collaboration
- Cloud Sync
- نسخه موبایل (Android & iOS)
لینک پروژه: https://github.com/SwanFlutter/http_api_ninja
@DevTwitter | <Sajjad Karimi/>
با افتخار از پروژه جدیدم رونمایی میکنم: HTTP API Ninja - یک جایگزین اوپنسورس و کاملاً رایگان برای Postman و Thunder Client که با Flutter ساخته شده!
ویژگیهای کلیدی:
- پشتیبانی کامل از تمام متدهای HTTP (GET, POST, PUT, DELETE, PATCH)
- مدیریت Collection برای سازماندهی درخواستها
- نمایش Response با Syntax Highlighting رنگی
- تم تیره/روشن با طراحی مدرن
- پشتیبانی از 5 زبان (فارسی، انگلیسی، عربی، آلمانی، فرانسوی)
- تولید کد برای 20+ زبان برنامهنویسی
- ذخیره خودکار تمام درخواستها
- رابط کاربری زیبا و کاربرپسند
چرا HTTP API Ninja؟
کاملاً رایگان و اوپنسورس
بدون نیاز به اینترنت برای کار
حریم خصوصی کامل - دادهها روی سیستم شما
سبک و سریع
قابل اجرا روی Windows، macOS و Linux
ویژگیهای در دست توسعه:
- Environment Variables
- Import/Export Collections (Postman format)
- WebSocket Support
- GraphQL Support
- OAuth 2.0 Authentication
- Mock Server
- Team Collaboration
- Cloud Sync
- نسخه موبایل (Android & iOS)
لینک پروژه: https://github.com/SwanFlutter/http_api_ninja
@DevTwitter | <Sajjad Karimi/>
1🔥33❤7👍7👎2
توی این ریپو کدهای بات تلگرامی رو اوپنسورس کردم که مثل یه AI Agent برای کاربر پلیلیست میساخت.
ایدهاش برای ۱.۵ سال پیش منه؛ جالبه Spotify تازه امسال همین قابلیت AI Playlist رو اضافه کرده . :)
این بات دقیقاً چیکار میکنه؟
این بات برای این طراحی شده که به کاربرها کمک کنه پلیلیستهای شخصیسازیشده بسازن، فقط کافیه مود، ژانر، آرتیست یا حتی یک آهنگ رو بهش بگن؛ باقی کار بر عهده بات هست.
معماری و ویژگیهای تکنیکال:
معماری ماژولار با ۴ سرویس جداگانه: ۱- سرویس Bot – مدیریت تعاملات کاربر ۲- سرویس Spotify – ارتباط با Spotify API ۳- سرویس Database – ذخیرهسازی دادهها ۴- سرویس API Gateway – هماهنگی بین سرویسها
برای کاهش درخواستهای تکراری به Spotify API و بهبود چشمگیر response time از Redis caching استفاده شده.
برای ذخیرهسازی و بازیابی سریع metadata آهنگها و پلیلیستها، MySQL با bulk insert/update operations پیادهسازی کردم.
مدیریت بیش از ۱۰۰ هزار کاربر همزمان با rate-limiting، internal queue system و async processing
پروژه Dockerized شده و تنها با یک docker-compose up کل سیستم بالا میاد
پیادهسازی error handling و retry mechanism برای reliability بالا در تعامل با Spotify API
قابلیتهای کلیدی:
ساخت پلیلیست بر اساس mood، vibe، ژانر موزیک، آرتیست مورد علاقه یا حتی یک آهنگ خاص
پردازش درخواستهای کاربر بهصورت async برای تجربه کاربری بهتر
استفاده از Logging و monitoring برای track کردن user interactions و system performance
این یک پروژه Open Source هست و خوشحال میشم اگر دولوپرهای Python، برنامهنویسهای Backend، یا دوستان علاقهمند به باتهای تلگرام در توسعه اون شریک بشن.
استارز گیتهاب فراموش نشه لطفاً.
github.com/mehdiseyfie/telegram-music-bot
@DevTwitter | <Mehdi/>
ایدهاش برای ۱.۵ سال پیش منه؛ جالبه Spotify تازه امسال همین قابلیت AI Playlist رو اضافه کرده . :)
این بات دقیقاً چیکار میکنه؟
این بات برای این طراحی شده که به کاربرها کمک کنه پلیلیستهای شخصیسازیشده بسازن، فقط کافیه مود، ژانر، آرتیست یا حتی یک آهنگ رو بهش بگن؛ باقی کار بر عهده بات هست.
معماری و ویژگیهای تکنیکال:
معماری ماژولار با ۴ سرویس جداگانه: ۱- سرویس Bot – مدیریت تعاملات کاربر ۲- سرویس Spotify – ارتباط با Spotify API ۳- سرویس Database – ذخیرهسازی دادهها ۴- سرویس API Gateway – هماهنگی بین سرویسها
برای کاهش درخواستهای تکراری به Spotify API و بهبود چشمگیر response time از Redis caching استفاده شده.
برای ذخیرهسازی و بازیابی سریع metadata آهنگها و پلیلیستها، MySQL با bulk insert/update operations پیادهسازی کردم.
مدیریت بیش از ۱۰۰ هزار کاربر همزمان با rate-limiting، internal queue system و async processing
پروژه Dockerized شده و تنها با یک docker-compose up کل سیستم بالا میاد
پیادهسازی error handling و retry mechanism برای reliability بالا در تعامل با Spotify API
قابلیتهای کلیدی:
ساخت پلیلیست بر اساس mood، vibe، ژانر موزیک، آرتیست مورد علاقه یا حتی یک آهنگ خاص
پردازش درخواستهای کاربر بهصورت async برای تجربه کاربری بهتر
استفاده از Logging و monitoring برای track کردن user interactions و system performance
این یک پروژه Open Source هست و خوشحال میشم اگر دولوپرهای Python، برنامهنویسهای Backend، یا دوستان علاقهمند به باتهای تلگرام در توسعه اون شریک بشن.
استارز گیتهاب فراموش نشه لطفاً.
github.com/mehdiseyfie/telegram-music-bot
@DevTwitter | <Mehdi/>
1👍40❤10👎5🔥2
توی این ریپو کدهای سایت فروشگاهی Django رو اوپنسورس کردم؛ پروژهای که برای یادگیری معماری درست فروشگاههای آنلاین ساختم و روی اصول scalability و clean code پیادهسازی شده.
این پروژه دقیقاً چیکار میکنه؟
این پروژه برای این طراحی شده که یک فروشگاه آنلاین کامل با تمام قابلیتهای اساسی رو ارائه بده، از مدیریت محصولات گرفته تا سیستم پرداخت.
معماری و ویژگیهای تکنیکال:
فریمورک Django با Django ORM و معماری تمیز و قابل گسترش
سیستم سبد خرید با session-based management و مدیریت هوشمند محصولات
سیستم Payment Flow آماده توسعه با قابلیت اتصال آسان به درگاههای پرداخت
مدیریت کامل محصولات، دستهبندیها، سفارشها و کاربران از طریق پنل ادمین
پیادهسازی Authentication & Authorization استاندارد برای امنیت بالا
ساختار modular apps برای توسعه راحتتر شامل: products، cart، orders، accounts
استفاده از Template System با صفحات واکنشگرا و رابط کاربری مدرن
پروژه Dockerized شده و آماده برای دیپلوی در محیط production
قابلیتهای کلیدی:
نمایش محصولات با جزئیات کامل و دستهبندی پیشرفته
سیستم افزودن و حذف محصول از سبد خرید با مشخص کردن تعداد
پردازش سفارشها و مدیریت آدرسهای کاربران
پنل مدیریتی قدرتمند برای کنترل کامل فروشگاه
این یک پروژه Open Source هست و خوشحال میشم اگر دولوپرهای Django، برنامهنویسهای Backend، یا دوستان علاقهمند به توسعه فروشگاههای آنلاین در توسعه اون شریک بشن.
استارز گیتهاب لطف بزرگیه برای این پروژه.
https://github.com/mehdiseyfie/django_ecommerce_project
@DevTwitter | <Mehdi/>
این پروژه دقیقاً چیکار میکنه؟
این پروژه برای این طراحی شده که یک فروشگاه آنلاین کامل با تمام قابلیتهای اساسی رو ارائه بده، از مدیریت محصولات گرفته تا سیستم پرداخت.
معماری و ویژگیهای تکنیکال:
فریمورک Django با Django ORM و معماری تمیز و قابل گسترش
سیستم سبد خرید با session-based management و مدیریت هوشمند محصولات
سیستم Payment Flow آماده توسعه با قابلیت اتصال آسان به درگاههای پرداخت
مدیریت کامل محصولات، دستهبندیها، سفارشها و کاربران از طریق پنل ادمین
پیادهسازی Authentication & Authorization استاندارد برای امنیت بالا
ساختار modular apps برای توسعه راحتتر شامل: products، cart، orders، accounts
استفاده از Template System با صفحات واکنشگرا و رابط کاربری مدرن
پروژه Dockerized شده و آماده برای دیپلوی در محیط production
قابلیتهای کلیدی:
نمایش محصولات با جزئیات کامل و دستهبندی پیشرفته
سیستم افزودن و حذف محصول از سبد خرید با مشخص کردن تعداد
پردازش سفارشها و مدیریت آدرسهای کاربران
پنل مدیریتی قدرتمند برای کنترل کامل فروشگاه
این یک پروژه Open Source هست و خوشحال میشم اگر دولوپرهای Django، برنامهنویسهای Backend، یا دوستان علاقهمند به توسعه فروشگاههای آنلاین در توسعه اون شریک بشن.
استارز گیتهاب لطف بزرگیه برای این پروژه.
https://github.com/mehdiseyfie/django_ecommerce_project
@DevTwitter | <Mehdi/>
1👍32👎12❤11🔥2
🎄 DevTwitter | توییت برنامه نویسی
تولدمه :)))
خجالتم دادید اصلا🥲
پیاماتونم خیلی قشنگ بود ❤️
پیاماتونم خیلی قشنگ بود ❤️
1❤68🍌56🔥5👎2
تفاوت بین اعضای senior و junior فقط در عنوان یا سابقه کاری نیست، بلکه در طرز فکر، شیوه حل مسئله و مهارتهای نرم (soft skills) آنهاست. اعضای senior معمولاً در مواجهه با چالشها بهجای انتظار برای راهنمایی، خودشان مسیر را پیدا میکنند. وقتی پروژهای با مانع روبهرو میشود، آنها با تحلیل دقیق مسئله، راهحلهای قابل اجرا پیشنهاد میدهند و تیم را برای اجرای آن هماهنگ میکنند. در مقابل، اعضای junior هنوز در مرحله یادگیری تصمیمگیری مستقل و تحلیل موقعیت هستند.
مدیران کلیدی و لیدها باید بیش از هر چیز روی توسعه مهارتهای نرم خود کار کنند؛ مهارتهایی مانند گوشدادن فعال، همدلی، مدیریت تعارض و توانایی ارائه بازخورد سازنده. رهبری امروز فقط مدیریت وظایف نیست، بلکه ایجاد فرهنگی است که در آن افراد احساس امنیت کنند تا ایده بدهند، اشتباه کنند و رشد کنند. توانایی حل مسئله، ارتباط مؤثر و تفکر خلاق همان ویژگیهایی است که از یک مدیر، رهبر میسازد.
علاوه بر مهارتهای نرم و توانایی حل مسئله، یکی از ویژگیهای اساسی هر senior و مدیر کلیدی، میل مداوم به یادگیری و مطالعه است. دنیای کار هر روز تغییر میکند و کسی که در مسیر رشد واقعی است، باید خود را با این تغییرات هماهنگ کند. مطالعه درباره صنعت جدید، شناخت روندهای بازار و بررسی case studyهای مختلف، نهتنها دید استراتژیک فرد را تقویت میکند، بلکه باعث میشود در تصمیمگیریها هوشمندتر عمل کند. یک لید حرفهای میداند که یادگیری هیچوقت تمام نمیشود، حتی وقتی مسیر شغلی یا حوزه فعالیتش تغییر میکند.
و اما پرسش پایانی: آیا آزمون و خطا کار یک senior است؟
پاسخ بله است، اما با تفاوتی مهم — یک senior هم اشتباه میکند، اما اشتباهاتش آگاهانه، قابلاندازهگیری و با هدف یادگیری است. او در مسیر آزمون و خطا حرکت میکند، اما هر خطا برایش دادهای است که مسیر تصمیمهای بعدی را دقیقتر میسازد. آزمون و خطا برای افراد باتجربه ضعف نیست، بلکه بخشی از فرایند رشد و بلوغ حرفهای است.
البته آزمون و خطا برای هر چیزی درست نیست. یک senior باید تفاوت میان تجربهسازی و تکرار خطاهای شناختهشده را بداند. آزمون و خطا زمانی ارزش دارد که در مسیر کشف و نوآوری باشد، جایی که هنوز استاندارد مشخصی وجود ندارد و خلاقیت میتواند مسیر تازهای بسازد. اما وقتی روشهای استاندارد و بهترین شیوههای اجرایی از طریق مطالعه، تجربه و case studyهای متعدد قابل دسترسیاند، یک حرفهای باید آنها را بشناسد، بهکار بگیرد و از تکرار اشتباهات اجتناب کند. در واقع، آزمون و خطا برای یادگیری و خلق است، نه برای بازتولید شکست. یک senior ارزشمند کسی است که بداند چه زمانی باید از تجربه دیگران بیاموزد و چه زمانی باید خودش مسیر جدیدی را بسازد.
@DevTwitter | <Shayan Shalileh/>
مدیران کلیدی و لیدها باید بیش از هر چیز روی توسعه مهارتهای نرم خود کار کنند؛ مهارتهایی مانند گوشدادن فعال، همدلی، مدیریت تعارض و توانایی ارائه بازخورد سازنده. رهبری امروز فقط مدیریت وظایف نیست، بلکه ایجاد فرهنگی است که در آن افراد احساس امنیت کنند تا ایده بدهند، اشتباه کنند و رشد کنند. توانایی حل مسئله، ارتباط مؤثر و تفکر خلاق همان ویژگیهایی است که از یک مدیر، رهبر میسازد.
علاوه بر مهارتهای نرم و توانایی حل مسئله، یکی از ویژگیهای اساسی هر senior و مدیر کلیدی، میل مداوم به یادگیری و مطالعه است. دنیای کار هر روز تغییر میکند و کسی که در مسیر رشد واقعی است، باید خود را با این تغییرات هماهنگ کند. مطالعه درباره صنعت جدید، شناخت روندهای بازار و بررسی case studyهای مختلف، نهتنها دید استراتژیک فرد را تقویت میکند، بلکه باعث میشود در تصمیمگیریها هوشمندتر عمل کند. یک لید حرفهای میداند که یادگیری هیچوقت تمام نمیشود، حتی وقتی مسیر شغلی یا حوزه فعالیتش تغییر میکند.
و اما پرسش پایانی: آیا آزمون و خطا کار یک senior است؟
پاسخ بله است، اما با تفاوتی مهم — یک senior هم اشتباه میکند، اما اشتباهاتش آگاهانه، قابلاندازهگیری و با هدف یادگیری است. او در مسیر آزمون و خطا حرکت میکند، اما هر خطا برایش دادهای است که مسیر تصمیمهای بعدی را دقیقتر میسازد. آزمون و خطا برای افراد باتجربه ضعف نیست، بلکه بخشی از فرایند رشد و بلوغ حرفهای است.
البته آزمون و خطا برای هر چیزی درست نیست. یک senior باید تفاوت میان تجربهسازی و تکرار خطاهای شناختهشده را بداند. آزمون و خطا زمانی ارزش دارد که در مسیر کشف و نوآوری باشد، جایی که هنوز استاندارد مشخصی وجود ندارد و خلاقیت میتواند مسیر تازهای بسازد. اما وقتی روشهای استاندارد و بهترین شیوههای اجرایی از طریق مطالعه، تجربه و case studyهای متعدد قابل دسترسیاند، یک حرفهای باید آنها را بشناسد، بهکار بگیرد و از تکرار اشتباهات اجتناب کند. در واقع، آزمون و خطا برای یادگیری و خلق است، نه برای بازتولید شکست. یک senior ارزشمند کسی است که بداند چه زمانی باید از تجربه دیگران بیاموزد و چه زمانی باید خودش مسیر جدیدی را بسازد.
@DevTwitter | <Shayan Shalileh/>
1👍47❤7🍌6🔥4
#کدبوک
یک راهنمای کاربردی برای درک و پیادهسازی الگوریتمهای مهم در برنامهنویسی:
- پوشش الگوریتمهای جستجو، مرتبسازی، گراف و بهینهسازی
- توضیح مفاهیم با مثالهای عملی و ساده
- کمک به بهبود مهارت حل مسئله و طراحی ساختارهای کارآمد
- مناسب برای برنامهنویسهایی که میخوان پایه الگوریتمی خودشون رو تقویت کنن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
یک راهنمای کاربردی برای درک و پیادهسازی الگوریتمهای مهم در برنامهنویسی:
- پوشش الگوریتمهای جستجو، مرتبسازی، گراف و بهینهسازی
- توضیح مفاهیم با مثالهای عملی و ساده
- کمک به بهبود مهارت حل مسئله و طراحی ساختارهای کارآمد
- مناسب برای برنامهنویسهایی که میخوان پایه الگوریتمی خودشون رو تقویت کنن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
🔥12❤6👍1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
اگه با این AI coding assistant ها کد میزنید یا اینکه به صورت vibe coding اپ میسازید اینکه چطور دیزاین را هم وارد مساله کنید خیلی مهمه. یک اصطلاح جدید داره بوجود میاد به اسم "vibe designing". این بلاگ خیلی قشنگ توضیح میده و اینکه موقع vibe coding چطور یک اپ با طراحی خوب درست کنید. حتما بخونید. ویدیو هم تو یوتیوب داره:
https://designwithai.substack.com/p/vibe-designing-with-ai
YT: https://youtube.com/watch?v=QgvQbcPmioE
@DevTwitter | <Mehdi Allahyari/>
https://designwithai.substack.com/p/vibe-designing-with-ai
YT: https://youtube.com/watch?v=QgvQbcPmioE
@DevTwitter | <Mehdi Allahyari/>
❤17🍌2👍1🔥1
چرا Docker و RHEL از هم فاصله گرفتند؟
ردهت از زمان انتشار RHEL 8 پشتیبانی رسمی Docker Engine را متوقف کرد. دلیل اصلی این بود که معماری Docker با مدل امنیتی RHEL همراستا نبود؛ Docker یک daemon سطحبالا دارد که بهصورت root اجرا میشود و یک نقطهی شکست و ریسک امنیتی مهم ایجاد میکند. Red Hat برای محیطهای Enterprise چیزی میخواست که هم بدون daemon باشد، هم با SELinux و استانداردهای سختگیرانه امنیتی آن کاملاً سازگار بماند.
به همین دلیل، Red Hat به جای Docker از مجموعه ابزارهای Podman، Buildah و Skopeo استفاده کرد. این ابزارها کاملاً متنبازند، با استانداردهای OCI هماهنگی کامل دارند و در بسیاری از سناریوها میتوانند جای Docker را بدون تغییرات جدی بگیرند. Podman حتی قادر است همان دستورات Docker را اجرا کند. مهمتر اینکه بدون نیاز به daemon و با امکان اجرای rootless کار میکند، که از نظر امنیت و سازگاری با سیاستهای RHEL یک مزیت بزرگ محسوب میشود.
در همین زمان، Kubernetes نیز مسیر مشابهی رفت: dockershim را کنار گذاشت و بهصورت رسمی از containerd و CRI-O پشتیبانی کرد. ردهت که خود توسعهدهنده CRI-O و OpenShift است، طبیعی بود که با جهت K8s همسو شود، نه با Docker Engine.
داکر Inc هم در سالهای اخیر بیشتر روی Docker Desktop، مدل لایسنس جدید و سرویسهای Cloud تمرکز کرد—در حالی که Red Hat به دنبال یک زنجیره تأمین کاملاً متنباز و پایدار بود. این تفاوت فلسفه باعث شد فاصله این دو اکوسیستم بیشتر شود.
نتیجه؟ Docker در دنیای Ubuntu و Dev-friendly هنوز پادشاه سادگی است، اما در اکوسیستم RHEL (و توزیعهای سازگار مثل Rocky/AlmaLinux) Podman استاندارد اصلی و گزینهٔ پایدارتر و امنتر محسوب میشود.
@DevTwitter | <Babak uk/>
ردهت از زمان انتشار RHEL 8 پشتیبانی رسمی Docker Engine را متوقف کرد. دلیل اصلی این بود که معماری Docker با مدل امنیتی RHEL همراستا نبود؛ Docker یک daemon سطحبالا دارد که بهصورت root اجرا میشود و یک نقطهی شکست و ریسک امنیتی مهم ایجاد میکند. Red Hat برای محیطهای Enterprise چیزی میخواست که هم بدون daemon باشد، هم با SELinux و استانداردهای سختگیرانه امنیتی آن کاملاً سازگار بماند.
به همین دلیل، Red Hat به جای Docker از مجموعه ابزارهای Podman، Buildah و Skopeo استفاده کرد. این ابزارها کاملاً متنبازند، با استانداردهای OCI هماهنگی کامل دارند و در بسیاری از سناریوها میتوانند جای Docker را بدون تغییرات جدی بگیرند. Podman حتی قادر است همان دستورات Docker را اجرا کند. مهمتر اینکه بدون نیاز به daemon و با امکان اجرای rootless کار میکند، که از نظر امنیت و سازگاری با سیاستهای RHEL یک مزیت بزرگ محسوب میشود.
در همین زمان، Kubernetes نیز مسیر مشابهی رفت: dockershim را کنار گذاشت و بهصورت رسمی از containerd و CRI-O پشتیبانی کرد. ردهت که خود توسعهدهنده CRI-O و OpenShift است، طبیعی بود که با جهت K8s همسو شود، نه با Docker Engine.
داکر Inc هم در سالهای اخیر بیشتر روی Docker Desktop، مدل لایسنس جدید و سرویسهای Cloud تمرکز کرد—در حالی که Red Hat به دنبال یک زنجیره تأمین کاملاً متنباز و پایدار بود. این تفاوت فلسفه باعث شد فاصله این دو اکوسیستم بیشتر شود.
نتیجه؟ Docker در دنیای Ubuntu و Dev-friendly هنوز پادشاه سادگی است، اما در اکوسیستم RHEL (و توزیعهای سازگار مثل Rocky/AlmaLinux) Podman استاندارد اصلی و گزینهٔ پایدارتر و امنتر محسوب میشود.
@DevTwitter | <Babak uk/>
👍36❤6🔥4
#کدبوک
مجموعهای از نکات کوتاه و کاربردی برای بهتر شدن در برنامهنویسی و کار حرفهای:
- توصیههایی درباره طراحی، نگهداری و کیفیت کد
- نکات مهم درباره همکاری تیمی، تست و مستندسازی
- دیدگاههایی از برنامهنویسهای باتجربه در حوزههای مختلف
- مناسب برای هر توسعهدهندهای که میخواد عادتها و نگرش حرفهایتری پیدا کنه
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
مجموعهای از نکات کوتاه و کاربردی برای بهتر شدن در برنامهنویسی و کار حرفهای:
- توصیههایی درباره طراحی، نگهداری و کیفیت کد
- نکات مهم درباره همکاری تیمی، تست و مستندسازی
- دیدگاههایی از برنامهنویسهای باتجربه در حوزههای مختلف
- مناسب برای هر توسعهدهندهای که میخواد عادتها و نگرش حرفهایتری پیدا کنه
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
❤17👎3🔥1
یک بلاگ جالب خوندم با موضوع "به ماشین یاد بده چطور فکر کنه!". حتما بخونیدش ولی چکیده اش را اینجا مینویسم:
آیندهی کار دیگه «حل مسئله» نیست، بلکه «حلِ روشِ حل مسئله» است!
۱/ تصور کنید تو یه مسابقه دیتا ساینس (Kaggle) شرکت میکنید، حتی یک خط کد برای فیچر انجینیرینگ یا تیون کردن مدل نمینویسید، اما جزو ۲۰٪ برتر میشید. جادو نیست؛ نویسنده این مقاله اسمش رو گذاشته «متا-کدینگ» (Meta-Coding). داستان چیه؟
۲/ روال سنتی کار ما اینطوریه: دیتا رو میگیریم، تمیز میکنیم، مدل میسازیم، ارور میده، دیباگ میکنیم و دوباره از اول.
اما نویسنده میگه بیاید یه پله برید بالاتر. به جای اینکه خودتون مسئله رو حل کنید، یه سیستم بسازید که بدونه چطور باید مسئله رو حل کنه.
۳/ توی متا-کدینگ، وقتی سیستمتون خرابکاری میکنه یا باگ میده، شما نمیرید کد رو پچ کنید (مثلاً یه if بذارید که کرش نکنه).
شما از خودتون میپرسید: «چی توی درک و فهمِ سیستم کم بود که باعث این اشتباه شد؟»
شما کد رو دیباگ نمیکنید، دارید «فهم» (Understanding) سیستم رو دیباگ میکنید.
۴/ نویسنده یه سیستم ساخته به اسم ML Planner. این سیستم کدهای پایتون نداره که بگه "فلان ستون رو اینجوری نرمال کن". بلکه یه سری داکیومنت متنی داره (لایه دانش) که به ایجنتهای هوش مصنوعی (مثل GPT یا Claude) یاد میده یه متخصص چطور فکر میکنه.
مثلاً: "کی باید از Target Encoding استفاده کنی؟" یا "چطور حواست به هزینه سرورهای GPU باشه؟"
۵/ یه مثال شاهکار دیگه تو مقاله هست: شرکت حقوقی CaseText.
اینا نیومدن یه موتور جستجوی حقوقی بسازن. اومدن «نحوه فکر کردن یه وکیل خبره» رو مهندسی معکوس کردن.
هر مرحله از فکر کردن وکیل (فهم سوال، ریسرچ، یادداشتبرداری، تطبیق قوانین) شد یه پرامپت. نتیجه؟ شرکتشون رو ۶۵۰ میلیون دلار فروختن! چون اونا «دانش» رو کد کرده بودن، نه فقط نرمافزار رو.
۶/ ما داریم وارد دنیایی میشیم که سلسلهمراتب ارزش داره تغییر میکنه:
سطح ۱: انجام دادن کار (ارزش خطی: ساعتی پول میگیرید).
سطح ۲: ساختن سیستمی که کار رو انجام بده.
سطح ۳: بهبود روشی که سیستمها رو میسازید (ارزش تصاعدی).
۷/ حالا شما چطور شروع کنید؟
هر وقت دارید یه کار تکراری انجام میدید (تو برنامهنویسی، نوشتن، مارکتینگ یا هرچی)، یه لحظه صبر کنید.
از خودتون بپرسید: «اگه بهترین متخصص این حوزه بینهایت زمان و ۱۰۰۰ تا دستیار هوش مصنوعی داشت، چطور این مسئله رو حل میکرد؟»
۸/ اون پروسه فکری، اون شهود (Intuition) و اون قلقهای ریز رو بنویسید.
این داکیومنت میشه اولین قدم شما برای متا-کدینگ.
به جای اینکه خودتون مجری باشید، بشید «معلمِ ایجنتها». وقتی ایجنت گیر کرد، بهش ماهی ندید، ماهیگیری یاد بدید (داکیومنت رو آپدیت کنید).
۹/ خلاصه اینکه: آینده متعلق به کسایی نیست که فقط کد میزنن یا متن مینویسن. آینده مال کساییه که میتونن «شهود» و تجربه نانوشتهشون رو تبدیل به دستورالعملهای شفاف برای ماشینها بکنن.
شما دارید از نردبان بالا میرید تا به جای حل مسئله، «حلکننده» بسازید.
لینک مقاله اصلی:
https://yewjin.substack.com/p/the-future-is-solving-problem-solving
@DevTwitter | <Mehdi Allahyari/>
آیندهی کار دیگه «حل مسئله» نیست، بلکه «حلِ روشِ حل مسئله» است!
۱/ تصور کنید تو یه مسابقه دیتا ساینس (Kaggle) شرکت میکنید، حتی یک خط کد برای فیچر انجینیرینگ یا تیون کردن مدل نمینویسید، اما جزو ۲۰٪ برتر میشید. جادو نیست؛ نویسنده این مقاله اسمش رو گذاشته «متا-کدینگ» (Meta-Coding). داستان چیه؟
۲/ روال سنتی کار ما اینطوریه: دیتا رو میگیریم، تمیز میکنیم، مدل میسازیم، ارور میده، دیباگ میکنیم و دوباره از اول.
اما نویسنده میگه بیاید یه پله برید بالاتر. به جای اینکه خودتون مسئله رو حل کنید، یه سیستم بسازید که بدونه چطور باید مسئله رو حل کنه.
۳/ توی متا-کدینگ، وقتی سیستمتون خرابکاری میکنه یا باگ میده، شما نمیرید کد رو پچ کنید (مثلاً یه if بذارید که کرش نکنه).
شما از خودتون میپرسید: «چی توی درک و فهمِ سیستم کم بود که باعث این اشتباه شد؟»
شما کد رو دیباگ نمیکنید، دارید «فهم» (Understanding) سیستم رو دیباگ میکنید.
۴/ نویسنده یه سیستم ساخته به اسم ML Planner. این سیستم کدهای پایتون نداره که بگه "فلان ستون رو اینجوری نرمال کن". بلکه یه سری داکیومنت متنی داره (لایه دانش) که به ایجنتهای هوش مصنوعی (مثل GPT یا Claude) یاد میده یه متخصص چطور فکر میکنه.
مثلاً: "کی باید از Target Encoding استفاده کنی؟" یا "چطور حواست به هزینه سرورهای GPU باشه؟"
۵/ یه مثال شاهکار دیگه تو مقاله هست: شرکت حقوقی CaseText.
اینا نیومدن یه موتور جستجوی حقوقی بسازن. اومدن «نحوه فکر کردن یه وکیل خبره» رو مهندسی معکوس کردن.
هر مرحله از فکر کردن وکیل (فهم سوال، ریسرچ، یادداشتبرداری، تطبیق قوانین) شد یه پرامپت. نتیجه؟ شرکتشون رو ۶۵۰ میلیون دلار فروختن! چون اونا «دانش» رو کد کرده بودن، نه فقط نرمافزار رو.
۶/ ما داریم وارد دنیایی میشیم که سلسلهمراتب ارزش داره تغییر میکنه:
سطح ۱: انجام دادن کار (ارزش خطی: ساعتی پول میگیرید).
سطح ۲: ساختن سیستمی که کار رو انجام بده.
سطح ۳: بهبود روشی که سیستمها رو میسازید (ارزش تصاعدی).
۷/ حالا شما چطور شروع کنید؟
هر وقت دارید یه کار تکراری انجام میدید (تو برنامهنویسی، نوشتن، مارکتینگ یا هرچی)، یه لحظه صبر کنید.
از خودتون بپرسید: «اگه بهترین متخصص این حوزه بینهایت زمان و ۱۰۰۰ تا دستیار هوش مصنوعی داشت، چطور این مسئله رو حل میکرد؟»
۸/ اون پروسه فکری، اون شهود (Intuition) و اون قلقهای ریز رو بنویسید.
این داکیومنت میشه اولین قدم شما برای متا-کدینگ.
به جای اینکه خودتون مجری باشید، بشید «معلمِ ایجنتها». وقتی ایجنت گیر کرد، بهش ماهی ندید، ماهیگیری یاد بدید (داکیومنت رو آپدیت کنید).
۹/ خلاصه اینکه: آینده متعلق به کسایی نیست که فقط کد میزنن یا متن مینویسن. آینده مال کساییه که میتونن «شهود» و تجربه نانوشتهشون رو تبدیل به دستورالعملهای شفاف برای ماشینها بکنن.
شما دارید از نردبان بالا میرید تا به جای حل مسئله، «حلکننده» بسازید.
لینک مقاله اصلی:
https://yewjin.substack.com/p/the-future-is-solving-problem-solving
@DevTwitter | <Mehdi Allahyari/>
❤53👍7🔥2
Media is too big
VIEW IN TELEGRAM
پردازش ۴۰ میلیارد رکورد در روز — معماری یک سیستم مقیاسپذیر!
خیلیها فکر میکنن پردازش دهها میلیارد رکورد در روز فقط از پس غولهای جهانی مثل Meta یا Netflix برمیاد — اما من یک معماری عملیاتی ساختم که روزانه بالغ بر ۴۰ میلیارد رکورد (معادل تقریبا ۵۰۰ هزار رکورد بر ثانیه) رو از Kafka مصرف و بهصورت بهینه در ClickHouse ذخیره میکنه.
چالش اصلی
بار نامتعادل روی کلاستر توزیعشده شلوغ با ۲۰ نود و ۵۲ پارتیشن و عدم تفکیک داده
نیاز به پردازش کمتأخیر
حفظ Consistency در حجم عظیم داده
راهحل معماری
مصرفکنندههای موازی با Unbounded Channel
پردازش کاملاً Stateless برای scale عمودی و افقی
دستهبندی و فشردهسازی در Batchهای ۱,۰۰۰,۰۰۰ رکوردی (قابل کانفیگ)
نوشتن مستقیم در ClickHouse با Insertهای ستونمحور
و Commit offset تنها بعد از نوشتن موفق
جدا کردن مسیر ingest از persist برای افزایش throughput
@DevTwitter | <Amirhossein Maleki/>
خیلیها فکر میکنن پردازش دهها میلیارد رکورد در روز فقط از پس غولهای جهانی مثل Meta یا Netflix برمیاد — اما من یک معماری عملیاتی ساختم که روزانه بالغ بر ۴۰ میلیارد رکورد (معادل تقریبا ۵۰۰ هزار رکورد بر ثانیه) رو از Kafka مصرف و بهصورت بهینه در ClickHouse ذخیره میکنه.
چالش اصلی
بار نامتعادل روی کلاستر توزیعشده شلوغ با ۲۰ نود و ۵۲ پارتیشن و عدم تفکیک داده
نیاز به پردازش کمتأخیر
حفظ Consistency در حجم عظیم داده
راهحل معماری
مصرفکنندههای موازی با Unbounded Channel
پردازش کاملاً Stateless برای scale عمودی و افقی
دستهبندی و فشردهسازی در Batchهای ۱,۰۰۰,۰۰۰ رکوردی (قابل کانفیگ)
نوشتن مستقیم در ClickHouse با Insertهای ستونمحور
و Commit offset تنها بعد از نوشتن موفق
جدا کردن مسیر ingest از persist برای افزایش throughput
@DevTwitter | <Amirhossein Maleki/>
❤25🍌8🔥5👎2
وردپرس 6.9 منتشر شد
این نسخه به افتخار هنرمند سرشناس پیانو سبک جاز، Gene Harris نام گذاری شده که شاهد تحولات قابل توجهی می باشد. بیش از ۷۰ بهبود در دسترسپذیری و Abilities API برای تعاملات یکپارچه در PHP، REST و زمینههای مبتنی بر AI بخشی از ویژگی های این نسخه است.
@DevTwitter | <Alireza Naji/>
این نسخه به افتخار هنرمند سرشناس پیانو سبک جاز، Gene Harris نام گذاری شده که شاهد تحولات قابل توجهی می باشد. بیش از ۷۰ بهبود در دسترسپذیری و Abilities API برای تعاملات یکپارچه در PHP، REST و زمینههای مبتنی بر AI بخشی از ویژگی های این نسخه است.
@DevTwitter | <Alireza Naji/>
🍌23❤22👍1👎1
اخیرا میخواستم German String رو پیاده سازی کنم اما دیدم واسه Refcount بودن استرینگ و substr گرفتن بدون hardcopy استفاده های بیشتری دارم.
متاسفانه هنوز string literal بدون allocation ساپورت نمیکنه و هنوز ایده ای به ذهنم نرسیده چطور تو 128بیت درستش کنم.
https://github.com/hexorer/libtoypp/blob/main/include/toypp/immutable_string.hpp
@DevTwitter | <Mohsen M./>
متاسفانه هنوز string literal بدون allocation ساپورت نمیکنه و هنوز ایده ای به ذهنم نرسیده چطور تو 128بیت درستش کنم.
https://github.com/hexorer/libtoypp/blob/main/include/toypp/immutable_string.hpp
@DevTwitter | <Mohsen M./>
👍7🍌7❤1🔥1
وقتی افزونهها کمکم تبدیل میشن به همتیمیهای واقعی…
امروز Cline رو روی VS Code تست کردم و رسماً فهمیدم دوران «تنهایی در کدنویسی» داره تموم میشه.
این موجود فضاییِ کوچک توی ادیتورم نهتنها کد میخونه، بلکه ایراد میگیره، پیشنهاد میده، فایل میسازه، پاک میکنه، حتی ترمینال رو هم دستکاری میکنه.
یک جورهایی انگار داری با یه دولوپر دیگه pair programming میکنی… فقط بدون غر زدن!
دنیای برنامهنویسی داره یه لایه جدید پیدا میکنه:
کد کمتر، فکر بیشتر.
اگه هنوز امتحانش نکردی… چند قدم مونده تا اینکه واقعاً حس کنی IDEت بامرامتر از خیلی از همکاراست.
@DevTwitter | <Amin Hosseini/>
امروز Cline رو روی VS Code تست کردم و رسماً فهمیدم دوران «تنهایی در کدنویسی» داره تموم میشه.
این موجود فضاییِ کوچک توی ادیتورم نهتنها کد میخونه، بلکه ایراد میگیره، پیشنهاد میده، فایل میسازه، پاک میکنه، حتی ترمینال رو هم دستکاری میکنه.
یک جورهایی انگار داری با یه دولوپر دیگه pair programming میکنی… فقط بدون غر زدن!
دنیای برنامهنویسی داره یه لایه جدید پیدا میکنه:
کد کمتر، فکر بیشتر.
اگه هنوز امتحانش نکردی… چند قدم مونده تا اینکه واقعاً حس کنی IDEت بامرامتر از خیلی از همکاراست.
@DevTwitter | <Amin Hosseini/>
👎33👍17❤8🍌5
اپ فال حافظ من از یک نیاز خیلی ساده شروع شد؛ همیشه وقتی دور هم جمع میشدیم و فال میگرفتیم، دوست داشتم یک اپ تمیز و کاملاً فارسی داشته باشم که هم فال تصادفی بده، هم تعبیرش رو قشنگ و خوانا نشان بده برای همین رفتم سراغ Flutter و این پروژه رو ساختم تا روی اندروید، ویندوز و بقیه پلتفرمها هم قابل اجرا باشه و هرکس خواست راحت بتونه ازش استفاده کنه یا توی گیتهاب کمک کنه
اسم پروژه only_faleh_hafez هست و داخلش میتونی با یک کلیک فال تصادفی از دیوان حافظ بگیری، تعبیر و توضیح اون فال رو بخونی و اگر دنبال شعر خاصی هستی، مستقیم داخل اشعار جستوجو کنی رابط کاربری کامل فارسی و راستبهچپ طراحی شده تا حس یک اپ بومی و ساده رو بده، نه یک چیز ترجمهشدهی عجیب؛ هدفم این بوده که هم برای کاربر معمولی راحت باشه، هم برای دولوپرها اوپنسورس و قابل توسعه
لینک ریپو و توضیحات کاملتر پروژه:
https://github.com/MMDREZA7/only_faleh_hafez
@DevTwitter | <Ethan Heida/>
اسم پروژه only_faleh_hafez هست و داخلش میتونی با یک کلیک فال تصادفی از دیوان حافظ بگیری، تعبیر و توضیح اون فال رو بخونی و اگر دنبال شعر خاصی هستی، مستقیم داخل اشعار جستوجو کنی رابط کاربری کامل فارسی و راستبهچپ طراحی شده تا حس یک اپ بومی و ساده رو بده، نه یک چیز ترجمهشدهی عجیب؛ هدفم این بوده که هم برای کاربر معمولی راحت باشه، هم برای دولوپرها اوپنسورس و قابل توسعه
لینک ریپو و توضیحات کاملتر پروژه:
https://github.com/MMDREZA7/only_faleh_hafez
@DevTwitter | <Ethan Heida/>
🍌29❤19👍6👎2