یکی از مشکلات بزرگ کتب برنامهنویسی همیشه این بوده که موضوع Encapsulation رو به شکلی تدریس کردهاند که انگار موضوعی است که فقط و فقط مختص به OOP هست؛ و از اون بدتر، این موضوع رو جوری جا انداختن که افراد فکر میکنند Encapsulation یعنی همان Access modifiers ها (private,public).
برای همین هست که بیشتر افراد هیچگونه تصوری از این ندارند که Encapsulation خارج از OOP چگونه است، و حتی در همون پارادایم OOP هم بدرستی نمیتونن کپسوله سازی رو پیاده سازی کنن و اجزای مختلف کدهاشون درهم و برهم هست.
موضوع Encapsulation یک موضوع منطقی است و برعکس چیزی که بیشتر کتابها بهتون میگن ربطی به Access modifier ها ندارد. Access modifier ها صرفا یک برچسب هستند که به طور عمده دو وظیفه رو دنبال میکنن: یک اینکه کامپایلر بتواند جلوی اشتباهات سهوی شما در بکارگیری برخی فیلدها رو بگیره (که این مدل اشتباه فوق العاده نادر هست)؛ و دلیل دیگر اینکه سایر برنامهنویسها موقع خواندن کدها، متوجه منظور شما بشن. مثلا متوجه بشن که شما خواسته ات در هنگام نوشتن کد این بوده که خارج از فلان محدوده از فلان فیلد استفاده نشود.
صرفا چون تعدادی از فیلدها را پرایوت کرده اید و تعدادی دیگر را پابلیک، فکر نکنید که Encapsulation انجام داده اید. بود و نبود این برچسبها، هیچ تاثیری در روند پیاده سازی Encapsulation در کدهای شما ندارند. اگر دوست دارید تمام فیلدها را پابلیک کنید! چه کسی، و چگونه، میخواهد یواشکی از فیلدهای شما استفاده کند؟ مگر میشود بخشی از کد، همینطور سرخود بیاید و از فیلدهای فلان بخش استفاده کند؟ شما باید مشخصا چنین کدی رو تایپ کنید وگرنه کدها از خودشان ارادهای ندارند که بتوانند قسمتهای مختلف یکدیگر رو دستکاری کنند!
موضوع Encapsulation یک فرآیند منطقی در هنگام طراحی سیستم هست که طی اون اجزای مختلف سیستم در یونیتهای مستقل کپسوله سازی میشن؛ این فرآیند، پیش نیاز تولید کدهای ماژولار هست. در این فرآیند کدها به شکل منطقی از هم جدا میشن، و در فاز بعدی که به سیستم ماژول میرسید، کدها متناسب با این طراحی، به شکل فیزیکی از هم جدا میشن.
متاسفانه برخی زبانهای معروف OOP مثل جاوا یا سی پلاس پلاس، تا سالها یک سیستم ماژول درست حسابی نداشتند و باعث شدند Access modifier ها در ذهن برنامهنویسها مترادف با Encapsulation و کدهای ماژولار بشوند؛ به این شکل که در نبود اونها، اصلا هیچ تصوری از اینکه Encapsulation چیست و قرار است طی آن چه اتفاقی بیفتد ندارند!
در زبانی که دارای یک سیستم ماژول خوب است، موضوع Access modifier ها چیزی هست که جزو مکانیزمهای مربوط به سیستم ماژول اون زبان هستند. در این مدل زبانها این مکانیزمها جزو قابلیتهای کمکی در زمینه دسته بندی و طبقه بندی فیزیکی کدها هستند (در کنار کمک به سایر برنامهنویسان در زمینه خوانایی) و باعث میشن کمتر این شبهه در ذهن برنامهنویس پیش بیاد که به صرف استفاده از این برچسبها، داره عمل کپسوله سازی رو انجام میده.
@DevTwitter | <Amirreza Gh/>
برای همین هست که بیشتر افراد هیچگونه تصوری از این ندارند که Encapsulation خارج از OOP چگونه است، و حتی در همون پارادایم OOP هم بدرستی نمیتونن کپسوله سازی رو پیاده سازی کنن و اجزای مختلف کدهاشون درهم و برهم هست.
موضوع Encapsulation یک موضوع منطقی است و برعکس چیزی که بیشتر کتابها بهتون میگن ربطی به Access modifier ها ندارد. Access modifier ها صرفا یک برچسب هستند که به طور عمده دو وظیفه رو دنبال میکنن: یک اینکه کامپایلر بتواند جلوی اشتباهات سهوی شما در بکارگیری برخی فیلدها رو بگیره (که این مدل اشتباه فوق العاده نادر هست)؛ و دلیل دیگر اینکه سایر برنامهنویسها موقع خواندن کدها، متوجه منظور شما بشن. مثلا متوجه بشن که شما خواسته ات در هنگام نوشتن کد این بوده که خارج از فلان محدوده از فلان فیلد استفاده نشود.
صرفا چون تعدادی از فیلدها را پرایوت کرده اید و تعدادی دیگر را پابلیک، فکر نکنید که Encapsulation انجام داده اید. بود و نبود این برچسبها، هیچ تاثیری در روند پیاده سازی Encapsulation در کدهای شما ندارند. اگر دوست دارید تمام فیلدها را پابلیک کنید! چه کسی، و چگونه، میخواهد یواشکی از فیلدهای شما استفاده کند؟ مگر میشود بخشی از کد، همینطور سرخود بیاید و از فیلدهای فلان بخش استفاده کند؟ شما باید مشخصا چنین کدی رو تایپ کنید وگرنه کدها از خودشان ارادهای ندارند که بتوانند قسمتهای مختلف یکدیگر رو دستکاری کنند!
موضوع Encapsulation یک فرآیند منطقی در هنگام طراحی سیستم هست که طی اون اجزای مختلف سیستم در یونیتهای مستقل کپسوله سازی میشن؛ این فرآیند، پیش نیاز تولید کدهای ماژولار هست. در این فرآیند کدها به شکل منطقی از هم جدا میشن، و در فاز بعدی که به سیستم ماژول میرسید، کدها متناسب با این طراحی، به شکل فیزیکی از هم جدا میشن.
متاسفانه برخی زبانهای معروف OOP مثل جاوا یا سی پلاس پلاس، تا سالها یک سیستم ماژول درست حسابی نداشتند و باعث شدند Access modifier ها در ذهن برنامهنویسها مترادف با Encapsulation و کدهای ماژولار بشوند؛ به این شکل که در نبود اونها، اصلا هیچ تصوری از اینکه Encapsulation چیست و قرار است طی آن چه اتفاقی بیفتد ندارند!
در زبانی که دارای یک سیستم ماژول خوب است، موضوع Access modifier ها چیزی هست که جزو مکانیزمهای مربوط به سیستم ماژول اون زبان هستند. در این مدل زبانها این مکانیزمها جزو قابلیتهای کمکی در زمینه دسته بندی و طبقه بندی فیزیکی کدها هستند (در کنار کمک به سایر برنامهنویسان در زمینه خوانایی) و باعث میشن کمتر این شبهه در ذهن برنامهنویس پیش بیاد که به صرف استفاده از این برچسبها، داره عمل کپسوله سازی رو انجام میده.
@DevTwitter | <Amirreza Gh/>
👍52👎15❤12🔥1
دیدید داخل فرم های ورودی بعضی سایتا وقتی شماره تلفن یا مثلا شماره کارت وارد می کنید اونو برای خوانایی بیشتر چند رقم چند رقم جدا میکنه؟ این لایبری براتون اون کارو میکنه همه ورودی هارم ساپورت میکنه.
http://nosir.github.io/cleave.js
@DevTwitter | <Nimo/>
http://nosir.github.io/cleave.js
@DevTwitter | <Nimo/>
❤33👎8👍7🔥2
دو تا توصیه "قبل از هر چیزی" دارم برای دوستانی که احتمالا بعد از ابلاغ لایحه اصلاح واحد پولی (حذف چهار صفر) ناچار به اعمال تغییرات تو سامانههاشون خواهند بود:
۱. اعمال تغییرات روی دیتابیس رو کلا فراموش کنید
بسیاری از دوستان تا میشنون واحد پولی جدید دو رقم اعشار داره، فوری به تغییر تایپ ستونهای مبالغ از integer به float فکر میکنن؛ نکنید دوستان! بذارید همه چیز intrger باقی بمونه و اعمال exponent و اعشار رو به اینترفیسها (چه در ui و چه در apiها) واگذار کنید. خیلی از ماها هیچوقت با دادههای اعشاری تو موضوعات مالی کار نکردیم و نهایتا مختصات نقطهها و امتیاز (rating) رو اعشاری ذخیره کردیم که تو این مدل کاربردها هم خطاهای رندینگ و floating point error خیلی خودشون رو نشون نمیدن. برای از دست دادن شغلتون، کافیه تو یه سیستم مالی حاصل جمع 0.1 و 0.2 رو 0.3 فرض کنید، یا تصور کنید حاصل ده بار جمع زدن 0.1 میشه یک! (که متاسفانه نمیشه!)
۲. از همین امروز دو رقم آخر مبالغ ریالی رو صفر کنید
حذف چهار صفر و اضافه شدن دو رقم اعشار، تو عمل یعنی فقط حذف دو رقم آخر (یکان و دهگان). از همین امروز از پذیرفتن ورودیهای ریالی جدیدی که به ۱۰۰ بخشپذیر نیستن جلوگیری کنید و اگه لازمه مجوزهای لازم برای این کار رو بگیرید. این کار باعث میشه بعدا که خواستید ۶۹۹۰۰ ریال قدیم رو به ۶.۹۹ تومان جدید تغییر بدید دیگه بابت از دست رفتن اون دو صفر آخر تو مقدار ریالی نگران نباشید و با آمادگی قبلی به استقبال تغییرات برین.
@DevTwitter | <Hossein Pourbahrami/>
۱. اعمال تغییرات روی دیتابیس رو کلا فراموش کنید
بسیاری از دوستان تا میشنون واحد پولی جدید دو رقم اعشار داره، فوری به تغییر تایپ ستونهای مبالغ از integer به float فکر میکنن؛ نکنید دوستان! بذارید همه چیز intrger باقی بمونه و اعمال exponent و اعشار رو به اینترفیسها (چه در ui و چه در apiها) واگذار کنید. خیلی از ماها هیچوقت با دادههای اعشاری تو موضوعات مالی کار نکردیم و نهایتا مختصات نقطهها و امتیاز (rating) رو اعشاری ذخیره کردیم که تو این مدل کاربردها هم خطاهای رندینگ و floating point error خیلی خودشون رو نشون نمیدن. برای از دست دادن شغلتون، کافیه تو یه سیستم مالی حاصل جمع 0.1 و 0.2 رو 0.3 فرض کنید، یا تصور کنید حاصل ده بار جمع زدن 0.1 میشه یک! (که متاسفانه نمیشه!)
۲. از همین امروز دو رقم آخر مبالغ ریالی رو صفر کنید
حذف چهار صفر و اضافه شدن دو رقم اعشار، تو عمل یعنی فقط حذف دو رقم آخر (یکان و دهگان). از همین امروز از پذیرفتن ورودیهای ریالی جدیدی که به ۱۰۰ بخشپذیر نیستن جلوگیری کنید و اگه لازمه مجوزهای لازم برای این کار رو بگیرید. این کار باعث میشه بعدا که خواستید ۶۹۹۰۰ ریال قدیم رو به ۶.۹۹ تومان جدید تغییر بدید دیگه بابت از دست رفتن اون دو صفر آخر تو مقدار ریالی نگران نباشید و با آمادگی قبلی به استقبال تغییرات برین.
@DevTwitter | <Hossein Pourbahrami/>
👎47👍24❤9🔥2
#browser_extension
ما یک افزونه به اسم امگا هوش توسعه دادبم که یک Ai برای دستیار برنامه نویسی شما هست. بدون محدودیت میتونید توی کد نویسیتون استفاده کنی.
کاربردشم این هست که کد رو براتون کامل میکنه، کد رو براتون توضیح میده و توی کد نویسی کمکتون میکنه.
برای نصبش هم میتونید از طریق لینک زیر نصبش کنید.
https://marketplace.visualstudio.com/items?itemName=PouriaHosseini.omga-ai
@DevTwitter | <Pouria Hosseini/>
ما یک افزونه به اسم امگا هوش توسعه دادبم که یک Ai برای دستیار برنامه نویسی شما هست. بدون محدودیت میتونید توی کد نویسیتون استفاده کنی.
کاربردشم این هست که کد رو براتون کامل میکنه، کد رو براتون توضیح میده و توی کد نویسی کمکتون میکنه.
برای نصبش هم میتونید از طریق لینک زیر نصبش کنید.
https://marketplace.visualstudio.com/items?itemName=PouriaHosseini.omga-ai
@DevTwitter | <Pouria Hosseini/>
❤39👎10👍3🔥1
اگه AI Agent درست میکنید حتما این دوتا تکنولوژی را یاد بگیرید:
۱- ابزار google ADK که یک فریمورک بسیار قوی برای ساختن ایجنت هست. الان به سرعت داره تو صنعت فراگیر میشه.
۲- پروتکل Agent2Agent (A2A).که برای ارتباط ایجنتها با همدیگه است.
خود ریپوهای این ابزارها کلی مثال عالی داره که میتونید سریع یاد بگیرید.
-A2A: https://github.com/a2aproject/A2A
- ADK: https://google.github.io/adk-docs/
@DevTwitter | <Mehdi Allahyari/>
۱- ابزار google ADK که یک فریمورک بسیار قوی برای ساختن ایجنت هست. الان به سرعت داره تو صنعت فراگیر میشه.
۲- پروتکل Agent2Agent (A2A).که برای ارتباط ایجنتها با همدیگه است.
خود ریپوهای این ابزارها کلی مثال عالی داره که میتونید سریع یاد بگیرید.
-A2A: https://github.com/a2aproject/A2A
- ADK: https://google.github.io/adk-docs/
@DevTwitter | <Mehdi Allahyari/>
👍19❤6👎1
دیتابیس Chroma، یه دیتابیس برای برنامه های مرتبط با ai هست که با زبان راست نوشته شده و با اون میتونید قدرت LLM ها رو خیلی بیشتر کنید
این دیتابیس میتونه سند ها و داکیومنت ها رو به راحتی و با سرعت ذخیره و بازیابی کنه
برای پروژههای AI و RAG عالیه!
لینک ریپوش
https://github.com/chroma-core/chroma
@DevTwitter | <ixAbolfazl/>
این دیتابیس میتونه سند ها و داکیومنت ها رو به راحتی و با سرعت ذخیره و بازیابی کنه
برای پروژههای AI و RAG عالیه!
لینک ریپوش
https://github.com/chroma-core/chroma
@DevTwitter | <ixAbolfazl/>
👍16❤6👎2
ی اسکنر داریم که شما url رو وارد میکنی + لیست تست خودت(ی تعداد محدودی رو دیفالت چک میکنه خودش ولی پیشنهاد میکنم لیست خودتونم بدید بهش) و براتون end-point های سایت مورد نظرتون رو نمایش میده. برای کسانی که توی حوزه امنیت و تست نفوذ فعالیت دارن.
https://github.com/manirazii/end-point-finder
@DevTwitter | <پسر لوسیفر/>
https://github.com/manirazii/end-point-finder
@DevTwitter | <پسر لوسیفر/>
👍20👎5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
اولین مدل vision language model (VLM) ساختهشده روی OpenAI gpt-oss تازه منتشر شد! InternVL3.5 با ۳۲ مدل مختلف میاد که هم pretrain شدند هم fine tune.
برای بخش LLM هم یا از gpt-oss استفاده میکنه یا از Qwen3.
مدلها از ۱ میلیارد تا ۲۴۱ میلیارد پارامتر دارند.
HuggingFace: https://huggingface.co/collections/OpenGVLab/internvl35-68ac87bd52ebe953485927fb
@DevTwitter | <Mehdi Allahyari/>
برای بخش LLM هم یا از gpt-oss استفاده میکنه یا از Qwen3.
مدلها از ۱ میلیارد تا ۲۴۱ میلیارد پارامتر دارند.
HuggingFace: https://huggingface.co/collections/OpenGVLab/internvl35-68ac87bd52ebe953485927fb
@DevTwitter | <Mehdi Allahyari/>
❤4👍4🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
شرکت چینی Moonshot AI یه قابلیت تازه به Kimi اضافه کرده به اسم «PPT Assistant». باهاش میتونی فقط با یه متن ساده یا حتی فایل PDF و Word، درجا یه پاورپوینت شیک بسازی. خبر خوب؟ فارسی رو کامل ساپورت میکنه و کاملاً رایگانه، بدون هیچ محدودیتی!
https://kimi.com/kimiplus/cvvm7bkheutnihqi2100
@DevTwitter | <محمد زمانی/>
https://kimi.com/kimiplus/cvvm7bkheutnihqi2100
@DevTwitter | <محمد زمانی/>
🔥31❤5👍4👎4
مستند پایتون منتشر شده و به نظرم برای هر کسی که بخش زیادی از کارش رو با پایتون انجام میده، تماشاش میتونه خیلی جذاب باشه. پیشنهاد میکنم از دستش ندید!
https://www.youtube.com/watch?v=GfH4QL4VqJ0&feature=youtu.be
@DevTwitter | <Reza Jafari/>
https://www.youtube.com/watch?v=GfH4QL4VqJ0&feature=youtu.be
@DevTwitter | <Reza Jafari/>
❤29👍5👎5🔥2
قبلا سایت ایرنیک لیست دامنه هایی که تازه آزاد شده بود رو تو سایتش میذاشت اما خیلی وقته که لیستشو نمیذاره
بجاش میتونید از سایت زیر لیست دامنه های تازه آزاد شده رو ببینید
http://free-domains.ir
پ.ن: اگه دنبال ایده برای اسم دامنه هستید میتونه کاربردی باشه
@DevTwitter | <ixAbolfazl/>
بجاش میتونید از سایت زیر لیست دامنه های تازه آزاد شده رو ببینید
http://free-domains.ir
پ.ن: اگه دنبال ایده برای اسم دامنه هستید میتونه کاربردی باشه
@DevTwitter | <ixAbolfazl/>
❤24👍7👎2🔥1
رفقا برنامهای چیزی برای اندروید سراغ دارید که بشه توش کارها رو track کرد؟
پیگیری کنه وضعیت کارها رو
هی یادآوری کنه که امروز این کارو نکردی، از فلان چیز چه خبر، امروز یه ساعت وقتتو گذاشتی و این حرفا
سینک هم بشه
پیگیری کنه وضعیت کارها رو
هی یادآوری کنه که امروز این کارو نکردی، از فلان چیز چه خبر، امروز یه ساعت وقتتو گذاشتی و این حرفا
سینک هم بشه
🔥37👍9👎3❤1
توی دنیای لاراول همیشه یه قلب تپنده وجود داره که خیلی وقتا مخفی میمونه، ولی همهچی بهش وصله:
Service Container (یا همون IoC Container)
حالا Service Container چیه؟
فرض کن توی یه پروژه بزرگ، کلی سرویس داری: مثل PaymentService، UserRepository، Logger و ...
اگه بخوای همه رو با new بسازی و دستی بهم وصل کنی، خیلی زود پروژه میشه یه باتلاق
اینجاست که Service Container وارد میشه:
تو فقط میگی "من به یه PaymentService نیاز دارم"،
لاراول خودش میره اون رو میسازه و وابستگیهاش رو هم تزریق میکنه.
به این جادوی قشنگ میگن Inversion of Control: یعنی به جای اینکه خودت کنترل ساخت اشیا رو بگیری، این کارو به Container میسپری.
چی شد که از لاراول 8 تا 12 تکامل پیدا کرد؟
بیایم مثل یه خط زمان نگاه کنیم:
* لاراول 8 - Auto-Resolution: لاراول خودش میفهمید چی رو باید resolve کنه.
نیاز کمتر به ثبت دستی سرویسها.
* لاراول 9 - Contextual Binding: میتونستی بگی "وقتی فلان کلاس خواست PaymentGateway رو، بهش Stripe بده؛ ولی برای یه کلاس دیگه Paypal بده".
انعطاف بیشتر توی پروژههای پیچیده.
* لاراول 10 - تستپذیری قویتر: راحتتر میشد سرویسها رو mock کرد.
هماهنگی بیشتر با PHP 8 و type hintها.
* لاراول 11 و 12 - ساختار بوتاسترپ سادهتر شد (دیگه لازم نیست هر چیزی رو دستی تو ServiceProvider ثبت کنی).
Container سریعتر و هوشمندتره؛ خیلی وقتا قبل از اینکه بفهمی نیاز داری، خودش resolve میکنه
چرا باید اهمیت بدیم ؟
1- کدی که مینویسی loosely coupled میشه (یعنی بخشها کمتر به هم وابستهان).
2- تستنویسی آسونتر میشه.
3- هر وقت خواستی یه سرویس رو عوض کنی (مثلاً از Stripe بری روی Paypal)، فقط کافیه binding رو تغییر بدی.
4- توی پروژههای بزرگ، این ویژگی واقعاً مثل اکسیژنه
5- برای پروژه های میکوسرویس خیلی کاربرد داره : )
@DevTwitter | <amirreza raadi/>
Service Container (یا همون IoC Container)
حالا Service Container چیه؟
فرض کن توی یه پروژه بزرگ، کلی سرویس داری: مثل PaymentService، UserRepository، Logger و ...
اگه بخوای همه رو با new بسازی و دستی بهم وصل کنی، خیلی زود پروژه میشه یه باتلاق
اینجاست که Service Container وارد میشه:
تو فقط میگی "من به یه PaymentService نیاز دارم"،
لاراول خودش میره اون رو میسازه و وابستگیهاش رو هم تزریق میکنه.
به این جادوی قشنگ میگن Inversion of Control: یعنی به جای اینکه خودت کنترل ساخت اشیا رو بگیری، این کارو به Container میسپری.
چی شد که از لاراول 8 تا 12 تکامل پیدا کرد؟
بیایم مثل یه خط زمان نگاه کنیم:
* لاراول 8 - Auto-Resolution: لاراول خودش میفهمید چی رو باید resolve کنه.
نیاز کمتر به ثبت دستی سرویسها.
* لاراول 9 - Contextual Binding: میتونستی بگی "وقتی فلان کلاس خواست PaymentGateway رو، بهش Stripe بده؛ ولی برای یه کلاس دیگه Paypal بده".
انعطاف بیشتر توی پروژههای پیچیده.
* لاراول 10 - تستپذیری قویتر: راحتتر میشد سرویسها رو mock کرد.
هماهنگی بیشتر با PHP 8 و type hintها.
* لاراول 11 و 12 - ساختار بوتاسترپ سادهتر شد (دیگه لازم نیست هر چیزی رو دستی تو ServiceProvider ثبت کنی).
Container سریعتر و هوشمندتره؛ خیلی وقتا قبل از اینکه بفهمی نیاز داری، خودش resolve میکنه
چرا باید اهمیت بدیم ؟
1- کدی که مینویسی loosely coupled میشه (یعنی بخشها کمتر به هم وابستهان).
2- تستنویسی آسونتر میشه.
3- هر وقت خواستی یه سرویس رو عوض کنی (مثلاً از Stripe بری روی Paypal)، فقط کافیه binding رو تغییر بدی.
4- توی پروژههای بزرگ، این ویژگی واقعاً مثل اکسیژنه
5- برای پروژه های میکوسرویس خیلی کاربرد داره : )
@DevTwitter | <amirreza raadi/>
👍23👎16❤10🔥1
انقلابی برای UIهای پیچیده!
Parallel Routing در Next.js
خیلی خلاصه بگم میاد همزمان چند روت (صفحه) رو در یک صفحه لود میکنه و چون نمیخوای به عنوان کامپوننت باشه و قابلیت یک روت رو در بخش های مختلف یک صفحه داشته باشی میای سراغ روت همزمان.
مثلا تو یک صفحه یک تب داری ، سایدبار داری و یک بخش چت داری میخوای با این بخش ها مثل یک روت رفتار کنی کاربر یک صفحه میبینه اما پشت کار هر بخش یک صفحه ی مجزاست یعنی قابلیت های روت رو بهت میده مثل :
1 URL مستقل برای هر بخش (Route Independence)
2 Data Fetching جدا برای هر Slot (SSR/SSG جداگانه)
3 Streaming جداگانه (React Server Components Streaming)
4 Error Boundaries مستقل
5 Loading States مستقل
6 Prefetching و Caching جداگانه
7 Optional Routes / Default UI برای هر بخش
8 Dynamic Parallel Routing (Slotهای داینامیک)
9 Separation of Concerns بهبود ساختار کد و ماژولار بودن
10 SEO بهتر برای بخشهای مستقل
2 بهترین جا برای استفاده:
داشبوردها، اپهای چت و ایمیل، UIهای چندبخشی، و اپلیکیشنهای SaaS با صفحههای پیچیده.
3 برای پروژههای ساده ، استفاده از Parallel Routing غیرضروریه و فقط کد رو پیچیده میکنه. همون کامپوننت بهتره.
یوز کیس های خیلی قشنگی براش میتونید دربیارید البته برای اپ های بزرگ که سرعت و پرفورمنس یو آی براشون خیلی مهمه مثل اپ های جامع . فروشگاه های چند وجهی و ...
اینجا مفصل تر توضیح داده شده
https://vrgl.ir/tyjGD
@DevTwitter | <Ahmad Safari/>
Parallel Routing در Next.js
خیلی خلاصه بگم میاد همزمان چند روت (صفحه) رو در یک صفحه لود میکنه و چون نمیخوای به عنوان کامپوننت باشه و قابلیت یک روت رو در بخش های مختلف یک صفحه داشته باشی میای سراغ روت همزمان.
مثلا تو یک صفحه یک تب داری ، سایدبار داری و یک بخش چت داری میخوای با این بخش ها مثل یک روت رفتار کنی کاربر یک صفحه میبینه اما پشت کار هر بخش یک صفحه ی مجزاست یعنی قابلیت های روت رو بهت میده مثل :
1 URL مستقل برای هر بخش (Route Independence)
2 Data Fetching جدا برای هر Slot (SSR/SSG جداگانه)
3 Streaming جداگانه (React Server Components Streaming)
4 Error Boundaries مستقل
5 Loading States مستقل
6 Prefetching و Caching جداگانه
7 Optional Routes / Default UI برای هر بخش
8 Dynamic Parallel Routing (Slotهای داینامیک)
9 Separation of Concerns بهبود ساختار کد و ماژولار بودن
10 SEO بهتر برای بخشهای مستقل
2 بهترین جا برای استفاده:
داشبوردها، اپهای چت و ایمیل، UIهای چندبخشی، و اپلیکیشنهای SaaS با صفحههای پیچیده.
3 برای پروژههای ساده ، استفاده از Parallel Routing غیرضروریه و فقط کد رو پیچیده میکنه. همون کامپوننت بهتره.
یوز کیس های خیلی قشنگی براش میتونید دربیارید البته برای اپ های بزرگ که سرعت و پرفورمنس یو آی براشون خیلی مهمه مثل اپ های جامع . فروشگاه های چند وجهی و ...
اینجا مفصل تر توضیح داده شده
https://vrgl.ir/tyjGD
@DevTwitter | <Ahmad Safari/>
👎19👍16❤6🔥4
کاهش حجم باندل نهایی پروژه ها با Vite
خیلی از پروژههای فرانتاند بعد از Build حجم بالایی دارن و این باعث کندی لود اولیه (TTFB و FCP بالا) میشه.
یکی از بهترین راهکارها برای حل این مشکل، استفاده از فشردهسازی (Compression) هست.
معرفی پکیج
پکیج vite-plugin-compression یک پلاگین ساده و کارآمد برای Vite هست که فایلهای خروجی پروژه رو با الگوریتمهای مختلف فشرده میکنه:
gzip
brotli
deflate
مزایا
کاهش حجم فایلهای استاتیک (CSS, JS, HTML)
بهبود سرعت بارگذاری صفحات (Load Time)
سازگاری با اکثر مرورگرها
پیکربندی ساده
با فعال کردن این پلاگین میشه تا ۶۰٪ کاهش حجم فایلها داشت
@DevTwitter | <Mohsen Karimvand/>
خیلی از پروژههای فرانتاند بعد از Build حجم بالایی دارن و این باعث کندی لود اولیه (TTFB و FCP بالا) میشه.
یکی از بهترین راهکارها برای حل این مشکل، استفاده از فشردهسازی (Compression) هست.
معرفی پکیج
پکیج vite-plugin-compression یک پلاگین ساده و کارآمد برای Vite هست که فایلهای خروجی پروژه رو با الگوریتمهای مختلف فشرده میکنه:
gzip
brotli
deflate
مزایا
کاهش حجم فایلهای استاتیک (CSS, JS, HTML)
بهبود سرعت بارگذاری صفحات (Load Time)
سازگاری با اکثر مرورگرها
پیکربندی ساده
با فعال کردن این پلاگین میشه تا ۶۰٪ کاهش حجم فایلها داشت
@DevTwitter | <Mohsen Karimvand/>
👍29❤6👎2🔥1
فکر کنم هر کسی با خوندن این مقاله کاملا داکر رو درک نه ! به زبان خیلی خیلی ساده !
لینک مقاله
@DevTwitter | <Mohammad Nasiri/>
لینک مقاله
@DevTwitter | <Mohammad Nasiri/>
👎21❤11👍2
اگه شما هم مثل من تو پایتون با ORMها برای مدیریت دیتابیس سروکار دارید، حتما گاهی اوقات با یه سری محدودیت ها و کاهش سرعت تو کتابخونه هایی مثل SQLAlchemy و Turtoise مواجه شدید...
اما Ormax همه معادلات رو تغییر داده، Ormax یه ORM سبک، سریع و جدید و خیلی قدرتمنده که تمام نیازهای ما رو برای مدیریت یه دیتابیس SQL تو پایتون برآورده میکنه
در واقع مقایسه Ormax با SQLAlchemy مثل مقایسه Django و FastAPI میمونه، همینقدر خلاصه و ساده.
پیشنهاد میکنم حتما امتحانش کنین
https://github.com/shayanheidari01/ormax
https://ormax.shayan-heidari.ir
@DevTwitter | <ShtyhonX/>
اما Ormax همه معادلات رو تغییر داده، Ormax یه ORM سبک، سریع و جدید و خیلی قدرتمنده که تمام نیازهای ما رو برای مدیریت یه دیتابیس SQL تو پایتون برآورده میکنه
در واقع مقایسه Ormax با SQLAlchemy مثل مقایسه Django و FastAPI میمونه، همینقدر خلاصه و ساده.
پیشنهاد میکنم حتما امتحانش کنین
https://github.com/shayanheidari01/ormax
https://ormax.shayan-heidari.ir
@DevTwitter | <ShtyhonX/>
1👎30🔥12❤3
خسته کننده بود اما ارزشش داشت :)))
کتابخانهای برای ایجاد و نمایش جدول در محیط کنسول با داتنت،
میتونه برای آرایه یک و دوبعدی و انواع لیست جدول نمایش بده و اگه خواستین فیلد فیلد مرتب کنه
منتظر استارهای زیباتون هستم
https://github.com/AmirHosseinOstad/Morattab
@DevTwitter | <Amir Hossein/>
کتابخانهای برای ایجاد و نمایش جدول در محیط کنسول با داتنت،
میتونه برای آرایه یک و دوبعدی و انواع لیست جدول نمایش بده و اگه خواستین فیلد فیلد مرتب کنه
منتظر استارهای زیباتون هستم
https://github.com/AmirHosseinOstad/Morattab
@DevTwitter | <Amir Hossein/>
🔥25👍6❤4👎3
Open Builder
یک پروژه متن باز رایگان برای ایجاد Landing های حرفه ای HTML با کشیدن و رها کردن (Drag and Drop) هست که دارای کلی کامپوننت زیبا و ریسپانسیو هست که می توانید به آسانی و در کمترین زمان صفحات دلخواه خود را توسعه دهید. یا اگر توسعه دهنده هستید می توانید یک سرویس بزرگتر راه اندازی کنید و کامپوننت های خودتون رو توسعه دهید.
مخزن پروژه:
https://github.com/code3-dev/open-builder
دمو:
https://openbuilder.vercel.app
@DevTwitter | <Hossein Pira/>
یک پروژه متن باز رایگان برای ایجاد Landing های حرفه ای HTML با کشیدن و رها کردن (Drag and Drop) هست که دارای کلی کامپوننت زیبا و ریسپانسیو هست که می توانید به آسانی و در کمترین زمان صفحات دلخواه خود را توسعه دهید. یا اگر توسعه دهنده هستید می توانید یک سرویس بزرگتر راه اندازی کنید و کامپوننت های خودتون رو توسعه دهید.
مخزن پروژه:
https://github.com/code3-dev/open-builder
دمو:
https://openbuilder.vercel.app
@DevTwitter | <Hossein Pira/>
👍15❤8🔥5👎1
وقتی با ترمینال آشنا شدم، اول زیاد خوشم نمیاومد و نسبت بهش مقاومت میکردم...
اما یکم که ور رفتم با خودم گفتم گور بابای GUi، کنسول عشقه !
این شد که تصمیم گرفتم با c# یه دفتر کار روزمره (to-do list) تحت کنسول بنویسم، با رنگبندی جذاب، جدول مرتب و ...
آدرس ریپو:
https://github.com/AmirHosseinOstad/fehrestoonak
@DevTwitter | <Amir Hossein/>
اما یکم که ور رفتم با خودم گفتم گور بابای GUi، کنسول عشقه !
این شد که تصمیم گرفتم با c# یه دفتر کار روزمره (to-do list) تحت کنسول بنویسم، با رنگبندی جذاب، جدول مرتب و ...
آدرس ریپو:
https://github.com/AmirHosseinOstad/fehrestoonak
@DevTwitter | <Amir Hossein/>
👎69👍34🔥6❤5
DevTwitter | توییت برنامه نویسی
رفقا برنامهای چیزی برای اندروید سراغ دارید که بشه توش کارها رو track کرد؟ پیگیری کنه وضعیت کارها رو هی یادآوری کنه که امروز این کارو نکردی، از فلان چیز چه خبر، امروز یه ساعت وقتتو گذاشتی و این حرفا سینک هم بشه
لیست اپهایی که مناسب آدمای تنبله برای این که کاراشونو پیگیری کنن و چیزی رو یادشون نره:
- Tick Tick × 12
- Habitica × 7
- To-Do Focus × 3
- Sectograph × 2
- Todoist × 2
- Logsec × 2
اعداد جلوشون تعداد دفعاتی هست که پیشنهاد شده
@DevTwitter
- Tick Tick × 12
- Habitica × 7
- To-Do Focus × 3
- Sectograph × 2
- Todoist × 2
- Logsec × 2
اعداد جلوشون تعداد دفعاتی هست که پیشنهاد شده
@DevTwitter
🔥45❤10👍8