EverCode
252 subscribers
64 photos
3 videos
4 files
96 links
اینجا راجب کامپیوتر، نرم افزار، زبان‌ها و مطالب مرتبط با هم گپ میزنیم

سایت و بلاگ:
mazdakparnian.com

dev.to/purejoymind

هم توی سایت شخصیم و هم توی دِو بلاگ هام رو میزارم.
Download Telegram
این چندوقته که فرایند جابجایی رو پشت سر میذاشتم، یکی از نکاتی که تک و توک چندبار گفتم و بنظرم هرچی ازش بگیم کمه خیلی برام شفاف‌تر شد.
هرچقدر کنجکاوی کنیم باز کمه.
روحیه پرسشگری، یکی از مهم‌ترین خصوصیاتی هست که جدای مهارت فنی باید تقویت کنین در خودتون. با دوره‌ دیدن و کپی کردن تقویت نمیشه. باید واقعا بخواین بدونین چه اتفاقی داره میفته، باید ذوق و شوق گشتن داشته باشین، حتی بیشتر از ذوق پیدا کردن.
وقتی از کنجکاوی حرف میزنیم، خیلی‌ها ذهنشون میره سمت اینکه "وای من وقت ندارم کتاب خونم، وقت ندارم دوره ببینم" از طرفی سوالی که ازم زیاد پرسیده میشه اینه که "چجوری وقت میکنی این همه بخونی؟"
نباید کتاب خوند تا عدد کتاب‌های خونده شده‌مون بالا بره. باید چالشی مطرح شده باشه که کتاب حلش بکنه. باید چالشی باشه که دیدن دوره بهمون اضافه بکنه.
خیلی دوره‌ها و کتاب‌ها رو کامل نباید دید و  خوند. این بزرگ‌ترین تفاوتی هست که بین افراد دیدم.
خودم حس میکنم بیشترین رشد رو از وقتی که شروع کردم دنبال جواب گشتن پیدا کردم، تا وقتی که صرفا دوره میدیدم تا یچی یاد بگیرم همینطوری. خیلی از مسائلی که امروز بلدم رو، وقتی اوایل مسیر میخواستم بخونم، چون هنوز به سطحی نرسیده بودم که چالش مطرح بشه برام تو اون حوزه، نمیفهمیدم. میخوندما ولی واقعا احساس گنگی داشتم.
اما از وقتی که سعی کردم چالش مطرح کنم، خودم رو باهاش درگیر کنم، و دنبال جواب قانع کننده باشم، خیلی تغییر کردم.

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

کلید کار اینه که زمان بین وقتی سوال پیش میاد تا به جواب اولیه میرسین رو کم بکنین و عادت کنید که سریع به جواب برسین.

این موضوع تجربه من بوده و تا الان نتایج خیلی خوبی گرفتم ازش.

@ever_code
👍5
دیدین بعضی اوقات یه تصمیماتی به ذهنتون میاد که دلایل زیادی هست انجامش ندین، ولی واقعا دلتون میخواد؟ قراره یکی ازون تصمیمات بگیرم.
لپ تاپ من کارت گرافیک NVIDIA داره و از اول NVIDIA خیلی با لینوکس داستان داشته. اما با تحقیقات اخیرم بنظر میاد این مشکلات اکثرا حل شدن و یا حداقل راهی براش هست.
منم بطور کلی خیلی با ویندوز حال نمیکنم. سنگینه، خیلی سخت Customize میشه، و همیشه تجربه بهتری با لینوکس داشتم.
طبق نتایج تحقیقاتم، برای لپتاپ‌های Gaming، گزینه مناسبی که توی بازار هست Fedora میشه.
حتی یه تیمی اومده یه distro بر پایه‌ی Fedora بالا اورده به نام Bazzite که برای گیمرها طراحی شده، از اول درایور‌های Nvidia روش نصب شدن، اپ‌هایی مثل Steam و Discord و چندتا دیگه که گیمرها نیاز دارن از اول روش هست.
بزرگترین تفاوت Bazzite و Fedora توی اینه که برای استیبل بودنش، Bazzite آپدیت‌ها رو بصورت Snapshot image دریافت می‌کنه. خودش توی Background این رو هندل میکنه و دیگه مثل لینوکس‌های روزمره شما دستوری مثل
sudo apt update
یا اینچنینی ترجیحا نباید استفاده بکنین.
البته که با Ubuntu هم این مشکلات حل شده و میشه درایورهای NVIDIA رو راه انداخت روش و به معنی این نیست که نمیتونین.
لینک سایت‌های Bazzite و Fedora:
https://bazzite.gg
https://fedoraproject.org


حتی اگه نمی‌خواین روی سیستمتون نصب کنین، بعنوان توسعه دهنده‌ی نرم افزار توصیه میکنم روی virtual machine یه Ubuntu یا حتی بهتر، Debian بالا بیارین و سعی کنید مثل یه VPS راه اندازی بکنین. بعد روش اپ خودتون رو هاست کنید. بنظرم درگیر شدن با این موضوع یکی از جالب‌ترین و آموزنده‌ترین تجربیاتی بود که خودم داشتم و روی یه VPS سرویس بالا آوردم و دارم نگهداری میکنم. توی این پست هم برای شروع میتونید الهام بگیرید چه کارهایی باید انجام بدین:

https://t.me/ever_code/29

اگه با این تصمیم جلو رفتم براتون از تجربیاتم بیشتر میگم.
@ever_code
👍3❤1👏1
Hello from Fedora!

@ever_code
😎3
کاری ندارم. همین چیزی که میبینید، تنظیمات کارت گرافیک های NVIDIA و RGB سیستمهای Asus، کلی زحمت پشتش بوده و تا چندسال پیش میگفتن ولش کن اصلا نرو سمتش!
خلاصه که همیشه یکی پیدا میشه این مشکلات رو حل بکنه.
@ever_code
🔥2❤1
وسط جنگ حوصلم سر رفت اومدم یه tui framework کوچولو ساختم.
بنظرم پروژه جالبی بود که بدون اینترنت و هوش مصنوعی خودم رو درگیرش کنم.
هدف این بود که ببینم این فریمورک‌های بزرگ و معروف چه کارایی انجام میدن. حقیقتا بعد از نوشتن همین چیزی که خیلی قابلیت زیادی جز مدیریت صفحه و border و cursor state ابتدایی نداشت، خیلی قدر یه سری چیزها رو بهتر میدونم.

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

اول برام خیلی گنگ بود که خب چطوری انقدر کارای عجیب و غریب با ترمینال میکنن، تهش به یک حقیقت تلخ رسیدم، همه چیز فقط و فقط با یک cursor انجام میشه :)
همه‌ی اپ‌های ترمینالی که میبینید که پنجره‌های مختلف دارن، progress bar دارن، و ازین دسته فیچرها، همشون احتمالا دارن پشت صحنه دستی state رو مدیریت میکنن.

خلاصه منم یکی نوشتم که خیلی کار داره، ولی تونستم صفحه رو تقسیم کنم و تو هر قسمتش بصورت صحیح متن بنویسم.

@ever_code
👍3❤2
‏احتمالا کلیت اینکه وقتی یه ریکوئست زده میشه، از DNS و TCP تا رسیدن به سرور و گرفتن ریسپانس چه اتفاقی میفته رو میدونین. ولی اگه دوست داشتین این پروسه رو با دیتیل بیشتری بفهمینش به نظرم این سایت رو حتما چک کنین چون خیلی دقیق و خیلی پرجزییات این فرآیند رو براتون توضیح میده

https://200ms.thenodebook.com/

@codehalics | کدهالیک
خب این چندوقته درگیر راه اندازی و شخصی سازی سیستم بودم. گفتم بهتون یه بخشی از فضا رو نشون بدم.
فعلا در حال نصب بازی ام تا ببینم میشه یا نه. ولی درکل خیلی ازش راضی ام. هم راحت میشه تم و صفحه و اینا رو کاستوم کرد.
هم سرعتش بهتره، هم هرچی میخوام تقریبا هست روش. یکم باید حواسم باشه که چیا نصب میکنم ولی فعلا اوکی بوده.

یه قسمت روی اینکه چیکارا باید بعد نصب اولیه Fefora بکنیم شاید برم (اگه وقت کنم بنویسم 😢)

@ever_code
این مدت خودم رو درگیر یه پروژه جالب کردم، اومدم برای خودم با دات نت یه دانلود منیجر نوشتم.
اول Core اش رو به لحاظ فنی برای کلود توضیح دادم، بعد کم کم فیچرهای اولیه رو به core اضافه کردم. بعد که دیگه آماده بود و کار میکرد امروز با استفاده از Avalonia دادم اپش رو نوشت، تا اینجا جالب بوده. قسمتی که کارو راحت کرد این بود که Avalonia یه mcp خوب داره که ایجنت راحت میتونه باهاش کار کنه.
کم کم کامل تر که بشه سورسش رو میزارم.
فیجرهایی که تا اینجا داره:
* تقسیم فایل برای افزایش سرعت دانلود
* توقف/ادامه دانلود، اول بایت های دانلود شده رو توی فایل با پسوند خاص نگه میداره که بعدا هم راحت بتونه ادامه بده.
* تنظیم سرعت دانلود
* تنظیمات Retry و Timeout


@ever_code
❤2👍1🔥1
امروز خیلی روی دانلود منیجر کار کردم، چون ابزاریه که میخوام خودم استفاده کنم، و مدام فیچرها و تجربه کاربری رو دستکاری کردم تا به اون چیزی که میخوام نزدیک تر بشه، از طرفی نکات خاصی هم هست برای آماده کردنش برای پروداکشن که اونا هم اضافه کردم به مرور، مثلا Crash log و راحت کردن ثبت issue توی github، و ازین دست کارها. به زودی فکر کنم بتونم نسخه اولیه رو روی github بزارم.

خودم با System Tray Icon اش حال کردم و بنظرم بد نشد. بالای صفحه سمت چپ میتونید ببینید. فایلهای درحال دانلود رو نشون میده با درصد دانلود شده.

اگه میخواین یه Cross-Platform App بسازین، بشدت Avalonia رو توصیه میکنم، قبلا هم توی کانال راجبش صحبت کردم کمی و سرچ کنین براتون میاد. از طرفی یه MCP خیلی تر و تمیز داره که Claude Code خیلی خوب باهاش کار کرد و پروژه استاندارد و تمیزی زد باهاش نسبتا، UI حدودا یک روز کاری فقط زمان برد، با وسواسی که من داشتم البته.

اینکه یاد بگیریم خودمون رو جای end user بزاریم چیزیه که با تجربه به دست میاد، پروژهای اینطوری که خودمون میخوایم استفاده کنیم تمرین خیلی خوبیه برای اینکه این تجربه رو کسب کنیم.

@ever_code
❤5👍2
بنظرم این ویدیوی Jetbtains Academy ارزش دیدن داره:

https://youtu.be/DkhhE97Swmo?is=q1pFuADsmRbSfzuo

توی دورانی که هوش مصنوعی درصد زیادی از تفکری که قبلا ما انجام میدادیم رو به دوش گرفته، نباید یادمون بره یادگیری واقعی چه شکلیه، توی مغزمون چه مراحلی طی میشه، و وقتی همه‌ی سوالاتمون رو هوش مصنوعی جواب میده چه عواقبی داره!

@ever_code
❤3🔥1
این چند وقته که از 9router استفاده میکردم، بعد از یه سری آپدیت‌های اخیر Claude Code دچار کندی میشد. تو آپدیت‌های اخیر Claude Code باعث مسشد اگه نتونه مستقیم به سرور اصلی وصل بشه Context Window رو خیلی محدود و کوچیک میکنه، برای همین وسط کار خیلی سریع به محدودیت میخوره و همش Compact انجام میده.
وقتی از روی روتر سوییچ کردم روی حالت عادی، مشکلات حل شد و کلا به محدودیت Context نخوردم.

@ever_code
👍2
https://woodruff.dev/beyond-boundaries-is-getting-a-major-update-for-net-11-and-c-15/?via=dailydev

نویسنده‌ی کتاب آنلاین Beyond boundaries اعلام کرده که به زودی مطابق با آخرین نسخه‌ی دات نت کتابشو به روز میکنه.
این کتاب یکی از مراجع فوق العاده برای برنامه‌نویسی شبکه، و کارهای مربوط به شبکه توی دات نت هست. البته در نظر داشته باشین که وقتی میگیم برنامه نویسی شبکه، بخش قابل توجهی از کارهای Backend هم شاملش میشه و اسمش شاید ترسناک باشه.
نگاهی به این مقاله بندازین متوجه میشین منظورم چه چیزهاییه.

@ever_code
👍2
راجب این پست نبی:

https://t.me/thisisnabi_dev/1611

هنوز توی کامیونیتی خارجی زیاد میبینم که گارد شدیدی به ai دارن. خیلیا رو دیدم توی فوروم‌ها که میگن ما توی ریپو اسم Claude میبینیم، ندید ازش میگذریم.

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

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

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

@ever_code
❤1
امروز یکی از دوستام با این متد "هک" شد. شماها که فنی هستین و احتمالا متوجه میشین، ولی خیلی مهمه که به اطرافیان و خانواده که بلد نیستن اصول مراقبت آنلاین رو یاد بدین تا این موارد پیش نیاد. اینجور اپ‌ها چیز پیچیده‌ای نیستن، صرفا از بی توجهی و یا ندونستن کاربر سو استفاده می‌کنن. حالا این یکی رو که من میرم Decompile میکنم دیتاشو در میارم میدم فتا، ولی مراقب اطرافیانتون باشین خلاصه.

تو این مورد اس ام اس تلگرام و پسوردهای کاربر برداشته شد و به اکانتش دسترسی پیدا کردن، کانتکت‌ها هم گرفته طرف.

@ever_code
👍2😁1🌚1
جا داره ازینکه tls certificate سایت رسمی پلیس فتا منقضی شده ابراز نگرانی کنم :)

@ever_code
🤣6
بیاین کمی راجب Memory Allocation حرف بزنیم!
میدونیم توی سی شارپ، String ها نوع خاصی از داده هستن. با اینکه Reference Type هستن ولی مثل Value Type رفتار میکنن. بخاطر کار زیاد باهاشون و خاص بودنشون، توی Heap یه قسمت خاص براشون در نظر گرفته شده. String ها پشت صحنه یجورایی یه آرایه از کاراکتر هستن، به همین خاطر چون تغییر دادنشون عملیات سنگینیه، Immutable ان و اگر تغییرش بدین، یک String جدید ساخته میشه.
تا اینجای مطلب رو به احتمال زیاد میدونستین یا راجبش شنیده بودین.
شاید تا حالا اسم تایپ Span یا Memory و امثالشون رو دیده باشین. بخصوص توی نسخه های اخیر دات نت توی Standard Library ها بیشتر دیده میشن.
اگر ما بخوایم یه بخشی از یه String رو بخونیم، باید slice یا split اش بکنیم و ازونجایی که گفتیم نمیشه به String دست زد، یعنی هرباری که اینکاری میکنیم داریم String جدید ایجاد میکنیم (Memory Allocation). و یعنی اگر یه لیستی از String ها داشته باشیم و بخوایم روی هر کدوم عملیات تغییر کننده انجام بدیم، به تعداد کل لیست، حافظه جدید اشغال میشه. توی تعداد کم، مثلا تا 100 هزارتا و یا شاید 1 میلیون تا، بسته به سیستم، شاید بشه چشم پوشی کرد. اما اگه تعداد بالا بره، حافظه پر میشه و ممکنه برنامه crash کنه.
خب چطوری میتونیم Memory Allocation رو پایین بیاریم؟ باید به یه روشی بتونیم یه بخشی از یه String رو بخونیم بدون اینکه بخوایم تغییرش بدیم، ازونجایی که String پشت صحنه یه آرایه ست، با استفاده از Span میتونیم بصورت مستقیم به بخشی ازون آرایه دسترسی داشته باشیم و دیگه حافظه جدید اشغال نکنیم!
حالا واقعا خود Span و Memory چی هستن؟ به ما دسترسی مستقیم به حافظه هر لیستی میدن بدون اینکه حافظه بیشتری اشغال بشه، و با توجه به ماهیت String میشه روی اون هم ازشون استفاده کرد.

توی این مقاله از خود مایکروسافت میتونین بهتر باهاشون آشنا بشین:
https://learn.microsoft.com/en-us/dotnet/standard/memory-and-spans/memory-t-usage-guidelines

اما میخوام بهتون تفاوت پرفورمنس رو نشون بدم.
من یه لیست از 10 میلیون String توی یه فایل دارم و بعد از خوندنش با استفاده از LINQ میام هر آیتم رو split میکنم، قسمت اول و دوم رو جدا میکنم و توی یه آبجکت ذخیره میکنم. روی سیستم من این نتیجه رو داد:
Performance:
Rows: 10,000,000
Stations: 413
Elapsed: 00:00:06.4921942
Throughput: 1,540,311 rows/sec (36.72 MB/sec)

Memory:
Working Set: 1,582 MB
GC Memory: 1,357 MB
Gen0 Collections: 169
Gen1 Collections: 169
Gen2 Collections: 10


حالا همین تست رو میام با روشی مینویسم که Memory Allocation کمتر داشته باشه، و از طرفی از Span هم استفاده بکنه و نتیجه شد این:
Performance:
Rows: 10,000,000
Stations: 413
Elapsed: 00:00:01.8735861
Throughput: 5,337,358 rows/sec (127.25 MB/sec)

Memory:
Working Set: 778 MB
GC Memory: 750 MB
Gen0 Collections: 47
Gen1 Collections: 47
Gen2 Collections: 8


البته باید بگم که برای این پست نیومدم روش کامل بهینه سازی رو انجام بدم. فقط اون قسمت مربوط به Memory Allocation توی لوپ اصلی رو بهتر کردم و توی هردو تست کل فایل رو یک جا خوندم و پردازش کردم. که این خودش یه عالمه جابجایی انجام میده. توی مرحله بعدی، حتی قسمت خوندن از فایل هم بهینه کردم و نتیجه شگفت انگیز شد:
Performance:
Rows: 10,000,000
Stations: 413
Elapsed: 00:00:01.1981524
Throughput: 8,346,184 rows/sec (198.99 MB/sec)

Memory:
Working Set: 54 MB
GC Memory: 4 MB
Gen0 Collections: 42
Gen1 Collections: 2
Gen2 Collections: 2


یعنی برای 10 میلیون خط فقط 54 مگابایت توی حافظه نگه میداره! درحالی که توی تست قبلی حدودا 1 و نیم گیگابایت درگیر بود!
اینجا اومدم فایل رو Stream کردم بجای اینکه کامل بخونم که باعث میشه فقط اون بخشی از فایل که میخوام رو بیاره توی حافظه و وقتی کارش تموم شد بده بره.

@ever_code
❤2🔥2👍1
اگه تو زیرساختتون از Keycloak برای احراز هویت استفاده می‌کنید سریع‌تر دست‌به‌کار بشید چون یه آسیب‌پذیری خیلی بحرانی با نمره ۹.۱ کشف شده که تو این باگ، هکر بدون نیاز به هیچ دسترسی یا تایید ایمیل و فقط با دونستن یوزرنیم یا ایمیل ادمین، می‌تونه لاگین بازیابی رمز عبور رو دور بزنه و مستقیم پسوورد اکانت رو عوض کنه تا به تمام سیستم‌های پشت Keycloak دسترسی پیدا کنه. تمام نسخه‌های زیر ۲۶.۷.۲ آسیب‌پذیرن و اگه الان شرایط ارتقا به نسخه ۲۶.۷.۲ رو ندارید، حتماً همین امروز قابلیت Forgot password رو از تنظیمات Realm به صورت موقت خاموش کنید.

https://fireup.pro/news/keycloak-cve-2026-18963-critical-password-reset-flaw?via=dailydev

@codehalic | کدهالیک
❤1
یه سری تغییرات اساسی توی UI/UX دانلود منیجیر دادم.
خودم روتین ازش استفاده میکنم و مدام سعی میکنم بهترش کنم. جدا از اون خیلی نحوه‌ی کارم با کلود توی این پروژه بهتر شده. میشه گفت از Spec-driven گذر کردم و بنظرم هرجایی خوب نیست.
برای ui براش sketch میکشم خودش میسازه و تست میکنه، ولی باید پخته‌ترش کنم و برم از selenium یا ابزارهای مشابه استفاده کنم تا تمیزتر تست کنه خودش. الان با پایتون و screenshot گرفتن تست میکنه و موس رو حرکت میده.
در کل پروژه روند جالبی گرفته.
با اینکه تو گیتهابم هست، ولی هنوز لانچ رسمی نکردم. منتظرم به یه استیت خاصی برسه و یه سری فیچر مونده که از دانلود منیجر انتظار میره داشته باشه. البته اگه الان دانلود کنید، خود اپ قابلیت auto update داره و میتونید توی این مسیر همراه باشید و آپدیت‌ها رو دریافت کنید. میتونید تو تنظیماتش فعالش کنید.

@ever_code
❤1👍1👌1