چندتا مهارت که اگه برمیگشتم روز اولی که با برنامه نویسی آشنا شدم حتما به خودم میگفتم تقویتشون کنه:
1. مهم ترین ابزاری که واقعا نیاز دارین تا با ماشین جایگزین نشین، کنجکاوی هست. اگه کنجکاو باشین و بخواین بدونین چجوری اتفاقات بزرگ و کوچیک دور و برتون اتفاق میفته احتمالا از مسیر خیلی بیشتر لذت میبرین. این کنجکاوی به مرور بهتون یاد میده تا سوالای درست تر بپرسین و به جواب دقیق تر برسین.
2. در فرایند رفع کنجکاوی با ذهن باز جلو برین. ممکنه کلی اطلاعات اضافه پیدا کنین که شاید مستقیم به موضوع الانتون ربط نداشته باشه، یادداشتش کنین و یه تایمی از هفته یا ماه خودتون رو به تحقیق اختصاص بدین و این موضوعات رو چک کنین. تحقیق با یادگیری فرق داره، شما نمیخواین با یه سرچ متخصص بشین. میخواین دامنه دانشی کم عمقتون رو گسترش بدین تا اگر در چالشی نیاز داشتین توی ذهنتون سرنخ های موثر داشته باشین.
یادتون باشه:
شما هیچوقت قرار نیست وقت پیدا کنین تا به کاری برسین. باید وقت بسازین و بهش اختصاص بدین. بدون برنامه ریزی این اتفاق هیچوقت نمیفته.
تحقیق به معنی درس خوندن نیست. اگه دیدتون بهش اینه قراره خیلی اذیت بشین. با حجم اطلاعاتی که هرروز در بستر اینترنت رد و بدل میشه، اگه نمیتونین در بخشی از این جریان خودتون رو قرار بدین باید جدی فکر کنین که چرا توسعه دهندهی نرم افزار شدین.
3. در مسیر تحقیق و توسعه ممکنه با ابزارهای مختلف آشنا بشین. یادگرفتن ابزار جدید به این معنی نیست که حتما باید تو پروژه بعدی ازش استفاده کنین. اما دونستنش یه روزی به کار میاد. باز هم برمیگرده به قسمت دامنه دانشی کم عمق، خودتون رو مجبور نکنین که حتما از همچی استفاده کنین، نیازمندی شماست که ابزارهای شما رو تعیین میکنه.
4. در برخورد با چالشهای کاری در پروژههای مختلف، در ابتدای مسیر خیلی درگیر ابزار نشین، اول سعی کنین شماتیک کلی سیستمی که میخواین دیزاین کنین رو درک کنین و روی کاغذ بیارین. توی اون مرحله خیلی مهم نیست که کارها دقیقا چجوری انجام میشن، مهمه که کدوم قسمت از سیستم چه خروجی و ورودی داره، اصطلاح درست ترش میشه چه رفتاری داره، اگه در اون مرحله هم جایی حس کردین که نمیدونین چجوری رفتاری رو پیاده سازی کنین، بعنوان یه جعبه سیاه بزارین بمونه، اکثر مواقع ابزاری هست که اون کارو انجام میده و یا دانشی هست که هنوز ندارین اما در مرحله ی اول نباید خیلی خودتون رو درگیرش کنین.
این نکاتی بود که با گذشت زمان بیشتر بهشون اعتقاد پیدا کردم و دوست داشتم به اشتراک بزارم. اگه کسی رو میشناسین که این پست میتونه براش مفید باشه باهاش به اشتراک بزارین و نظرتون هم برام بنویسین🌹
@ever_code
1. مهم ترین ابزاری که واقعا نیاز دارین تا با ماشین جایگزین نشین، کنجکاوی هست. اگه کنجکاو باشین و بخواین بدونین چجوری اتفاقات بزرگ و کوچیک دور و برتون اتفاق میفته احتمالا از مسیر خیلی بیشتر لذت میبرین. این کنجکاوی به مرور بهتون یاد میده تا سوالای درست تر بپرسین و به جواب دقیق تر برسین.
2. در فرایند رفع کنجکاوی با ذهن باز جلو برین. ممکنه کلی اطلاعات اضافه پیدا کنین که شاید مستقیم به موضوع الانتون ربط نداشته باشه، یادداشتش کنین و یه تایمی از هفته یا ماه خودتون رو به تحقیق اختصاص بدین و این موضوعات رو چک کنین. تحقیق با یادگیری فرق داره، شما نمیخواین با یه سرچ متخصص بشین. میخواین دامنه دانشی کم عمقتون رو گسترش بدین تا اگر در چالشی نیاز داشتین توی ذهنتون سرنخ های موثر داشته باشین.
یادتون باشه:
شما هیچوقت قرار نیست وقت پیدا کنین تا به کاری برسین. باید وقت بسازین و بهش اختصاص بدین. بدون برنامه ریزی این اتفاق هیچوقت نمیفته.
تحقیق به معنی درس خوندن نیست. اگه دیدتون بهش اینه قراره خیلی اذیت بشین. با حجم اطلاعاتی که هرروز در بستر اینترنت رد و بدل میشه، اگه نمیتونین در بخشی از این جریان خودتون رو قرار بدین باید جدی فکر کنین که چرا توسعه دهندهی نرم افزار شدین.
3. در مسیر تحقیق و توسعه ممکنه با ابزارهای مختلف آشنا بشین. یادگرفتن ابزار جدید به این معنی نیست که حتما باید تو پروژه بعدی ازش استفاده کنین. اما دونستنش یه روزی به کار میاد. باز هم برمیگرده به قسمت دامنه دانشی کم عمق، خودتون رو مجبور نکنین که حتما از همچی استفاده کنین، نیازمندی شماست که ابزارهای شما رو تعیین میکنه.
4. در برخورد با چالشهای کاری در پروژههای مختلف، در ابتدای مسیر خیلی درگیر ابزار نشین، اول سعی کنین شماتیک کلی سیستمی که میخواین دیزاین کنین رو درک کنین و روی کاغذ بیارین. توی اون مرحله خیلی مهم نیست که کارها دقیقا چجوری انجام میشن، مهمه که کدوم قسمت از سیستم چه خروجی و ورودی داره، اصطلاح درست ترش میشه چه رفتاری داره، اگه در اون مرحله هم جایی حس کردین که نمیدونین چجوری رفتاری رو پیاده سازی کنین، بعنوان یه جعبه سیاه بزارین بمونه، اکثر مواقع ابزاری هست که اون کارو انجام میده و یا دانشی هست که هنوز ندارین اما در مرحله ی اول نباید خیلی خودتون رو درگیرش کنین.
این نکاتی بود که با گذشت زمان بیشتر بهشون اعتقاد پیدا کردم و دوست داشتم به اشتراک بزارم. اگه کسی رو میشناسین که این پست میتونه براش مفید باشه باهاش به اشتراک بزارین و نظرتون هم برام بنویسین🌹
@ever_code
👍5❤2
دیشب یه ایدهی ای برای یه ابزار کامند لاینی به ذهنم رسید، خلاصه شب و صبح جذابی داشتم، اگه برسم این آخر هفته پابلیش میکنم😁
@ever_code
@ever_code
دواپس بازی هم تموم شد و الان روی هر پوش روی ریپازیتوری درست ورژن میخوره و میره روی نوگت، رسما آمادهست.
❤2
تو سلوشنهای بزرگ دات نت، مدیریت ورژن پکیجهامون میتونه سخت باشه. پکیجهایی که توی چندتا پروژه استفاده شده مثل
Newtonsoft.Json
یا مثلا تو پروژههای تست:
Xunit, NSubstitute, Shouldly
دردسر وقتی شروع میشه که بخوایم ورژن یکی ازین پکیجها رو تغییر بدیم.
مایکروسافت قابلیتی برای پروژههاش تعریف کرده به نام
Central Package Management
به این صورت هست که شما توی سلوشنتون یک فایل به اسم
Directory.Packages.props
میسازین و توی اون اسم پکیجها به همراه ورژنشون رو مشخص میکنین و بعد از اون توی هر پروژهای که خواستین کافیه فقط اسم (بدون ورژن) پکیج رو به فایل csproj پروژهتون اضافه کنین. اینطوری از یجا ورژن پکیج ها رو مشخص میکنین هرموقع خواستین میتونین به راحتی تغییرش بدین.
اگه پروژهای داشته باشین و بخواین دستی به CPM تغییرش بدین، احتمالا کار حوصله سر بر و سختی باشه. اینجاست که CPMGen به کمکتون میاد! با استفاده از cpmgen میتونین با یک دستور خیلی سریع پروژهتون رو به CPM تغییر بدین. این یک ابزار دات نت هست و با استفاده از دستور زیر میتونین نصبش کنین:
dotnet tool install --global CPMGen
قابلیتهاش:
بهصورت خودکار فایلهای .sln یا .csproj را در پروژه پیدا میکنه (یا میتونی مسیر دلخواه بدهی).
یک فایل Directory.Packages.props میسازه و نسخهٔ همهٔ پکیجها را متمرکز میکنه
فایلهای csproj. رو آپدیت میکنه و قسمت ورژن پکیج رو خودش حذف میکنه
امکان بکاپ داخلی داره تا نسخهٔ اصلی فایلها حفظ شود.
در صورت نیاز، پوشهٔ بکاپ رو به .gitignore اضافه میکند.
لینک پروژه:
https://github.com/PureJoyMind/CPMGen
داخل پروژه اطلاعات بیشتری راجب نحوه کار باهاش هست و خود ابزار هم از help ساپورت میکنه.
اگه هم باگی داشت یا قابلیتی بود که دوست داشتین بهش اضافه کنین ایشو بزنین و مشارکت کنین❤️
@ever_code
Newtonsoft.Json
یا مثلا تو پروژههای تست:
Xunit, NSubstitute, Shouldly
دردسر وقتی شروع میشه که بخوایم ورژن یکی ازین پکیجها رو تغییر بدیم.
مایکروسافت قابلیتی برای پروژههاش تعریف کرده به نام
Central Package Management
به این صورت هست که شما توی سلوشنتون یک فایل به اسم
Directory.Packages.props
میسازین و توی اون اسم پکیجها به همراه ورژنشون رو مشخص میکنین و بعد از اون توی هر پروژهای که خواستین کافیه فقط اسم (بدون ورژن) پکیج رو به فایل csproj پروژهتون اضافه کنین. اینطوری از یجا ورژن پکیج ها رو مشخص میکنین هرموقع خواستین میتونین به راحتی تغییرش بدین.
اگه پروژهای داشته باشین و بخواین دستی به CPM تغییرش بدین، احتمالا کار حوصله سر بر و سختی باشه. اینجاست که CPMGen به کمکتون میاد! با استفاده از cpmgen میتونین با یک دستور خیلی سریع پروژهتون رو به CPM تغییر بدین. این یک ابزار دات نت هست و با استفاده از دستور زیر میتونین نصبش کنین:
dotnet tool install --global CPMGen
قابلیتهاش:
بهصورت خودکار فایلهای .sln یا .csproj را در پروژه پیدا میکنه (یا میتونی مسیر دلخواه بدهی).
یک فایل Directory.Packages.props میسازه و نسخهٔ همهٔ پکیجها را متمرکز میکنه
فایلهای csproj. رو آپدیت میکنه و قسمت ورژن پکیج رو خودش حذف میکنه
امکان بکاپ داخلی داره تا نسخهٔ اصلی فایلها حفظ شود.
در صورت نیاز، پوشهٔ بکاپ رو به .gitignore اضافه میکند.
لینک پروژه:
https://github.com/PureJoyMind/CPMGen
داخل پروژه اطلاعات بیشتری راجب نحوه کار باهاش هست و خود ابزار هم از help ساپورت میکنه.
اگه هم باگی داشت یا قابلیتی بود که دوست داشتین بهش اضافه کنین ایشو بزنین و مشارکت کنین❤️
@ever_code
GitHub
GitHub - PureJoyMind/CPMGen: A command-line tool that helps you quickly migrate large .NET solutions to Central Package Management…
A command-line tool that helps you quickly migrate large .NET solutions to Central Package Management (CPM) - PureJoyMind/CPMGen
❤6👍1
EverCode
تو سلوشنهای بزرگ دات نت، مدیریت ورژن پکیجهامون میتونه سخت باشه. پکیجهایی که توی چندتا پروژه استفاده شده مثل Newtonsoft.Json یا مثلا تو پروژههای تست: Xunit, NSubstitute, Shouldly دردسر وقتی شروع میشه که بخوایم ورژن یکی ازین پکیجها رو تغییر بدیم. مایکروسافت…
این هم لوگوشه🙄 روی ریپازیتوری ست کردم ولی تو کارت نمیاره😅
@ever_code
@ever_code
❤3
خبر خوب، دو تا پکیج
Npgsql 10.0.0
Npgsql.EntityFrameworkCore.PostgreSQL 10.0.0
برای کار با Postgres توی دات نت ریلیز شدن. قبلا یه سری ایشو اساسی وجود داشت که کار باهاشون رو مشکل میکرد اما الان ایشوها بسته شدن و برای دات نت ۱۰ ریلیز دادن.
https://www.nuget.org/packages/Npgsql
https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL
@ever_code
Npgsql 10.0.0
Npgsql.EntityFrameworkCore.PostgreSQL 10.0.0
برای کار با Postgres توی دات نت ریلیز شدن. قبلا یه سری ایشو اساسی وجود داشت که کار باهاشون رو مشکل میکرد اما الان ایشوها بسته شدن و برای دات نت ۱۰ ریلیز دادن.
https://www.nuget.org/packages/Npgsql
https://www.nuget.org/packages/Npgsql.EntityFrameworkCore.PostgreSQL
@ever_code
www.nuget.org
Npgsql 10.0.1
Npgsql is the open source .NET data provider for PostgreSQL.
❤4
ویژوال استودیو ۲۰۲۶ نصب کردم گفتم تست کنم، امیدم این بود که کار با xaml توش راحت تر باشه، ولی کند بود و از طرفی هنوز با intellisense اش مشکل دارم و نمیخوام resharper نصب کنم چون خیلی مصرف رو بالا میبره، پاک کردم و به کار با Rider ادامه دادم. دیدم اپدیت داده و هم ui رو خوشگل تر کرده و هم پرفورمنسش خیلی بهتره. برای کار xaml هم خب شاید به اندازه vs قابلیت نداشته باشه، ولی بطور کلی من خودم xaml رو مینوسیم و از فیچر drag and drop ویژوال استفاده نمیکنم، پس هنوز rider عالیه😂😁
@ever_code
@ever_code
👍4🔥1
اگر ویزاکارت دارین سایت educative.io برای ایرانیا تخفیف گذاشته، اگه پلن سالانهش رو بگیرین ماهی ۸ دلار میفته، برای اونایی که پولشون اضافه کرده و ویزا کارت دارن مناسبه😂
باید بدون وی پی ان برین تا بفهمه ایرانی هستین و تخفیف بیشتر بده، و اینکه اگه امروز بگیرین تا آخر عمر تخفیف ایرانی بودن رو میگیرین
@ever_code
باید بدون وی پی ان برین تا بفهمه ایرانی هستین و تخفیف بیشتر بده، و اینکه اگه امروز بگیرین تا آخر عمر تخفیف ایرانی بودن رو میگیرین
@ever_code
اخیرا ردیت اومده یواش یواش بخشهایی از بک اند رو از پایتون به گولنگ تغییر داده. اولین سرویسی که تغییرش رسمی روی پروداکشن اومده سرویس کامنت هست. توی ردیت کامنت یه بخش خیلی بزرگی از کل پلتفرمه. برای همین خیلی مهمه که سیستمی که این بخش رو مدیریت میکنه برای throughout بالا مناسب باشه. بنظرم بحث جذابیه و ارزش خوندن داره.
لینک مقالهش توی خود ردیت:
https://www.reddit.com/r/RedditEng/s/2tmpQVQSdv
#reddit #golang #systemdesign
@ever_code
لینک مقالهش توی خود ردیت:
https://www.reddit.com/r/RedditEng/s/2tmpQVQSdv
#reddit #golang #systemdesign
@ever_code
Reddit
From the RedditEng community on Reddit
Explore this post and more from the RedditEng community
Forwarded from جادی | Jadi
خب خب امسال هم به دسامبر رسیدیم و تمرینهای Advent Of Code. یک مجموعه مساله برنامه نویسی که ده سالی شده که هر سال از اول دسامبر تا ۲۵ دسامبر هر روز یکی منتشر میشن و می تونین به هر زبونی حلش کنین و برنامه نویسی خودتون (یا مهارتتون در یک زبون خاص) رو بهتر کنین. سطوح مسالهها متفاوت است و به شکل سنتی جلوتر که میریم سختتر می شن. موضوعات جالبن و سوالها هیجان انگیز طراحی شدن. و خب معلومه که خیلی هاش (احتمالا امسال همه) رو هوش مصنوعی میتونه حل کنه؛ دقیقا همونطور که لیفتراک میتونه کل وزنههایی که توی جیم میزنین رو یه جا بلند کنه (: سوال اینه که شما میخواین وزنهها رو جابجا کنین یا می خواین ورزیده بشین.
با ادونت آو کد امسال خوش بگذره. من معمولا تفننی هر روز نگاهش می کنم و گاهی سعی می کنم حلش کنم اگر در طول روز وقت داشته باشم.
https://adventofcode.com/2025/about
#برنامه_نویسی
با ادونت آو کد امسال خوش بگذره. من معمولا تفننی هر روز نگاهش می کنم و گاهی سعی می کنم حلش کنم اگر در طول روز وقت داشته باشم.
https://adventofcode.com/2025/about
#برنامه_نویسی
❤2🔥1
جادی | Jadi
خب خب امسال هم به دسامبر رسیدیم و تمرینهای Advent Of Code. یک مجموعه مساله برنامه نویسی که ده سالی شده که هر سال از اول دسامبر تا ۲۵ دسامبر هر روز یکی منتشر میشن و می تونین به هر زبونی حلش کنین و برنامه نویسی خودتون (یا مهارتتون در یک زبون خاص) رو بهتر کنین.…
ایونت advent of code 2025 شروع شد. منم شرکت کردم و یواش یواش جوابای سوالایی که حل میکنم رو توی این ریپازیتوری میذارم:
https://github.com/PureJoyMind/AdventOfCode2025
سعی کردم تمیز و خوانا و در عین حال با در نظر گرفتن پرفورمنس بنویسم و فقط جوابهایی رو قرار میدم که تائید شده باشن.
هدف اینه که خودمون رو به چالش بکشیم و اگر هم شد چیزی یاد بگیریم.
شماها هم شرکت کنین و راه حلاتون رو به اشتراک بزارین😍
اگه هم از هوش مصنوعی استفاده میکنین، سعی کنین برای یادگیری باشه، نه که راه حل رو بگیرین، بعد بشینین بخونین چیکار کرده بعد بگین خب یاد گرفتیم. صرفا بجای گوگل و سوالهای عمومی ازش استفاده کنین، مگر اینکه بخواین خودتون رو گول بزنین.
@ever_code
https://github.com/PureJoyMind/AdventOfCode2025
سعی کردم تمیز و خوانا و در عین حال با در نظر گرفتن پرفورمنس بنویسم و فقط جوابهایی رو قرار میدم که تائید شده باشن.
هدف اینه که خودمون رو به چالش بکشیم و اگر هم شد چیزی یاد بگیریم.
شماها هم شرکت کنین و راه حلاتون رو به اشتراک بزارین😍
اگه هم از هوش مصنوعی استفاده میکنین، سعی کنین برای یادگیری باشه، نه که راه حل رو بگیرین، بعد بشینین بخونین چیکار کرده بعد بگین خب یاد گرفتیم. صرفا بجای گوگل و سوالهای عمومی ازش استفاده کنین، مگر اینکه بخواین خودتون رو گول بزنین.
@ever_code
GitHub
GitHub - PureJoyMind/AdventOfCode2025
Contribute to PureJoyMind/AdventOfCode2025 development by creating an account on GitHub.
❤3
Forwarded from Armon technical logs (armon Taheri)
به زیبا ترین و پرکتیکال ترین روش ممکن مباحث مجازی سازی نتورک در لینوکس رو توضیح داده
https://thachmpham.github.io/
https://thachmpham.github.io/
❤1
همهی داتنتکارها با Entity Framework و Repository Pattern آشنا هستن و احتمالاً اکثرمون با این بحث که آیا واقعاً نیاز به Repository داریم وقتی خود EF داره این کارو میکنه، درگیر شدیم. یکی از قویترین دلایلی که مخالف این پترن هست، اینه که خب ما توی پروژههای واقعی هیچوقت نمیایم دیتابیس رو تغییر بدیم که Repository بخواد کمکمون کنه.
با اینکه این فرضیه برای اکثر پروژهها درسته، اما مثال نقض هم داره. اکثر ما وقتی راجعبه پروژه فکر میکنیم چیزی مثل فروشگاه توی ذهنمون میاد؛ مثل دیجیکالا، یا سایتهای بانکی و مالی. و خب کاملاً درسته که توی اونجور پروژهها نخوایم لایهی دیتابیس رو تغییر بدیم. اما نرمافزار فقط شامل فروشگاه و حسابداری و بورس نمیشه. یه دسته از نرمافزارهایی هم هستند که برای اینکه توی سازمان استفاده بشن، یا تحت وب و برای عموم، باید خودمون روی سرورمون نصبشون کنیم. مثال فنی مثل Keycloak یا نرمافزارهای مدیریت مستندات سازمانی و بقیهی نرمافزارهای زیرساختی، فنی و کاربردی درونسازمانی.
اینجور نرمافزارها معمولاً ، نه همیشه، به ما حق انتخاب بین چند دیتابیس رو میدن. اینجاست که استفاده از Repository و یا حتی خود EF خیلی بهدرد میخوره. علت اینکه همیشه ممکنه EF جوابگو نباشه هم اینه که شاید لایهی دادهمون الزاماً دیتابیس نباشه و شاید یه سرویس مجزا باشه که باید بهش HTTP Request بزنیم و داده رو بگیریم. پس باید فکر کنیم که کاربرد ما چی میتونه باشه و بر طبق اون پیش بریم. از اونجایی که این چند ماهه خیلی با نرمافزارهای اینجوری درگیر بودم، این موضوع برام جالب بود که اگه خودم قرار باشه سیستمی طراحی کنم که چندتا دیتابیس مختلف رو بتونه ساپورت کنه، چیکار میکردم.
@ever_code
با اینکه این فرضیه برای اکثر پروژهها درسته، اما مثال نقض هم داره. اکثر ما وقتی راجعبه پروژه فکر میکنیم چیزی مثل فروشگاه توی ذهنمون میاد؛ مثل دیجیکالا، یا سایتهای بانکی و مالی. و خب کاملاً درسته که توی اونجور پروژهها نخوایم لایهی دیتابیس رو تغییر بدیم. اما نرمافزار فقط شامل فروشگاه و حسابداری و بورس نمیشه. یه دسته از نرمافزارهایی هم هستند که برای اینکه توی سازمان استفاده بشن، یا تحت وب و برای عموم، باید خودمون روی سرورمون نصبشون کنیم. مثال فنی مثل Keycloak یا نرمافزارهای مدیریت مستندات سازمانی و بقیهی نرمافزارهای زیرساختی، فنی و کاربردی درونسازمانی.
اینجور نرمافزارها معمولاً ، نه همیشه، به ما حق انتخاب بین چند دیتابیس رو میدن. اینجاست که استفاده از Repository و یا حتی خود EF خیلی بهدرد میخوره. علت اینکه همیشه ممکنه EF جوابگو نباشه هم اینه که شاید لایهی دادهمون الزاماً دیتابیس نباشه و شاید یه سرویس مجزا باشه که باید بهش HTTP Request بزنیم و داده رو بگیریم. پس باید فکر کنیم که کاربرد ما چی میتونه باشه و بر طبق اون پیش بریم. از اونجایی که این چند ماهه خیلی با نرمافزارهای اینجوری درگیر بودم، این موضوع برام جالب بود که اگه خودم قرار باشه سیستمی طراحی کنم که چندتا دیتابیس مختلف رو بتونه ساپورت کنه، چیکار میکردم.
@ever_code
❤6💯1
https://softwarepatternslexicon.com/
"Your ad-free encyclopedia of code-level patterns and real-world architectures. Master OOP & FP, microservices, EIP, DDD, streaming, ML patterns, and cloud-native design—then validate skills with Mastery™ Tech Exam Prep. "
این سایت یک دانشنامه برای Design pattern، Architecture و مطالب مرتبط هست. حجم مطالبش زیاده و بنظر جذاب میاد برای گشت و گذار، تحقیق و یادگیری.
@ever_code
"Your ad-free encyclopedia of code-level patterns and real-world architectures. Master OOP & FP, microservices, EIP, DDD, streaming, ML patterns, and cloud-native design—then validate skills with Mastery™ Tech Exam Prep. "
این سایت یک دانشنامه برای Design pattern، Architecture و مطالب مرتبط هست. حجم مطالبش زیاده و بنظر جذاب میاد برای گشت و گذار، تحقیق و یادگیری.
@ever_code
❤2
استفاده از Guid مزایا و معایب خودش رو داره. دوتا نکته مهمی که راجبش وجود داره، یکی تفاوت سایزش با int هست، به این صورت که idهایی از جنس int توی دیتابیس 32 بیت فضا میگیرن، اما id هایی از جنس Guid توی دیتابیس 128 بیت فضا میگیرن. چالش بعدی، تصادفی بودنشون خوبه ازین جهت که یه سری پیچیدگیهای رو کم میکنه و نیازی نیست خیلی نگران id تکراری باشیم، اما همین تصادفی بودن باعث میشه موقع index کردن دیتابیس به مشکلی تحت عنوان index fragmentation بر بخوریم. لینک زیر بیشتر راجب این موضوع توضیح میده:
https://www.mssqltips.com/sqlservertip/4331/sql-server-index-fragmentation-overview/
اما راه حل چیه؟ ما نیاز داریم تا بتونیم حداقل تا حدی از کاملا تصادفی بودن دور بشیم در حدی که بتونیم "تا حدودی" id های sortable داشته باشیم. مقالهی زیر میاد این مسائل رو بطور مختصر بررسی میکنه و راه حل مناسبی ارائه میده:
https://andrewlock.net/generating-sortable-guids-using-newid/
راه حل چیه؟ پکیج NewId اومده و با الهام گرفتن از روشی که توئیتر روی Snowflake استفاده کرده برامون UUID یا همون GUID خودمون تو دات نت ایجاد میکنه که sortable هست. این کار چه اثری داشته؟
میزان fragmentation رو از 98 درصد به 5 درصد کاهش میده. داخل هر page دیتابیس فضای خالی کمتری بجا میزاره، اینطوری که guid عادی 75 درصد هر page رو پر میکنه اما guid جدیدمون 98 درصد رو پر میکنه و اینطوری باعث شده که تعداد page های ساخته شده از 77 تا به 59 تا برسه و از فضا بصورت بهینه استفاده کنه!
@ever_code
https://www.mssqltips.com/sqlservertip/4331/sql-server-index-fragmentation-overview/
اما راه حل چیه؟ ما نیاز داریم تا بتونیم حداقل تا حدی از کاملا تصادفی بودن دور بشیم در حدی که بتونیم "تا حدودی" id های sortable داشته باشیم. مقالهی زیر میاد این مسائل رو بطور مختصر بررسی میکنه و راه حل مناسبی ارائه میده:
https://andrewlock.net/generating-sortable-guids-using-newid/
راه حل چیه؟ پکیج NewId اومده و با الهام گرفتن از روشی که توئیتر روی Snowflake استفاده کرده برامون UUID یا همون GUID خودمون تو دات نت ایجاد میکنه که sortable هست. این کار چه اثری داشته؟
میزان fragmentation رو از 98 درصد به 5 درصد کاهش میده. داخل هر page دیتابیس فضای خالی کمتری بجا میزاره، اینطوری که guid عادی 75 درصد هر page رو پر میکنه اما guid جدیدمون 98 درصد رو پر میکنه و اینطوری باعث شده که تعداد page های ساخته شده از 77 تا به 59 تا برسه و از فضا بصورت بهینه استفاده کنه!
@ever_code
MSSQLTips.com
SQL Server Index Fragmentation Overview
We have all heard about SQL Server database and index fragmentation, but what is it and is it an issue? Read this tip to learn more about fragmentation.
Forwarded from Go Casts 🚀
زبان Zig: زبانی که آروم داره جای خودش رو پیدا میکنه
این روزها هرجا نگاه میکنم، یه پروژه performance-critical جدید میبینم که با Zig نوشته شده. Bun - همون JavaScript runtimeی که هفته پیش Anthropic خریدش با Zig نوشته شده. Lightpanda - یه headless browser که ادعا میکنه ۱۰ برابر Chrome سریعتره با Zig نوشته شده. TigerBeetle - یه دیتابیس مالی که قراره جایگزین سیستمهای بانکی بشه - با Zig نوشته شده.
مقاله Lightpanda یه تیتر خیلی صادقانه داره: «چون به اندازه کافی باهوش نیستیم که با C++ یا Rust بنویسیم.»
زبان Zig رو Andrew Kelley از سال ۲۰۱۵ شروع کرد چون داشت روی یه پروژه real-time audio کار میکرد و از C کلافه شده بود. فلسفه طراحیش سادهست: هیچ چیز مخفی نباشه. هیچ hidden allocation نداری، هیچ operator overloadingی نداری، هیچ exceptionی نداری. وقتی کد رو میخونی، دقیقاً میفهمی چی اجرا میشه. یه فیچر خیلی قوی داره به اسم comptime که باهاش میتونی موقع کامپایل کد اجرا کنی - مثل macroهای C ولی با همون سینتکس Zig. همچنین میتونی مستقیم headerهای C رو import کنی و با کدبیسهای قدیمی کار کنی.
حالا سوال اصلی: چرا Zig و نه Rust؟ جواب کوتاه: Zig سادهتره ولی unsafe تره. Rust با borrow checker تضمین میکنه memory safe هستی، ولی learning curve سنگینی داره. Zig این تضمین رو نمیده - بجاش یه سری runtime check داره که توی debug mode کمکت میکنه. Jarred Sumner (سازنده Bun) گفته اول میخواست با Rust بنویسه ولی نتونست productive باشه. تیم TigerBeetle هم گفته برنامهنویسهای خوب از هر زبانی میتونن Zig رو توی یه آخر هفته یاد بگیرن.
زبان Zig هنوز به نسخه ۱.۰ نرسیده و اکوسیستم بالغی نداره. برای پروداکشن معمولی توصیه نمیشه. ولی برای systems programming - جایی که میخوای به سختافزار نزدیک باشی، performance حیاتیه، و با زبان C باید interpolation داشته باشی - داره به یه گزینه جدی تبدیل میشه. وقتی Anthropic میاد Bun رو میخره و میگه میخوایم زیرساخت Claude Code رو باهاش بسازیم، یعنی این زبان دیگه فقط یه اسباببازی نیست.
Why We Built Lightpanda in Zig
Because We're Not Smart Enough for C++ or Rust
https://lightpanda.io/blog/posts/why-we-built-lightpanda-in-zig
Anthropic acquires Bun as Claude Code reaches $1B milestone
https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone
@gocasts
این روزها هرجا نگاه میکنم، یه پروژه performance-critical جدید میبینم که با Zig نوشته شده. Bun - همون JavaScript runtimeی که هفته پیش Anthropic خریدش با Zig نوشته شده. Lightpanda - یه headless browser که ادعا میکنه ۱۰ برابر Chrome سریعتره با Zig نوشته شده. TigerBeetle - یه دیتابیس مالی که قراره جایگزین سیستمهای بانکی بشه - با Zig نوشته شده.
مقاله Lightpanda یه تیتر خیلی صادقانه داره: «چون به اندازه کافی باهوش نیستیم که با C++ یا Rust بنویسیم.»
زبان Zig رو Andrew Kelley از سال ۲۰۱۵ شروع کرد چون داشت روی یه پروژه real-time audio کار میکرد و از C کلافه شده بود. فلسفه طراحیش سادهست: هیچ چیز مخفی نباشه. هیچ hidden allocation نداری، هیچ operator overloadingی نداری، هیچ exceptionی نداری. وقتی کد رو میخونی، دقیقاً میفهمی چی اجرا میشه. یه فیچر خیلی قوی داره به اسم comptime که باهاش میتونی موقع کامپایل کد اجرا کنی - مثل macroهای C ولی با همون سینتکس Zig. همچنین میتونی مستقیم headerهای C رو import کنی و با کدبیسهای قدیمی کار کنی.
حالا سوال اصلی: چرا Zig و نه Rust؟ جواب کوتاه: Zig سادهتره ولی unsafe تره. Rust با borrow checker تضمین میکنه memory safe هستی، ولی learning curve سنگینی داره. Zig این تضمین رو نمیده - بجاش یه سری runtime check داره که توی debug mode کمکت میکنه. Jarred Sumner (سازنده Bun) گفته اول میخواست با Rust بنویسه ولی نتونست productive باشه. تیم TigerBeetle هم گفته برنامهنویسهای خوب از هر زبانی میتونن Zig رو توی یه آخر هفته یاد بگیرن.
زبان Zig هنوز به نسخه ۱.۰ نرسیده و اکوسیستم بالغی نداره. برای پروداکشن معمولی توصیه نمیشه. ولی برای systems programming - جایی که میخوای به سختافزار نزدیک باشی، performance حیاتیه، و با زبان C باید interpolation داشته باشی - داره به یه گزینه جدی تبدیل میشه. وقتی Anthropic میاد Bun رو میخره و میگه میخوایم زیرساخت Claude Code رو باهاش بسازیم، یعنی این زبان دیگه فقط یه اسباببازی نیست.
Why We Built Lightpanda in Zig
Because We're Not Smart Enough for C++ or Rust
https://lightpanda.io/blog/posts/why-we-built-lightpanda-in-zig
Anthropic acquires Bun as Claude Code reaches $1B milestone
https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone
@gocasts
👍3
شاید یکی از بزرگترین پشیمونیهام این باشه که به اندازه کافی تو دانشگاه توی low-level programming عمیق نشدم. الان باید انرژی بیشتری بزارم تا به چیزی که اون موقع زمانش رو راحت داشتم برسم.
@ever_code
@ever_code
❤1👍1🔥1
آیا از پیاده سازی متدهای خودتون خسته شدین؟ خب مهم نیست بسپارینش به AI به ما چه اصلا😂
به
No-implementation oriented programming
سلام کنید😭
https://github.com/lofcz/ai
این دوستمون اومده پکیجی نوشته که میاد متدهایی که حال نداریم بنویسیم رو میسپره به AI و در زمان اجرا جوابشون رو میگیره ازش.
شوخی عجیبیه ولی خب...
@ever_code
به
No-implementation oriented programming
سلام کنید😭
https://github.com/lofcz/ai
این دوستمون اومده پکیجی نوشته که میاد متدهایی که حال نداریم بنویسیم رو میسپره به AI و در زمان اجرا جوابشون رو میگیره ازش.
شوخی عجیبیه ولی خب...
@ever_code
GitHub
GitHub - lofcz/ai
Contribute to lofcz/ai development by creating an account on GitHub.
❤2