EverCode
86 subscribers
24 photos
3 videos
3 files
37 links
اینجا راجب کامپیوتر، نرم افزار، زبان‌ها و مطالب مرتبط با هم گپ میزنیم

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

dev.to/purejoymind

هم توی سایت شخصیم و هم توی دِو بلاگ هام رو میزارم.
Download Telegram
Forwarded from thisisnabi.dev [Farsi]
A friendly reminder to all of us building tech: power ≠ usability.

Daniel De Laney’s post “Normal” is going viral in tech — and for good reason.

He shows a TV remote with most of its buttons covered in tape. Only the essentials remain. It’s absurdly simple — and perfect for the person using it.

That image captures what’s wrong with most software: too many buttons, too much flexibility, too little empathy. Users don’t want optionality; they want clarity. They don’t want to “learn a system”; they just want it to work.

If you’re building for non-experts, design for the taped-over remote first. Hide complexity. Reveal it only when someone asks for it.

Software wins when it feels obvious. Everything else is just noise.


https://www.linkedin.com/posts/mariustreitz_a-friendly-reminder-to-all-of-us-building-activity-7389702679670796288-UvVU?utm_source=share&utm_medium=member_android&rcm=ACoAABdqDr0BJIj7gy7oW3facT7ro7bITsW3Ay0
1😁1
https://github.com/timkicker/podliner

تو این سری از پست های ریپازیتوری های جالب میتونید با پادکست پلیر توی ترمینال آشنا بشین😁
با دات نت ۹ نوشته شده و cross platform هست.
بعد ازینکه دات نت cross platform شد پتانسیلش خیلی برای ابزارای اینجوری بالاتر رفت و یکی از مهم ترین عوامل بازدارنده‌ای دات نت برای پیشرفتش تو صنعت های مدرن بود.

@ever_code
2
https://mazdakparnian.com/blogs/2025-11/streams-in-csharp/



توی این بلاگ بطور رسمی برنامه نویسی شبکه با سی شارپ رو شروع میکنیم. این قسمت یجورایی پیش نیاز حساب میشه چون خیلی مستقیم به شبکه ربط نداره و در اصل قبل ازینکه توی شبکه عمیق بشیم نیازه تا کمی stream ها رو در سی شارپ بیشتر درک کنیم. از قسمت های آینده بیشتر درگیر برنامه نویسی شبکه میشیم.

توی سی شارپ stream ها راهی برای انتقال داده‌ها بین program شما و منابع خارجی مثل فایل یا منابع تحت شبکه هستن. نکته اصلی اینه که اونا فقط داده رو انتقال میدن و براشون محتویات فایل مهم نیست. توی این پست با هم نحوه‌ی کار با اونها رو بررسی میکنیم.

@ever_code
👍41
اگه کمی راجب فریمورک های توسعه اپلیکیشن توی دات نت سرچ کرده باشین و هدفتون cross platform بودنش باشه احتمالا یجایی از مایکروسافت ناامید شدین و فکر کردین که قضیه کنسله، اما اگه یکم بیشتر سرچ کرده باشین احتمالا با فریمورک های اوپن سورس دیگه آشنا شدین که از خود مایکروسافت بهتر این قضیه رو مدیریت کردن. دو فریمورک Avalonia و Uno از معرف ترین فریمورک های توسعه اپلیکیشن روی پلتفرم های مختلف هستن. توصیه میکنم یه نگاهی بهشون بکنین.
اخیرا Avalonia با تیم توسعه Flutter توی گوگل همکاری تشکیل داده تا موتور رندر Impeller رو ساپورت کنه و از skia استفاده نکنه.
خودم خیلی عمیق نشدم روی خبر چون خب توسعه اپلیکیشن نمیدم هنوز ولی برام جالب بود که یه تیم خارج مایکروسافت چقدر جدی و حرفه ای داره محصولی بهتر از مال مایکروسافت ارائه میده. اگه با WPF کار کردین احتمالا خیلی راحت بتونین با Avalonia کار کنین چون بقولی spiritual successor اون هست.

https://avaloniaui.net/blog/avalonia-partners-with-google-s-flutter-t-eam-to-bring-impeller-rendering-to-net?utm_source=reddit&utm_medium=social&utm_campaign=impeller_announcement

@ever_code
1
EverCode
https://mazdakparnian.com/blogs/2025-11/streams-in-csharp/ توی این بلاگ بطور رسمی برنامه نویسی شبکه با سی شارپ رو شروع میکنیم. این قسمت یجورایی پیش نیاز حساب میشه چون خیلی مستقیم به شبکه ربط نداره و در اصل قبل ازینکه توی شبکه عمیق بشیم نیازه تا کمی stream…
توی قسمت بعدی این سری پست بلاگ قراره وارد Socket programming بشیم و ببینیم که چجوری بتونیم پورت های شبکه رو از داخل سی شارپ مدیریت کنیم.
فهمیدن اینجور اطلاعات بهمون کمک میکنه بفهمیم که دات نت چه حجمی از کار رو برای ما مدیریت کرده و باعث میشه بفهمیم خودمون چجوری میتونیم فریمورک خودمون رو توسعه بدیم.
اگه هم فکر میکنید که توسعه فریمورک از صفر کار بدرد نخوریه متاسفانه جای اشتباهی اومدین😂 اینجور کارای بدرد نخور معمولا بصورت پتانسیل بالقوه خودش رو نشون میده😉

@ever_code
2
EverCode
اگه کمی راجب فریمورک های توسعه اپلیکیشن توی دات نت سرچ کرده باشین و هدفتون cross platform بودنش باشه احتمالا یجایی از مایکروسافت ناامید شدین و فکر کردین که قضیه کنسله، اما اگه یکم بیشتر سرچ کرده باشین احتمالا با فریمورک های اوپن سورس دیگه آشنا شدین که از خود…
https://avaloniaui.net/blog/net-maui-is-coming-to-linux-and-the-browser-powered-by-avalonia

اتفاق جذاب بعدی اینه که تیم Avalonia اومد و بک اند MAUI رو به خودش تغییر داده. حالا یعنی چی؟ یعنی شما میتونین پروژه های رو MAUI رو روی هر پلتفرمی، حتی وب (Web assembly) ببری. خود MAUI قبلا روی سیستمهای لینوکس و ویندوز و مک اوکی بود و برای گوشی هم ساپورت داشت اما با اینکار شما عملا با همون پروژه میتونین وب هم راه بندازین و تو پلتفرم هایی که قبلا ساپورت بودن هم سرعتتون بهتر میشه.

@ever_code
👍1
دارم یه بات تلگرام مینویسم. گفتم بیام شانسم رو اول با وایب کدینگ امتحان کنم. شعورش به یه سری چیزای اساسی نمیرسه. کاملا مثل یه بچه ای هست که ۴ تا داکیومنت حفظ کرده. از طرفی با پکیجی که استفاده میکردم آشنا نبود و هی باید براش توضیح میدادم. کمی طول میکشید تصمیم گرفتم خودم بنویسم و بیخیالش شدم.

@ever_code
3😁2
خب دیپلوی کردن دات نت روی سرورهای لینوکسی arm64 با داکر واقعا داره ناراحتم میکنه😭

@ever_code
💔2
رو سرور پروداکشن اگه داکر کار میکنه، تا میتونین آپدیت نکنین، اومدم apt upgrade زدم، داکر اپدیت شد و کلی breaking change داشت. زد کاملا reverse proxy و همه سرویسا رو ترکوند. سرچ کردم دیدم apiهای داکر تغییرات اساسی داشته و خب باید این سرویس ها خودشون رو با داکر وفق بدن.

@ever_code
😁41
فردا از بات رونمایی میشه😁
🔥4🎉2
بات تلگرام برای ارسال پست کانال به لینکداین

فعالیت من تو کانال تلگرام اکثرا بیشتر از لینکداین بوده، از طرفی دوست دارم میزان تولید محتوام توی لینکداین بالا باشه.
یه #bot تلگرام نوشتم که همینکارو دقیقا برام انجام میده.
با چی توسعه دادم و روی سرور قرارش دادم؟

#dotnet
#n8n
#traefik
#docker

دلیل که از n8n استفاده کردم برای این بود که کار با سرویس های لینکداین کمی زمان بر بود و من از قبل n8n آماده برای خودم داشتم. تصمیم گرفتم از node آماده‌ش استفاده کنم.

بیشترین چالشی که این پروژه برام داشت بیشتر از کد زدن و توسعه بخش استقرار و دپلوی روی سرورم بود. کمی با traefik چالش داشتم اما تهش کار تمیز شد.

روی پست چه پردازشی انجام میده؟
چون برای کانال خودم بود و من ته همه پست های کانال معمولا آی دی کانال رو میزارم، اومدم آی دی رو حذف کردم و بجاش لینک کامل پست در تلگرام رو قرار دادم تا به راحتی بتونین اون پست رو توی کانال ببینین😉

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

همین پستی هم که میبینین هم توسط همین بات پردازش شده😁

@ever_code
4
چندتا مهارت که اگه برمیگشتم روز اولی که با برنامه نویسی آشنا شدم حتما به خودم میگفتم تقویتشون کنه:

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

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

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

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

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

این نکاتی بود که با گذشت زمان بیشتر بهشون اعتقاد پیدا کردم و دوست داشتم به اشتراک بزارم. اگه کسی رو میشناسین که این پست میتونه براش مفید باشه باهاش به اشتراک بزارین و نظرتون هم برام بنویسین🌹


@ever_code
👍51
دیشب یه ایده‌ی ای برای یه ابزار کامند لاینی به ذهنم رسید، خلاصه شب و صبح جذابی داشتم، اگه برسم این آخر هفته پابلیش میکنم😁

@ever_code
خب پکیج هم رفت روی نوگت، فردا معرفیش میکنم که چی به چیه😁
3
دواپس بازی هم تموم شد و الان روی هر پوش روی ریپازیتوری درست ورژن میخوره و میره روی نوگت، رسما آماده‌ست.
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
6👍1
خبر خوب، دو تا پکیج
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
4