کدهالیک | codehalic
رفتن به کانال در Telegram
دوره های آموزشیمون رو از داخل سایت ببینید https://codehalic.ir
نمایش بیشتر3 460
مشترکین
-124 ساعت
-107 روز
+6830 روز
آرشیو پست ها
3 460
خب امروز میخوام راجب یه قانون دیگ در توسعه نرم افزار صحبت کنم که بیشتر جنبه محصولی داره !
قانون زاوینسکی
قانون زاویِنسکی میگه: هر برنامهای وقتی موفق میشه، کمکم شروع میکنه به اضافه کردن فیچرهای جدید، تا جایی که از هدف اصلی خودش فاصله میگیره و حتی تبدیل میشه به یه محصول «همهفنحریف» که هیچ کاری رو واقعاً عالی انجام نمیده. همون چیزی که میگن: Jack of all trades, master of none.
مثلاً تلگرام اول فقط یه پیامرسان ساده بود، اما کمکم تبدیل شد به یه پلتفرم کامل: تماس صوتی و تصویری، کانال، استوری، بات، پرداخت و حتی مینیاپها. الان دیگه فقط «چت» نیست، یه اکوسیستمه.
این قانون بیشتر برای پروداکت منیجرها مهمه، چون دائماً بین دو فشار گیر میکنن: رشد محصول با اضافه کردن قابلیتهای جدید، یا حفظ سادگی و تمرکز. چالش اصلی اینه که بدونی چی رو نباید اضافه کنی.
پ.ن: البته در بعضی بازارها (بهخصوص کشورهای در حال توسعه)، سوپراپ شدن خودش یه مزیت رقابتیه. چون یه اپ میتونه چندین سرویس رو یکجا جمع کنه؛ مثل تاکسی، غذا، خرید، خدمات پزشکی و… نمونههاش هم توی ایران زیاده.
#lawsofsoftwareengineering
@codehalics | کدهالیک
3 460
عجیب ترین خبریه که از یه کمپانی بزرگ میشه شنید یکی اینکه چطور ممکنه هیچکس نگفته باشه که این سیستم حسابداری طور که داریم استفاده میکنیم و روزانه 15 میلیون سفر داریم تو کل جهان قراره به ازای هر سفر کلی تراکنش بزنه و این دیتابیس روی aws عه و داره pay as you go کار میکنه و بعد هیشکی تو اون شرکت به اون بزرگی از این تصمیم آگاه نباشه
داخل این مقاله میگه هر کس که جوین اوبر میشد این پروژه دستش میگرفت و میگفت باید ریفکتورش کنیم !! (چقد شبیه ایران ) و بابتش ارتقا شغلی هم میگرفته !
نکته خیلی مهم اینه که تقریبا این جمله که حاجی اینجا ایرانه دیگ از این اتفاقا میوفته واقعا صدق نمیکنه تو کل دنیا تو هر شرکتی با هر اسکیلی رفتار کلی آدما بر همین اساسه که میخوان یه چیزیو بزنن بیارن بالا مخصوصا توی شرکت های بزرگ هم این آفت بزرگ هست که هر کسی میاد طبق سلیقه خودش کد رو متوجه نمیشه میگه خب بریم ریفکتورش کنیم
بنظر درس های بزرگی از این مقاله میشه گرفت حتما وقت کنین یه دور بخونینش
اما نکته بسیار مهمش داشتن post mortem بعد از وقوع هر اتفاقه اینکه یه نفر رو مصبب ندونستن و با این ضرر مالی هیشکیو تعدیل نکردن ( که احتمالا این یکی تو ایران برعکس باشه )
اوبر شهر عجیبیه خلاصه دانلودش نکنید
@codehalics | کدهالیک
3 460
اوبر سیستم مالی (Ledger) خودش رو روی DynamoDB ساخت در حالی که این سرویس ابری بهصورت «پرداخت بهازای مصرف» کار میکنه یعنی برای هر read و write باید پول بدهی؛ با وجود میلیونها تراکنش روزانه هزینهها بهشدت بالا رفت و در نهایت حدود ۸ میلیون دلار خرج روی دستش گذاشت و اوبر مجبور شد کل سیستم را کنار بگذارد و دوباره بسازد، با این حال نکته عجیب این بود که با وجود این اشتباه بزرگ هیچکس هم اخراج نشد، و درس مهم اینجاست که DynamoDB برای پرداخت خوبه اما برای Ledger که نیاز به دقت و سازگاری کامل دارد انتخاب اشتباهی است.
داستان این اتفاق رو میتونین توی این مقاله بخونین
https://news.alvaroduran.com/p/nobody-got-fired-for-ubers-8-million
@codehalics | کدهالیک
3 460
ما توی تیم چیدلی توی گلرنگ ونچرز دنبال یه نفر نیرو بکاند و یه نفر نیرو فرانت اند و یه نیرو تستر میگردیم همکاری به صورت هیبرید هست توی تهران.
بکاند: php, laravel
فرانتاند: react, next
رزومه هاتون رو برام ایمیل کنید همه رزومه ها چک میشه خیالتون راحت :)
hr@chideli.ir
@codehalics | کدهالیک
3 460
چالشهای معماری در Cursor: مهار نشتی حافظه روی بستر Electron 🚀
توسعه ابزارهای مبتنی بر ایجنتهای هوش مصنوعی روی ساختارهای چندپردازشی مثل الکترون، چالشهای پرفورمنس سنگینی خلق میکنه. تیم کرسر اخیرا داکیومنت فنیشون رو درباره استراتژیهای حل مشکل حیاتی Out of Memory (OOM) و کرشهای انجین V8 منتشر کرده.
مسئله اصلی اینجا درگیری شدید پروسسهای Renderer به خاطر لود دیتای حجیم ایجنتها و سربار پیامهای IPC بود. توی مقالهای که آماده کردم، ریزِ راهکارهای مهندسی کرسر رو بررسی کردیم؛ از تکنیکهای هندل کردن فایلهای بزرگ (Chunking) و ایزولهسازی پروسسِ اکستنشنها، تا روشهای شکار Memory Leak که در نهایت باعث شد نرخ کرشهای این ادیتور ۸۰ درصد کاهش پیدا کنه.
اگه درگیر چالشهای معماری، مدیریت حافظه و پرفورمنس هستید، پیشنهاد میکنم برای خوندن تحلیل دقیق این کیس استادی، مقاله اصلی رو مطالعه کنید. 👇
https://cursor.com/blog/app-stability
@codehalics | کدهالیک
3 460
با توجه به تعداد بالای دوستانی که اخیراً تعدیل شدن (متأسفانه همون اخراج خودمون)، تصمیم گرفتم بخشی از فعالیتهای کانال رو به معرفی جابآفرهایی اختصاص بدم که بتونیم از این طریق، رزومهها سریعتر به دست کارفرماها برسه و دوستان زودتر دوباره وارد بازار کار بشن.
اگر جابآفری دیدید که داخل کانال منتشر نشده، لطفاً مستقیم به آیدی @papastatopolous ارسال کنید تا در کانال قرار بدم.
اولویت با موقعیتهایی هست که:
داخل جابینجا نیستن
امکان ارتباط مستقیم (مثلاً از طریق تلگرام) با کارفرما وجود داره
شرکت معتبره و واقعاً به دنبال جذب نیروست
هدف اینه که فرصتهای واقعی و مفید به اشتراک گذاشته بشه، نه اینکه وقت کسی گرفته بشه یا مورد نامعتبر (اسکم) منتشر بشه.
@codehalics | کدهالیک
3 460
📢 فرصت همکاری در شنوتو | DevOps Engineer
ما در «شنوتو» برای توسعه، پایداری و امنیت محصولمون به دنبال یک DevOps Engineer هستیم.
اگر تجربه کار با زیرساختهای لینوکسی، کلود، CI/CD، کانتینرها (Docker/Kubernetes)، مانیتورینگ و دیتابیسها رو دارید و به کار تیمی و یادگیری علاقهمندید، خوشحال میشیم بیشتر با هم آشنا بشیم.
🔹 همکاری بهصورت پارهوقت و نیمهحضوری (تهران، بالاتر از پارک ساعی دسترسی از گاندی و خیابان ولیعصر)
📩 برای مشاهده جزئیات کامل موقعیت و ارسال رزومه:
https://jobinja.ir/companies/shenoto/jobs/tkAN
@codehalic | کدهالیک
3 460
🚀 فرصت همکاری ریموت در یک پروژه استارتاپی
در حال توسعه یک پلتفرم در حوزه رزرو خدمات و مارکتپلیس آنلاین هستیم و برای گسترش تیم، به دنبال همکاری با افراد متخصص بهصورت پارهوقت و ریموت از ایران هستیم.
🔎 موقعیتهای مورد نیاز:
• Social Media Manager
• SEO Specialist (On-Page / Off-Page / Technical)
• Web Designer / Developer (آشنا با UI/UX)
• Content Creator (متنی + سناریو ویدیو)
• Video Editor (Reels / YouTube)
• Digital Marketer
• UI/UX Designer
• Flutter Developer
• Backend Developer (ASP.NET Core یا Laravel)
🎯 شرایط همکاری:
• همکاری ریموت
• پارهوقت (با امکان تبدیل به همکاری بلندمدت)
• حضور در یک تیم در حال رشد با فضای استارتاپی
• فرصت رشد و مشارکت در توسعه یک محصول واقعی
📩 برای ارتباط و ارسال رزومه:
از طریق همین پست (دایرکت لینکدین) یا از طریق آیدی
تلگرام زیر در تماس باشید:
Telegram ID: @Btlxadmin
اگر این موقعیت مناسب شما نیست، خوشحال میشم این پست رو با دوستانتون به اشتراک بگذارید 🙏
@codehalics | کدهالیک
3 460
کاری که قطعی ۵۵ روزه اینترنت با اکوسیستم استارتاپی کشور کرد :)))
@codehalics | کدهالیک
3 460
دو تا پروژه خیلی خوب برای دور زدن فیلترینگ معرفی شده که خیلی محدود بعضی سایت هارو باز میکنه
https://github.com/masterking32/MasterHttpRelayVPN
یکی این پروژه هست که یوتیوب رو مث بنز براتون میاره بالا
و یکی هم
3 460
وضعیت جالبی بنظر نمیاد باشه مخصوصا برای سگارو که همه ما زحماتش برای اینترنت آزاد رو یادمون هست
دیدم که خودش هم مشکلی با شماره کارتش و اینا نداره و اوکیه کاملا برای دونیشن
اگر مایل بودید هر مبلغی دونیتش کنین شاید گره از کارش باز کرد
واقعا هممون در تنگا و سختی هستیم
من از جانب کدهالیک یک مبلغی رو بهشون دونیت میکنم امیدوارم که زودتر حال هممون خوب بشه :) همین !
@codehalics | کدهالیک
3 460
اگر خودتون یا دوستانتون جویای کار در پوزیشن های شغلی زیر هستید به ایشون پیام بدید
@N_aprr
-Senior Frontend Developer
-Senior FullStack Developer ( PHP - Vue - React )
-Staff Enginner
-Technical Product Manager (TPM)
-Senior Scrum Master
-Accountant
@codehalics | کدهالیک
3 460
ما به دنبال دو نیرو SRE و Devops هستیم.
خوشحال میشم رزومه اتون رو تلگرام برام بفرستید: ImanAbr7777@
@codehalics | کدهالیک
3 460
خودم توی شرکت قبلی دقیقاً با این داستان برخورد کردم. داشتیم سیستم سرچ رو بازطراحی میکردیم و من اصلاً حواسم به این نبود که یه سری از کاربرها عادت کردن «شناسه ملی» شرکت رو بزنن و اینتر کنن تا مستقیم برن توی پروفایل اون شرکت. این قابلیت اصلاً توی تسک من تعریف نشده بود، ولی چون کاربرها به این «میانبر» عادت کرده بودن، نبودنش رو به چشم یه باگ میدیدن. وقتی این قابلیت رو دوباره اضافه کردیم، تازه فهمیدیم چقدر توی زمان کاربرها صرفهجویی میشه و چقدر خوشحالتر شدن.
این قانون دقیقاً همینه: توی بازطراحی یا همون Migration سیستمها، نباید فقط به فیچرهای رسمی نگاه کرد.
اما این هایروم کیه؟
هایروم رایت یکی از مهندسهای ارشد گوگل هست که تخصصش تغییر دادن کدهایی در مقیاس میلیون خطیه. اون موقعی که داشت روی کتابخانههای مرکزی گوگل کار میکرد، متوجه شد حتی وقتی یه تغییر خیلی ساده و به ظاهر بیضرر مثل حذف یه «فاصله خالی» یا عوض کردن رنگ یه آیکون رو انجام میده، باز هم یه جایی یه چیزی خراب میشه.
هایروم به این نتیجه رسید که هر چقدر هم به کاربرها التماس کنی که «فقط به داکیومنت من اعتماد کنید»، باز هم اونا میرن و از رفتارهای غیررسمی و جانبی کد تو استفاده میکنن. واسه همین این قانون رو گذاشت تا به بقیه هشدار بده: وقتی کدت محبوب شد و آدمهای زیادی ازش استفاده کردن، دیگه اون کد فقط متعلق به تو نیست و نمیتونی به راحتی هر جاش رو که خواستی عوض کنی.
@codehalics | کدهالیک
3 460
تا حالا شده توی خونه مبل رو جوری بذاری که جلوی پریز رو بگیره ولی بعد یه مدت به همون وضعیت عادت کنی؟ حالا اگه یکی بیاد مبل رو جابهجا کنه که خونه رو قشنگ کنه، شاکی میشی چون تمام نظم ذهنی تو به هم ریخته. این دقیقا خلاصه اتفاقیه که بهش میگن قانون هایروم.
حرف حساب این قانون ساده است: اگه کدی که زدی کاربر زیادی داشته باشه، دیگه مهم نیست توی داکیومنت و راهنما چی نوشتی. مردم به جای اینکه بخونن تو چی گفتی، نگاه میکنن کدت در عمل چیکار میکنه و دقیقا روی همون رفتار (حتی اگه غلط یا اتفاقی باشه) حساب باز میکنن.
یه مثال واقعی و عجیب از دنیای لینوکس:
یه بار مهندسهای گوگل دیدن توی خروجی لیست فایلهای لینوکس چندتا فاصله خالی (Space) بیخود وجود داره. اونا هم از روی دلسوزی این اسپیسها رو حذف کردن که خروجی تمیز بشه. به محض منتشر شدن این تغییر، کلی از برنامههای دنیا از کار افتاد! چرا؟ چون برنامهنویسهای دیگه کدشون رو جوری نوشته بودن که مثلا میگفت: برو کاراکتر شماره ۲۰ رو بردار. اونا از اون فاصلههای بیخود به عنوان خطکش استفاده میکردن و با حذف اونا، کل محاسباتشون غلط شد.
یا مثلا یه کتابخونه قدیمی بود که وقتی فضای هارد خیلی زیاد میشد، به خاطر باگ، عدد رو منفی نشون میداد. بقیه به جای گزارش باگ، توی کدشون نوشتن: اگه عدد منفی بود یعنی فضا خیلی زیاده! حالا اگه سازنده بیاد این باگ رو درست کنه و عدد رو مثبت نشون بده، برنامه تمام اون آدمها میترکه چون فکر میکنن فضای هارد تموم شده.
ته داستان اینه که وقتی نرمافزارت بزرگ و پرکاربر میشه، تو دیگه صاحب ۱۰۰ درصد کدت نیستی. هر حرکت کوچیکی که بزنی، یه جای دنیا یه نفر هست که به اون مدل "تپق" زدن کدت عادت کرده و اگه اصلاحش کنی، زندگیش به هم میخوره. توی ابعاد بزرگ، دیگه فرقی بین باگ و ویژگی وجود نداره؛ هر چیزی که کاربر میبینه، براش میشه قانون.
تا حالا بهش برخوردین ؟ اگر آره چند مدلشو توی کد بهم بگین کجاها این قانون باعث شده نتونین اونطوری که دلخواهتونه کد رو تغییر بدید !
@codehalics | کدهالیک
3 460
امروز دیجیکالا حدود ۲۰۰۰ نفر رو تعدیل کرده ( ۳۰ درصد از نیروهاش )
شاتل حدود ۲۰۰ نفر رو تعدیل کرده
علی بابا و رقباش هم به احتمال زیاد با تداوم این اتفاقا و بسته موندن پرواز ها کلا فیل بشه
این اتفاقارو جنگ رقم نزده بلکه قطعی اینترنته که نفس کسب و کار های وابسته به اینترنت رو بریده !
با ادامه دار شدنش هم خیلی از این بدتر قراره شاهد موج عظیم از تعدیل باشیم
اینا ترسوندن نیست اینا طبعات تصمیماتیه که راجع به اینترنت گرفته شده و بعید میدونم به قبل از ۹ اسفند اینترنت برگرده
ناامیدم همین :)
@codehalics | کدهالیک
3 460
ما دنبال یه نیرو فرانتاند دولوپر و یه نیرو بکاند دولوپر هستیم.
Backend: php, laravel
Frontend: React, next
تلگرام برام رزومه بفرستید: @a_kamandlou
منبع :https://x.com/a_kamandlou/status/2046247447811305602
@codehalics | کدهالیک
3 460
و اما نظر شخصی خودم درباره این موضوع:
بچهها، واقعیت اینه که Idempotency (تکرارپذیری) خیلی فراتر از یک بحث بکاِندی یا درگاه پرداخته؛ این یک «انتزاع» (Abstraction) هست که توی تمام لایههای مهندسی نرمافزار، از فرانتاِند گرفته تا زیرساخت، حضور داره.
۱. نگاه Idempotent در فرانتاِند
خیلی وقتها ما ناخودآگاه کدهایی میزنیم که تکرارپذیر نیستن. مثلاً فرض کن یه دکمه داریم که قراره کاربر رو به مرحله بعد ببره:
حالت غلط (Non-Idempotent): setState(prev => prev + 1)
اینجا اگه کاربر به خاطر کندی سیستم یا از سر شیطنت ۱۰ بار روی دکمه کلیک کنه، استیت ما ۱۰ واحد میره جلو! فاجعهست، نه؟
حالت درست (Idempotent):
setState(2)
این یعنی کاربر اگه ۱۰۰ بار هم کلیک کنه، استیت همیشه روی عدد ۲ میمونه. خروجی پایداره.
یا مثلاً باز کردن یک مدال (Modal):
به جای اینکه بنویسیم setState(!state) که حالت Toggle داره و با هر کلیک یه جواب متفاوت میده، باید بنویسیم setState(true). اینطوری همیشه خروجی همونه: مدال باز است.
۲. نگاه Idempotent در بکاِند و پیامرسانی
در لایه بکاِند هم داستان همینه. توی معماریهای مبتنی بر ایونت (Event-Driven)، ممکنه یک پیام به هر دلیلی (مثل Retryهای مسیجبروکر) چند بار به دست مصرفکننده برسه.
سیستم نباید گیج بشه! باید همیشه یک Idempotency Key یا کلید یکتا همراه پیام باشه که حتی اگه ۳۰۰ بار هم پردازش شد، فقط بار اول «اثر» بذاره و دفعات بعدی صرفاً بگه: «انجام شده بود، خیالت راحت!»
ما به عنوان توسعهدهنده باید یاد بگیریم سیستم رو جوری طراحی کنیم که نسبت به «تکرار»، مقاوم (Resilient) باشه. فرقی نمیکنه کلیک کاربر باشه یا ریکوئستِ شبکه؛ سیستمِ بالغ، سیستمیه که Side-effect اضافه ایجاد نکنه.
@codehalics | کدهالیک
3 460
توی رفرنس های خارجی هم بهترین مقاله ای که راجب این موضوع میتونم بهتون بگم که بخونین مقاله استرایپ راجع به idempotent بودن عه :
✅ ایده Idempotency Key: فرانتاِند یه کلیدِ یونیک (مثل UUID) میفرسته. سرور اگه این کلید رو قبلاً دیده باشه، دیگه اصلاً وارد منطق پرداخت نمیشه و فقط جواب قبلی رو از ککش برمیگردونه. یعنی یوزر ۱۰۰ بار هم روی دکمه کلیک کنه، فقط «یکبار» پول کسر میشه.
✅ داستان Retryها: استرایپ میگه وقتی اینترنت قطع میشه، نباید مثل رگبار ریکوئست زد به سرور! از تکنیک Exponential Backoff استفاده میکنن؛ یعنی هر بار که شکست خورد، فاصله ریکوئست بعدی رو بیشتر میکنن تا سرور زیر فشارِ «گلهایِ» ریکوئستها (Thundering Herd) نپکه!
این مقاله هم خیلی جذاب راجب همین موضوع بحث میکنه
https://stripe.com/blog/idempotency
@codehalics | کدهالیک
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
