This media is not supported in your browser
VIEW IN TELEGRAM
یک آموزش جدید درست کردم
تو این ویدیو یاد میگیریم چجوری با Docker Compose بتونیم MinIO رو داخل VPS ارزون خودمون بالا بیاریم و برای خودمون S3 Object Storage داشته باشیم.
بعدش یاد میگیریم چجوری داخل یک اپ Next.js به MinIO وصل بشیم و اول ازش یک Pre-Signed URL بگیریم بعدش مستقیم فایلمون رو داخل MinIO آپلود کنیم.
لینک ویدیو:
https://www.youtube.com/watch?v=UPygkumJc2A
لینک گیتهاب:
https://github.com/sesto-dev/next-minio-self-host
@DevTwitter | <Amirhossein Mohammadi/>
تو این ویدیو یاد میگیریم چجوری با Docker Compose بتونیم MinIO رو داخل VPS ارزون خودمون بالا بیاریم و برای خودمون S3 Object Storage داشته باشیم.
بعدش یاد میگیریم چجوری داخل یک اپ Next.js به MinIO وصل بشیم و اول ازش یک Pre-Signed URL بگیریم بعدش مستقیم فایلمون رو داخل MinIO آپلود کنیم.
لینک ویدیو:
https://www.youtube.com/watch?v=UPygkumJc2A
لینک گیتهاب:
https://github.com/sesto-dev/next-minio-self-host
@DevTwitter | <Amirhossein Mohammadi/>
میدونستی میتونی کوئریهات رو هوشمندانهتر و بهینهتر کنی؟
اگه توی پروژههات همیشه برای فیلتر کردن محتوا بر اساس فیلدخاصی شرط مینویسی، میتونی این شرط رو یک بار برای همیشه به مدل اضافه کنی و از تکرار کدهای اضافی خلاص بشی!
کد اسلاید رو ببین:
ما یه Global Query Scope ساختیم به اسم TeamScope و به مدل Article اضافه کردیم. از این به بعد، هر وقت کوئری مربوط به مقالات رو بزنیم، خودکار فقط مقالات تیم کاربر لاگین شده برمیگرده.
نکته مهم:
این کار رو میتونید با سه روش مختلف پیادهسازی کنید که هر کدوم بسته به نیازتون کاربردی هستن.
نتیجه؟
کدهای تمیزتر و حرفهایتر
حذف شرطهای تکراری
راحتتر کردن نگهداری و گسترش پروژه
@DevTwitter | <Saber Qadimi/>
اگه توی پروژههات همیشه برای فیلتر کردن محتوا بر اساس فیلدخاصی شرط مینویسی، میتونی این شرط رو یک بار برای همیشه به مدل اضافه کنی و از تکرار کدهای اضافی خلاص بشی!
کد اسلاید رو ببین:
ما یه Global Query Scope ساختیم به اسم TeamScope و به مدل Article اضافه کردیم. از این به بعد، هر وقت کوئری مربوط به مقالات رو بزنیم، خودکار فقط مقالات تیم کاربر لاگین شده برمیگرده.
نکته مهم:
این کار رو میتونید با سه روش مختلف پیادهسازی کنید که هر کدوم بسته به نیازتون کاربردی هستن.
نتیجه؟
کدهای تمیزتر و حرفهایتر
حذف شرطهای تکراری
راحتتر کردن نگهداری و گسترش پروژه
@DevTwitter | <Saber Qadimi/>
ماجرای crash کردن Windows 95 بعد از 49.7 روز!
امروز به یه مطلب جالبی برخوردم.
وقتی مایکروسافت نسخه اولیه ویندوز 95 رو منتشر کرد، بعد از مدتی متوجه شد که کامپیوتر هایی که از این سیستم عامل استفاده میکنن اگر 49.7 روز به طور مداوم روشن بمونن ویندوز یهو crash میکنه.
بعد از بررسی متوجه میشن علتش type متغیری هست که زمان روشن بودن سیستم(Uptime) رو نگهداری میکنه. این متغیر زمان روشن بودن سیستم رو به میلی ثانیه نگه میداره و type رو unsigned int 32 انتخاب کرده بودن که این تایپ نهایتا تا عدد 4,294,967,295 رو میتونه توی خودش ذخیره کنه و چون بعد از 49.7 روز مقدار میلی ثانیه های گذشته از روشن بودن سیستم به عدد بالا میرسه، overflow رخ میده و این متغیر دوباره به 0 ریست میشه!
حالا بعضی از قسمت های سیستم عامل دائم در حال بررسی مقدار این متغیر هستن و این فرض رو دارن که این متغیر دائم باید در حال زیاد شدن باشه، وقتی که میبینن یهو ریست شده براشون غیر منتظرس و crash رخ میده.
بعد از اینکه مشکل رو پیدا کردن type رو به unsigned int 64 تغییر دادن و مشکل حل شد
@DevTwitter | <Bassam Nazemi/>
امروز به یه مطلب جالبی برخوردم.
وقتی مایکروسافت نسخه اولیه ویندوز 95 رو منتشر کرد، بعد از مدتی متوجه شد که کامپیوتر هایی که از این سیستم عامل استفاده میکنن اگر 49.7 روز به طور مداوم روشن بمونن ویندوز یهو crash میکنه.
بعد از بررسی متوجه میشن علتش type متغیری هست که زمان روشن بودن سیستم(Uptime) رو نگهداری میکنه. این متغیر زمان روشن بودن سیستم رو به میلی ثانیه نگه میداره و type رو unsigned int 32 انتخاب کرده بودن که این تایپ نهایتا تا عدد 4,294,967,295 رو میتونه توی خودش ذخیره کنه و چون بعد از 49.7 روز مقدار میلی ثانیه های گذشته از روشن بودن سیستم به عدد بالا میرسه، overflow رخ میده و این متغیر دوباره به 0 ریست میشه!
حالا بعضی از قسمت های سیستم عامل دائم در حال بررسی مقدار این متغیر هستن و این فرض رو دارن که این متغیر دائم باید در حال زیاد شدن باشه، وقتی که میبینن یهو ریست شده براشون غیر منتظرس و crash رخ میده.
بعد از اینکه مشکل رو پیدا کردن type رو به unsigned int 64 تغییر دادن و مشکل حل شد
@DevTwitter | <Bassam Nazemi/>
همزمانی (Concurrency) در لاراول 11 را بیشتر بشناسیم
همزمانی یا Concurrency در Laravel نقش مهمی در بهبود عملکرد و مدیریت بار دارد. با استفاده از مکانیزم Queue و قابلیت Task Scheduling، میتوان وظایف را بهصورت همزمان اجرا کرد. برای جلوگیری از Race Condition، اغلب از Lock و Transaction در سطح دیتابیس بهره میبریم. هنگامی که تعداد درخواستها بالا میرود، توزیع بار توسط سرورهای متعدد در کنار مدیریت صحیح Session و Cache، Concurrency را کارآمدتر میکند. همچنین نظارت بر Performance و پیادهسازی الگوی Event-driven رویکردی کلیدی برای ساخت اپلیکیشنهای مقیاسپذیر است. همچنین بهکارگیری ابزارهایی مثل Horizon جهت مانیتورینگ Queue و Jobها، در تضمین سلامت Concurrency کمک میکند.
@DevTwitter | <Alireza Javadi/>
همزمانی یا Concurrency در Laravel نقش مهمی در بهبود عملکرد و مدیریت بار دارد. با استفاده از مکانیزم Queue و قابلیت Task Scheduling، میتوان وظایف را بهصورت همزمان اجرا کرد. برای جلوگیری از Race Condition، اغلب از Lock و Transaction در سطح دیتابیس بهره میبریم. هنگامی که تعداد درخواستها بالا میرود، توزیع بار توسط سرورهای متعدد در کنار مدیریت صحیح Session و Cache، Concurrency را کارآمدتر میکند. همچنین نظارت بر Performance و پیادهسازی الگوی Event-driven رویکردی کلیدی برای ساخت اپلیکیشنهای مقیاسپذیر است. همچنین بهکارگیری ابزارهایی مثل Horizon جهت مانیتورینگ Queue و Jobها، در تضمین سلامت Concurrency کمک میکند.
@DevTwitter | <Alireza Javadi/>
چرا بعضی Unit Testها به هیچ دردی نمی خورن؟
تا حالا براتون پیش اومده که بعد از کلی وقت گذاشتن روی نوشتن تست های واحد، بازم سیستم با یه باگ ناجور منفجر بشه؟ اون حس ناامیدی که انگار همه اون تست ها فقط وقت تلف کردن...
خب، چرا این اتفاق می افته؟
یه سری اشتباهات رایج باعث می شه تست ها بی اثر بشن. مثلا:
استفاده از داده های واقعی به جای داده های ساختگی:
فکر کنید تست تون روی دیتابیس واقعی اجرا بشه. اگه رکوردها تغییر کنن یا دسترسی به دیتابیس قطع بشه، تست می ترکه. تست خوب باید مستقل از محیط باشه.
عدم استفاده از Mocking:
وقتی همه وابستگی های کد واقعی باشن، دارین کل سیستم رو تست می کنید، نه فقط یه بخش خاص رو. این دیگه Unit Test نیست! استفاده از Mock باعث می شه به جای اینکه به API واقعی یا دیتابیس وصل بشید، شبیه ساز اون ها رو تست کنید.
نوشتن تست های زیاد ولی بدون هدف مشخص:
یه زمانی فکر می کردم هرچی تعداد تست ها بیشتر باشه بهتره. بعد فهمیدم تستی که هدفمند نباشه، فقط کد رو شلوغ می کنه و باعث می شه موقع تغییرات کلی مشکل زا بشه.
حالا راه حل چیه؟
۱. وابستگی ها رو Mock کنید. با ابزارهایی مثل Mockito می تونید رفتار وابستگی ها رو شبیه سازی کنید.
۲. از داده های ثابت و ساختگی (Fake Data) استفاده کنید که تغییر نمی کنن.
۳. روی سناریوهای کلیدی تمرکز کنید. مثلا یه تابع مهم چطوری ورودی های خاص رو هندل می کنه؟ این مهم تر از اینه که صد تا تست بنویسید که همشون بی هدف باشن.
@DevTwitter | <Hamed Farzanefar/>
تا حالا براتون پیش اومده که بعد از کلی وقت گذاشتن روی نوشتن تست های واحد، بازم سیستم با یه باگ ناجور منفجر بشه؟ اون حس ناامیدی که انگار همه اون تست ها فقط وقت تلف کردن...
خب، چرا این اتفاق می افته؟
یه سری اشتباهات رایج باعث می شه تست ها بی اثر بشن. مثلا:
استفاده از داده های واقعی به جای داده های ساختگی:
فکر کنید تست تون روی دیتابیس واقعی اجرا بشه. اگه رکوردها تغییر کنن یا دسترسی به دیتابیس قطع بشه، تست می ترکه. تست خوب باید مستقل از محیط باشه.
عدم استفاده از Mocking:
وقتی همه وابستگی های کد واقعی باشن، دارین کل سیستم رو تست می کنید، نه فقط یه بخش خاص رو. این دیگه Unit Test نیست! استفاده از Mock باعث می شه به جای اینکه به API واقعی یا دیتابیس وصل بشید، شبیه ساز اون ها رو تست کنید.
نوشتن تست های زیاد ولی بدون هدف مشخص:
یه زمانی فکر می کردم هرچی تعداد تست ها بیشتر باشه بهتره. بعد فهمیدم تستی که هدفمند نباشه، فقط کد رو شلوغ می کنه و باعث می شه موقع تغییرات کلی مشکل زا بشه.
حالا راه حل چیه؟
۱. وابستگی ها رو Mock کنید. با ابزارهایی مثل Mockito می تونید رفتار وابستگی ها رو شبیه سازی کنید.
۲. از داده های ثابت و ساختگی (Fake Data) استفاده کنید که تغییر نمی کنن.
۳. روی سناریوهای کلیدی تمرکز کنید. مثلا یه تابع مهم چطوری ورودی های خاص رو هندل می کنه؟ این مهم تر از اینه که صد تا تست بنویسید که همشون بی هدف باشن.
@DevTwitter | <Hamed Farzanefar/>
اگر درس ساختمان داده داشتید و میخواستید بفهمید Linkedlist چطوریه این پروژه مثال خوبی ازشه ...
https://github.com/Mahdi-Rashidiyan/data-structure-study/blob/main/Liblinkedlist.py
@DevTwitter | <Mehdi Rashidiyan/>
https://github.com/Mahdi-Rashidiyan/data-structure-study/blob/main/Liblinkedlist.py
@DevTwitter | <Mehdi Rashidiyan/>
دوستان یه ریپوزیتوری توی گیتهاب شروع کردم که دیزاین پترن ها توی پایتون رو کدش رو میزارم، دوست داشتید فورک کنید و کانتریبیوت کنید و در نهایت PR بزنید.
https://github.com/khodealib/designpattern-in-python
@DevTwitter | <فرداد/>
https://github.com/khodealib/designpattern-in-python
@DevTwitter | <فرداد/>
همین چنل رو با همین محتوا توی واتساپ هم بزنیم، حمایت میکنید؟
Anonymous Poll
54%
نه، همین تلگرام خوبه
46%
خیر، واتساپ بدرد نمیخوره، همین تلگرام کافیه
به من خیلی پیام میدید که کامنتهای چنل رو باز کنم.
دلیل این که کامنتا رو باز نمیکنم فقط شعور و شخصیت بعضی آدمهاست.
توی همین ریاکشنهای چنل میبینید که توی تمام پستها ریاکشن خنده میذارن.
اینا همونهایی هستن که میان مینوسین کامنت اول، یا گیفها و استیکرهای نامربوط میفرستن.
وقتی هنوز شعور استفاده ازش توی بعضیها وجود نداره، ما ترجیح میدیم کام خودمون و بقیه بابت این موارد تلخ نشه.
مخلص همتون
دلیل این که کامنتا رو باز نمیکنم فقط شعور و شخصیت بعضی آدمهاست.
توی همین ریاکشنهای چنل میبینید که توی تمام پستها ریاکشن خنده میذارن.
اینا همونهایی هستن که میان مینوسین کامنت اول، یا گیفها و استیکرهای نامربوط میفرستن.
وقتی هنوز شعور استفاده ازش توی بعضیها وجود نداره، ما ترجیح میدیم کام خودمون و بقیه بابت این موارد تلخ نشه.
مخلص همتون
هر بار که یک پروژه رو شروع میکنم باید سرچ کنم و دنبال یک .gitignore فایل برای اون پروژه باشم،
سایت gitignore.io کار رو راحت کرده، کافیه کیورد رو توش سرچ کنید تا فایل مناسب بسازه
از این بهتر یک پلاگین برای zsh هم داره: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/gitignore
@DevTwitter | <Arya Shabane/>
سایت gitignore.io کار رو راحت کرده، کافیه کیورد رو توش سرچ کنید تا فایل مناسب بسازه
از این بهتر یک پلاگین برای zsh هم داره: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/gitignore
@DevTwitter | <Arya Shabane/>
تو یه اقدام پشم ریزون در راستا کامبک زدن به دنیا برنامه نویسی یه پکیج برای استفاده از API صرافی کوینکس نوشتم و روی Pypi منتشر کردم
فعلا حدود 15 درصد از API رو پوشش میده ولی برا شروع خوبه
باشد که بدرد یه نفر دیگه هم بخوره
https://pypi.org/project/coinexlib/
@DevTwitter | <Rezolini/>
فعلا حدود 15 درصد از API رو پوشش میده ولی برا شروع خوبه
باشد که بدرد یه نفر دیگه هم بخوره
https://pypi.org/project/coinexlib/
@DevTwitter | <Rezolini/>
#بدرد
خدا خیرش بده این جوون رو
اومده alias رو توی ویندوز پیاده سازی کرده
https://gist.github.com/benjamine/5992592
@DevTwitter | <0x000A0000/>
خدا خیرش بده این جوون رو
اومده alias رو توی ویندوز پیاده سازی کرده
https://gist.github.com/benjamine/5992592
@DevTwitter | <0x000A0000/>
یه پکیج لاراولی اپن سورس جدید برای کوتاه کردن لینک اومده به اسم Lua
امکانات خوبی داره، برای کارهای فوری فوتی به درد میخوره.
https://github.com/luadotsh/lua
@DevTwitter | <شایان ذکر/>
امکانات خوبی داره، برای کارهای فوری فوتی به درد میخوره.
https://github.com/luadotsh/lua
@DevTwitter | <شایان ذکر/>
This media is not supported in your browser
VIEW IN TELEGRAM
کتابخانه drawdata به شما امکان میده در محیط Jupyter دادههای دلخواهتون رو بسازید. ابزار کاربردی برای تمرین و یادگیری الگوریتمهای ماشین لرنینگ.
لینک ریپو:
https://github.com/koaning/drawdata
@DevTwitter | <Reza Jafari/>
لینک ریپو:
https://github.com/koaning/drawdata
@DevTwitter | <Reza Jafari/>
نسخه بعدی سی شارپ Type Unions اضافه میشه، چیزی که از ابتدا در اف شارپ و تایپ اسکریپت وجود داشت/
به شماره اجازه میده که یه مقدار از نوع مختلف رو در یک جا نگهداری کنید.
الان با اینترفیس و وراثت پیاده سازیش می کردیم، به زودی به عنوان فیچر زبان اضافه میشه./
https://github.com/dotnet/csharplang/blob/main/proposals/TypeUnions.md#specialized---union-structs
@DevTwitter | <imun/>
به شماره اجازه میده که یه مقدار از نوع مختلف رو در یک جا نگهداری کنید.
الان با اینترفیس و وراثت پیاده سازیش می کردیم، به زودی به عنوان فیچر زبان اضافه میشه./
https://github.com/dotnet/csharplang/blob/main/proposals/TypeUnions.md#specialized---union-structs
@DevTwitter | <imun/>
سایت لیت کد LeetCode یک پلتفرم برای کمک به ارتقای مهارتها، گسترش دانش و آمادگی برای مصاحبههای فنی
گروهی دیگر برای machine learning نمونه این سایت را ساختند به نام Deep-ML
https://deep-ml.com
@DevTwiiter | <MehrdadLinux/>
گروهی دیگر برای machine learning نمونه این سایت را ساختند به نام Deep-ML
https://deep-ml.com
@DevTwiiter | <MehrdadLinux/>
کاش آدما بفهمن، این که ده تا چیز بلدن، یا این که توی عنوان شغلیشون Senior وجود داره، اونارو تبدیل به سینیور نمیکنه.
سینیور شدن توی این حوزه نیاز به دانش عمیق و تجربهی زیاد داره.
تعصب نداشتن، بروز بودن، توانایی تحلیل و حل مسئله و البته تجربهی پروژههایی با اسکیل بالا میتونه از ویژگیهای یک برنامهنویس ارشد باشه.
بقیه رو شاید بتونید گول بزنید، اما گول زدن خودتون با عناوین اشتباه میتونه در آینده براتون گرون تموم بشه.
@DevTwitter
سینیور شدن توی این حوزه نیاز به دانش عمیق و تجربهی زیاد داره.
تعصب نداشتن، بروز بودن، توانایی تحلیل و حل مسئله و البته تجربهی پروژههایی با اسکیل بالا میتونه از ویژگیهای یک برنامهنویس ارشد باشه.
بقیه رو شاید بتونید گول بزنید، اما گول زدن خودتون با عناوین اشتباه میتونه در آینده براتون گرون تموم بشه.
@DevTwitter
دنبال یادگیری دیزاین پترن هستی؟ اونم فارسی؟ اونم اکثر زبان ها مثل پایتون، پی اچ پی و..؟
بیا بگیر برو جوان ایرانی:
https://github.com/3lf/design-patterns-for-humans
@DevTwiiter | <Milwad Khosravi/>
بیا بگیر برو جوان ایرانی:
https://github.com/3lf/design-patterns-for-humans
@DevTwiiter | <Milwad Khosravi/>
اگه دوست دارید یادبگیرید چطور agent های خودتون را درست کنید و دیپلوی کنید، کمپانی HuggingFace یک دوره رایگان گذاشته. این دوره از یادگیری مفاهیم اصلی شروع میشه و بعد کار با فریمورک های مختلف مثل langchain و llamaIndex و Smolagents را یاد میدن. و آخر هم که چندین مثال واقعی استفاده از agent ها را یاد میگیرید. به نظر میاد که certificate هم میدن (که البته به نظر من دادن یا ندادن اون اصلا مهم نیست!). یکی از بهترین دوره های کاربردی میتونه باشه!
تو این لینک برید و ثبت نام کنید.
https://huggingface.us17.list-manage.com/subscribe?u=7f57e683fa28b51bfc493d048&id=9ed45a3ef6
@DevTwiiter | <Mehdi Allahyari/>
تو این لینک برید و ثبت نام کنید.
https://huggingface.us17.list-manage.com/subscribe?u=7f57e683fa28b51bfc493d048&id=9ed45a3ef6
@DevTwiiter | <Mehdi Allahyari/>
This media is not supported in your browser
VIEW IN TELEGRAM
این دستگاه یک ماشین حساب سادس، ولی وقتی که دو تا عدد بهش بدین جمع بکنه اون پشت مدارهای منطقی رو نشون میده که باعث میشن این عملیات انجام بشه
@DevTwitter | <mamdali/>
@DevTwitter | <mamdali/>