Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.01K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
حدیث روز از aubrey de grey

🕊 @gopher_academy
👍7🔥2
اگه مهندس نرم افزارین و دوس دارین دانشتون بیشتر بشه. خوندن تجریبات بقیه مهندسای نرم افزار میتونه خیلی مفید باشه.
یه ریپو باحال :
لیست کامل شرکت های نرم افزاری بزرگ و کوچیک که میتونید از این طریق به صورت مجزا تجریه هر شرکتو بخونید

https://github.com/kilimchoi/engineering-blogs

DevTwitter | <M.H/>

🕊 @gopher_academy
👍73🕊1🍾1💊1
حمایت کنید مارو دوستان🫡🥳

💋 boost

https://t.me/gopher_academy?boost
💋7🎃31🍓1
«سادگی نهایت پیچیدگی است.»

- حضرت لئوناردو داوینچی

🕊 @gopher_academy
👍10🍾4🕊21
✍️ Massimo JobMassimo Job

اگه #مهندس نرم افراز یا Software Engineer باشی و بدونی Sharding چیه، دقیقا یک هیچ از بقیه جلو هستی!

بذار Sharding رو برات ساده توضیح بدم. فرض کن یه #فروشگاه_اینترنتی داری با یه عالمه اطلاعات مشتری، سفارشات و محصولات. هرچی تعداد کاربرا و خریدها بیشتر میشه، این حجم اطلاعات برای یه سرور تنها زیادی میشه و دیگه نمیتونه خوب از پسش بر بیاد. اینجا یه راه حل باحال به اسم sharding به دادت میرسه.

در واقع Sharding یه جور پارتیشن‌بندیه که توش #دیتابیس رو به تیکه‌های کوچیک‌تر و راحت‌تری به اسم shard تقسیم میکنن. هر shard یه بخش از اطلاعات رو نگه میداره و همه shardها با هم کل دیتابیس رو تشکیل میدن. این کار باعث میشه کل سیستم سریع‌تر و قابل مدیریت‌تر بشه.

👈 بذار یه مثال بزنم تا بهتر متوجه شی:
فرض کن مشتری‌هات رو بر اساس موقعیتشون دسته بندی کردی، مثلا آمریکای شمالی، اروپا و آسیا. هر shard اطلاعات مشتری‌های یه منطقه خاص رو نگه میداره. مثلا:

- شارد اول یا Shard 1: آمریکای شمالی (شامل اطلاعات مشتری، سفارشات و محصولات مشتری‌های آمریکای شمالی)
- شارد دوم یا Shard 2: اروپا (شامل اطلاعات مشتری، سفارشات و محصولات مشتری‌های اروپا)
- شارد سوم یا Shard 3: آسیا (شامل اطلاعات مشتری، سفارشات و محصولات مشتری‌های آسیا)

وقتی یه کاربر وارد سایت میشه، سیستم بر اساس موقعیت یا عوامل دیگه، shard مناسب رو برای پرس و جو انتخاب میکنه. مثلا اگه یه کاربر از اروپا وارد شه، سیستم تمام درخواست‌های مرتبط با اون کاربر رو به shard اروپا میفرسته.

با sharding، کل بار کاری رو بین چندتا سرور تقسیم میکنی و باعث میشی همه چی سریع‌تر و قابل مدیریت‌تر بشه. هر shard هم به صورت جداگانه کار میکنه و میتونی هر وقت خواستی با اضافه کردن shardهای بیشتر، سیستم رو گسترش بدی (horizontal scaling). علاوه بر اون، اگه یه shard با مشکل مواجه بشه، بقیه shardها تحت تاثیر قرار نمیگیرن و کل سیستم به کارش ادامه میده.

👈 یه مثال دیگه از sharding که به جغرافیا ربط نداره می‌تونه این باشه که اطلاعات رو بر اساس نوع داده دسته‌بندی کنیم. مثلا:

- شارد ۱ یا Shard 1: شامل تمام اطلاعات مربوط به مشتریان، مثل نام، ایمیل، آدرس و شماره تلفن
شارد ۲ یا Shard 2: شامل تمام اطلاعات مربوط به سفارشات، مثل تاریخ سفارش، آیتم‌های خریداری شده، قیمت و جزئیات پرداخت
شارد ۳ یا Shard 3: شامل تمام اطلاعات مربوط به محصولات، مثل نام محصول، توضیحات، قیمت، تصاویر و موجودی

با این روش، می‌تونیم هر shard رو به یه سرور جداگانه اختصاص بدیم و هر نوع داده رو به طور مستقل مدیریت و بهینه‌سازی کنیم.

مثلا، shard مربوط به مشتریان می‌تونه به یه سرور با سرعت بالا و حافظه زیاد اختصاص داده بشه تا بتونه به سرعت به پرس‌وجوها پاسخ بده. در حالی که shard مربوط به محصولات می‌تونه به یه سرور با فضای ذخیره‌سازی بیشتر اختصاص داده بشه تا بتونه حجم زیادی از تصاویر و اطلاعات مربوط به محصولات رو ذخیره کنه.

این روش می‌تونه به طور قابل توجهی عملکرد و مقیاس‌پذیری پایگاه داده رو، به خصوص برای سیستم‌هایی که حجم زیادی از داده‌های مختلف رو ذخیره می‌کنن، بهبود بخشه.

مشتی باشید!

#سیستم_دیزاین #برنامه_نویسی #شاردینگ #سرور #دواپس

🕊 @gopher_academy
🔥21👍123🎉2
🔴چندتا مقاله جالب که دیروز توی golang weekly منتشر شده

🟢 اگر میخوای در مورد اسلایس ها درک بهتری داشته باشی مقاله زیر بهت کمک میکنه
🔵 Visual Guide to Slices in Go
🔵 https://sazak.io/articles/visual-guide-to-slices-in-go-2024-03-25

🟢 این مقاله در مورد مدیریت خطا ها صحبت میکنه
🔵 Error Flows in Go
🔵 https://preslav.me/2024/06/06/error-flows-in-golang/

🟢 این مقاله در مورد استراتژی های مختلف مدیریت خطا توی گولنگ رو ارزیابی میکنه
🔵Sentinel errors and errors.Is() slow your code down by 500%
🔵 https://www.dolthub.com/blog/2024-05-31-benchmarking-go-error-handling/

🟢 توی این مقاله یه ابزاری رو معرفی میکنه که شما می تونید توی کامندلاینش فرم ورک و روتر مخصوص خودتون رو برای توسعه اپ گولنگی استارت بزنید
🔵 A next-generation CLI tool for build amazing web apps.
🔵 https://gowebly.org/

#golang_weekly

🕊 @gopher_academy
👍12🔥21💯1
✍️استعاره "قورباغه آب‌پز" (Metaphorical Boiled Frog) به یک مفهوم روانشناسی و رفتاری اشاره دارد که بیان می‌کند چگونه موجودات زنده، به ویژه انسان‌ها، در مواجهه با تغییرات تدریجی، ممکن است خطرات یا مشکلات را به موقع تشخیص ندهند و در نتیجه به شرایطی وخیم‌تر از آنچه که انتظار می‌رفت دچار شوند.

🥶این مفهوم از یک آزمایش فرضی نشأت گرفته است که در آن گفته می‌شود اگر قورباغه‌ای را در آب جوش بیندازید، بلافاصله بیرون می‌پرد. اما اگر قورباغه را در آب سرد قرار دهید و به تدریج دمای آب را افزایش دهید، قورباغه متوجه تغییر نمی‌شود و در نهایت در آب جوش می‌پزد.

👇مفهوم و کاربردها

🤔توضیح استعاره:
تغییرات تدریجی: قورباغه تغییر تدریجی دمای آب را احساس نمی‌کند و به همین دلیل واکنشی نشان نمی‌دهد.
بی‌تفاوتی به تغییرات خطرناک: به دلیل عدم واکنش به تغییرات تدریجی، در نهایت قورباغه در آب جوش می‌پزد.

😉کاربردها در دنیای واقعی:

🔹سازمان‌ها و مدیریت:
در محیط‌های کاری، ممکن است کارمندان و مدیران به تدریج به کاهش کیفیت کاری، افزایش استرس و کاهش رفاه عادت کنند بدون اینکه متوجه شوند وضعیت چقدر بدتر شده است.

🔹توسعه شخصی و زندگی روزمره:
افراد ممکن است به تدریج عادات ناپسندی مثل پرخوری، کم‌تحرکی یا بی‌خوابی را در زندگی خود بپذیرند و در نهایت با مشکلات جدی سلامتی مواجه شوند.

🔹محیط زیست:
تغییرات تدریجی در محیط زیست مانند افزایش دما و آلودگی ممکن است به تدریج رخ دهد و انسان‌ها ممکن است واکنش کافی نشان ندهند تا زمانی که آسیب جدی و برگشت‌ناپذیر شده باشد.

🔹سیاست و جامعه:
تغییرات تدریجی در قوانین و سیاست‌ها که ممکن است به تدریج حقوق و آزادی‌های مردم را محدود کند، می‌تواند منجر به کاهش تدریجی دموکراسی و آزادی شود بدون اینکه مردم به موقع متوجه شوند و واکنش نشان دهند.

🔻نتیجه‌گیری
استعاره "قورباغه آب‌پز" یادآوری مهمی است که باید به تغییرات تدریجی توجه کرد و قبل از اینکه شرایط به حد غیر قابل بازگشتی بدتر شود، واکنش مناسبی نشان داد. این استعاره در بسیاری از زمینه‌های زندگی کاربرد دارد و به ما کمک می‌کند که با دقت بیشتری تغییرات اطراف خود را زیر نظر بگیریم و به موقع اقدامات لازم را انجام دهیم.


🕊 @gopher_academy
👍5🔥1🕊1🏆1💋1
حدیث روز

🕊 @gopher_academy
👍20🔥3💅32🎃1
~> Laminas (Zend)

‏Laminas یک فریمورک اپن‌سورسِ PHP هستش که قبلا با نام Zend Framework شناخته می‌شد. این فریمورک یک معماری ماژولار و افزونه‌محور داره که به توسعه‌دهندگان اجازه می‌ده تا وب-اپلیکیشن‌ها رو به صورت بخش بخش بسازن. Laminas از الگوی MVC پیروی می‌کنه که باعث می‌شه کدها تمیز و منظم باشن.

یکی از ویژگی‌های کلیدی Laminas، پشتیبانی از میکروسرویس‌ها هستش. میکروسرویس‌ها، سرویس‌های کوچک و مستقلی هستن که وظایف خاصی رو انجام می‌دن و می‌تونن به صورت توزیع‌شده مستقر بشن. Laminas ابزارهای لازم برای ساخت و مدیریت میکروسرویس‌ها رو فراهم می‌کنه و همچنین مکانیزم‌های امنیتی و روتینگ پیشرفته‌ای داره.

یکی دیگه از نقاط قوت Laminas، مستندات جامع و کامل اون هستش. این فریمورک، داکیومنت‌های کاملی داره که نحوه استفاده از کامپوننت‌های مختلف و بهترین شیوه‌های کدنویسی رو توضیح می‌ده. همچنین، جامعه بزرگی از توسعه‌دهندگان در اطراف Laminas وجود داره که همیشه در حال به‌روزرسانی و بهبود فریمورک هستن.

‏Laminas از بسیاری از استانداردهای مدرن PHP مثل PSR-7، PSR-11 و PSR-15 پشتیبانی می‌کنه. این استانداردها، قابلیت همکاری با سایر کتابخونه‌ها و فریمورک‌های PHP رو افزایش می‌دن و باعث می‌شن کد نوشته شده در Laminas، سازگاری بیشتری با اکوسیستم PHP داشته باشه.

یکی از ویژگی‌های جالب Laminas، وجود کامپوننت‌های مستقلی هستش که می‌شه به صورت جداگانه ازشون استفاده کرد. به عنوان مثال، کامپوننت Laminas\Diactoros یک پیاده‌سازی از PSR-7 هستش که می‌شه به تنهایی ازش استفاده کرد. این ویژگی، انعطاف‌پذیری بالایی به توسعه‌دهندگان می‌ده و اجازه می‌ده فقط از بخش‌هایی از فریمورک که نیاز دارن، استفاده کنن.

‏Laminas همچنین ابزارهای قدرتمندی برای کانفیگ، مسیریابی، Authentication و Authorization، کش، لاگ و دیباگ داره. این ابزارها به توسعه‌دهندگان کمک می‌کنن تا به سرعت و با کمترین دردسر، وب-اپلیکیشن‌ها رو بسازن و مدیریت کنن.

یکی از جنبه‌های مهم Laminas، توجه ویژه به امنیت هستش. این فریمورک، مکانیزم‌های امنیتی پیشرفته‌ای مثل فیلترینگ ورودی، اعتبارسنجی داده، محافظت در برابر حملات XSS و CSRF و رمزنگاری داره. Laminas همچنین با الگوهای امنیتی مثل قفل‌کردن حساب کاربری بعد از تعداد مشخصی تلاش ناموفق برای ورود، سازگار هستش.

‏Laminas از دیتابیس‌های مختلفی مثل MySQL، PostgreSQL، Oracle و SQLite پشتیبانی می‌کنه. این فریمورک یک لایه انتزاعی برای دیتابیس به نام Laminas\Db داره که کار با دیتابیس رو ساده‌تر می‌کنه. همچنین، Laminas از الگوی ActiveRecord و کتابخونه‌های ORM مثل Doctrine پشتیبانی می‌کنه.

یکی دیگه از ویژگی‌های Laminas، قابلیت توسعه اپلیکیشن‌های چندزبانه هستش. این فریم‌ورک ابزارهایی برای مدیریت ترجمه‌ها و Localization داره که به توسعه‌دهندگان اجازه می‌ده به راحتی اپلیکیشن‌های چندزبانه بسازن.

در کل، Laminas یک فریمورک جامع و انعطاف‌پذیر هستش که برای ساخت وب-اپلیکیشن‌های سازمانی و میکروسرویس‌ها خیلی مناسبه. این فریمورک با پشتیبانی از استانداردهای مدرن PHP، مستندات کامل و جامعه فعال توسعه‌دهندگان، یک انتخاب عالی برای پروژه‌های PHP به حساب میاد.

#نوشته #نرم_افزار #برنامه_نویسی

🩷 @PinkOrca
🕊 @gopher_academy
Please open Telegram to view this post
VIEW IN TELEGRAM
💊2👍1🍓1💅1
✍️تکنیک "Shifting Left" یا "چپ‌برداری" یک رویکرد در توسعه نرم‌افزار و مدیریت پروژه است که به معنای جابجایی برخی فعالیت‌ها به مراحل اولیه‌تر فرآیند توسعه اشاره دارد. این اصطلاح بیشتر در زمینه تضمین کیفیت (QA) و امنیت نرم‌افزار مورد استفاده قرار می‌گیرد. هدف اصلی این تکنیک، شناسایی و رفع مشکلات و نقص‌ها در مراحل ابتدایی‌تر توسعه است، که می‌تواند منجر به کاهش هزینه‌ها و زمان صرف شده برای رفع مشکلات در مراحل بعدی شود.

🥂مفهوم و اصول Shifting Left

🔹خط زمانی توسعه: فرآیند توسعه نرم‌افزار را می‌توان به صورت یک خط زمانی تصور کرد که از مرحله نیازسنجی شروع شده و به تحویل محصول نهایی و نگهداری آن ختم می‌شود.

🔹چپ‌برداری: اشاره به انتقال فعالیت‌های خاص به سمت چپ این خط زمانی، یعنی به مراحل اولیه‌تر توسعه دارد.

🎂اصول و مزایا:

🔹شناسایی زودهنگام مشکلات:
با انتقال فعالیت‌های QA و امنیت به مراحل اولیه توسعه، مشکلات و نقص‌ها زودتر شناسایی و رفع می‌شوند.

🔹کاهش هزینه‌ها:
رفع مشکلات در مراحل اولیه توسعه معمولاً هزینه کمتری نسبت به رفع آنها در مراحل پایانی دارد.

🔹افزایش کیفیت محصول:
با انجام تست‌ها و ارزیابی‌های مکرر در مراحل مختلف، کیفیت نهایی محصول افزایش می‌یابد.

🔹بهبود همکاری تیم‌ها:
تیم‌های توسعه، QA و امنیت بیشتر با هم در تعامل هستند و این بهبود همکاری می‌تواند منجر به تولید محصولی با کیفیت بالاتر شود.

🫡کاربردها در عمل
تضمین کیفیت (QA):
تست‌های واحد (Unit Testing):
اجرای تست‌های واحد توسط توسعه‌دهندگان در مراحل ابتدایی کدنویسی.
تست‌های یکپارچگی (Integration Testing):
اطمینان از اینکه ماژول‌های مختلف به درستی با هم کار می‌کنند در همان مراحل اولیه یکپارچگی.
امنیت:
تست‌های امنیتی اولیه:
اجرای تست‌های امنیتی و ارزیابی‌های آسیب‌پذیری در مراحل اولیه توسعه به جای انجام آنها در مراحل پایانی.
کدنویسی امن:
پیاده‌سازی بهترین شیوه‌های کدنویسی امن از ابتدای پروژه.
🥹DevOps:
استفاده از CI/CD:
پیاده‌سازی فرآیندهای یکپارچگی و تحویل مستمر (CI/CD) که تست‌ها و ارزیابی‌های مختلف را در چرخه توسعه به صورت خودکار اجرا می‌کنند.

🚬نتیجه‌گیری
تکنیک Shifting Left با جابجایی فعالیت‌های مهم به مراحل اولیه توسعه، امکان شناسایی و رفع مشکلات را زودتر فراهم می‌کند. این رویکرد می‌تواند به بهبود کیفیت محصول، کاهش هزینه‌ها و زمان توسعه، و افزایش همکاری بین تیم‌ها منجر شود. با اتخاذ این رویکرد، تیم‌های توسعه نرم‌افزار می‌توانند محصولاتی با کیفیت بالاتر و امنیت بیشتر را به بازار عرضه کنند.

🕊 @gopher_academy
👍4🔥1🏆1
🔵در سیستم‌های کامپیوتری و شبکه‌ای، مفاهیم "Best Effort" و "Retry" دو رویکرد متفاوت برای مدیریت ارسال و دریافت داده‌ها هستند. هر یک از این رویکردها مزایا و معایب خود را دارند و برای موقعیت‌ها و نیازهای مختلفی مناسب هستند. در ادامه به بررسی این دو مفهوم می‌پردازیم:

🔴Best Effort
🟢تعریف:
این Best Effort به رویکردی گفته می‌شود که در آن سیستم سعی می‌کند داده‌ها را با بهترین تلاش خود ارسال کند، اما تضمینی برای تحویل موفقیت‌آمیز وجود ندارد.
این روش بیشتر در پروتکل‌های بدون تضمین ارسال داده‌ها مانند UDP (User Datagram Protocol) استفاده می‌شود.

🟢ویژگی‌ها:
🔻بدون تضمین: هیچ تضمینی برای تحویل داده‌ها وجود ندارد. بسته‌ها ممکن است در طول انتقال گم شوند یا به مقصد نرسند.
🔻بدون تصحیح خطا: هیچ مکانیزم داخلی برای تصحیح خطا یا دریافت مجدد بسته‌های گمشده وجود ندارد.
🔻کارایی بالا: به دلیل عدم وجود مکانیزم‌های پیچیده تصحیح خطا و تایید تحویل، کارایی بالاتری در شرایط خاص دارد.
🔻استفاده در موارد خاص: مناسب برای کاربردهایی که نیاز به سرعت بالا دارند و از دست دادن چند بسته داده مشکلی ایجاد نمی‌کند، مانند استریم ویدیو یا تماس‌های صوتی.
🔴Retry
🟢تعریف:
این Retry به رویکردی گفته می‌شود که در آن سیستم تلاش می‌کند در صورت ناکامی در ارسال داده، دوباره آن را ارسال کند. این روش معمولاً در پروتکل‌های تضمینی مانند TCP (Transmission Control Protocol) استفاده می‌شود.

🟢ویژگی‌ها:
🔻تضمین تحویل: سیستم تضمین می‌کند که داده‌ها نهایتاً به مقصد می‌رسند. اگر یک تلاش ناموفق باشد، تلاش‌های دیگری انجام می‌شود.
🔻تصحیح خطا: دارای مکانیزم‌های داخلی برای تشخیص و تصحیح خطا و درخواست مجدد بسته‌های گمشده.
🔻تاخیر بیشتر: به دلیل تلاش‌های مجدد و مکانیزم‌های تصحیح خطا، ممکن است تاخیر بیشتری نسبت به Best Effort داشته باشد.
🔻استفاده در موارد حساس: مناسب برای کاربردهایی که نیاز به دقت و صحت داده‌ها دارند، مانند انتقال فایل‌ها، ارسال ایمیل یا تراکنش‌های مالی.

🎯مقایسه:
1. کارایی:
Best Effort:
کارایی بالا به دلیل نبود مکانیزم‌های پیچیده تصحیح خطا و تایید تحویل

Retry:
کارایی کمتر به دلیل نیاز به تلاش‌های مجدد و مکانیزم‌های تصحیح خطا.

2. قابلیت اطمینان:
Best Effort:
بدون تضمین تحویل داده‌ها.
Retry:
تضمین تحویل داده‌ها.

3. پیچیدگی:
Best Effort:
سادگی در پیاده‌سازی.
Retry:
پیچیدگی بیشتر در پیاده‌سازی به دلیل نیاز به مکانیزم‌های تصحیح خطا و تلاش‌های مجدد.

4. موارد استفاده:
Best Effort:
مناسب برای کاربردهایی که نیاز به سرعت بالا دارند و از دست دادن برخی داده‌ها مشکلی ایجاد نمی‌کند.
Retry:
مناسب برای کاربردهایی که نیاز به صحت و دقت بالای داده‌ها دارند.

🥂نتیجه‌گیری:
انتخاب بین Best Effort و Retry بستگی به نیازمندی‌های خاص کاربرد شما دارد. اگر به سرعت بالا و سادگی نیاز دارید و از دست دادن برخی داده‌ها مشکلی ایجاد نمی‌کند، Best Effort مناسب است. اما اگر نیاز به تضمین تحویل و صحت داده‌ها دارید، رویکرد Retry مناسب‌تر خواهد بود.


🕊 @gopher_academy
👍51🔥1💯1
✍️این"Corner case" (یا "edge case") به وضعیتی در سیستم‌های نرم‌افزاری یا سخت‌افزاری اشاره دارد که در آن شرایط غیرمعمول یا نادر رخ می‌دهد که می‌تواند به مشکلات یا رفتارهای غیرمنتظره منجر شود. این شرایط معمولاً در مرزهای ورودی‌های قابل قبول یا در ترکیب‌های غیرمعمول داده‌ها یا حالات سیستم رخ می‌دهند.

🎃مثال‌هایی از Corner Case‌ها

🔻عدد بزرگ یا کوچک در ورودی:
در برنامه‌ای که با اعداد صحیح کار می‌کند، ممکن است حالتی وجود داشته باشد که عددی بسیار بزرگ یا بسیار کوچک به عنوان ورودی داده شود که ممکن است به سرریز (overflow) یا زیرریز (underflow) منجر شود.

🔻ورودی‌های خالی یا بسیار طولانی:
مثلاً در یک فرم ثبت نام، ممکن است کاربر نام بسیار طولانی یا خالی وارد کند. این می‌تواند به مشکلات اعتبارسنجی داده‌ها یا خرابی برنامه منجر شود.

🔻مقادیر مرزی:
به عنوان مثال، در تابعی که باید اعداد بین 1 تا 100 را بپذیرد، اعداد 0، 1، 100 و 101 ممکن است به عنوان موارد مرزی بررسی شوند.

🔻ترکیب‌های غیرمعمول داده‌ها:
فرض کنید برنامه‌ای دارید که دو تاریخ شروع و پایان را دریافت می‌کند. یک حالت مرزی می‌تواند زمانی باشد که تاریخ پایان قبل از تاریخ شروع باشد.

😳اهمیت تست Corner Case‌ها
تست و شناسایی corner case‌ها در توسعه نرم‌افزار بسیار مهم است زیرا این حالات ممکن است به خطاهای جدی یا آسیب‌پذیری‌های امنیتی منجر شوند. به همین دلیل، باید تست‌های دقیقی برای پوشش این شرایط نادر و مرزی طراحی شود.

🤔چگونه Corner Case‌ها را شناسایی کنیم؟
🔻تحلیل دقیق نیازمندی‌ها:
بررسی دقیق نیازمندی‌های سیستم و شناسایی شرایط و محدودیت‌های خاص.
🔻بررسی ورودی‌ها:
تحلیل انواع ورودی‌هایی که سیستم دریافت می‌کند و شناسایی مقادیر مرزی و غیرمعمول.
🔻بررسی ترکیب‌های حالات:
تحلیل ترکیب‌های مختلف حالات سیستم و شناسایی حالات نادر و غیرمعمول.
🔻تست براساس تجربه:
استفاده از تجربیات گذشته و بهترین شیوه‌های صنعتی برای شناسایی و تست corner case‌ها.

💋نتیجه‌گیری
درواقع corner case‌ها به شرایط نادری اشاره دارند که ممکن است به رفتارهای غیرمنتظره یا خطاهای نرم‌افزاری منجر شوند. شناسایی و تست این حالات در فرآیند توسعه نرم‌افزار بسیار مهم است تا اطمینان حاصل شود که سیستم در تمامی شرایط ممکن به درستی عمل می‌کند.

🕊 @gopher_academy
👍61💋1
🥂دوستانی که Open to work هستند می توانند رزومه خودشون رو برام بفرستند تا داخل کانال منتشر کنیم

💋فقط استک گولنگ پروموت میکنیم.

🤝موارد زیر را به همراه فایل pdf رزومه بفرستید:



نام و نام خانوادگی (اجباری)
مدت سابقه کار (اجباری)
لینکدین (اختیاری)
گیتهاب (اختیاری)
محل سکونت (اجباری)
امکان نقل مکان برای کار دارم یا خیر
(اجباری)

💘دوستان لطفا پی دی اف رزومه رو که میفرستید فرم بالارو کامل کنید موارد اجباری رو تشکر
🕊Admin:
@mrbardia72



🕊 @gopher_academy
7
✍️قانون "Chesteron's Fence" یا "حصار چسترتون" یک مفهوم مهم در اصول حفظ وضعیت موجود و تغییرات محافظه‌کارانه است که از نویسنده و فیلسوف انگلیسی، جیلبرت کیث چسترتون (G.K. Chesterton) گرفته شده است. این مفهوم به ما می‌گوید که قبل از تغییر یا حذف یک چیز موجود، باید دلیل وجود آن را به طور کامل درک کنیم.

❇️شرح قانون Chesteron's Fence
چسترتون این مفهوم را در قالب یک داستان توضیح می‌دهد:
🥸فرض کنید که دو نفر در حال پیاده‌روی در یک روستا هستند و به یک حصار قدیمی می‌رسند. نفر اول می‌گوید: "من نمی‌فهمم چرا این حصار اینجا است؛ بیایید آن را خراب کنیم." نفر دوم پاسخ می‌دهد: "اگر دلیل وجود این حصار را نمی‌دانی، بهتر است آن را دست نزنیم. وقتی فهمیدی چرا این حصار اینجا است، آن وقت می‌توانی در مورد برداشتن آن صحبت کنی."

🥂کاربرد قانون Chesteron's Fence
💃سیاست و حکومت‌داری:
قبل از اصلاح یا حذف قوانین و مقررات، باید دلیل اصلی وضع آن‌ها را درک کنیم. این قانون به تصمیم‌گیرندگان هشدار می‌دهد که نباید به سادگی قوانین موجود را بدون تحلیل دقیق و شناخت کامل دلیل وجود آن‌ها تغییر دهند.

🎊مدیریت تغییرات در سازمان‌ها:
قبل از ایجاد تغییرات بزرگ در سازمان‌ها، باید فهمید که چرا فرآیندها و ساختارهای فعلی وجود دارند و چه مشکلی را حل می‌کنند.

💢مهندسی و طراحی سیستم‌ها:
در توسعه نرم‌افزار و مهندسی سیستم‌ها، قبل از حذف یا تغییر یک قطعه کد یا طراحی، باید فهمید که هدف اصلی و نقش آن چیست.

🤝فرهنگ و سنت‌ها:
قبل از تغییر یا حذف سنت‌ها و فرهنگ‌ها، باید دلیل وجود آن‌ها و نقشی که در جامعه ایفا می‌کنند را درک کنیم.

❤️‍🔥نتیجه‌گیری
قانون "Chesteron's Fence" به ما یادآوری می‌کند که تغییرات نباید بدون شناخت و درک کامل از دلیل وجود وضعیت فعلی انجام شوند. این قانون به تحلیل دقیق و توجه به زمینه تاریخی و منطقی امور تأکید دارد تا از تصمیمات ناآگاهانه و احتمالی جلوگیری شود. این اصل می‌تواند به حفظ تعادل و جلوگیری از اشتباهات ناشی از ناآگاهی کمک کند و باعث شود که تغییرات با دقت و بررسی‌های لازم انجام شوند.

🕊 @gopher_academy
👍62🕊1
به‌روش‌های استفاده از Redis
خیلی مطلب کامل و جامعی بود و از مدیریت ممور یردیس، نحوه استفاده از ساختمان داده‌های مختلف و طراحی کلید‌ها تا دیپلوی روی کلاد توضیح داده بود.
اگه از ردیس روی پروداکشن استفاده می‌کنید از دستش ندید به نظرم.
https://www.dragonflydb.io/guides/redis-best-practices
#terminal_stuff

🕊 @gopher_academy
👍51
📌 BackEnd (Golang) Engineer

📝 Visa Sponsorship:

🌍 Relocation Package:

🏢 Company: moon active

📍 Location: POLAND

⌨️ Category: #Programming

🔗 Tags: #python #golang #redis #rabbitmq #gcp #grpc #sqs #c #server #kubernetes #aws #docker #devops #cloud #scrum #sql

#استخدام

🕊 @gopher_academy
👍3💅2
حجم در ایمیج داکر اهمیت زیادی داره،
با analyze بسته های داخلی یک ایمیج به وسیله docker-phobia و Visualize کردن آنها میتونیم راحتر بفهمیم هر بسته چقدر از حجم ایمیج را به خودش اختصاص داده
https://github.com/remorses/docker-phobia
در عکس node و بعد Perl بیشترین حجم را گرفته

DevTwitter | <MehrdadLinux/>

🕊 @gopher_academy
👍102🕊1💋1
گیت‌هاب واقعا دنیای جالبیه، اومده منابع باز و کاربردی CTO رو دسته بندی کرده گذاشته تو این ریپو.
نمیدونم چند ماه زمان میبرد تا این همه گنج رو کسی یه جا پیدا کنه!


https://github.com/kuchin/awesome-cto

DevTwitter | <Ai_Tv/>

🕊 @gopher_academy
🔥12👍6
این سایت با انیمیشن و به صورت بصری به شما الگوریتم هارو یاد میده و میتونید ازش برای یادگیری الگوریتم استفاده کنید.

http://www.algoanim.ide.sk/

DevTwitter

🕊 @gopher_academy
👍13🍓31🎉1💅1
فرق سشن و کوکی

🕊 @gopher_academy
💋5🔥2🍾1