یادداشت های یه برنامه نویس
281 subscribers
39 photos
3 videos
3 files
80 links
این کانال برای در میان گذاشتن یادداشت ها و تجربیات جالب در مورد برنامه نویسی هست امیدوارم دوست داشته باشین.

@one_programmer

https://t.me/one_programmer

ادمین @EngMohsen

Linkedin:https://www.linkedin.com/in/mohsen-rajabi72
Download Telegram
@one_programmer

اعتماد یا بی اعتمادی؟

پاسخ این سوال را می توانید با استفاده از "نظریه بازی ها" ببینید. نظریه بازی می‌تواند روشن کند که چرا بی‌اعتمادی همه گیر شده است و ما چطور می‌توانیم برای آن چاره‌ای پیدا کنیم.
بازی کوتاه "تکامل اعتماد" بر اساس نظریه بازی ها که توسط دکتر حامد سیدعلایی از پژوهشکده علوم شناختی IPM ترجمه شده است.

https://hamed.github.io/trust/

@one_programmer
تلگرام رو خدا آزاد کرد :)
@one_programmer

پیغام های مزخرف "نام کاربری یا رمز عبور اشتباه هست"
یکی از best practice هایی که همیشه رعایت میشه ، زمانی هست که کاربر login میکنه . اگه رمز عبور یا نام کاربری اشتباه زده بشه ، پیغام "نام کاربری یا رمز عبور اشتباه هست" داده میشود ، اینکار برای این است که هکر ها متوجه اشتباه بودن نام کاربری نشوند.
این مقاله به این موضوع اشاره میکنه که اینکار مزخرف است !

“username or password incorrect” is bullshit

https://hackernoon.com/username-or-password-is-incorrect-is-bullshit-89985ca2be48

@one_programmer
Forwarded from Software Philosophy
مقایسه ایران با مایکروسافت ۱۰ سال پیش! تلگرام را فیلتر کنیم؟

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

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

از این لحاظ رویکرد ما خیلی شبیه مایکروسافت ۱۰ سال پیش است. مایکروسافتی که با دنیای open-source مخالف بود و سعی در نادیده گرفتن آن داشت تا جایی که به مرز حذف از بازار برنامه‌نویسی رسید. ولی آنها فهمیدند، خود را تغییر دادند، اوپن‌سورس بودن را درک کردند. به جای مقابله با آن شروع به استفاده از مزایای آن کردند و اکنون فعال‌ترین open-souce community در github هستند. و آرام آرام در حال بازگشت به بازار.

اگر تلگرام را تهدید می‌بینیم، به خاطر این است که «باز بودن« یا «open-source بودن» را تهدید می‌بینیم و باید به حال آن فکری کنیم. با فیلتر کردن ابزار، این طرز فکر از بین نمی‌رود، فقط تبدیل به حالت جنگجویانه‌ترش می‌شود و فیلتر کننده را از بین می‌برد.

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

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

نکته بعدی تکنولوژی blockchain است. قبل از آنکه باز هم دیر شود باید از الان روی آن کار کنیم. به جای اینکه از آن بترسیم باید آن را یاد بگیریم و از آن استفاده کنیم. من از آقای کورنگی، مدیرعامل MAPS متشکرم که سال پیش من را با این مفهوم آشنا کردند و باعث شدند مطالعاتی را در این زمینه شروع کنم. معتقدم باید از قدرت آینده‌بینی و آینده‌نگاری افرادی مثل ایشان نهایت استفاده را ببریم.

http://mehrandvd.me

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، بر روی لینک زیر کلیک کنید:

http://ow.ly/wJ6i30jn1B4

#مهران_داودی (http://ow.ly/GwIl309lFEm)

کانال تلگرام:
@SoftwarePhilosophy


___
@one_programmer

این Regex.CacheSize لعنتی !!
مدت ها بود که میدیدم میکرو سرویس هامون بعضی مواقع دان میشن و کلا جواب نمیدن...
کلی لاگ گذاشته بودیم و مانیتور میکردیم اما باز هم این اتفاق می افتاد. بعد از کلی بررسی و وقتی که شخصا روی این موضوع گذاشتم به این نکته رسیدم. شما وقتی از Regex استفاده میکنید، به این صورت Regex.x . متد x میتونه هر متدی باشه، اگر به صورت option بیایید Compiled رو بدید ممکنه دچار اشتباه وحشتناکی بشید !!!
مشکل جایی شروع میشه که Regex.x میاد پترنی که شما بهش میدید رو کش میکنه و سایز کش اون برابر ۱۵ هست !!!
اگر تعداد پترن های regex های شما بیشتر از ۱۵ باشه با کندی شدیدی رو به رو میشید. کندی که ریسورس سخت افزاری زیادی نمیگیره اما برنامه تون دیگه به درخواست ها جواب نمیده.
راحل: افزایش سایز cache
Regex.cacheSize= 100;

مقاله ماکروسافت در مورد best practice های Regex

https://docs.microsoft.com/en-us/dotnet/standard/base-types/best-practices

@one_programmer
@one_programmer

بررسی بهبود ها و بنچمارک های Net Core 5. که قرار به زودی منتشر بشه. فقط این نسخه LTS نیست و پشتیبانی کوتاهی داره. مقاله زیر بهبود های عالی از این نسخه به نمایش گذاشته.

https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/

@one_programmer
@one_programmer

Asp Core .NET 5 Preview 8
منتشر شد.
تغییرات خیلی خوبی داشته. همراه با اون ٍEf Core .Net 5 Preview 8 هم منتشر شده. در پست های بعدی لیست تغییرات رو بررسی میکنیم.
-Azure Active Directory authentication with
Microsoft.Identity.Web
-CSS isolation for Blazor components
-Lazy loading in Blazor WebAssembly
-Updated Blazor WebAssembly globalization support
-New InputRadio Blazor component
-Set UI focus in Blazor apps
-Influencing the HTML head in Blazor apps
-IAsyncDisposable for Blazor components
-Control Blazor component instantiation
-Protected browser storage
-Model binding and validation with C# 9 record types
-Improvements to DynamicRouteValueTransformer
-Auto refresh with dotnet watch
-Console Logger Formatter
-JSON Console Logger

https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-5-preview-8/

https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-ef-core-5-0-preview-8/

https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-8/

@one_programmer
@one_programmer

توی net core. 3 ماکروسافت از قابلیتی پرده برداشت که Trimming یا assembly linker نام داشت. این قابلیت می اومد خروجی نهایی پروژتون رو با حذف کتابخانه هایی که استفاده نمیکردید به صورت خوبی کاهش میداد. حالا ماکروسافت پاش رو فراتر گذاشته و توی core 5 اومده این قابلیت رو خیلی بهبود داده. طبق مقاله ایی که توی بلاگ ماکروسافت هست و تست گرفتن،برنامه به حدود ۱۰ مگابایت رسیده !

https://devblogs.microsoft.com/dotnet/app-trimming-in-net-5/

@one_programmer
@one_programmer

خواندن کد های دیگران باعث میشه ما برنامه نویس بهتری بشیم. این موضوع فارغ از زبان برنامه نویسی یک اصل هست. در پست قبلی هم یکی از نکته ها این موضوع بود. وقتی شما کد های پروژه ها رو میخوانید که هزاران نفر روی آن در Github کار کردن کار بسیار خوبی هست. میتوانید ایده های خوبی بگیرید و دست خط دیگران رو یاد بگیرید. این باعث میشه شما debugger عالی هم بشید و دلیل رفتار های lib که استفاده میکنید را بررسی کنید. برای خواندن کد های دیگران و پروژه هایی که در قابل nuget دارید استفاده میکنید راه های زیادی وجود دارد.
۱. استفاده از ابزاری مثل resharper یا rider ide
۲. استفاده از ابزار های decompiler کنار کارتان مثل reflector
۳. استفاده از visual studio
ما در این پست از visual studio استفاده میکنیم که یک ابزار داخلی هست و نیاز به نصب ابزاری نداره. شما باید نسخه ۱۶.۵ به بعد را نصب کنید. در این نسخه ماکروسافت از iLSpy استفاده کرده است که یک ابزار کاملا open source هست و در داخل Github قرار دارد. برای فعال سازی این قابلیت که فعلا به صورت پیشفرض غیر فعال هست باید در منو Tools در بخش Options کلمه decompile را سرچ کنید. در بخش Advance گزینه Enable navigation to decompiled sources (experimental) را تیک بزنید. هر جای پروژه میتوانید دکمه f12 رو بزنید و کد decompile شده رو بررسی کنید.
استفاده از این قابلیت بهترین گزینه نیست اما برای برنامه نویس هایی که نمیخان ابزار جدیدی نصب کنن بسیار عالی هست.
مقاله زیر هم به این موضوع میپردازه

https://devblogs.microsoft.com/visualstudio/decompilation-of-c-code-made-easy-with-visual-studio/

لینک مخزن iLSpy

https://github.com/icsharpcode/ILSpy

@one_programmer
@one_programmer

در مقاله زیر در مورد استفاده از ActionBlock در کلاس ‌Tpl Dataflow صبحت میکنیم.
کلاس Tpl شامل تعداد زیادی زیر کلاس مفید برای کار های همزمانی هست، در زیر کلاس DataFlow ما میتونیم یک Flow یا Pipline درست بکنیم و آیتم ها رو پردازش بکنیم. یک کارخانه رو در نظر بگیرید که یک خط مستقیم داره که محصولات از روی اون رد میشن و کارگر ها به ترتیب دونه دونه محصولات رو برمیدارن و کار خاصی روش انجام میدن. این ساده شده Tpl DataFlow هست. یا فرض کنید یکسری ویدیو دارید که باید اون ها رو دونه دونه پردازش کنید. اول عملیات فشرده سازی رو انجام بدید و بعد با چند تا کیفیت ذخیره کنید. برای این موارد میشه از DataFlow استفاده کرد. در Dataflow میشه تنظیمات خاصی رو گذاشت که برای مثال درجه همزمانی تعداد کار رو تنظیم کرد، یا Buffer گذاشت برای ورودی Flow و..... زیاد وارد جزئیات Dataflow نمیشم اما کلاس های زیادی داره برای اینکار.
در Dataflow ما‌میتونیم یک flow درست کنیم و برای این flow تعدادی block درست کنیم و به ترتیب اون ها رو به هم وصل کنیم. هر block خودش ۲ تا buffer داره. یکی برای ورودی و یکی برای خروجی.یعنی ما‌میتونیم آیتم به block ها بفرستیم و منتظر جواب نمونیم.میشه foreach گذاشت و همزمان داده ها رو بهش پاس داد و همزمان هم داده ها به صورت concurrent و async پردازش بشن.
یکی از کلاس های Dataflow که برای انتها flow هست ActionBlock هست.
ما در این مقاله از ActionBlock برای انجام کار به صورت پیش زمینه استفاده میکنیم.

https://medium.com/@mohsen_rajabi/do-async-and-concurrent-work-with-actionblock-dataflow-in-c-f5da63ff3692

@one_programmer
@one_programmer

نکات جالب از stackoverflow با 1.3 بیلیون لود صفحه در ماه !!!
این لینک از چگونگی اینکار داده و ابزار ها رو کامل مشخص کرده. مثل سرور و تعداد سرور دیتابیس. همچنین نشون میده از Redis استفاده میشه که 2 تا نود دارن و با کلاینت که خودشون نوشتن به اسم StackExchange باهاش کار میکنن. همچنین استفاده از Jil برای json کردن. و همچنین Dapper به عنوان ORM خودشون. سرور های Elastic رو دارن برای بحث index کردن.2 تا سرور HAPAroxy دارن که فوق العاده هست. پیشنهاد میدم بخونید لینک زیر رو
https://stackexchange.com/performance

شرکت Stackoverflow اومده بیشتر ابزار های خودش رو opensource کرده که داخل github هست. https://github.com/StackExchange

@one_programmer
@one_programmer

چرا پرتاب Exception اینقدر کند هست . مقاله زیر در مورد این موضوع صحبت میکنه و شدیدا توصیه میکنه که در فلو های نرمال برنامه Exception پرتاب نکنیم.

https://mattwarren.org/2016/12/20/Why-Exceptions-should-be-Exceptional/

@one_programmer
@one_programmer

وقتی از میکرو سرویس استفاده میکنیم. تجزیه و تحلیل میکرو سرویس و مانیتور اون ها یکی از بزرگ ترین چالش های اصلی شرکت ها هست. فرض کنید ۲۰ تا میکرو سرویس دارید و برای یکی از api ها مشکلی پیش میاد و کند میشه. فلو اون api هم به این شکل هست که از gateway عبور میکنه و به idnetity میرسه و بعد اون به میکرو سرویس a و بعد اون به b و به c میرسه !!!
حالا از کجا متوجه کندی بشیم که کدوم سرویس کند هست؟؟؟
اصلا سرویس کند هست یا دیتابیس کند هست ؟؟؟
شبکه مشکل داره یا خطا داریم و.....

برای این منظور ۲ ابزار خیلی خوب هست، هر دو open source هستن. یکی از اون ها برای uber هست و اون یکی برای elastic هست.
این دو تفاوت زیادی با هم ندارن.
ابزار jaeger برای uber هست و کلاینت اکثر زبان ها رو داره. Ui هم برای تجزیه تحلیل داره.
ابزار apm هم برای elastic هست.
ابزار apm غیر از trace کردن میتونه اطلاعات بیشتری برای تجزیه تحلیل بهتون بده.
برای راه اندازی jaeger نیازه سرور اون رو با داکر all in one خودش بالا بیارید و بعد کلاینت اون رو روی پروژه خودتون ادد کنید.
برای apm هم باید elastic و kibana رو نصب کنید.
Jaeger
https://github.com/jaegertracing/jaeger-client-csharp

Apm
https://github.com/elastic/apm-agent-dotnet

@one_programmer