کدهالیک | codehalic
Open in Telegram
دوره های آموزشیمون رو از داخل سایت ببینید https://codehalic.ir
Show more4 071
Subscribers
+324 hours
+167 days
+28230 days
Posts Archive
4 071
خودم توی شرکت قبلی دقیقاً با این داستان برخورد کردم. داشتیم سیستم سرچ رو بازطراحی میکردیم و من اصلاً حواسم به این نبود که یه سری از کاربرها عادت کردن «شناسه ملی» شرکت رو بزنن و اینتر کنن تا مستقیم برن توی پروفایل اون شرکت. این قابلیت اصلاً توی تسک من تعریف نشده بود، ولی چون کاربرها به این «میانبر» عادت کرده بودن، نبودنش رو به چشم یه باگ میدیدن. وقتی این قابلیت رو دوباره اضافه کردیم، تازه فهمیدیم چقدر توی زمان کاربرها صرفهجویی میشه و چقدر خوشحالتر شدن.
این قانون دقیقاً همینه: توی بازطراحی یا همون Migration سیستمها، نباید فقط به فیچرهای رسمی نگاه کرد.
اما این هایروم کیه؟
هایروم رایت یکی از مهندسهای ارشد گوگل هست که تخصصش تغییر دادن کدهایی در مقیاس میلیون خطیه. اون موقعی که داشت روی کتابخانههای مرکزی گوگل کار میکرد، متوجه شد حتی وقتی یه تغییر خیلی ساده و به ظاهر بیضرر مثل حذف یه «فاصله خالی» یا عوض کردن رنگ یه آیکون رو انجام میده، باز هم یه جایی یه چیزی خراب میشه.
هایروم به این نتیجه رسید که هر چقدر هم به کاربرها التماس کنی که «فقط به داکیومنت من اعتماد کنید»، باز هم اونا میرن و از رفتارهای غیررسمی و جانبی کد تو استفاده میکنن. واسه همین این قانون رو گذاشت تا به بقیه هشدار بده: وقتی کدت محبوب شد و آدمهای زیادی ازش استفاده کردن، دیگه اون کد فقط متعلق به تو نیست و نمیتونی به راحتی هر جاش رو که خواستی عوض کنی.
@codehalics | کدهالیک
4 071
تا حالا شده توی خونه مبل رو جوری بذاری که جلوی پریز رو بگیره ولی بعد یه مدت به همون وضعیت عادت کنی؟ حالا اگه یکی بیاد مبل رو جابهجا کنه که خونه رو قشنگ کنه، شاکی میشی چون تمام نظم ذهنی تو به هم ریخته. این دقیقا خلاصه اتفاقیه که بهش میگن قانون هایروم.
حرف حساب این قانون ساده است: اگه کدی که زدی کاربر زیادی داشته باشه، دیگه مهم نیست توی داکیومنت و راهنما چی نوشتی. مردم به جای اینکه بخونن تو چی گفتی، نگاه میکنن کدت در عمل چیکار میکنه و دقیقا روی همون رفتار (حتی اگه غلط یا اتفاقی باشه) حساب باز میکنن.
یه مثال واقعی و عجیب از دنیای لینوکس:
یه بار مهندسهای گوگل دیدن توی خروجی لیست فایلهای لینوکس چندتا فاصله خالی (Space) بیخود وجود داره. اونا هم از روی دلسوزی این اسپیسها رو حذف کردن که خروجی تمیز بشه. به محض منتشر شدن این تغییر، کلی از برنامههای دنیا از کار افتاد! چرا؟ چون برنامهنویسهای دیگه کدشون رو جوری نوشته بودن که مثلا میگفت: برو کاراکتر شماره ۲۰ رو بردار. اونا از اون فاصلههای بیخود به عنوان خطکش استفاده میکردن و با حذف اونا، کل محاسباتشون غلط شد.
یا مثلا یه کتابخونه قدیمی بود که وقتی فضای هارد خیلی زیاد میشد، به خاطر باگ، عدد رو منفی نشون میداد. بقیه به جای گزارش باگ، توی کدشون نوشتن: اگه عدد منفی بود یعنی فضا خیلی زیاده! حالا اگه سازنده بیاد این باگ رو درست کنه و عدد رو مثبت نشون بده، برنامه تمام اون آدمها میترکه چون فکر میکنن فضای هارد تموم شده.
ته داستان اینه که وقتی نرمافزارت بزرگ و پرکاربر میشه، تو دیگه صاحب ۱۰۰ درصد کدت نیستی. هر حرکت کوچیکی که بزنی، یه جای دنیا یه نفر هست که به اون مدل "تپق" زدن کدت عادت کرده و اگه اصلاحش کنی، زندگیش به هم میخوره. توی ابعاد بزرگ، دیگه فرقی بین باگ و ویژگی وجود نداره؛ هر چیزی که کاربر میبینه، براش میشه قانون.
تا حالا بهش برخوردین ؟ اگر آره چند مدلشو توی کد بهم بگین کجاها این قانون باعث شده نتونین اونطوری که دلخواهتونه کد رو تغییر بدید !
@codehalics | کدهالیک
4 071
امروز دیجیکالا حدود ۲۰۰۰ نفر رو تعدیل کرده ( ۳۰ درصد از نیروهاش )
شاتل حدود ۲۰۰ نفر رو تعدیل کرده
علی بابا و رقباش هم به احتمال زیاد با تداوم این اتفاقا و بسته موندن پرواز ها کلا فیل بشه
این اتفاقارو جنگ رقم نزده بلکه قطعی اینترنته که نفس کسب و کار های وابسته به اینترنت رو بریده !
با ادامه دار شدنش هم خیلی از این بدتر قراره شاهد موج عظیم از تعدیل باشیم
اینا ترسوندن نیست اینا طبعات تصمیماتیه که راجع به اینترنت گرفته شده و بعید میدونم به قبل از ۹ اسفند اینترنت برگرده
ناامیدم همین :)
@codehalics | کدهالیک
4 071
ما دنبال یه نیرو فرانتاند دولوپر و یه نیرو بکاند دولوپر هستیم.
Backend: php, laravel
Frontend: React, next
تلگرام برام رزومه بفرستید: @a_kamandlou
منبع :https://x.com/a_kamandlou/status/2046247447811305602
@codehalics | کدهالیک
4 071
و اما نظر شخصی خودم درباره این موضوع:
بچهها، واقعیت اینه که 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 | کدهالیک
4 071
توی رفرنس های خارجی هم بهترین مقاله ای که راجب این موضوع میتونم بهتون بگم که بخونین مقاله استرایپ راجع به idempotent بودن عه :
✅ ایده Idempotency Key: فرانتاِند یه کلیدِ یونیک (مثل UUID) میفرسته. سرور اگه این کلید رو قبلاً دیده باشه، دیگه اصلاً وارد منطق پرداخت نمیشه و فقط جواب قبلی رو از ککش برمیگردونه. یعنی یوزر ۱۰۰ بار هم روی دکمه کلیک کنه، فقط «یکبار» پول کسر میشه.
✅ داستان Retryها: استرایپ میگه وقتی اینترنت قطع میشه، نباید مثل رگبار ریکوئست زد به سرور! از تکنیک Exponential Backoff استفاده میکنن؛ یعنی هر بار که شکست خورد، فاصله ریکوئست بعدی رو بیشتر میکنن تا سرور زیر فشارِ «گلهایِ» ریکوئستها (Thundering Herd) نپکه!
این مقاله هم خیلی جذاب راجب همین موضوع بحث میکنه
https://stripe.com/blog/idempotency
@codehalics | کدهالیک
4 071
خب مثل دفعه پیش میخوام ریفرتون بدم به یه مقاله عالی از دوست و همکار خوبم محمدجواد ابراهیمی. محمدجواد توی این مطلب خیلی ساده و تمیز مفاهیم اصلی رو باز کرده که خلاصهش میشه این:
Side-effect Free: یعنی متد ما نباید بره یه جای دیگه از برنامه رو ناخواسته تغییر بده (Shared State ایجاد نکنه).
Idempotent: یعنی اگه یه تابع رو با ورودی یکسان، ۱۰۰ بار هم صدا بزنیم، نتیجه (خروجی و اثرش) همیشه همون بار اول باشه و سیستم رو به هم نریزه.
Pure Functions: توابعی که هر دو ویژگی بالا رو دارن و فرشته نجات کد ما هستن!
توی بحث درگاه پرداخت و Race Condition که سوال کردم، اگر کد ما Idempotent نباشه، با هر بار کلیک یوزر، یه فاجعه مالی رخ میده!
حتماً یه زمان ۵ دقیقهای بذارید و اصل مقاله رو بخونید که برای هر برنامه نویسی از نون شب واجبتر
https://virgool.io/dotnetzoom/%D8%A7%D9%87%D9%85%DB%8C%D8%AA-side-effect-free-%D9%88-idemponency-%D8%AF%D8%B1-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-gazelp35o4zw
@codehalics | کدهالیک
4 071
خب امروز میخوام یکی دیگه از سوالای مصاحبهای که اگر به عنوان مصاحبهکننده باشم از بقیه میپرسم رو باهاتون مطرح کنم و نظر شما رو بپرسم.
سناریو: جلوگیری از فاجعه در درگاه پرداخت
فرض کنید یوزر روی دکمه «پرداخت نهایی» کلیک میکنه (پرداخت از کیف پول داخلی). به دلیل کندی اینترنت، Response سریع برنمیگرده؛ یوزر چندین بار پشت سر هم روی دکمه کلیک میکنه یا صفحه رو رفرش میکنه.
صورت مسئله:
۱. سمت Frontend، غیرفعال کردن دکمه (Disable Button) لایه اوله اما کافی نیست (چون با ابزارهایی مثل Postman یا رفرش صفحه قابل Bypass شدنه).
۲. سمت Backend، ما نباید تحت هیچ شرایطی اجازه بدیم بیش از یکبار از حساب کاربر کسر بشه، حتی اگر ۵ ریکوئست کاملاً یکسان در یک «میلیثانیه» به سرور برسه (Race Condition).
سوال:
حرفهایترین و استانداردترین راهکار برای اینکه مطمئن بشیم یک عملیات حساس «دقیقاً و فقط یکبار» (Exactly-once) اعمال میشه چیه؟
"Do not hesitate to answer this question!"
نظراتتون رو بنویسید، شب درباره راهکار استانداردش (که توی شرکتهای بزرگی مثل اسپاتیفای و اسنپ و ... استفاده میشه) گپ میزنیم.
@codehalics | کدهالیک
4 071
خب، تصمیم رو گرفتم.
دورهی منتورینگ Frontend Engineering رو میخوام برگذار کنم.
ظرفیتش فقط ۱۰ نفره و افراد تلنت رزومهشون به بلوبانک (تیم PWA) ریفر میشه!
شرایط:
- بالای ۳ سال تجربهکاری تماموقت
- تجربه کار ریاکت
رزومههاتون رو به ایمیل زیر بفرستید👇🏽
p.faramarzian@bluteam.ir
PooriaFaramarzian@gmail.com
پ.ن : فرصت خوبی بنظر میرسه برای کسایی که بدنبال منتورینگ فرانت هستند میتونن با پوریا مستقیما ارتباط بگیرن پوریا از فرانت اند دولوپر های بلوبانک هستن .
@codehalics | کدهالیک
4 071
معرفی ابزار OpenPencil: ویرایشگر طراحی متنباز و AI-Native
اگر به دنبال جایگزینی متنباز و هوشمند برای ابزارهای طراحی هستید، OpenPencil پروژه نوظهوری است که ارزش بررسی دارد. این ابزار با تمرکز بر هوش مصنوعی و انعطافپذیری بالا توسعه یافته است.
ویژگیهای کلیدی:
پشتیبانی مستقیم از فایلهای Figma: فایلهای .fig را بدون نیاز به خروجی گرفتن (Export) مستقیما باز میکند.
طراحی مبتنی بر هوش مصنوعی: ابزارهای AI داخلی آن اجازه میدهند مستقیما روی بوم طراحی، طرحهای جدید ایجاد کرده یا آنها را ویرایش کنید.
پشتیبانی از پروتکل MCP: با بهرهگیری از MCP Server، امکان اتصال به کلاینتهایی مانند Cursor، Claude Code و سایر ابزارهای سازگار فراهم شده است.
دسترسی چندپلتفرمی: علاوه بر نسخه وب (app.openpencil.dev)، نسخه دسکتاپ آن نیز برای سیستمعاملهای مختلف در دسترس است.
وبسایت پروژه:
https://openpencil.dev/
مخزن گیتهاب و نسخههای دسکتاپ:
https://github.com/open-pencil/open-pencil/releases
@codehalics | کدهالیک
4 071
مثل اینکه فیگما باز شده
روی ایرانسل و همراه اول و فیبر نوری بدون فیلتر باز میشه
@codehalics | کدهالیک
4 071
استفاده از یه پکیجِ کمستاره مثل Re.Pack برای اپلیکیشنی که میلیونها کاربر داره، یه ریسکِ سنگین مهندسیه که هر کسی زیر بارِش نمیره. واقعاً حرکتِ پرجرأتی بوده! خیلیا شاید میگفتن «بیخیال بابا، وبویو میزنیم بره»، ولی اینا ایستادن پایِ کیفیتِ نیتیو و رفتن دنبال یه راهحل مدرن که تازه اول راهشه. این یعنی تیم دیجیکالا عملاً خودشون شدن بخشی از توسعهدهندههای اون ابزار و هزینه باگهاشو به جون خریدن تا سرعت توسعه رو ببرن بالا. این جور تجربههاست که عیارِ یه تیم فنی رو مشخص میکنه. منتظر یه گزارشِ فنی و مشتی از جزئیات این داستان هستیم!
پ.ن : کاش همه شرکت ها این نالج شیر کردن رو به عنوان یه کالچر برای تیمشون در نظر میگرفتن قطعا خیلی کمک حال افرادیه که به این حوزیه علاقمندن
@codehalics | کدهالیک
4 071
شروع کارم در دیجیکالا با دو چالش بزرگ همراه بود:
1. هر تغییر در اپ (که با React Native ساخته شده بود) نیاز به آپدیت توسط کاربر داشت، اما خیلیها آپدیت نمیکردند.
2. پروژه آنقدر بزرگ شده بود که باید به تیمهای کوچکتر و مستقل تقسیم میشد تا سرعت توسعه بالا برود.
در حالی که خیلیها سراغ استفاده از صفحات وب داخل اپ رفتند، ما تصمیم گرفتیم نیتیو را حفظ کنیم و راهحل متفاوتی پیدا کنیم.
ایده ما استفاده از Module Federation برای موبایل بود. با کمک ابزاری به نام Re.Pack (که آن زمان خیلی جدید بود)، این ساختار را پیادهسازی کردیم و حتی در بهبودش مشارکت داشتیم.
نتیجه:
اپ به چند بخش مستقل تقسیم شد و هر تیم توانست جداگانه توسعه بدهد و تغییرات را بهصورت bundle به کاربر برساند (بدون نیاز به آپدیت از استور).
نسخه 3.0.0 با مدل «اول اجرا، بعد آپدیت» منتشر شد، اما این روش مشکل داشت (مثلا معلوم نبود باگها چه زمانی کامل برطرف میشوند).
برای همین مدل را تغییر دادیم به:
«اول آپدیت، بعد اجرا» (شبیه وب)
نتیجه این تغییر شد نسخه 3.1.1:
یکی از پایدارترین نسخهها از نظر آپدیت درونبرنامهای 🚀
(جزئیات فنی بیشتر را بعدا مفصلتر مینویسم)
از لینکدین حسین محمدی :
https://www.linkedin.com/feed/update/urn:li:activity:7451739953459548160
@codehalics | کدهالیک
4 071
ورسل گفته یه هک جدی تو آوریل ۲۰۲۶ اتفاق افتاده که از یه سرویس هوش مصنوعی به اسم Context.ai شروع شده. هکر از طریق اکانت یه کارمند وارد سیستمهای داخلی شده و تونسته به یهسری اطلاعات (غیرحساس) دسترسی بگیره.
میگن تعداد کمی از مشتریها درگیر شدن و دارن باهاشون مستقیم هماهنگ میکنن. پروژههای مهم مثل Next.js هم آسیب ندیدن.
در کل داستان نشون میده استفاده از سرویسهای شخص ثالث میتونه ریسک امنیتی داشته باشه. بهتره همه کلیدها و دسترسیها رو چک و در صورت نیاز عوض کنید.
@codehalics | کدهالیک
4 071
راستش این روزا یه چیزی جدی داره اذیتم میکنه. یه حس سنگین از تنهایی، کنار فشاری که انگار از هر طرف ریخته رو سرمون. مخصوصاً بعد از این تعدیلها و اوضاعی که پیش اومده.
از بیرون شاید خیلی ساده به نظر بیاد. یکی میگه از فردا نیا، و تموم. ولی برای خود آدم، ماجرا اینجا تموم نمیشه. کار فقط حقوق آخر ماه نیست، یه تیکه از حس امنیته، یه تیکه از اینه که خودتو چطوری میبینی. وقتی یهو اینو ازت میگیرن، انگار یه بخش از تعادل ذهنت هم میریزه بههم. برای همینه که خیلیها بعدش استرس میگیرن، بیقرار میشن، یا کلاً حالشون عوض میشه.
از اون طرف، این تنهایی هم همینجوری از ناکجا نمیاد. وقتی فشار زیاد میشه، آدم ناخودآگاه کمتر حرف میزنه، کمتر آدم میبینه، بیشتر میره تو خودش. بعد همین باعث میشه حس تنهایی شدیدتر بشه و دوباره فشار برگرده سراغش. یه چرخه میشه که هی تکرار میشه.
حالا اینو بذار کنار بقیه چیزا. فشار اقتصادی، نگرانی از آینده، خبرای منفی، محدودیتها. تو همچین وضعیتی، مغز بیشتر میره روی حالت بقا. یعنی دیگه دنبال انگیزه و برنامه و این چیزا نیست، فقط میخواد somehow از این فشار رد بشه. برای همینم هست که این روزا پیدا کردن دلیل برای ادامه دادن سختتر شده، ولی ناامید شدن خیلی راحت دم دسته.
یه نکته دیگه هم هست. وقتی یه عده با هم تو یه وضعیت بد میافتن، از بیرون شاید اینطور به نظر بیاد که تنها نیستن. ولی واقعیت اینه که نگرانیها بین آدمها پخش میشه. هرکی استرسشو میگه، اون یکی هم بیشتر درگیر میشه. دقیقاً مثل وقتایی که بعد از امتحان هی از این و اون میپرسیدیم تو هم خراب کردی یا نه، فقط برای اینکه یه ذره آروم بشیم، ولی آخرش دوباره خودمون میموندیم و فکرایی که ولمون نمیکرد.
من خودمم وسط همین ماجرام، دقیقاً با همین فکرا و همین فشارا. فقط چیزی که میبینم اینه که این حال و روزی که داریم، از یه جای واقعی میاد. وقتی همهچی اینطوریه، معلومه آدم هم قاطی میکنه.
شاید الان قرار نیست حتماً یه تصویر روشن از آینده داشته باشیم، چون واقعاً سخته. شاید فعلاً همین که بفهمیم چرا اینجوری شدیم و چی داره سرمون میاد، خودش یه قدمه. حداقلش اینه که بدونیم این حس تنهایی و این فشار، فقط مال ما نیست. خیلیهامون داریم همینو میکشیم، حتی اگه هرکدوم جدا جدا.
@codehalics | کدهالیک
4 071
مایکروسافت بالاخره یکی از اعصابخُردکنترین مشکلات ویندوز رو حل کرد:
sudo بهصورت بومی توی Windows 11 اضافه شده.
یعنی چی؟
یعنی دیگه لازم نیست برای یه دستور ساده، کل ترمینال رو ببندی و Run as Administrator بزنی.
حالا میتونی همونجا فقط همون یک دستور رو با دسترسی ادمین اجرا کنی.
البته:
این همون sudo لینوکس نیست، چون مدل دسترسی ویندوز فرق داره و بعضی اسکریپتها مستقیم کار نمیکنن.
ولی برای کارهای روزمره دولوپری؟
دقیقاً همون چیزی بود که سالها جاش خالی بود.
فعالسازی:
Settings → Developer Features → Sudo for Windows
سورس کد منتشر شده اش که با راست نوشته شده
https://github.com/microsoft/sudo
@codehalics | کدهالیک
4 071
مایکروسافت بالاخره یکی از اعصابخُردکنترین مشکلات ویندوز رو حل کرد:
sudo بهصورت بومی توی Windows 11 اضافه شده.
یعنی چی؟
یعنی دیگه لازم نیست برای یه دستور ساده، کل ترمینال رو ببندی و Run as Administrator بزنی.
حالا میتونی همونجا فقط همون یک دستور رو با دسترسی ادمین اجرا کنی.
البته:
این همون sudo لینوکس نیست، چون مدل دسترسی ویندوز فرق داره و بعضی اسکریپتها مستقیم کار نمیکنن.
ولی برای کارهای روزمره دولوپری؟
دقیقاً همون چیزی بود که سالها جاش خالی بود.
فعالسازی:
Settings → Developer Features → Sudo for Windows
سورس کد منتشر شده اش که با راست نوشته شده 😂️️
4 071
ثبت نام فریلنسرها برای دریافت اینترنت پرو آغاز شد
🔹طبق پیگیریهای صورت گرفته، فریلنسرها ( آزادکاران) برای دریافت اینترنت بین المللی میتواند از طریق سایت نصر ثبت نام و پس از گذراندن مراحل مختلف به اینترنت بین الملل دسترسی پیدا کنند.
https://www.irannsr.org/fa/page/120025-%D8%AB%D8%A8%D8%AA-%D9%86%D8%A7%D9%85-%D8%A2%D8%B2%D8%A7%D8%AF%D9%83%D8%A7%D8%B1.html
پ.ن : خیلی علاقه ای به شیر کردن اینترنت طبقاتی ندارم ولی خب :)
@codehalics | کدهالیک
