گولنگ شیگرا هست یا نه؟
تو یه سری آگهیهای شغلی دیدم که جزو نیازمندیها، پیادهسازی OOP در گولنگ ذکر شده. یه سری جاها هم نوشتن پیادهسازی مفاهیم OOP در گولنگ که خب منطقیتر به نظر میرسه.
برای جواب دادن به این سوال، اول ببینیم اصلاً OOP چیه؟
برنامهنویسی شیگرا یه پارادایم برنامهنویسیه که بر اساس یه مفهوم به اسم شی (Object) کار میکنه. هر شی یه سری دیتا داره و رفتارش رو هم درون خودش کپسوله میکنه.
چهار اصل مهم OOP هم ایناست:
- Encapsulation
- Abstraction
- Inheritance
- Polymorphism
حالا این اصول از کجا اومدن؟
آیا فقط مخصوص OOP هستن؟
نه، اینا جز اصول پایهای طراحی نرمافزارن و توی بقیه پارادایمها مثل Functional Programming هم وجود دارن. OOP اومده این اصول رو به سبک خودش پیادهسازی کرده.
حالا بریم سراغ گولنگ...
گولنگ بعضی از این مفاهیم رو با سبک و روش خودش پیادهسازی کرده، مثلاً Encapsulation رو از طریق Package-level Visibility داره، یا Polymorphism رو با Interfaceها پیادهسازی کرده. اما بعضی چیزا رو هم عمداً حذف کرده، مثل Class-based Inheritance، چون فلسفه Go بیشتر روی سادگی و ترکیبپذیری (Composition) تمرکز داره.
مشکل کجاست؟
خیلی جاها میان گولنگ رو مثل یه زبان OOP استفاده میکنن که بعضی وقتا تبدیل به Anti-pattern میشه. مثلاً پیادهسازی Factory Pattern به روش کلاسیک OOP یا Singleton به سبک جاوا و سیشارپ توی Go باعث پیچیدگی اضافی میشه. اینجور کدها معمولاً کار میکنن، ولی خوانایی و سادگی Go رو از بین میبرن.
پس اگه توی آگهیها دیدین که نوشتن پیادهسازی OOP در گولنگ، بهتره بیشتر تحقیق کنین که دقیقاً منظورشون چیه. Go زبان شیگرا به سبک کلاسیک نیست، اما مفاهیم OOP رو به روش خودش داره.
@DevTwitter | <Ali Farhadnia/>
تو یه سری آگهیهای شغلی دیدم که جزو نیازمندیها، پیادهسازی OOP در گولنگ ذکر شده. یه سری جاها هم نوشتن پیادهسازی مفاهیم OOP در گولنگ که خب منطقیتر به نظر میرسه.
برای جواب دادن به این سوال، اول ببینیم اصلاً OOP چیه؟
برنامهنویسی شیگرا یه پارادایم برنامهنویسیه که بر اساس یه مفهوم به اسم شی (Object) کار میکنه. هر شی یه سری دیتا داره و رفتارش رو هم درون خودش کپسوله میکنه.
چهار اصل مهم OOP هم ایناست:
- Encapsulation
- Abstraction
- Inheritance
- Polymorphism
حالا این اصول از کجا اومدن؟
آیا فقط مخصوص OOP هستن؟
نه، اینا جز اصول پایهای طراحی نرمافزارن و توی بقیه پارادایمها مثل Functional Programming هم وجود دارن. OOP اومده این اصول رو به سبک خودش پیادهسازی کرده.
حالا بریم سراغ گولنگ...
گولنگ بعضی از این مفاهیم رو با سبک و روش خودش پیادهسازی کرده، مثلاً Encapsulation رو از طریق Package-level Visibility داره، یا Polymorphism رو با Interfaceها پیادهسازی کرده. اما بعضی چیزا رو هم عمداً حذف کرده، مثل Class-based Inheritance، چون فلسفه Go بیشتر روی سادگی و ترکیبپذیری (Composition) تمرکز داره.
مشکل کجاست؟
خیلی جاها میان گولنگ رو مثل یه زبان OOP استفاده میکنن که بعضی وقتا تبدیل به Anti-pattern میشه. مثلاً پیادهسازی Factory Pattern به روش کلاسیک OOP یا Singleton به سبک جاوا و سیشارپ توی Go باعث پیچیدگی اضافی میشه. اینجور کدها معمولاً کار میکنن، ولی خوانایی و سادگی Go رو از بین میبرن.
پس اگه توی آگهیها دیدین که نوشتن پیادهسازی OOP در گولنگ، بهتره بیشتر تحقیق کنین که دقیقاً منظورشون چیه. Go زبان شیگرا به سبک کلاسیک نیست، اما مفاهیم OOP رو به روش خودش داره.
@DevTwitter | <Ali Farhadnia/>
🔥47👍32👎1
وقتی Cache بیشتر از این که کمک کنه، دردسر می سازه!
چند وقت پیش روی یه پروژه بزرگ کار می کردم که توش Redis برای کشینگ استفاده می کردیم. همه چیز خوب پیش می رفت تا اینکه یه روز، یه تغییر ظاهرا بی ضرر تو کد باعث شد کش درست Invalid نشه. نتیجه چی شد؟ کاربرا داده های قدیمی رو می دیدن، بعضیا نمی تونستن اطلاعاتشون رو آپدیت کنن، و پشتیبانی حسابی شلوغ شد!
کش توزیع شده یه شمشیر دولبه ست!
از یه طرف، می تونه فشار روی دیتابیس رو کم کنه و سرعت پاسخ گویی رو بالا ببره، ولی از طرف دیگه، اگه درست مدیریت نشه، مشکلاتی مثل:
مشکل Cache Inconsistency – وقتی دیتا تو کش و دیتابیس ناهماهنگ می شه و بعضی کاربرا داده های قدیمی می بینن.
مشکل Cache Stampede – همه درخواست ها همزمان به کش می رسن و فشار زیادی ایجاد می کنن.
مشکل TTL Misconfiguration – تنظیم اشتباه زمان اعتبار کش که باعث می شه یا دیتا زودتر از حد لازم حذف بشه یا تا مدت زیادی به روز نشه.
اون تجربه یه درس مهم بهم داد: کش چیزی نیست که فقط یه بار تنظیمش کنیم و فراموشش کنیم. باید یه استراتژی کش هوشمند داشته باشیم که همیشه بهینه بمونه.
@DevTwitter | <Hamed Farzanefar/>
چند وقت پیش روی یه پروژه بزرگ کار می کردم که توش Redis برای کشینگ استفاده می کردیم. همه چیز خوب پیش می رفت تا اینکه یه روز، یه تغییر ظاهرا بی ضرر تو کد باعث شد کش درست Invalid نشه. نتیجه چی شد؟ کاربرا داده های قدیمی رو می دیدن، بعضیا نمی تونستن اطلاعاتشون رو آپدیت کنن، و پشتیبانی حسابی شلوغ شد!
کش توزیع شده یه شمشیر دولبه ست!
از یه طرف، می تونه فشار روی دیتابیس رو کم کنه و سرعت پاسخ گویی رو بالا ببره، ولی از طرف دیگه، اگه درست مدیریت نشه، مشکلاتی مثل:
مشکل Cache Inconsistency – وقتی دیتا تو کش و دیتابیس ناهماهنگ می شه و بعضی کاربرا داده های قدیمی می بینن.
مشکل Cache Stampede – همه درخواست ها همزمان به کش می رسن و فشار زیادی ایجاد می کنن.
مشکل TTL Misconfiguration – تنظیم اشتباه زمان اعتبار کش که باعث می شه یا دیتا زودتر از حد لازم حذف بشه یا تا مدت زیادی به روز نشه.
اون تجربه یه درس مهم بهم داد: کش چیزی نیست که فقط یه بار تنظیمش کنیم و فراموشش کنیم. باید یه استراتژی کش هوشمند داشته باشیم که همیشه بهینه بمونه.
@DevTwitter | <Hamed Farzanefar/>
👍74❤1👎1
تو تلگرام برای گرفتن api_id و api_hash مشکل داریم و فقط پیام ERROR رو نشون میده
اگر کسی میدونه مسئله کجاست پیام بده لطفا
ویرایش:
راه حلهای زیادی ارائه شد و اکثرشون رو تست کردم و جواب نگرفتم، اما یکی از دوستان گفتن با warp امتحان کن مشکلت حل میشه.
و همین مشکلم رو حل کرد.
(توضیح فنی هم این بود که شماره با آی پی یکی نباشه ارور میده)
گفتم شاید شما هم بخواید استفاده کنید.
اگر کسی میدونه مسئله کجاست پیام بده لطفا
ویرایش:
راه حلهای زیادی ارائه شد و اکثرشون رو تست کردم و جواب نگرفتم، اما یکی از دوستان گفتن با warp امتحان کن مشکلت حل میشه.
و همین مشکلم رو حل کرد.
(توضیح فنی هم این بود که شماره با آی پی یکی نباشه ارور میده)
گفتم شاید شما هم بخواید استفاده کنید.
2👍60❤8👎3
حدود یک ماه پیش، پس از انتشار نسخه اولیه مدل تقویم شمسی در متابیس، به یکباره لینک آن همه جا پخش شد و تعداد زیادی از کاربران متابیس از آن استفاده کردند و بازخوردهای بسیار خوبی دادند. حتی اکانت رسمی متابیس هم این ابزار را به کاربرانی که به دنبال راهکاری برای تحلیل دادهها بر اساس تاریخ شمسی بودند معرفی کرد.
حالا، بر اساس این بازخوردها و نیازهای کسبوکارهای ایرانی، نسخه جدید این مدل را توسعه دادم که شامل بهبودهای قابلتوجهی است:
پشتیبانی از چندین دیتابیس – در این نسخه، ساختار مدل بازطراحی شده تا امکان پشتیبانی از چندین دیتابیس فراهم شود. در حال حاضر از PostgreSQL پشتیبانی میکند و نسخهای برای MySQL و MariaDB نیز به زودی منتشر خواهد شد.
بهبود دقت تحلیلهای فصلی – روش محاسبهی فصلها بر اساس ماههای شمسی بازبینی شده تا گزارشهای فصلی سادهتر، دقیقتر و مطابق با واقعیت کسبوکارهای ایرانی باشد.
اصلاح مرزهای هفته شمسی – اکنون هفتههای شمسی در شرایط مختلف بهطور دقیق از شنبه شروع میشوند که دقت گزارشهای هفتگی را بهبود میبخشد.
این مدل همچنان به شما امکان میدهد تا تاریخ میلادی را به شمسی تبدیل کنید و تحلیلهای خود را بر اساس سال، ماه، هفته و فصل شمسی انجام دهید.
نسخه جدید در گیتهاب منتشر شده است و نسخهای که از MySQL و MariaDB پشتیبانی کند، به زودی در دسترس خواهد بود.
لینک پروژه:
https://github.com/navidb/metabase-persian-calendar
https://github.com/navidb/metabase-persian-calendar/blob/main/CHANGELOG.md
@DevTwitter | <Navid Behrangi/>
حالا، بر اساس این بازخوردها و نیازهای کسبوکارهای ایرانی، نسخه جدید این مدل را توسعه دادم که شامل بهبودهای قابلتوجهی است:
پشتیبانی از چندین دیتابیس – در این نسخه، ساختار مدل بازطراحی شده تا امکان پشتیبانی از چندین دیتابیس فراهم شود. در حال حاضر از PostgreSQL پشتیبانی میکند و نسخهای برای MySQL و MariaDB نیز به زودی منتشر خواهد شد.
بهبود دقت تحلیلهای فصلی – روش محاسبهی فصلها بر اساس ماههای شمسی بازبینی شده تا گزارشهای فصلی سادهتر، دقیقتر و مطابق با واقعیت کسبوکارهای ایرانی باشد.
اصلاح مرزهای هفته شمسی – اکنون هفتههای شمسی در شرایط مختلف بهطور دقیق از شنبه شروع میشوند که دقت گزارشهای هفتگی را بهبود میبخشد.
این مدل همچنان به شما امکان میدهد تا تاریخ میلادی را به شمسی تبدیل کنید و تحلیلهای خود را بر اساس سال، ماه، هفته و فصل شمسی انجام دهید.
نسخه جدید در گیتهاب منتشر شده است و نسخهای که از MySQL و MariaDB پشتیبانی کند، به زودی در دسترس خواهد بود.
لینک پروژه:
https://github.com/navidb/metabase-persian-calendar
https://github.com/navidb/metabase-persian-calendar/blob/main/CHANGELOG.md
@DevTwitter | <Navid Behrangi/>
👍23🔥5
اگه دنبال یه نمونه عملی و کاربردی برای یادگیری Vue 3، Tailwind 4 و کار با API هستی، این پروژه میتونه برات مفید باشه.
یه موتور جستوجوی تصاویر متصل به Unsplash API که با ساختاری تمیز و اصولی پیادهسازی شده. این پروژه هم برای تمرین و یادگیری مناسبه و هم میتونی ازش توی پروژههای واقعی الگو بگیری.
توی این پروژه از چی استفاده کردم؟
- Vue 3 & Composition API برای ساختار بهتر و قابل نگهداری
- Tailwind 4 برای طراحی سبک، مدرن و سریع
- اتصال به Unsplash API برای دریافت تصاویر
- Pinia برای مدیریت تاریخچه جستجو
- اسکرول بینهایت برای بارگذاری تصاویر به شکل بهینه
https://github.com/esmaeilbahrani/unsplash-gallery
@DevTwitter | <Esmaeil Bahrani Fard/>
یه موتور جستوجوی تصاویر متصل به Unsplash API که با ساختاری تمیز و اصولی پیادهسازی شده. این پروژه هم برای تمرین و یادگیری مناسبه و هم میتونی ازش توی پروژههای واقعی الگو بگیری.
توی این پروژه از چی استفاده کردم؟
- Vue 3 & Composition API برای ساختار بهتر و قابل نگهداری
- Tailwind 4 برای طراحی سبک، مدرن و سریع
- اتصال به Unsplash API برای دریافت تصاویر
- Pinia برای مدیریت تاریخچه جستجو
- اسکرول بینهایت برای بارگذاری تصاویر به شکل بهینه
https://github.com/esmaeilbahrani/unsplash-gallery
@DevTwitter | <Esmaeil Bahrani Fard/>
👍24❤7🔥3
یه برنامه نوشتم برای مدیریت اکانتهای تلگرام. اگر اکانتهای زیادی دارید و میخواید مثلاً توی برنامه دیگه nodejs یا python استفاده کنید یا به شخص دیگری دسترسی بدید. اکانتها رو اضافه میکنید و فایل JSON تولید شده قابل انتقاله.
اوپنسورس با مجوز GPL3 اینجاست:
https://github.com/NabiKAZ/telegram-login-manager
@DevTwitter | <Nabi/>
اوپنسورس با مجوز GPL3 اینجاست:
https://github.com/NabiKAZ/telegram-login-manager
@DevTwitter | <Nabi/>
👍42👎4
آیا معماری Serverless رو میشناسید؟
فرض کنید که برنامه ها رو بدون دغدغه ای در مورد سرور ها اجرا کنید و درگیر نگهداری، مقیاس پذیری و تامین منابع نشوید.
در معماری Serverless تامین کننده ابری مثلا AWS Lambda زیرساخت را مدیریت می کند و ما بر روی نوشتن کد تمرکز می کنید.
چه مزایایی دارد؟
۱. مقیاس پذیری خودکار - با افزایش ترافیک منابع بیشتری استفاده میکند.
۲. پرداخت به ازای مصرف - به جای هزینه سرور کامل فقط هزینه زمان اجرا را میدهیم.
۳. سریع تر deploy میشود.
۴. رویداد محور: با تغییرات دیتابیس یا رویداد ها مثلا ثبت نام کاربر توابع اجرا میشوند.
۵. منابع بیکار نیستند: نیازی نیست که سرور با ظرفیت بالا از قبل بیکار و منتظر درخواست کاربر باشند.
مثال واقعی:
ما در شرکتمان برای پردازش ویدیوهایی که کاربر آپلود میکرد و اضافه کردن watermark از AWS Lambda استفاده کردیم.
قبل از این نیاز به یک CPU قوی داشتیم که در اکثر اوقات بیکار بود اما با AWS Lambda فقط در زمانی که کاربر ویدیو رو آپلود می کند تابع اجرا میشود و خروجی را در S3 ذخیره میکند.
با AWS Lambda هم هزینه سرور کاهش پیدا کرد و هم هیچ منبعی بیکار نماند.
اما همیشه Serverless بهترین انتخاب نیست
معایبی هم دارد
۱. شروع سرد: اگر تابع چند وقت است که اجرا نشده است مدتی طول میکشد تا اجرا شود.
۲. زمان اجرای محدود: در AWS هر تابع بیشتر از ۱۵ دقیقه نمی تواند اجرا شود.
۳. محدود شدن به شرکت خاص: کد AWS با Azure و GCP فرق دارد و اگر مهاجرت کنیم نیاز است کد ها رو از نو بنویسیم.
۴. نداشتن State: اگر نیاز به فضای ذخیره سازی in-memory مانا داریم، این معماری بهترین انتخاب نیست.
برای پروسه های long running و high performance computing و persistent connections معماری های سنتی یا معماری های کانتینرایز شده مناسب تر هستند.
برای کارهای رویداد محور و بهینه سازی هزینه و برنامه های مقیاس پذیر AWS Lambda بسیار مناسب است.
@DevTwitter | <Pouria Jahandideh/>
فرض کنید که برنامه ها رو بدون دغدغه ای در مورد سرور ها اجرا کنید و درگیر نگهداری، مقیاس پذیری و تامین منابع نشوید.
در معماری Serverless تامین کننده ابری مثلا AWS Lambda زیرساخت را مدیریت می کند و ما بر روی نوشتن کد تمرکز می کنید.
چه مزایایی دارد؟
۱. مقیاس پذیری خودکار - با افزایش ترافیک منابع بیشتری استفاده میکند.
۲. پرداخت به ازای مصرف - به جای هزینه سرور کامل فقط هزینه زمان اجرا را میدهیم.
۳. سریع تر deploy میشود.
۴. رویداد محور: با تغییرات دیتابیس یا رویداد ها مثلا ثبت نام کاربر توابع اجرا میشوند.
۵. منابع بیکار نیستند: نیازی نیست که سرور با ظرفیت بالا از قبل بیکار و منتظر درخواست کاربر باشند.
مثال واقعی:
ما در شرکتمان برای پردازش ویدیوهایی که کاربر آپلود میکرد و اضافه کردن watermark از AWS Lambda استفاده کردیم.
قبل از این نیاز به یک CPU قوی داشتیم که در اکثر اوقات بیکار بود اما با AWS Lambda فقط در زمانی که کاربر ویدیو رو آپلود می کند تابع اجرا میشود و خروجی را در S3 ذخیره میکند.
با AWS Lambda هم هزینه سرور کاهش پیدا کرد و هم هیچ منبعی بیکار نماند.
اما همیشه Serverless بهترین انتخاب نیست
معایبی هم دارد
۱. شروع سرد: اگر تابع چند وقت است که اجرا نشده است مدتی طول میکشد تا اجرا شود.
۲. زمان اجرای محدود: در AWS هر تابع بیشتر از ۱۵ دقیقه نمی تواند اجرا شود.
۳. محدود شدن به شرکت خاص: کد AWS با Azure و GCP فرق دارد و اگر مهاجرت کنیم نیاز است کد ها رو از نو بنویسیم.
۴. نداشتن State: اگر نیاز به فضای ذخیره سازی in-memory مانا داریم، این معماری بهترین انتخاب نیست.
برای پروسه های long running و high performance computing و persistent connections معماری های سنتی یا معماری های کانتینرایز شده مناسب تر هستند.
برای کارهای رویداد محور و بهینه سازی هزینه و برنامه های مقیاس پذیر AWS Lambda بسیار مناسب است.
@DevTwitter | <Pouria Jahandideh/>
👍45
سلام به همگی
بفرموده داداشم سباستین متد at توی PHPUnit ورژن 9 منسوخ شده و توی ورژن 10 کاملا حذف شد.
اگه توی تست هاتون از این متد استفاده کردین، میتونین با Rule جدیدی که برای rector-phpunit نوشتم، به صورت اتوماتیک این ریفکتور رو انجام بدین
لینک مشارکت:
https://github.com/rectorphp/rector-phpunit/pull/454
لینک منسوخ شدن متد at:
https://github.com/sebastianbergmann/phpunit/issues/4297
@DevTwitter | <Mohammad Mortazavi/>
بفرموده داداشم سباستین متد at توی PHPUnit ورژن 9 منسوخ شده و توی ورژن 10 کاملا حذف شد.
اگه توی تست هاتون از این متد استفاده کردین، میتونین با Rule جدیدی که برای rector-phpunit نوشتم، به صورت اتوماتیک این ریفکتور رو انجام بدین
لینک مشارکت:
https://github.com/rectorphp/rector-phpunit/pull/454
لینک منسوخ شدن متد at:
https://github.com/sebastianbergmann/phpunit/issues/4297
@DevTwitter | <Mohammad Mortazavi/>
👍18🔥4❤1
بالاخره deepseek باعث شد بشینم پای این پروژهم و به جایی برسونم که قابل انتشار باشه.
به زودی منتشرش میکنم. یه رابط کاربری ساده و سبک برای کار با ollama برای اونا که میخوان مدل زبانی روی کامپیوتر خودشون و آفلاین اجرا کنن :)
البته سورسش الان روی گیتهاب هست:
https://github.com/Aseman-Land/qllm
@DevTwitter | <Bardia/>
به زودی منتشرش میکنم. یه رابط کاربری ساده و سبک برای کار با ollama برای اونا که میخوان مدل زبانی روی کامپیوتر خودشون و آفلاین اجرا کنن :)
البته سورسش الان روی گیتهاب هست:
https://github.com/Aseman-Land/qllm
@DevTwitter | <Bardia/>
👍69❤6🔥6👎1
توی این ریپازیتوری یک دیتا ست درباره NBA رو تحلیل کردم و سورس اش رو توی گیت هاب براتون گذاشتم، اگر تحلیل گر داده / دارید یاد میگیرید، میتونید از سورس اش استفاده کنید
https://github.com/MisaghMomeniB/NBA-Games-Analysis
@DevTwitter | <Misagh Momeni Bashusqeh/>
https://github.com/MisaghMomeniB/NBA-Games-Analysis
@DevTwitter | <Misagh Momeni Bashusqeh/>
👍18👎2
یه ابزار خیلی خفن پیدا کردم واسه داکیومنت کردن API توی لاراول به اسم scramble
فقط پکیج رو نصب کردم و دیدم خودش تمام اندپوینت ها٫ ریکوئست ها و ریسپانس ها رو از توی ماژول ها شناخت و توی یه ui شیک واسم آماده قرار داد
https://github.com/dedoc/scramble
@DevTwitter | <Amir Vahedi/>
فقط پکیج رو نصب کردم و دیدم خودش تمام اندپوینت ها٫ ریکوئست ها و ریسپانس ها رو از توی ماژول ها شناخت و توی یه ui شیک واسم آماده قرار داد
https://github.com/dedoc/scramble
@DevTwitter | <Amir Vahedi/>
👍31
خبر خوب برای علاقهمندان به Go و ستارهشناسی و نجوم! کتابخانه jpleph را معرفی میکنم - یک کتابخانه Go خالص برای کار با فایلهای باینری JPL DE ephemerides!
https://github.com/mshafiee/jpleph
پکیج jpleph به شما اجازه میده تا به سادگی موقعیت و سرعت اجرام منظومه شمسی رو با دقت بالا از فایلهای JPL DE بخونید و محاسبه کنید. مهم نیست سیستم عاملتون چیه، این کتابخانه به صورت خودکار endianness رو تشخیص میده و کار میکنه!
چرا JPL DE؟ چون برای محاسبات نجومی دقیق، ماموریتهای فضایی و تحقیقات علمی بینظیره! دقتش از سریهای تحلیلی خیلی بیشتره و با آخرین دادههای رصدی JPL آپدیت میشه. jpleph این دقت رو به پروژههای Go شما میاره!
ویژگیهای کلیدی jpleph:
پیادهسازی. کامل با Go
عملکرد عالی (همسطح C/C++)
سازگاری با پلتفرمهای مختلف (کراس-پلتفرم)
یکپارچگی آسان با پروژههای Go
مدیریت خطای قوی
اگر به astronomy، space و Go علاقه دارید، حتماً به jpleph یه نگاهی بندازید!
به توسعه کتابخانه کمک کنید، issue گزارش بدید یا در پروژههاتون ازش استفاده کنید. GPLv2 متنباز و رایگان!
@DevTwitter | <Mohammad Shafiee/>
https://github.com/mshafiee/jpleph
پکیج jpleph به شما اجازه میده تا به سادگی موقعیت و سرعت اجرام منظومه شمسی رو با دقت بالا از فایلهای JPL DE بخونید و محاسبه کنید. مهم نیست سیستم عاملتون چیه، این کتابخانه به صورت خودکار endianness رو تشخیص میده و کار میکنه!
چرا JPL DE؟ چون برای محاسبات نجومی دقیق، ماموریتهای فضایی و تحقیقات علمی بینظیره! دقتش از سریهای تحلیلی خیلی بیشتره و با آخرین دادههای رصدی JPL آپدیت میشه. jpleph این دقت رو به پروژههای Go شما میاره!
ویژگیهای کلیدی jpleph:
پیادهسازی. کامل با Go
عملکرد عالی (همسطح C/C++)
سازگاری با پلتفرمهای مختلف (کراس-پلتفرم)
یکپارچگی آسان با پروژههای Go
مدیریت خطای قوی
اگر به astronomy، space و Go علاقه دارید، حتماً به jpleph یه نگاهی بندازید!
به توسعه کتابخانه کمک کنید، issue گزارش بدید یا در پروژههاتون ازش استفاده کنید. GPLv2 متنباز و رایگان!
@DevTwitter | <Mohammad Shafiee/>
👍36👎3❤1
در معماری سیستمهای مدرن، یکی از بهترین رویکردها برای توسعه پروژههای بزرگ، Microservices هست. در این روش، هر بخش از سیستم بهعنوان یک سرویس کاملاً مستقل توسعه داده میشه، به این معنی که هر سرویس میتونه بهصورت جداگانه دیپلوی، مقیاسپذیر و مدیریت بشه. این کار باعث میشه که تیمهای مختلف بتونن بهصورت موازی روی بخشهای مختلف کار کنن، بدون اینکه وابستگی زیادی به بقیه سیستم داشته باشن.
اما در لایه فرانتاند، اغلب همچنان یک Monolithic Frontend وجود داره که همه ماژولها رو در خودش نگه میداره. این ساختار، چالشهایی مثل زمان بیلد طولانی، عدم استقلال تیمهای توسعه، و سختی در استقرار و بهروزرسانی بخشهای مختلف رو ایجاد میکنه.
برای حل این مشکلات، در پروژه اخیرم تصمیم گرفتیم فرانتاند رو هم بهصورت Micro Frontend پیادهسازی کنیم. برای این کار از Module Federation در Vite استفاده کردیم تا هر بخش از سیستم مالی (مثل حسابداری، انبارداری، فروش و ...) بهصورت مستقل توسعه داده بشه، اما همچنان تجربه کاربری یکپارچهای داشته باشیم.
تقسیمبندی سرویسها بر اساس ماهیت
یکی از نکات کلیدی در معماری Micro Frontend این بود که سرویسها رو بر اساس ماهیت کارکردی تقسیم کردیم:
- هر ماژول یا سرویس فقط شامل منطق تجاری و کامپوننتهای مخصوص خودش بود
- یک سرویس پایه (Base Service) ایجاد کردیم که شامل تمام وابستگیهای مشترک مثل کتابخانههای UI، مدیریت وضعیت، درخواستهای API و ... بود
- سایر سرویسها از Base Service استفاده میکردن و نیازی به نصب مجدد پکیجهای مشترک نداشتن
مزایای این روش؟
حجم بیلد بهشدت کاهش پیدا کرد چون وابستگیهای مشترک فقط یکبار لود میشدن
لود صفحات سریعتر شد چون هر سرویس فقط ماژولهای موردنیاز خودش رو داشت
مقیاسپذیری افزایش یافت چون هر بخش میتونست جداگانه توسعه و استقرار پیدا کنه
مدیریت صحیح Dynamic Import و Caching
یکی از چالشهای Module Federation، مدیریت کش و Dynamic Import هست. اگر این بخش درست پیادهسازی نشه، ممکنه باعث لود غیرضروری و افت عملکرد بشه. برای بهینهسازی این فرآیند:
- ماژولها رو بهصورت Remote بارگذاری کردیم تا فقط زمانی که لازم هست، دریافت بشن
- کشینگ هوشمند رو پیادهسازی کردیم تا ماژولهای یکبار دانلود شده، دوباره بارگیری نشن
- و Preloading و Lazy Loading رو بهینهسازی کردیم تا تجربه کاربری بهتری ایجاد بشه
پیادهسازی یک کانتینر مرکزی برای مدیریت سرویسها
برای مدیریت ماژولهای مختلف، یک Container نوشتیم که وظیفه داره:
- تمام سرویسهای Remote رو دریافت و مدیریت کنه
- هر سرویس رو در مسیر مشخص خودش رندر کنه
- روتینگ بین ماژولها رو بهینه کنه تا ناوبری بدون مشکل انجام بشه
در نتیجه کاربران بدون اینکه متوجه بشن، بین سرویسهای مختلف جابهجا میشدن، درحالیکه هرکدوم بهصورت مستقل توسعه داده شده بودن.
نتیجه نهایی؟
- بیلد سبکتر و زمان دیپلوی کوتاهتر
- عملکرد سریعتر و تجربه کاربری بهتر
- مقیاسپذیری بالا و توسعه ماژولار
- امتیاز بهتر در Lighthouse و کاهش چشمگیر زمان بارگذاری
@DevTwitter | <Sajad Shojaie/>
اما در لایه فرانتاند، اغلب همچنان یک Monolithic Frontend وجود داره که همه ماژولها رو در خودش نگه میداره. این ساختار، چالشهایی مثل زمان بیلد طولانی، عدم استقلال تیمهای توسعه، و سختی در استقرار و بهروزرسانی بخشهای مختلف رو ایجاد میکنه.
برای حل این مشکلات، در پروژه اخیرم تصمیم گرفتیم فرانتاند رو هم بهصورت Micro Frontend پیادهسازی کنیم. برای این کار از Module Federation در Vite استفاده کردیم تا هر بخش از سیستم مالی (مثل حسابداری، انبارداری، فروش و ...) بهصورت مستقل توسعه داده بشه، اما همچنان تجربه کاربری یکپارچهای داشته باشیم.
تقسیمبندی سرویسها بر اساس ماهیت
یکی از نکات کلیدی در معماری Micro Frontend این بود که سرویسها رو بر اساس ماهیت کارکردی تقسیم کردیم:
- هر ماژول یا سرویس فقط شامل منطق تجاری و کامپوننتهای مخصوص خودش بود
- یک سرویس پایه (Base Service) ایجاد کردیم که شامل تمام وابستگیهای مشترک مثل کتابخانههای UI، مدیریت وضعیت، درخواستهای API و ... بود
- سایر سرویسها از Base Service استفاده میکردن و نیازی به نصب مجدد پکیجهای مشترک نداشتن
مزایای این روش؟
حجم بیلد بهشدت کاهش پیدا کرد چون وابستگیهای مشترک فقط یکبار لود میشدن
لود صفحات سریعتر شد چون هر سرویس فقط ماژولهای موردنیاز خودش رو داشت
مقیاسپذیری افزایش یافت چون هر بخش میتونست جداگانه توسعه و استقرار پیدا کنه
مدیریت صحیح Dynamic Import و Caching
یکی از چالشهای Module Federation، مدیریت کش و Dynamic Import هست. اگر این بخش درست پیادهسازی نشه، ممکنه باعث لود غیرضروری و افت عملکرد بشه. برای بهینهسازی این فرآیند:
- ماژولها رو بهصورت Remote بارگذاری کردیم تا فقط زمانی که لازم هست، دریافت بشن
- کشینگ هوشمند رو پیادهسازی کردیم تا ماژولهای یکبار دانلود شده، دوباره بارگیری نشن
- و Preloading و Lazy Loading رو بهینهسازی کردیم تا تجربه کاربری بهتری ایجاد بشه
پیادهسازی یک کانتینر مرکزی برای مدیریت سرویسها
برای مدیریت ماژولهای مختلف، یک Container نوشتیم که وظیفه داره:
- تمام سرویسهای Remote رو دریافت و مدیریت کنه
- هر سرویس رو در مسیر مشخص خودش رندر کنه
- روتینگ بین ماژولها رو بهینه کنه تا ناوبری بدون مشکل انجام بشه
در نتیجه کاربران بدون اینکه متوجه بشن، بین سرویسهای مختلف جابهجا میشدن، درحالیکه هرکدوم بهصورت مستقل توسعه داده شده بودن.
نتیجه نهایی؟
- بیلد سبکتر و زمان دیپلوی کوتاهتر
- عملکرد سریعتر و تجربه کاربری بهتر
- مقیاسپذیری بالا و توسعه ماژولار
- امتیاز بهتر در Lighthouse و کاهش چشمگیر زمان بارگذاری
@DevTwitter | <Sajad Shojaie/>
👍52👎7🔥3
انویدیا یک پروژهٔ open-source ارائه داده که فایلهای PDF را به پادکستهای صوتی تبدیل میکند. برای دسترسی به این ابزار، به لینک گیتهاب زیر بروید:
https://github.com/NVIDIA-AI-Blueprints/pdf-to-podcast
@DevTwitter | <Diss Obedience/>
https://github.com/NVIDIA-AI-Blueprints/pdf-to-podcast
@DevTwitter | <Diss Obedience/>
👍38🔥7❤2
دیروز یه شبکه عصبی خیلی خیلی جمع و جور ۱۰۰ خطی با ++C (مثال طور) برای اهداف آموزشی به کمک هوشمصنوعی ساختم، خروجیش جالب شد واقعا.
گفتم بذارم تو gist شاید شما بدرد شما هم خورد:
https://gist.github.com/realbardia/7a68f6e8114488866baaf021c0daa72f
@DevTwitter | <Bardia/>
گفتم بذارم تو gist شاید شما بدرد شما هم خورد:
https://gist.github.com/realbardia/7a68f6e8114488866baaf021c0daa72f
@DevTwitter | <Bardia/>
🔥33👍3👎2
بعد از هفت سال، قدیمیترین و محبوبترین پروژهای که کد زدم رو اوپن سورس کردم. ترموستات، یه پلتفرم انتخاب واحد بر پایه سیستم گلستان.
تو این چهارده ترم حدودن دوهزار دانشجوی دانشگاه خوارزمی، خواجه نصیر و بهشتی از جهنم انتخاب واحد و تداخلها نجات پیدا کردن :))
https://github.com/ArmanJR/termustat
@DevTwitter | <Arman/>
تو این چهارده ترم حدودن دوهزار دانشجوی دانشگاه خوارزمی، خواجه نصیر و بهشتی از جهنم انتخاب واحد و تداخلها نجات پیدا کردن :))
https://github.com/ArmanJR/termustat
@DevTwitter | <Arman/>
👍87🔥15👎7❤4
لاراول 12در 6 اسفند عرضه خواهد شد
تیلور اعلام کرده که نسخه 12 لاراول در تاریخ 6 اسفند 1403 عرضه خواهد شد. به گفته او این اولین نسخه اصلی خواهد بود که بدون تغییرات مخرب (zero-breaking changes) عرضه میشود.
@DevTwitter | <Pouya Farshidnia/>
تیلور اعلام کرده که نسخه 12 لاراول در تاریخ 6 اسفند 1403 عرضه خواهد شد. به گفته او این اولین نسخه اصلی خواهد بود که بدون تغییرات مخرب (zero-breaking changes) عرضه میشود.
@DevTwitter | <Pouya Farshidnia/>
👍44👎9❤3🔥3
از بین این همه کتابخونه UI برای React دنبال یک کتابخونه سبک میگردی ؟
لایبراری ShadCN بهترین انتخاب میتونه برات باشه
شاد سی ان دقیقا چیکار میکنه؟
لایبراری ShadCN یه UI Library مدرن بر پایه Radix UI و Tailwind CSS هست که یه راه حل سبک، سریع و منعطف برای طراحی رابط کاربری تو پروژههای React فراهم میکنه.
چرا ShadCN رو انتخاب کنیم؟
بدون وابستگیهای اضافی – همه چی کاملاً قابل مدیریت و سفارشیسازی هست.
همراه با Radix UI – از قابلیتهای دسترسیپذیر و منعطف این کتابخونه استفاده کن.
کامپوننتهای پیشرفته و زیبا – از دکمهها گرفته تا فرمها و مدالها، همه چی آمادهست!
سبک، سریع و توسعهپذیر – بدون سنگین کردن پروژهات، به راحتی توسعه بده.
ادغام ساده با Next.js و Vite – فرقی نداره از چی استفاده میکنی، ShadCN باهاش سازگاره!
چطور ShadCN رو نصب کنیم؟
خیلی راحت! توی پروژه Reactت اینو بزن:
npx shadcn-ui@latest init
و بعد هر کامپوننتی که نیاز داری، اضافه کن:
npx shadcn-ui@latest add button
همین! یه UI مدرن، حرفهای و سفارشیشده داری!
لابراری ShadCN مناسب چه پروژههایی هست؟
پنلهای مدیریتی – چون کامپوننتها کاملاً مینیمال و کاربردی هستن.
وباپلیکیشنهای SaaS – انعطاف بالایی داره و تو هر پروژهای جواب میده.
پروژههای شخصی و حرفهای – بدون دردسر UI شیک بساز!
@DevTwitter | <Alireza Fakhar/>
لایبراری ShadCN بهترین انتخاب میتونه برات باشه
شاد سی ان دقیقا چیکار میکنه؟
لایبراری ShadCN یه UI Library مدرن بر پایه Radix UI و Tailwind CSS هست که یه راه حل سبک، سریع و منعطف برای طراحی رابط کاربری تو پروژههای React فراهم میکنه.
چرا ShadCN رو انتخاب کنیم؟
بدون وابستگیهای اضافی – همه چی کاملاً قابل مدیریت و سفارشیسازی هست.
همراه با Radix UI – از قابلیتهای دسترسیپذیر و منعطف این کتابخونه استفاده کن.
کامپوننتهای پیشرفته و زیبا – از دکمهها گرفته تا فرمها و مدالها، همه چی آمادهست!
سبک، سریع و توسعهپذیر – بدون سنگین کردن پروژهات، به راحتی توسعه بده.
ادغام ساده با Next.js و Vite – فرقی نداره از چی استفاده میکنی، ShadCN باهاش سازگاره!
چطور ShadCN رو نصب کنیم؟
خیلی راحت! توی پروژه Reactت اینو بزن:
npx shadcn-ui@latest init
و بعد هر کامپوننتی که نیاز داری، اضافه کن:
npx shadcn-ui@latest add button
همین! یه UI مدرن، حرفهای و سفارشیشده داری!
لابراری ShadCN مناسب چه پروژههایی هست؟
پنلهای مدیریتی – چون کامپوننتها کاملاً مینیمال و کاربردی هستن.
وباپلیکیشنهای SaaS – انعطاف بالایی داره و تو هر پروژهای جواب میده.
پروژههای شخصی و حرفهای – بدون دردسر UI شیک بساز!
@DevTwitter | <Alireza Fakhar/>
👍49👎10🔥1
اگر از DeepSeek استفاده میکنید و راستچین نبودن رابط کاربری اذیتتون میکنه، یه خبر خوب دارم!
یک افزونه کوچیک نوشتم که فارسیزبانها رو از این دردسر خلاص کنه.
قطعا بهزودی DeepSeek خودش راستچین رو پشتیبانی میکنه، اما تا وقتی که نکرده، میتونید از این پلاگین استفاده کنید.
لطفاً به ریپازیتوری سر بزنید و ستاره یادتون نره!
https://github.com/diakohamidian/rtl-deep-seek
@DevTwitter | <Diako/>
یک افزونه کوچیک نوشتم که فارسیزبانها رو از این دردسر خلاص کنه.
قطعا بهزودی DeepSeek خودش راستچین رو پشتیبانی میکنه، اما تا وقتی که نکرده، میتونید از این پلاگین استفاده کنید.
لطفاً به ریپازیتوری سر بزنید و ستاره یادتون نره!
https://github.com/diakohamidian/rtl-deep-seek
@DevTwitter | <Diako/>
1❤65👍22👎2🔥1
یه دانشآموز دبیرستانی اومده لینوکس رو تو یه فایل PDF اجرا کرده.
اون وقت ما درگیر حفظ کردن فرعیترین فرمول مثلثاتی جهان هستیم چون سر جلسه کنکور زمان برای استنتاج و استنباط نیست =)))
https://github.com/ading2210/linuxpdf
@DevTwitter | <Parsa/>
اون وقت ما درگیر حفظ کردن فرعیترین فرمول مثلثاتی جهان هستیم چون سر جلسه کنکور زمان برای استنتاج و استنباط نیست =)))
https://github.com/ading2210/linuxpdf
@DevTwitter | <Parsa/>
👍136🔥23👎18❤4
همه تون قطعا اسم POSTMAN رو شنیدید. ولی اکثر مواقع میدونید که پستمن هی سنگین و سنگین تر میشه.
این لینک که پایین گذاشتم یه ابزار خیلی باحال توی CMD هست که همون کار پستمن رو میکنه.
برای نصبش اول باید uv رو نصب (https://docs.astral.sh/uv/getting-started/installation/) داشته باشید بعد اینو:
https://github.com/darrenburns/posting
@DevTwitter | <Real_AntiMatter/>
این لینک که پایین گذاشتم یه ابزار خیلی باحال توی CMD هست که همون کار پستمن رو میکنه.
برای نصبش اول باید uv رو نصب (https://docs.astral.sh/uv/getting-started/installation/) داشته باشید بعد اینو:
https://github.com/darrenburns/posting
@DevTwitter | <Real_AntiMatter/>
🔥52👎9👍5