Forwarded from Go Casts 🚀
دوستان اگه اپلیکیشن رو بصورت مونولیت مینیوسید، کار خوبی میکنید، اما aggregation pattern رو جدی بگیرید، کمک بزرگی میکنه به حفظ loosely coupled بودن ماژول و سرویس هاتون.
یه اشتباه رایجی که باعث میشه خیلی راحت همه چیز در هم تنیده و coupled بشه نیازهای بیزینسی ای هست که دیتای aggregate شده از چند domain مختلف رو میخواد از شما. تو حالت مونولیت خیلی ساده ست که شما در هر domain به دیتابیس یه domain دیگه درخواست بزنی و یا حتی تو interactor/service دیگه یه متد جدید تعریف کنی که دیتای مد نظر رو بده. که معمولا باعث در هم تنیده شدن و چاق شدن سرویس هاتون میشه.
بهتره سرویس یا همون interactorهاتون کارهای خیلی کوچیک و well-definedی رو انجام بدن و اگه نیازمندی های aggregationطور دارید، یه سری service دیگه بسازید که وابستگی خواهد داشت به سرویس های مختلف و دیتاهای raw رو میگیره و پردازش میکنه که دیتای نهایی رو آماده کنه.
بعضی وقت ها از طریق gateway هم ممکنه بتونید aggregate کنید. بعضی وقت ها ممکنه تو همون لایه دلیوری (کنترلر) تون بتونید دو تا سرویس رو فراخوانی کنید و کار رو در بیارید، گاهی هم پیچیده تر میشه و لازمه یه سرویس(interactor) بنویسید که کار aggregation رو انجام بده
https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation
باز خود aggregate کردن حالت های مختلفی داره، اینجا میتونید بیشتر بخونید در موردش
https://medium.com/geekculture/design-patterns-for-microservices-aggregation-pattern-1b8994516fa2
@gocasts
یه اشتباه رایجی که باعث میشه خیلی راحت همه چیز در هم تنیده و coupled بشه نیازهای بیزینسی ای هست که دیتای aggregate شده از چند domain مختلف رو میخواد از شما. تو حالت مونولیت خیلی ساده ست که شما در هر domain به دیتابیس یه domain دیگه درخواست بزنی و یا حتی تو interactor/service دیگه یه متد جدید تعریف کنی که دیتای مد نظر رو بده. که معمولا باعث در هم تنیده شدن و چاق شدن سرویس هاتون میشه.
بهتره سرویس یا همون interactorهاتون کارهای خیلی کوچیک و well-definedی رو انجام بدن و اگه نیازمندی های aggregationطور دارید، یه سری service دیگه بسازید که وابستگی خواهد داشت به سرویس های مختلف و دیتاهای raw رو میگیره و پردازش میکنه که دیتای نهایی رو آماده کنه.
بعضی وقت ها از طریق gateway هم ممکنه بتونید aggregate کنید. بعضی وقت ها ممکنه تو همون لایه دلیوری (کنترلر) تون بتونید دو تا سرویس رو فراخوانی کنید و کار رو در بیارید، گاهی هم پیچیده تر میشه و لازمه یه سرویس(interactor) بنویسید که کار aggregation رو انجام بده
https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation
باز خود aggregate کردن حالت های مختلفی داره، اینجا میتونید بیشتر بخونید در موردش
https://medium.com/geekculture/design-patterns-for-microservices-aggregation-pattern-1b8994516fa2
@gocasts
Docs
Gateway Aggregation pattern - Azure Architecture Center
Learn about the Gateway Aggregation pattern, which uses a gateway to aggregate many individual requests into a single request.
Forwarded from متخصص وردپرس | پوینا
This media is not supported in your browser
VIEW IN TELEGRAM
قدرت نمایی چین با شروع سال جدید
چین هر سال با شروع سال جدید قدرت خودش رو جوری به دنیا نشون داده که نشون بده تکنولوژی برتر دنیا در آینده کیه
@poinair پوینا
چین هر سال با شروع سال جدید قدرت خودش رو جوری به دنیا نشون داده که نشون بده تکنولوژی برتر دنیا در آینده کیه
@poinair پوینا
Forwarded from متخصص وردپرس | پوینا
This media is not supported in your browser
VIEW IN TELEGRAM
قدرت نمایی چین با شروع سال جدید
چین هر سال با شروع سال جدید قدرت خودش رو جوری به دنیا نشون داده که نشون بده تکنولوژی برتر دنیا در آینده کیه
@poinair پوینا
چین هر سال با شروع سال جدید قدرت خودش رو جوری به دنیا نشون داده که نشون بده تکنولوژی برتر دنیا در آینده کیه
@poinair پوینا
Forwarded from نظریه زبانها و آتامتا - پاییز ۱۴۰۳ (Mehran)
فردا در آخرین جلسهی کلاس نظریهی زبانها و ماشینها که به صورت مجازی برگزار خواهد شد، برای گفتوگو درخصوص مطالب پیشرفتهتر و پژوهش در حوزهی روشهای صوری و ارتباط آن با دیگر حوزههای علوم کامپیوتر، میزبان خانم دکتر مرجان سیرجانی، پژوهشگر و استاد برجستهی علوم کامپیوتر دانشگاه Mälardalens سوئد خواهیم بود.
بخشی از دیگر سوابق ایشان:
- استاد دانشکدهی مهندسی برق و کامپیوتر، دانشکدهی فنی دانشگاه تهران
- پژوهشگر ارشد، پژوهشگاه دانشهای بنیادی (IPM)
- پژوهشگر مهمان، دانشگاه California, Berkeley
- پژوهشگر مهمان، دانشگاه Illinois at Urbana-Champaign
- موسس و رئیس کمیتهی راهبری کنفرانس FSEN
- رئیس کمیتهی برنامهریزی کنفرانسهای SEFM و COORDINATION
این جلسه فردا پنجشنبه ۱۳ دیماه از ساعت 10:30 صبح تا 12 در لینک زیر برگزار خواهد شد.
https://vc.sharif.edu/ch/pdl
لطفا پس از ورود به لینک، از طریق گزینهی مهمان وارد شوید و نام و نام خانوادگی خود را وارد کنید. شرکت برای عموم دانشجوها بلامانع است.
با آرزوی سلامتی و موفقیت
معینیجم
بخشی از دیگر سوابق ایشان:
- استاد دانشکدهی مهندسی برق و کامپیوتر، دانشکدهی فنی دانشگاه تهران
- پژوهشگر ارشد، پژوهشگاه دانشهای بنیادی (IPM)
- پژوهشگر مهمان، دانشگاه California, Berkeley
- پژوهشگر مهمان، دانشگاه Illinois at Urbana-Champaign
- موسس و رئیس کمیتهی راهبری کنفرانس FSEN
- رئیس کمیتهی برنامهریزی کنفرانسهای SEFM و COORDINATION
این جلسه فردا پنجشنبه ۱۳ دیماه از ساعت 10:30 صبح تا 12 در لینک زیر برگزار خواهد شد.
https://vc.sharif.edu/ch/pdl
لطفا پس از ورود به لینک، از طریق گزینهی مهمان وارد شوید و نام و نام خانوادگی خود را وارد کنید. شرکت برای عموم دانشجوها بلامانع است.
با آرزوی سلامتی و موفقیت
معینیجم
Forwarded from DevTwitter | توییت برنامه نویسی
شاید تعجب کرده باشید که چرا در خیلی از کنفرانس های JavaScript جای این عبارت از js و ecmanoscript استفاده میکنن..
دلیلش اینه که آقای oracle که sun microsystems رو خرید تریدمارک JavaScript رو هم در نتیجه ش صاحب شد.
حالا آقای ryan dahl که سازنده nodejs و deno هست چند وقتی هست گیر داده به oracle که تریدمارک JavaScript رو کنسل کنه که دیگه به عنوان یه کلمه عمومی همه بتونن ازش استفاده کنن. سفت و سخت پیگیره..
@DevTwitter | <Hossein Nazari/>
دلیلش اینه که آقای oracle که sun microsystems رو خرید تریدمارک JavaScript رو هم در نتیجه ش صاحب شد.
حالا آقای ryan dahl که سازنده nodejs و deno هست چند وقتی هست گیر داده به oracle که تریدمارک JavaScript رو کنسل کنه که دیگه به عنوان یه کلمه عمومی همه بتونن ازش استفاده کنن. سفت و سخت پیگیره..
@DevTwitter | <Hossein Nazari/>
Forwarded from Linuxor ?
یه صفحه محصول دیجی کالا رو تصور کنید، برای اینکه اون صفحه از بکند ساخته شه باید کلی Join توی دیتابیس و کلی اطلاعات از جدول های مختلف جمع آوری شه و کلی زمان بای لود صفحه گرفته میشه.
حالا بیاین یه کاری کنیم همه اطلاعات رو توی یه سطر (داکیومنت) یه جدول (کالکشن) ذخیره کنیم، حتی برای کامنت ها هم جدول جداگونه نسازیم.
سرعت لود صفحه به شدت زیاد میشه اینجا ما ریداندنسی و افزایش حافظه رو فدای CPU کردیم.
حتی کوئری های Update هم از بهینگی در اومد و اینم اصلا مهم نیست مگه چند وقت یه بار اون صفحه آپدیت میشه؟
به این حرکت میگن denormalization که توی NoSQL ها خیلی استفاده میشه.
@Linuxor
حالا بیاین یه کاری کنیم همه اطلاعات رو توی یه سطر (داکیومنت) یه جدول (کالکشن) ذخیره کنیم، حتی برای کامنت ها هم جدول جداگونه نسازیم.
سرعت لود صفحه به شدت زیاد میشه اینجا ما ریداندنسی و افزایش حافظه رو فدای CPU کردیم.
حتی کوئری های Update هم از بهینگی در اومد و اینم اصلا مهم نیست مگه چند وقت یه بار اون صفحه آپدیت میشه؟
به این حرکت میگن denormalization که توی NoSQL ها خیلی استفاده میشه.
@Linuxor
Forwarded from Linuxor ?
اگه میخواین NoSQL یاد بگیرین و نمیدونین کجا از SQL استفاده کنید یا NoSQL این ریپو اومده کلی از منابع خوب رو جمع آوری کرده باهاش میتونین به درک درستی از NoSQL برسین
https://github.com/erictleung/awesome-nosql-guides
@Linuxor
https://github.com/erictleung/awesome-nosql-guides
@Linuxor
Forwarded from DevTwitter | توییت برنامه نویسی
ساختار دادهای جدول هش (Hash Table Data Structure):
هشینگ (Hashing) یکی از ساختارهای دادهای مهم و کارآمد است که برای انتساب یک مقدار به یک کلید خاص استفاده میشود. این فرآیند از طریق یک تابع هش انجام میشود. هدف اصلی این ساختار، دسترسی سریعتر به عناصر با استفاده از این کلیدها است. کارایی هشینگ به شدت به طراحی و کارایی تابع هش وابسته است، به طوری که تابع هش باید برخوردها (Collisions) را به حداقل برساند و دادهها را به صورت یکنواخت در جدول توزیع کند.
فرض کنید یک تابع هش H(x) مقدار x را در شاخص x % 10 در یک آرایه ذخیره میکند.
به عنوان مثال، اگر لیست مقادیر [11,12,13,14,15] باشد، این مقادیر در موقعیتهای {1,2,3,4,5} در جدول هش ذخیره خواهند شد.
موارد استفاده از ساختار دادهای جدول هش(Hash Table Data Structure):
1-ساختارهای دادهای برای جستجو و بازیابی سریع:
به طور گسترده در پیادهسازی دیکشنریها (مثل Dictionary در Python یا HashMap در Java و C#) استفاده میشود.
2-مدیریت پایگاه دادهها:
برای نگهداری ایندکسها در پایگاه دادهها، جدولهای هش به منظور دسترسی سریع به رکوردها استفاده میشود.
3-سیستمهای کش (Caching):
برای ذخیره و بازیابی دادهها در سیستمهای کش با سرعت بالا، مانند Memcached.
4-سیستمهای تشخیص کلمات تکراری:
در پردازش زبان طبیعی (NLP) و بررسی متون برای ذخیره مجموعهای از کلمات و بررسی وجود یا عدم وجود آنها.
5-مدیریت حافظه:
برای مدیریت سریع تخصیص و آزادسازی حافظه.
6-حل مسائل با زمانبندی مناسب:
مانند تشخیص مقادیر تکراری در یک آرایه یا نگاشت یک مقدار به کلید برای مرتبسازی و جستجو سریع.
7-شبکههای کامپیوتری:
در مسیریابی و کش DNS برای ذخیره آدرسهای IP و نام دامنهها.
مزایا:
1-سرعت بالا در جستجو و بازیابی.
2-کارایی مناسب برای دادههای بزرگ.
3-انعطافپذیری در ذخیرهسازی جفتهای کلید-مقدار.
4-پیادهسازی ساده و گسترده در زبانهای برنامهنویسی.
چالشها:
1-مدیریت برخوردها (Collisions).
2-طراحی مناسب و کارآمد تابع هش.
3-هزینه افزایش اندازه جدول هش (Resizing).
4-مصرف بیشتر حافظه برای کاهش برخوردها.
5-حساسیت به کیفیت کلیدهای ورودی.
@DevTwitter | <Hossein Vaezzadeh/>
هشینگ (Hashing) یکی از ساختارهای دادهای مهم و کارآمد است که برای انتساب یک مقدار به یک کلید خاص استفاده میشود. این فرآیند از طریق یک تابع هش انجام میشود. هدف اصلی این ساختار، دسترسی سریعتر به عناصر با استفاده از این کلیدها است. کارایی هشینگ به شدت به طراحی و کارایی تابع هش وابسته است، به طوری که تابع هش باید برخوردها (Collisions) را به حداقل برساند و دادهها را به صورت یکنواخت در جدول توزیع کند.
فرض کنید یک تابع هش H(x) مقدار x را در شاخص x % 10 در یک آرایه ذخیره میکند.
به عنوان مثال، اگر لیست مقادیر [11,12,13,14,15] باشد، این مقادیر در موقعیتهای {1,2,3,4,5} در جدول هش ذخیره خواهند شد.
موارد استفاده از ساختار دادهای جدول هش(Hash Table Data Structure):
1-ساختارهای دادهای برای جستجو و بازیابی سریع:
به طور گسترده در پیادهسازی دیکشنریها (مثل Dictionary در Python یا HashMap در Java و C#) استفاده میشود.
2-مدیریت پایگاه دادهها:
برای نگهداری ایندکسها در پایگاه دادهها، جدولهای هش به منظور دسترسی سریع به رکوردها استفاده میشود.
3-سیستمهای کش (Caching):
برای ذخیره و بازیابی دادهها در سیستمهای کش با سرعت بالا، مانند Memcached.
4-سیستمهای تشخیص کلمات تکراری:
در پردازش زبان طبیعی (NLP) و بررسی متون برای ذخیره مجموعهای از کلمات و بررسی وجود یا عدم وجود آنها.
5-مدیریت حافظه:
برای مدیریت سریع تخصیص و آزادسازی حافظه.
6-حل مسائل با زمانبندی مناسب:
مانند تشخیص مقادیر تکراری در یک آرایه یا نگاشت یک مقدار به کلید برای مرتبسازی و جستجو سریع.
7-شبکههای کامپیوتری:
در مسیریابی و کش DNS برای ذخیره آدرسهای IP و نام دامنهها.
مزایا:
1-سرعت بالا در جستجو و بازیابی.
2-کارایی مناسب برای دادههای بزرگ.
3-انعطافپذیری در ذخیرهسازی جفتهای کلید-مقدار.
4-پیادهسازی ساده و گسترده در زبانهای برنامهنویسی.
چالشها:
1-مدیریت برخوردها (Collisions).
2-طراحی مناسب و کارآمد تابع هش.
3-هزینه افزایش اندازه جدول هش (Resizing).
4-مصرف بیشتر حافظه برای کاهش برخوردها.
5-حساسیت به کیفیت کلیدهای ورودی.
@DevTwitter | <Hossein Vaezzadeh/>
Forwarded from Syntax | سینتکس (Daimon)
دوستان اگه اپلیکیشن رو بصورت مونولیت مینیوسید، کار خوبی میکنید، اما aggregation pattern رو جدی بگیرید، کمک بزرگی میکنه به حفظ loosely coupled بودن ماژول و سرویس هاتون.
یه اشتباه رایجی که باعث میشه خیلی راحت همه چیز در هم تنیده و coupled بشه نیازهای بیزینسی ای هست که دیتای aggregate شده از چند domain مختلف رو میخواد از شما. تو حالت مونولیت خیلی ساده ست که شما در هر domain به دیتابیس یه domain دیگه درخواست بزنی و یا حتی تو interactor/service دیگه یه متد جدید تعریف کنی که دیتای مد نظر رو بده. که معمولا باعث در هم تنیده شدن و چاق شدن سرویس هاتون میشه.
بهتره سرویس یا همون interactorهاتون کارهای خیلی کوچیک و well-definedی رو انجام بدن و اگه نیازمندی های aggregationطور دارید، یه سری service دیگه بسازید که وابستگی خواهد داشت به سرویس های مختلف و دیتاهای raw رو میگیره و پردازش میکنه که دیتای نهایی رو آماده کنه.
بعضی وقت ها از طریق gateway هم ممکنه بتونید aggregate کنید. بعضی وقت ها ممکنه تو همون لایه دلیوری (کنترلر) تون بتونید دو تا سرویس رو فراخوانی کنید و کار رو در بیارید، گاهی هم پیچیده تر میشه و لازمه یه سرویس(interactor) بنویسید که کار aggregation رو انجام بده
https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation
باز خود aggregate کردن حالت های مختلفی داره، اینجا میتونید بیشتر بخونید در موردش
https://medium.com/geekculture/design-patterns-for-microservices-aggregation-pattern-1b8994516fa2
Source:
https://news.1rj.ru/str/gocasts
@Syntax_fa
یه اشتباه رایجی که باعث میشه خیلی راحت همه چیز در هم تنیده و coupled بشه نیازهای بیزینسی ای هست که دیتای aggregate شده از چند domain مختلف رو میخواد از شما. تو حالت مونولیت خیلی ساده ست که شما در هر domain به دیتابیس یه domain دیگه درخواست بزنی و یا حتی تو interactor/service دیگه یه متد جدید تعریف کنی که دیتای مد نظر رو بده. که معمولا باعث در هم تنیده شدن و چاق شدن سرویس هاتون میشه.
بهتره سرویس یا همون interactorهاتون کارهای خیلی کوچیک و well-definedی رو انجام بدن و اگه نیازمندی های aggregationطور دارید، یه سری service دیگه بسازید که وابستگی خواهد داشت به سرویس های مختلف و دیتاهای raw رو میگیره و پردازش میکنه که دیتای نهایی رو آماده کنه.
بعضی وقت ها از طریق gateway هم ممکنه بتونید aggregate کنید. بعضی وقت ها ممکنه تو همون لایه دلیوری (کنترلر) تون بتونید دو تا سرویس رو فراخوانی کنید و کار رو در بیارید، گاهی هم پیچیده تر میشه و لازمه یه سرویس(interactor) بنویسید که کار aggregation رو انجام بده
https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation
باز خود aggregate کردن حالت های مختلفی داره، اینجا میتونید بیشتر بخونید در موردش
https://medium.com/geekculture/design-patterns-for-microservices-aggregation-pattern-1b8994516fa2
Source:
https://news.1rj.ru/str/gocasts
@Syntax_fa
Forwarded from Linuxor ?
الگوریتم Shor's یکی از الگوریتمهای مشهور کوانتومی هست که میتونه اعداد رو به عوامل اولشون تجزیه کنه. این الگوریتم پتانسیل داره که رمزنگاریهای کلاسیک مثل RSA رو بشکنه.
کامپیوتر 127-کیوبیتی IBM یکی از پیشرفتهترین کامپیوترهای کوانتومی فعلیه.
اما تجزیه کردن عدد 15 به 3 و 5 (که عوامل اولش هستن)، کاری بسیار ساده است و حتی یه دانشآموز ابتدایی هم میتونه این کار رو انجام بده.
این شخص با طنز داره میگه که بعد از ساعتها تلاش پیچیده، موفق شده با یک فناوری پیشرفته، کاری رو انجام بده که به راحتی روی کاغذ ممکنه.
@Linuxor
کامپیوتر 127-کیوبیتی IBM یکی از پیشرفتهترین کامپیوترهای کوانتومی فعلیه.
اما تجزیه کردن عدد 15 به 3 و 5 (که عوامل اولش هستن)، کاری بسیار ساده است و حتی یه دانشآموز ابتدایی هم میتونه این کار رو انجام بده.
این شخص با طنز داره میگه که بعد از ساعتها تلاش پیچیده، موفق شده با یک فناوری پیشرفته، کاری رو انجام بده که به راحتی روی کاغذ ممکنه.
@Linuxor
Forwarded from Morteza Bashsiz مرتضی باشسیز (Morteza Bashsiz)
نيما يوشيج در تولد يك سالگي فرزندش نوشت:
فرزندم يك بهار
يك تابستان
يك پائيز
و يك زمستان را ديدي
از اين پس همه چيز تكراري است
به جز مهرباني
پس تا مي توانی مهربان باش
فرزندم يك بهار
يك تابستان
يك پائيز
و يك زمستان را ديدي
از اين پس همه چيز تكراري است
به جز مهرباني
پس تا مي توانی مهربان باش
Forwarded from 🎄 یک برنامه نویس تنبل (The Lazy 🌱 Raymond)
🔶 اگر دنبال منابع بهتر NoSQL هستید که این مخزن گیت هاب به شما کمک می کند.
این مخزن ترجمه کردم.
https://github.com/Rayiumir/awesome-nosql-guides-persian
@TheRaymondDev
این مخزن ترجمه کردم.
https://github.com/Rayiumir/awesome-nosql-guides-persian
@TheRaymondDev
GitHub
GitHub - Rayiumir/awesome-nosql-guides-persian: :computer: Curated list of awesome resources and links about using NoSQL databases
:computer: Curated list of awesome resources and links about using NoSQL databases - Rayiumir/awesome-nosql-guides-persian
Forwarded from DevTwitter | توییت برنامه نویسی
یه مقاله جذاب در مورد نوشتن کد سریع از Shopify
درسته که درباره Ruby on Rails نوشته شده اما اکثر نکاتش به خیلی از زبان و فریمورک های دیگه از جمله گولنگ هم قابل تعمیم دادن هست.
دقت کنید که Shopify در یک مقیاس خیلی بزرگ کار میکنه و نکاتش مهمه.
کدی که با Ruby on Rails نوشته میشه معروفه به کند بودن
اما در Shopify در مقیاس میلیون درخواست در دقیقه داره از Ruby on Rails استفاده میشه
تو این مقاله نکات جالبی رو اشاره میکنه برای اینکه کد سریعتری نوشته بشه
اولین نکته ش در مورد ORM یا همون ActiveRecord هست که باید درک کنید توابع مختلف orm چه رفتاری با دیتابیس دارند.
تو گولنگ همین مشکل با gorm وجود داره که به شدت میتونه لود زیادی روی دیتابیس بندازه بدون اینکه برنامه نویس متوجه این قضیه بشه.
دومین نکته ش باز در مورد دیتابیس هست که میگه از select * پرهیز کنید و فقط ستون هایی که لازم دارید رو انتخاب کنید.
نکته دیگه پرهیز از کوئری زدن به ستون هایی هست که index ندارن و در مقیاس بالا باعث میشه که full scan رخ بده
البته ایندکس اضافه کردن باعث lock شدن دیتابیس ممکنه بشه برای writeها و باید مواظب مایگریشن ایندکس باشیم
نکته بعدی کش کردن همه چیز هست…
Cache All The Things
If you can’t make something faster, a good alternative is to cache it. Things like complex view compilation and external API calls benefit greatly from caching. Especially if the resultant data doesn’t change often.
یه سری چیزارو میشه throttle کرد
Throttle Bottlenecks
But what about operations you can’t cache? Things like delivering an email, sending a webhook, or even logging in can be abused by users of an application. Essentially, any expensive operation that can’t be cached should be throttled.
برای یه سری پروسه ها هم میشه job queue و مکانیزم های async در نظر گرفت
Do It Later (In a Job)
Jobs allow us to defer work to another process through queueing systems often backed by Redis. Exporting a dataset, activating a subnoscription, or processing a payment are all great examples of job-worthy work
پرهیز از متاپروگرمینگ
Use Metaprogramming Sparingly
Changing a program’s structure at runtime is a powerful feature. In a highly dynamic language like Ruby, there are significant performance costs associated to metaprogramming.
دونستن تفاوت O(1) و O(n) برای مقیاس پذیر بودن خیلی مهمه
Know the difference between O(n) and O(1)
What O(n) and O(1) mean is that there are two kinds of operations. O(n) is an operation that scales in time with size, and O(1) is one that is constant in time regardless of size.
مثلا جای آرایه بهتره از hash استفاده بشه چون lookup کردن تو hash فارغ از اندازه O(1) هست
Allocate Less
استفاده و مدیریت Garbage Collector
If used improperly, dangerous methods can lead to unwanted side effects in your code. A best practice to follow is to avoid mutating global state while leveraging mutation on local state.
https://shopify.engineering/write-fast-code-ruby-rails
@DevTwitter | <Hossein Nazari/>
درسته که درباره Ruby on Rails نوشته شده اما اکثر نکاتش به خیلی از زبان و فریمورک های دیگه از جمله گولنگ هم قابل تعمیم دادن هست.
دقت کنید که Shopify در یک مقیاس خیلی بزرگ کار میکنه و نکاتش مهمه.
کدی که با Ruby on Rails نوشته میشه معروفه به کند بودن
اما در Shopify در مقیاس میلیون درخواست در دقیقه داره از Ruby on Rails استفاده میشه
تو این مقاله نکات جالبی رو اشاره میکنه برای اینکه کد سریعتری نوشته بشه
اولین نکته ش در مورد ORM یا همون ActiveRecord هست که باید درک کنید توابع مختلف orm چه رفتاری با دیتابیس دارند.
تو گولنگ همین مشکل با gorm وجود داره که به شدت میتونه لود زیادی روی دیتابیس بندازه بدون اینکه برنامه نویس متوجه این قضیه بشه.
دومین نکته ش باز در مورد دیتابیس هست که میگه از select * پرهیز کنید و فقط ستون هایی که لازم دارید رو انتخاب کنید.
نکته دیگه پرهیز از کوئری زدن به ستون هایی هست که index ندارن و در مقیاس بالا باعث میشه که full scan رخ بده
البته ایندکس اضافه کردن باعث lock شدن دیتابیس ممکنه بشه برای writeها و باید مواظب مایگریشن ایندکس باشیم
نکته بعدی کش کردن همه چیز هست…
Cache All The Things
If you can’t make something faster, a good alternative is to cache it. Things like complex view compilation and external API calls benefit greatly from caching. Especially if the resultant data doesn’t change often.
یه سری چیزارو میشه throttle کرد
Throttle Bottlenecks
But what about operations you can’t cache? Things like delivering an email, sending a webhook, or even logging in can be abused by users of an application. Essentially, any expensive operation that can’t be cached should be throttled.
برای یه سری پروسه ها هم میشه job queue و مکانیزم های async در نظر گرفت
Do It Later (In a Job)
Jobs allow us to defer work to another process through queueing systems often backed by Redis. Exporting a dataset, activating a subnoscription, or processing a payment are all great examples of job-worthy work
پرهیز از متاپروگرمینگ
Use Metaprogramming Sparingly
Changing a program’s structure at runtime is a powerful feature. In a highly dynamic language like Ruby, there are significant performance costs associated to metaprogramming.
دونستن تفاوت O(1) و O(n) برای مقیاس پذیر بودن خیلی مهمه
Know the difference between O(n) and O(1)
What O(n) and O(1) mean is that there are two kinds of operations. O(n) is an operation that scales in time with size, and O(1) is one that is constant in time regardless of size.
مثلا جای آرایه بهتره از hash استفاده بشه چون lookup کردن تو hash فارغ از اندازه O(1) هست
Allocate Less
استفاده و مدیریت Garbage Collector
If used improperly, dangerous methods can lead to unwanted side effects in your code. A best practice to follow is to avoid mutating global state while leveraging mutation on local state.
https://shopify.engineering/write-fast-code-ruby-rails
@DevTwitter | <Hossein Nazari/>
Forwarded from Sadra Codes
هرچی بیشتر یاد میگیری، بیشتر احساس پوچی و نادانی میکنی. بنظرم این زمانی خوبه که این حس تو رو حریصتر کنه.
در مسیری قدم گذاشتی که دوست داشتی شبیه کسی بشی که آخر این مسیره. پس نباید صفحه اول خودت رو با فصل آخر اون شخص مقایسه کنی. :)
در مسیری قدم گذاشتی که دوست داشتی شبیه کسی بشی که آخر این مسیره. پس نباید صفحه اول خودت رو با فصل آخر اون شخص مقایسه کنی. :)
Forwarded from Bardiaism
Media is too big
VIEW IN TELEGRAM
آموزش Qt6 - قسمت پانزدهم - مقدمه QML
این قسمت مقدمهای بر QML است و تو این قسمت توضیح میدیم که QML چیه و چطوری کار میکنه و کجاها بدردمون میخوره و برای یادگیریش بهتره چه دانشهایی داشته باشیم.
در این قسمت درباره سینتکس و قوانین کدنویسی با QML خیلی توضیح خاصی نمیدیم.
لینک ویدیو در یوتیوب:
https://youtu.be/1hojf1CMd3A
@Bardiaism
این قسمت مقدمهای بر QML است و تو این قسمت توضیح میدیم که QML چیه و چطوری کار میکنه و کجاها بدردمون میخوره و برای یادگیریش بهتره چه دانشهایی داشته باشیم.
در این قسمت درباره سینتکس و قوانین کدنویسی با QML خیلی توضیح خاصی نمیدیم.
لینک ویدیو در یوتیوب:
https://youtu.be/1hojf1CMd3A
@Bardiaism
Forwarded from mnr tech
در ابتدا docker و docker compose با هم دیگه یکی نبودن به عبارتی دیگه docker-compose به عنوان یک ماژول اضافه تر باید در کنار داکر نصب میشد و دستوراتش هم به این شکل بود
دقت کنید که یه dash (-) وجود داره.
اما بعد چند سال داکر کمپوز به هسته داکر اضافه شد و دستورش هم فرق کرد و اون dash دیگه نیاز نیست. به این شکل
حالا من به یه پروژه ای برخوردم که یک سری اسکریپت توش هست قبل از اجرای اسکریپت میاد چک میکنه آیا فایل اجرایی برای docker-compose توی path وجود داره یه خیر؟ به بیان ساده تر چک میکنه ببینه فایلی به اسم docker-compose در مسیر
خط کد بالا توی بش این کار رو میکنه. درسته که docker compose الان از دستور قدیمی هم پشتیبانی میکنه ولی این خط کد false میشه چون فایل مورد نظر تو مسیر PATH نیست.
برای حل این مشکل چند راه بود ولی بهترین راهی که میشه انجام داد تا به صورت کامل پشتیبانی بشه توسط همچین اسکریپت هایی این هست 👇🏻
یک فایل به نام docker-compose در یکی از مسیرهای موجود در PATH بسازید:
محتوای زیر را در فایل بنویسید:
به فایل اجازه اجرا بدهید:
درواقع با این کار یه wrapper برای docker compose ایجاد میکنیم که با دستور docker-compose اجرا میشه.
میشه از روش های دیگه هم استفاده کرد مثلا تعریف alias توی bashrc ولی این کار باز هم این مشکل رو حل نمیکنه
یا نصب docker compose v2 plugin با دستور زیر
docker-compose up
دقت کنید که یه dash (-) وجود داره.
اما بعد چند سال داکر کمپوز به هسته داکر اضافه شد و دستورش هم فرق کرد و اون dash دیگه نیاز نیست. به این شکل
docker compose up
حالا من به یه پروژه ای برخوردم که یک سری اسکریپت توش هست قبل از اجرای اسکریپت میاد چک میکنه آیا فایل اجرایی برای docker-compose توی path وجود داره یه خیر؟ به بیان ساده تر چک میکنه ببینه فایلی به اسم docker-compose در مسیر
/usr/local/bin/docker-compose وجود داره یا خیر؟# Ensure docker-compose exists
if hash docker-compose 2>/dev/null; then
خط کد بالا توی بش این کار رو میکنه. درسته که docker compose الان از دستور قدیمی هم پشتیبانی میکنه ولی این خط کد false میشه چون فایل مورد نظر تو مسیر PATH نیست.
برای حل این مشکل چند راه بود ولی بهترین راهی که میشه انجام داد تا به صورت کامل پشتیبانی بشه توسط همچین اسکریپت هایی این هست 👇🏻
یک فایل به نام docker-compose در یکی از مسیرهای موجود در PATH بسازید:
sudo nano /usr/local/bin/docker-compose
محتوای زیر را در فایل بنویسید:
#!/bin/bash
docker compose "$@"
به فایل اجازه اجرا بدهید:
sudo chmod +x /usr/local/bin/docker-compose
درواقع با این کار یه wrapper برای docker compose ایجاد میکنیم که با دستور docker-compose اجرا میشه.
میشه از روش های دیگه هم استفاده کرد مثلا تعریف alias توی bashrc ولی این کار باز هم این مشکل رو حل نمیکنه
یا نصب docker compose v2 plugin با دستور زیر
sudo apt-get update
sudo apt-get install docker-compose-plugin
Forwarded from LinAcademy (Pakrohk)
Forwarded from Sadra Codes
دوستان، محمد زحمت میکشه کانتنت باکیفیت راجع به استکها و ابزارهای محبوب روز دنیا توی این کانال قرار میده. این کارم تبلیغ نیست. خودمم عضو کانالشم و هرازگاهی از پست های خلاصه و مفیدی که میذاره استفاده میکنم. ❤️
https://news.1rj.ru/str/ninja_learn_ir
https://news.1rj.ru/str/ninja_learn_ir
Telegram
Ninja Learn | نینجا لرن
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب بلدن 🤫
📄 Send me post: https://news.1rj.ru/str/NoronChat_bot?start=sec-fdggghgebe
👥 ɢʀᴏᴜᴘ: https://news.1rj.ru/str/+td1EcO_YfSphNTlk
اینجا چیزایی یاد میگیری که فقط نینجاهای وب بلدن 🤫
📄 Send me post: https://news.1rj.ru/str/NoronChat_bot?start=sec-fdggghgebe
👥 ɢʀᴏᴜᴘ: https://news.1rj.ru/str/+td1EcO_YfSphNTlk
Forwarded from Armon technical logs (armon Taheri)
یکی از دوستان گفتن که گوش دادن به ویس ها سخت هست
میتونین ویس هارو تبدیل به متن کنین یا خلاصه اونها رو مطاله کنین
@VoiceToTextMasterBot
@KhanoomJBot
میتونین ویس هارو تبدیل به متن کنین یا خلاصه اونها رو مطاله کنین
@VoiceToTextMasterBot
@KhanoomJBot
Forwarded from Ninja Learn | نینجا لرن
اینم اولین پست go درسال جدید 😂
اگه بد بود یا جاییش اشتباه بود شرمنده
کمی تازه کار هستم در go
اگه بد بود یا جاییش اشتباه بود شرمنده
کمی تازه کار هستم در go