نوشته‌های ترمینالی
2.77K subscribers
424 photos
12 videos
32 files
2.29K links
Download Telegram
من دو سه سال پیش یه shell خیلی مینیمال نوشته بودم به اسم KittySH.
اگر به این این که اسمش چرا اینه کار نداشته باشیم، به نظر می‌تونه برای system programming توی گو یه ایده‌های خوبی بهتون بده.

فیچرها: اجرای کامند و cd و clear و prompt رو خودش پشتیبانی می‌کنه و با کمک کتابخونه، auto complete هم داره.

https://github.com/rsharifnasab/KittySH/tree/master
111🔥8
در گولنگ نسخه ۱.۲۵، یه Garbage collector جدید به نام green tea اضافه شده که سعی میکنه سریع‌تر باشه. فعلا به شکل experimentalئه ولی توی ۱.۲۶ قراره که به شکل پیش‌فرض استفاده بشه.

چه گو دولوپر هستید چه نه، خوندن این بلاگ پست رو بهتون توصیه می‌کنم چون هم در مورد نحوه کار Garbage collector بهتون ایده‌های خوبی می‌ده (به شکل کامل و نه خیلی ساده سازی شده) و هم این که چطوری به افزایش پرفورمنس یه برنامه می‌شه نگاه کرد رو می‌بینید. در مورد instructionهای پردازنده، دسترسی به مموری و ...
https://go.dev/blog/greenteagc
19👍3
امروز بر خلاف روال معمول کار جدی، تصمیم گرفتم تکنولوژی‌های جدید رو هم امتحان کنم و قرعه به نام SQLc افتاد. یه ابزار تولید کد بر اساس ساختار دیتابیس و کوئری ها، کد گولنگ تولید می‌کنه.

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

هدفم اینجا نقد و بررسی منصفانه‌اش نیست و شاید شما باهاش خوشحال باشید ولی من علی‌رغم این که ایده‌ش رو دوست داشتم در عمل خوشحال نشدم باهاش.
👍233🔥1😁1
چرا پیدا کردن بهترین استعدادها، توی لینکدین و گیتهاب سخته؟ چون خیلی ها که کارشون خوبه، تمرکزشون روی خود کاره و پروفایل جذابی تو این پلتفرم ها ندارن!
https://surfingcomplexity.blog/2025/10/08/the-illegible-nature-of-software-development-talent/


در ادامه خودم اضافه کنم که: خوبه که از زاویه دیگه هم نگاه کنیم. اگه چنین آدمی هستید که استعداد خوبی دارید ولی فعالیت آنلاینی ندارید، شاید بهتر باشه واقعیتی که تو مقاله هست رو بپذیرید و خودتون رو تطبیق بدید.
👍224😁2
استفاده از ai تو مصاحبه، آره یا نه؟ از زبون مصاحبه کننده.

https://leaddev.com/ai/why-expect-candidates-ai-hiring-process

نظر شخصی من اینه که در کل مهم نیست از چی استفاده می‌کنید، چه کپی پیست، چه لایبرری، چه GenAI، نهایتا مهمه که بتونید مسئولیتش رو بپذیرید و بدونید چه trade offهایی توش برقراره. به طور خلاصه وقتی پرسیدن چرا اینطوری، بتونید شفاف پاسخ بدید و نگید AI نوشته.
👌125👍3
Forwarded from Agora (Alireza)
بعضی‌ها مشکل کد نوشتن با AI را این‌طور می‌بینند که دیگه هیچ‌چیز دقیق، عمیق و درست نیست. من واقعاً مشکل رو اینجا نمی‌بینم؛ در واقع، این رو مشکل جدیدی نمی‌بینم.

دوستان مهندس ما تا به حال هم در تولید کدِ بی‌نقص خیلی موفق عمل نکردند. در واقع، اگر در تولید قطعه‌کدهایی موفق بودند، اون کدها هم عموماً امکان غلط نوشتنشون ممکن نیست یا خیلی کمه؛ یا ده‌ها سال در پلتفرم‌های مختلف اجرا و تست شده‌اند یا اساساً صحت الگوریتمِی که پیاده کردن اثبات شده‌ست. اما از اون طرف، (همین دوستان) در معماری همیشه پر از خطا بودند و معماری‌هاشون در یک فرایند تدریجی بهبود پیدا کرده. خطایی که نه لزوماً برخاسته از یک مهندسی غلط، که برخاسته از نیاز بیزینسه. تغییراتی که هیچ‌وقت پیش‌بینی نشدند، از ناکجا وسط معماری شما سر در میارند و شما را مجبور به تغییرات پرریسک و پرهزینه می‌کنند. شاهد این مدعا هم باگ فیکس های ابدی تمام پروژه‌های بزرگ و کوچیکه.

از نظر من، مشکلی که الان شیوع پیدا کرده، تولید کدهاییه که مسئولش از مکانیسمش سر در نمیاره. کدی که «عظیمه، مثل فیل. پر سر و صداست. هیاهوه. دیوانه است. پر هرج‌ومرجه اما مدفوعه». یک فایل ۵۰۰ خطی که یک فیچرو پیاده کرده —که اتفاقاً درست هم کار می‌کنه— ولی کمتر کسی توان و حوصلهٔ این رو داره بشینه و کار شخص دیگه‌ای رو بخونه تا عمیقاً بفهمه؛ به‌خصوص که نرخ تولید PRهایی با تعداد تغییرات بالا به لطف AIها، در حال بیشتر و بیشتر شدنه. مشکلی که قبلا هم در سطح خرد با ظهور امثال استک‌اوورفلو بیشتر جون گرفت و الان رشد کرده و دست و پا در آورده.
19👍10👎1
چرا با وجود AI هنوز هم کیفیت کدی که نوشته میشه مهمه.
فرض کنید انکال هستید یا فرض کنید کد کاملا درست احتیاج دارید.

https://martinfowler.com/articles/exploring-gen-ai/i-still-care-about-the-code.html
👍16👌1
امکان سرویس‌دهی در سطوح مختلف به کمک Feature Flagها

هر محصول در کنار خدمت‌رسانی اصلیش، کلی قابلیت و فیچر جانبی داره که باعث می‌شن تجربهٔ کاربر بهتر بشه و یا درآمدش بالاتر بره.
مثلاً توی یه فروشگاه مثل دیجیکالا، علاوه بر مسیر اصلی تجربهٔ کاربر، یعنی جستجو، مشاهدهٔ محصول، اضافه کردن به سبد خرید، پرداخت و ثبت سفارش، ده‌ها قابلیت دیگه هم وجود داره:
لایو اینفلونسرها، سیستم recommendation، تبلیغات فروشنده‌ها، ثبت‌نام و احراز هویت کاربرهای جدید، و موارد مشابه.

همهٔ این‌ها برای کسب‌وکار مهمن، اما وقتی شرایط نرمال نباشه و فشار زیادی روی سرورها بیاد، اهمیتشون با هم برابر نیست.
مثلاً سیستم recommendation به اندازهٔ فرآیند ثبت سفارش حیاتی نیست.

بنابراین باید مکانیزمی داشته باشیم که بتونیم در مواقع ضروری بعضی قابلیت‌ها رو موقتاً غیرفعال کنیم.
یکی از راه‌حل‌ها استفاده از Feature Flagهاست؛ ابزاری که در زمان کوتاه و با تغییراتی اندک، امکان حذف بخش‌هایی از محصول رو از مسیر درخواست کاربر فراهم می‌کنه.

@aminrbg
👍74
منم یه نکته به این مطلب خیلی خوب اضافه کنم:
این که ما فیچر فلگ داشته باشیم همیشه هم هدفش بار روی سرورها نیست و ممکنه دست پروداکت منیجر ها رو باز بگذاره تا تجربه کاربر نهایی رو تیون کنن. مثلا با کمک A/B تست، انواع ترکیب ها امتحان بشه تا به یه نقطه ایده آل برسیم. حتی ممکنه بسته به رفتار کاربر یا اطلاعات پایه که از کاربر داریم چیزی رو براش حذف یا اضافه کنیم.
👍101
مرورگر های امروزی چطوری کار می‌کنند؟
از ارسال درخواست به شبکه تا پارس و رندر صفحات وب.
https://addyo.substack.com/p/how-modern-browsers-work

و اگه دوست داشتید بیشتر بدانید این سایت فوق‌العاده رو چک کنید:
https://browser.engineering/
9👍1
Forwarded from SoniaCircuit (Sonia Fatholahi)
🔥11
یه اتفاق خیلی عجیبی که برخوردم این بود که یه کد گولنگ کار می‌کرد و کامپایل و اجرا می‌شد تا وقتی که go mod vendor می‌زدم. وقتی که پوشه vendor ساخته می‌شد دیگه کامپایل نمی‌شد و با پاک کردن پوشه vendor دوباره کار می‌کرد! اینجا از اون جا ها بود که آدم می‌گه من دارم اشتباه می‌کنم یا واقعا باگ کامپایلره؟!

خلاصه سرچ کردم و به این ایشو رسیدم و واقعا باگ کامپایلره! داستان از این قراره که موقع دانلود یه پکیج گولنگ کلشو دانلود می‌کنه ولی موقعی که go mod vendor می‌زنید فقط پوشه هایی که حداقل یه فابل .go توش هست رو برمیداره میاره. حالا این کتابخونه مورد نیاز من هم یه سری .c و .h داشت که توی یه پوشه بودن بدون هیچ فایل گو و در نتیجه توی پوشه vendor قرار نمی‌گیره و در نتیجه کامپایل ناموفق صورت می‌گیره.
راه حل چیه؟ راه حل اینه که توسعه‌دهنده کتابخونه این رو بدونه و پوشه‌بندی رو درست کنه.

https://github.com/uber/h3-go/issues/30
👍204🤯3
Enums in Programming Languages and Exhaustiveness

اخیرا این ویدیو رو توی یوتیوب دیدم که نحوه‌ی تعریف Enum توی زبان‌های برنامه‌نویسی مختلف و امکاناتشون رو بررسی و مقایسه می‌کرد.

یکی از نکاتی که توجهم رو جلب کرد این بود که Golang تقریبا امکانات خاصی برای Enum نداره و باید مقادیر enum رو مثل constant تعریف کنی و حتی اگر دوتا اینام مقادیری با اسم یکسان داشته باشن توی یه فایل اسم‌هاشون باهم تداخل میخوره. واقعا ایده‌ای ندارم در این حد ساده بودن خوبه یا نه ولی فکر میکنم اذیت کننده باشه.

یکی از چیزایی که کلا توی Enum ها کاربردیه قابلیت Exhaustiveness هست. یعنی اگر روی یه متغیر از جنس enum سوویچ کیس یا match زدی خود کامپایلر چک کنه که همه‌ی حالت‌ها پوشش داده شده یا نه و مجبورت کنه همه‌ی حالت‌ها رو پوشش بدی یا صریحا ignore اشون کنی. خوبیش اینه که اگر چندماه بعد به این enum یه مقداری اضافه کنی توی زمان compile متوجه میشی که کجاها رو باید بری پیاده‌سازی کنی و چه مسیرهای جدیدی به کدت اضافه میشه. همچنین احتمال خطا و اینکه یه حالتی رو فراموش کنیم هم از بین میره.
راست و نسخه‌های جدید جاوا این قابلیت رو دارن. جاوا توی نسخه‌های جدید امکانات switch و enum رو خیلی بهبود داده و بهتر کرده که قابل تحسینه.

زبان Rust خیلی enum های کاربردی و قدرتمندی داره. این قابلیت‌ها رو توی بقیه زبون‌ها مثل جاوا و سی‌شارپ با ترکیب sealed interface و value class ها میشه درست کرد اما سینتکس Rust واقعا مختصر و مفیده.


#language_design #enum

✴️ @software_inside - مهندسی‌نرم‌افزار
🔥11👏2👍1👌1
Forwarded from Agora (Alireza)
مسیر ساخت WAF در ترب؛ نگاهی به چالش‌ها و تجربه‌های به‌دست آمده

روزانه تعداد زیادی درخواست خودکار از ربات‌ها به سمت ترب ارسال می‌شود. بعضی از این درخواست‌ها، درخواست‌های مفیدی هستند. برای مثال درخواست‌هایی که از سمت گوگل می‌آید جزء درخواست‌های مفید هستند. از طرفی بعضی از این درخواست‌ها ناخواسته و در دسته‌ی مضر قرار می‌گیرند. برای مثال بعضی از ربات‌ها اقدام به فراخوانی درگاه‌ها ارسال رمز عبور می‌کنند. این کار علاوه بر اعمال هزینه‌های اضافه باعث نارضایتی از سمت شماره‌ی مقصد می‌شود. به همین جهت نیازمند روش‌هایی برای جلوگیری از این درخواست‌های خودکار داریم. در عین حال نباید مانع کار ربات‌های مفید شویم. برای این کار نیازمند سیستمی برای تشخیص و اعمال محدودیت روی درخواست‌ها هستیم.
5👏5🔥3
در مورد system prompt

یه مدل llm که باهاش چت می‌کنیم دو تا پرامپت داره. یکی همون که کاربر می‌نویسه که باهاش آشنا هستیم ولی چیزی که اغلب نمی‌بینیم system promptئه که قبل از پرامپت شما میاد و چیزای کلی بهش گفته می‌شه. شامل تاریخ و ساعت، اسم مدلش احتمالا و یه سری باید و نباید. حتما دیدین که یه سری سوال ها رو LLMها جواب نمی‌دن قاعدتا به خاطر همین system promptشونه.

حالا چرا ما باید برامون مهم باشه؟ ممکنه بخواید یه مدل خام رو اجرا کنید (مثلا با API بهش وصل بشید و چت کنید) یا اصلا خودتون مدل رو لوکال آوردید بالا. بدون system prompt خوب ممکنه نتیجه چت ایده‌آل نباشه در حالی که مدل لزوما مدل بدی نیست. من یه مساله ساده که داشتم این بود که با chatbox به api openrouter وصل شدم ولی خروجی ها کمی به هم ریخته می‌شد. اومدم با یه system prompt ساده مشکل رو حل کردم.
یا ممکنه بخواید یه agent برای یه موضوع و کاربرد خاص بسازید، اون طوری پرامپتی که میدین بهش قبل از پرامپت کاربر میاد و به نوعی system prompt حساب می‌شه.

چطور system prompt خوب ینویسیم؟
https://towardsdev.com/the-art-of-writing-great-system-prompts-abb22f8b8f37

تحلیل system prompt مدل gpt5
https://medium.com/data-science-in-your-pocket/gpt-5-system-prompt-leaked-7-prompt-engineering-tricks-to-learn-85532a647cdf


سیستم پرامپت‌های لیک شده مدل‌های مختلف
https://github.com/jujumilk3/leaked-system-prompts
👍74
نوشته‌های ترمینالی
به بهانه کنسرت علیرضا قربانی و داون شدن سایت فروش بلیط، مسأله سیستم دیزاین امشب: فرض کنید یه سایت فروش بلیت رو می‌خوایم طراحی کنیم که توانایی هندل کردن لود زیاد به شکل bursty رو داشته باشه، مثلاً سر ساعتی که فروش بلیط باز میشه. فلوی رزرو هم به این صورته…
به بهانه جمعه سیاه و مشکل شایع فروشگاه ها در تحمل لود زیاد، بیاید به این فکر کنیم که چطوری می‌تونیم یه فروشگاه با کمپین‌های سر ساعت مشخص داشته باشیم که از دسترس خارج نشه.

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


راهنمایی و فکرهای خودم:
این مدل لود قاعدتا حالت bursty داره و تعداد کاربر خیلی زیاد رو شامل میشه. تو این مسأله هم فرض کنیم هدف اینه که واقعا به مشتری سرویس بدیم نه این که throttle کنیم و لود رو کم کنیم.

من چالش رو دو دسته میبینم.
یکی این که چطوری consistency رو حفظ کنیم و وقتی تعداد زیادی کاربر یک محصول با موجودی کم رو میخوان، بیشتر از تعداد موجودی نفروشیم.
یکی هم این که کاری کنیم سیستم پایدار بمونه و روال های حیاتی مثل دیدن محصولات و ثبت سفارش به درستی کار کنن.

چیزایی که به ذهنم میرسه:
+ لود تست
+ پیدا کردن و حل گلوگاه ها و تغییر معماری در صورت نیاز
+ آماده باش نیروها
+ افزایش منابع
+ داشتن جایگزین برای زیرساخت های مهم مثل برق و اینترنت
19
بحث Escape Analysis یکی از مباحث عمیق و جالب گولنگه.
داستان اینه که توی گولنگ شما خیلی انتخاب نمی‌کنید که چی روی استک باشه و چی روی هیپ. بلکه کامپایلر این تصمیم رو می‌گیره. چطوری؟ اینجا بخونید.

https://www.sobyte.net/post/2022-03/go-escape/

این هم مطلب خوبیه:
https://golang.howtos.io/go-s-escape-analysis-a-practical-guide/
و این ویدیو:
https://youtu.be/ZMZpH4yT7M0
🔥2
تولید کد با AI: آیا واقعا بهبود قابل توجهی حاصل شده؟
مطلب طولانی‌‌ایه و سعی میکنم خلاصه‌ش رو براتون بنویسم:
سرعت تولید کد بالا رفته. درستی کد اومده پایین. اکثر برنامه‌نویس‌ها ازش استفاده میکنن ولی اعتماد کمتری بهش دارن از سال های پیش. سرعتی که حاصل شده چند برابر نیست و نهایتا در حد ۲۰-۳۰ درصده، حتی در کدهای پیچیده کاهش سرعت ۲۰ درصدی هم داشتیم چون کدی که به نظر درست میاد خیلی زمان می‌بره تا تبدیل به کدی بشه که واقعا درسته. مثلا زمان کد ریویو تا ۹۱ درصد افزایش داشته. همه‌جا هه طبیعتا کارکردش شبیه هم نیست مثلاً توی کدهای ساده و آموزشی عالیه ولی توی کدهای پیچیده خوب نیست.
برای این که سازمان بتونه از AI واقعا درست و خوب استفاده کنه نیاز داره فلوهاشو رو تغییر بده و تغییر یکهو و یک شبه نیست.


https://addyo.substack.com/p/the-reality-of-ai-assisted-software
👍15👎2
اگه چند وقت هست با گولنگ کار می‌کنید شاید بد نباشه که یه مروری روی ریزه کاری‌هاش داشته باشید.
من این کتاب ۱۰۰ اشتباه در گولنگ رو خیلی وقت پیش دیده بودم و امروز یه نگاهی انداختم بهش و به نظر برای این منظور کاربردی میاد.
https://100go.co/

برای این که بیش‌تر تشویقتون کنم یک نمونه هم می‌گذارم:

فرض کنید ۱ ملیون ایتم به مپ اضافه میکنیم در این مرحله برنامه ۱۰۰ مگابایت مموری مصرف می‌کنه. حالا هر ۱ ملیون تا رو حذف می‌کنیم و گاربیج کالکتور رو هم صدا می‌کنیم. در این مرحله برنامه چقدر مموری مصرف میکنه؟ نزدیک به صفر؟ پاسخ اینه که نه. چون تعداد bucket های مپ فقط زیاد میشن و کم نمیشن در نتیجه خود مپ همچنان مموری نسبتا زیادی مصرف می‌کنه.
https://100go.co/28-maps-memory-leaks/
👍14