Forwarded from Agora (Alireza)
اگر لندن یا آکسفورد زندگی میکردم الان تو راه پاب کلارکسون بودم :(
The Farmer's Dog
The Farmer's Dog
Forwarded from Agora (Alireza)
مکانیزم Multi-Leader Replication و مصائب Write Conflict - بخش ۱
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
نمیدونم چقدر راجعبه مکانیزم Multi-Leader Replications توی دیتابیسها میدونید. بهطور خلاصه اینه که بهجای اینکه یک نود مستر (Leader، Main یا هرچی) داشته باشیم که درخواستهای رایت فقط روی اون serve بشند، چندین نود داشته باشیم که این کار رو برای ما انجام بدن. درواقع، Writeهایی که روی هر کدوم از نودها میان، روی باقی نودها Propagate میشن.
این کار یکسری مزیت داره، اولیش High Availabilityـه. اینطوری اگر یکی از نودهای مستر Fail بشه و به هر دلیلی نتونه به درخواست ما رسیدگی کنه، نودهای دیگهای هستند که این کار رو انجام بدن.
مزیت بعدی Scalability و امکان Load Balancingـه. فرض کنید که تعداد رایتهایی که روی نود مستر میشه اینقدر زیاده که I/O نمیتونه به همهی درخواستها جواب بده. تو این مکانیزم، ما میتونیم لود رو روی نودهای مستر دیگه که بهطبع روی سرورها و دیتاسنترهای مختلف وجود دارند توزیع کنیم و Response Time رو بیاریم پایین. هر وقت هم که احساس کردیم این تعداد نود کافی نیست، میتونیم نودهای مستر جدید به سیستم اضافه کنیم.
با تمام این ویژگیهای وسوسهبرانگیز، اما هر آدم عاقلی شما رو تا جای ممکن از اینکه بخواید به این سمت حرکت کنید برحذر میداره. علت؟ پیچیدگی بالا و ریسک بالای Write Conflict و در ادامه Data Inconsistencyـه.
چرا این اتفاق میافته؟ فکر کنید یک Collaborative Editor درست مثل گوگل داک نوشتید. جایی که آدمهای مختلف میتونن همزمان با هم یک داکیومنت رو ویرایش کنن. یکی از سناریوهای محتمل که به ذهن خیلیها حتما رسیده اینه:
توی خط اول داکیومنت نوشته:
علی و رضا همزمان با هم به داکیومنت دسترسی دارند و دارن این خط رو مینویسن. علی که میخواد این قسمت رو بهنام خودش ثبت کنه، این رو اینطور تغییر میده:
درست همون موقع که علی این تصمیم رو گرفته، رضا هم برمیداره و اونو اینطور تغییر میده:
و هر دوی این تغییرات به سمت هر کدومشون ارسال میشه و اتفاقی که میافته اینه که:
درخواست تغییر علی قرار بود عبارت Alireza رو به Ali تغییر بده. وقتی رسیده سمت رضا، برنامه دیده که Alirezaیی در کار نیست که بخواد تغییر بده و فقط Reza وجود داره.
از طرف دیگه، وقتی درخواست تغییر رضا به کلاینت علی رسیده، خبری از Alireza که بخواد به Reza تغییر کنه نیست چون اونجا نوشته Ali.
این دقیقاً همون Write Conflictـه که راجعبهش صحبت میکردیم. همین مشکل دقیقاً تو سمت دیتابیس هم وجود داره. کلاینت ۱ درخواست رایت رو روی Node A ارسال میکنه. در همون زمان، کلاینت ۲ درخواست رایت رو برای Node B ارسال میکنه و هرکدوم از این نودها این رایتها رو Propagate میکنن و باز هم Write Conflict.
برای رفع این مشکل چه کار میشه کرد؟ اولین و بهترین روش: پیشگیری! تا جای ممکن نباید سراغ این سناریو رفت. رفع کانفلیکت پیچیدهست و شما رو وارد یک Trade-off جدید میکنه.
اما واقعاً چه راهکارهایی برای این ماجرا وجود داره؟ چطور میشه حداقل در نهایت، به یک Convergent رسید؟
یک روش که احتمالاً به ذهن شما هم رسیده اینه که جدیدترین (آخرین Writeای که اتفاق افتاده) رو همیشه در نظر بگیریم. این یکی از روشهای متداولیه که اتفاقاً توی سیستمهای جدیای مثل Cassandra هم پیاده شده (و تنها روشیه که بهکار میره). به این الگوریتم میگن Last Write Wins یا به اختصار LWW. برای پیادهسازیش، در کنار درخواست Write، یک Timestamp هم ارسال میشه. اینطوری هر نود میتونه با مقایسهی Timestampها آخرین رایت رو جایگزین مقدار قبلی کنه. مشکل این روش اما فدا کردن Durabilityـه.
اینطور فرض کنید که توی چند تا کلاینت مختلف، بهصورت همزمان درخواست رایت ارسال شده و همهی کلاینتها فکر کردن درخواست اونها موفق بوده. این در حالیه که فقط یکی از اونها که دیرتر از بقیه ایجاد شده قبول شده و باقی در نظر گرفته نشدن. در سیستمهایی که هیچنوع از دستدادن دادهای قابل پذیرش نیست، استفاده از LWW چندان مناسب بهنظر نمیرسه.
روشهای دیگهای هم برای این ماجرا پیاده شده که میشه راجعبهشون صحبت کرد. ولی من تمام اینها رو گفتم که به این سه تا برسم.
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
نمیدونم چقدر راجعبه مکانیزم Multi-Leader Replications توی دیتابیسها میدونید. بهطور خلاصه اینه که بهجای اینکه یک نود مستر (Leader، Main یا هرچی) داشته باشیم که درخواستهای رایت فقط روی اون serve بشند، چندین نود داشته باشیم که این کار رو برای ما انجام بدن. درواقع، Writeهایی که روی هر کدوم از نودها میان، روی باقی نودها Propagate میشن.
این کار یکسری مزیت داره، اولیش High Availabilityـه. اینطوری اگر یکی از نودهای مستر Fail بشه و به هر دلیلی نتونه به درخواست ما رسیدگی کنه، نودهای دیگهای هستند که این کار رو انجام بدن.
مزیت بعدی Scalability و امکان Load Balancingـه. فرض کنید که تعداد رایتهایی که روی نود مستر میشه اینقدر زیاده که I/O نمیتونه به همهی درخواستها جواب بده. تو این مکانیزم، ما میتونیم لود رو روی نودهای مستر دیگه که بهطبع روی سرورها و دیتاسنترهای مختلف وجود دارند توزیع کنیم و Response Time رو بیاریم پایین. هر وقت هم که احساس کردیم این تعداد نود کافی نیست، میتونیم نودهای مستر جدید به سیستم اضافه کنیم.
با تمام این ویژگیهای وسوسهبرانگیز، اما هر آدم عاقلی شما رو تا جای ممکن از اینکه بخواید به این سمت حرکت کنید برحذر میداره. علت؟ پیچیدگی بالا و ریسک بالای Write Conflict و در ادامه Data Inconsistencyـه.
چرا این اتفاق میافته؟ فکر کنید یک Collaborative Editor درست مثل گوگل داک نوشتید. جایی که آدمهای مختلف میتونن همزمان با هم یک داکیومنت رو ویرایش کنن. یکی از سناریوهای محتمل که به ذهن خیلیها حتما رسیده اینه:
توی خط اول داکیومنت نوشته:
Edited by Alireza
علی و رضا همزمان با هم به داکیومنت دسترسی دارند و دارن این خط رو مینویسن. علی که میخواد این قسمت رو بهنام خودش ثبت کنه، این رو اینطور تغییر میده:
Edited by Ali
درست همون موقع که علی این تصمیم رو گرفته، رضا هم برمیداره و اونو اینطور تغییر میده:
Edited by Reza
و هر دوی این تغییرات به سمت هر کدومشون ارسال میشه و اتفاقی که میافته اینه که:
درخواست تغییر علی قرار بود عبارت Alireza رو به Ali تغییر بده. وقتی رسیده سمت رضا، برنامه دیده که Alirezaیی در کار نیست که بخواد تغییر بده و فقط Reza وجود داره.
از طرف دیگه، وقتی درخواست تغییر رضا به کلاینت علی رسیده، خبری از Alireza که بخواد به Reza تغییر کنه نیست چون اونجا نوشته Ali.
این دقیقاً همون Write Conflictـه که راجعبهش صحبت میکردیم. همین مشکل دقیقاً تو سمت دیتابیس هم وجود داره. کلاینت ۱ درخواست رایت رو روی Node A ارسال میکنه. در همون زمان، کلاینت ۲ درخواست رایت رو برای Node B ارسال میکنه و هرکدوم از این نودها این رایتها رو Propagate میکنن و باز هم Write Conflict.
برای رفع این مشکل چه کار میشه کرد؟ اولین و بهترین روش: پیشگیری! تا جای ممکن نباید سراغ این سناریو رفت. رفع کانفلیکت پیچیدهست و شما رو وارد یک Trade-off جدید میکنه.
اما واقعاً چه راهکارهایی برای این ماجرا وجود داره؟ چطور میشه حداقل در نهایت، به یک Convergent رسید؟
یک روش که احتمالاً به ذهن شما هم رسیده اینه که جدیدترین (آخرین Writeای که اتفاق افتاده) رو همیشه در نظر بگیریم. این یکی از روشهای متداولیه که اتفاقاً توی سیستمهای جدیای مثل Cassandra هم پیاده شده (و تنها روشیه که بهکار میره). به این الگوریتم میگن Last Write Wins یا به اختصار LWW. برای پیادهسازیش، در کنار درخواست Write، یک Timestamp هم ارسال میشه. اینطوری هر نود میتونه با مقایسهی Timestampها آخرین رایت رو جایگزین مقدار قبلی کنه. مشکل این روش اما فدا کردن Durabilityـه.
اینطور فرض کنید که توی چند تا کلاینت مختلف، بهصورت همزمان درخواست رایت ارسال شده و همهی کلاینتها فکر کردن درخواست اونها موفق بوده. این در حالیه که فقط یکی از اونها که دیرتر از بقیه ایجاد شده قبول شده و باقی در نظر گرفته نشدن. در سیستمهایی که هیچنوع از دستدادن دادهای قابل پذیرش نیست، استفاده از LWW چندان مناسب بهنظر نمیرسه.
روشهای دیگهای هم برای این ماجرا پیاده شده که میشه راجعبهشون صحبت کرد. ولی من تمام اینها رو گفتم که به این سه تا برسم.
Forwarded from Agora (Alireza)
مکانیزم Multi-Leader Replication و مصائب Write Conflict - بخش ۳
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
حالا با در نظر گرفتن Base میشه فهمید که A و B هرکدوم چه تغییری دادند و تغییرات مستقل یا non-coflicting رو به صورت خودکار باهم ترکیب یا مرج کنیم.
درواقع برخلاف مرج دوطرفه که ما فقط تغییرات رو باهم بررسی میکردیم (مرج دوطرف درواقع همون diffـه)، توی این روش علاوه بر مقایسهی دوتایی، این امکان وجود داره که تغییرات هر کدوم رو با نسخهی اورجینال هم مقایسه کنیم. برای درک بهتر ماجرا، این سوال استکاوورفلو و جوابهاش رو بخونید. این ویدیو هم بهنظر جالب اومد.
برای مطالعهی بیشتر راجعبه MPDS: لینک ۱، لینک به جلسهی Presistent Data Structures از کورس MIT Advanced Data Structures
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
حالا با در نظر گرفتن Base میشه فهمید که A و B هرکدوم چه تغییری دادند و تغییرات مستقل یا non-coflicting رو به صورت خودکار باهم ترکیب یا مرج کنیم.
درواقع برخلاف مرج دوطرفه که ما فقط تغییرات رو باهم بررسی میکردیم (مرج دوطرف درواقع همون diffـه)، توی این روش علاوه بر مقایسهی دوتایی، این امکان وجود داره که تغییرات هر کدوم رو با نسخهی اورجینال هم مقایسه کنیم. برای درک بهتر ماجرا، این سوال استکاوورفلو و جوابهاش رو بخونید. این ویدیو هم بهنظر جالب اومد.
برای مطالعهی بیشتر راجعبه MPDS: لینک ۱، لینک به جلسهی Presistent Data Structures از کورس MIT Advanced Data Structures
Forwarded from Geek Alerts
گرفتن شهروندی چین تقریبا غیرممکنه، یعنی کسایی که به چین مهاجرت میکنن احتمالا تا پایان زندگیشون یک خارجی به حساب میان و هر چند سال یکبار هم باید اقامتشون رو تمدید کنن. یک نوع گرینکارت هم دارن که به افراد کمی میدن و شخص اقامت دائم میگیره اما همیشه یک خارجی باقی میمونه.
جالبه بدونید تا سال ۲۰۱۰ کل کسایی که شهروندی چین رو گرفتن ۱۴۴۸ نفر بودن، بر اساس ماده ۷ قانون تابعیت چین، شهروندی رو فقط به کسی میدن که داخل چین خیشاوند داشته باشه، برنامه اقامت دائم داشته بشه، و تابعیت قبلیش از هر کشوری هست رو باطل کنه چون چین، چند تابعیتی رو به رسمیت نمیشناسه.
تا اینجا شاید فکر کنید پس چرا آدمها به چین میرن و درس میخونن، یه دلیلش اینه که گرفتن ویزای تحصیلی و کاری چین راحته، هزینههای تحصیل و زندگی پایینه و بیشتر کسایی که به چین میرن اونو یه ایستگاه موقت یا پل مهاجرتی میبینن. از طرفی مدارک دانشگاههای چین اعتبار بالایی توی کانادا و اروپا داره.
البته بعضی از کاربرها میگن «شهروندی چین» چه ارزشی داره. شاید جالب باشه بدونید کسی که شهروند چین میشه عملا بخشی از آزادیهای فردیش حذف میشه و اگر مشکلی براش پیش میاد نمیتونه از حمایت کشور قبلیش (از طریق سفارت) استفاده کنه و تمام قوانین ضد آزادی چین رو باید بپذیره. [L]
🤓 @geekalerts
جالبه بدونید تا سال ۲۰۱۰ کل کسایی که شهروندی چین رو گرفتن ۱۴۴۸ نفر بودن، بر اساس ماده ۷ قانون تابعیت چین، شهروندی رو فقط به کسی میدن که داخل چین خیشاوند داشته باشه، برنامه اقامت دائم داشته بشه، و تابعیت قبلیش از هر کشوری هست رو باطل کنه چون چین، چند تابعیتی رو به رسمیت نمیشناسه.
تا اینجا شاید فکر کنید پس چرا آدمها به چین میرن و درس میخونن، یه دلیلش اینه که گرفتن ویزای تحصیلی و کاری چین راحته، هزینههای تحصیل و زندگی پایینه و بیشتر کسایی که به چین میرن اونو یه ایستگاه موقت یا پل مهاجرتی میبینن. از طرفی مدارک دانشگاههای چین اعتبار بالایی توی کانادا و اروپا داره.
البته بعضی از کاربرها میگن «شهروندی چین» چه ارزشی داره. شاید جالب باشه بدونید کسی که شهروند چین میشه عملا بخشی از آزادیهای فردیش حذف میشه و اگر مشکلی براش پیش میاد نمیتونه از حمایت کشور قبلیش (از طریق سفارت) استفاده کنه و تمام قوانین ضد آزادی چین رو باید بپذیره. [L]
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
یک تبلیغ از توزیع لینوکس SLS در شماره سپتامبر 1993 مجله BYTE پیدا کردم.
توزیع SLS Linux: دومین توزیع لینوکس بود که نصب و استفاده از سیستم عامل لینوکس را در اوایل دهه ۹۰ میلادی بسیار آسانتر کرد. این توزیع بعدها جای خود را به توزیعهای معروفتری مانند Slackware (که از SLS منشعب شد) و Red Hat داد.
مجله BYTE magazine: یک مجله بسیار معتبر و تاثیرگذار در حوزه فناوری و رایانه در دهههای ۷۰ تا ۹۰ میلادی بود. پیدا کردن یک تبلیغ مرتبط با لینوکس در آن دوران، یک یافته تاریخی و کلکسیونی جالب برای علاقهمندان به تاریخچه نرمافزارهای متنباز محسوب میشود.
توزیع SLS Linux: دومین توزیع لینوکس بود که نصب و استفاده از سیستم عامل لینوکس را در اوایل دهه ۹۰ میلادی بسیار آسانتر کرد. این توزیع بعدها جای خود را به توزیعهای معروفتری مانند Slackware (که از SLS منشعب شد) و Red Hat داد.
مجله BYTE magazine: یک مجله بسیار معتبر و تاثیرگذار در حوزه فناوری و رایانه در دهههای ۷۰ تا ۹۰ میلادی بود. پیدا کردن یک تبلیغ مرتبط با لینوکس در آن دوران، یک یافته تاریخی و کلکسیونی جالب برای علاقهمندان به تاریخچه نرمافزارهای متنباز محسوب میشود.
Forwarded from Golden Code (@lix)
ایا user->loadMissing('posts')$ چه زمانی Query میزنه؟
Anonymous Quiz
7%
همیشه
20%
وقتی relation خالی باشه
66%
اگه relation قبلاً لود نشده باشه
7%
هیچ وقت
Forwarded from AiSegaro 👾
Media is too big
VIEW IN TELEGRAM
🎨 آموزش ساخت بینهایت وکتور آرت با هوش مصنوعی! 🎨
در این ویدیوی آموزشی یاد میگیرید که چطور با استفاده از ابزارهای قدرتمند هوش مصنوعی مثل ChatGPT و Recraft، هر تصویری را به یک اثر هنری وکتور قابل ویرایش تبدیل کنید. 🖌✨
یاد میگیرید که چگونه با نوشتن پرامپتهای ساده و حرفهای، سبکهای مختلف وکتور را تولید کرده و حتی با ارجاع به یک تصویر، سبک آن را به تصویر دیگری منتقل کنید. همچنین با قابلیتهای بینظیر Recraft برای وکتورایز کردن، کنترل کامل رنگها و خروجی SVG برای ویرایش در نرمافزارهایی مثل ایلاستریتور آشنا خواهید شد. 🚀
📽 زیرنویس فارسی و انگلیسی
🧠 مناسب برای همه، چه مبتدی چه حرفهای
🌐 ترجمه این دوره با وبسایت isega.ro انجام شده — حتماً سر بزن!
☯️ 💳 با حمایت (Donate) از من، محتوای بیشتری در آینده قرار میدهم. لینک دونیت (ریالی و کریپتو): donate.isega.ro
📌 برای دیدن قسمتهای بعدی کانال رو دنبال کن:
📺🌐 @AiSegaro
🚀 هر روز یک قدم نزدیکتر به آیندهای هوشمند!
📤 بازنشر آزاد با ذکر منبع 🙏❤️
در این ویدیوی آموزشی یاد میگیرید که چطور با استفاده از ابزارهای قدرتمند هوش مصنوعی مثل ChatGPT و Recraft، هر تصویری را به یک اثر هنری وکتور قابل ویرایش تبدیل کنید. 🖌✨
یاد میگیرید که چگونه با نوشتن پرامپتهای ساده و حرفهای، سبکهای مختلف وکتور را تولید کرده و حتی با ارجاع به یک تصویر، سبک آن را به تصویر دیگری منتقل کنید. همچنین با قابلیتهای بینظیر Recraft برای وکتورایز کردن، کنترل کامل رنگها و خروجی SVG برای ویرایش در نرمافزارهایی مثل ایلاستریتور آشنا خواهید شد. 🚀
📽 زیرنویس فارسی و انگلیسی
🧠 مناسب برای همه، چه مبتدی چه حرفهای
🌐 ترجمه این دوره با وبسایت isega.ro انجام شده — حتماً سر بزن!
☯️ 💳 با حمایت (Donate) از من، محتوای بیشتری در آینده قرار میدهم. لینک دونیت (ریالی و کریپتو): donate.isega.ro
📌 برای دیدن قسمتهای بعدی کانال رو دنبال کن:
📺🌐 @AiSegaro
🚀 هر روز یک قدم نزدیکتر به آیندهای هوشمند!
📤 بازنشر آزاد با ذکر منبع 🙏❤️
Forwarded from AiSegaro 👾
پرامپت هایی که در این اموزش استفاده شده 👆
“Convert this image into a <style> vector art style”
Styles: hyper-detailed, dotwork, tritone, stencil, WPAP, pop, synthwave, lineart, bauhaus, sticker, 3d, flat…etc.
[@01:31] Style Transfer Prompt:
“Apply the style of the first image to the second image, while preserving the characteristics, colors, pose, and facial features of the second image in the final output.”
You should describe your style reference image if it has complex details.
[@02:56] Image Style Prompt:
“Write a descriptive prompt that clearly describes the attached image's style (not its composition). Start the prompt with 'convert this image into'. Ensure the output prompt works on any new image.”
[@03:24] Idea Prompt:
“Write a descriptive prompt that clearly describes a vector art style of <add your idea here>. Start the prompt with 'convert this image into'. Ensure the output prompt works on any new image.”
[@05:47] Basic Unlimited Vector Art Prompts:
“Give me another detailed vector art prompt with a different style/idea.”
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
⭕️کتاب فارسی مرجع کامل مدرک بینالمللی LPIC-1(101-500,102-500)
🔸پس از انتشار کتاب مرجع دستورات لینوکسی تحت نام ۱۰۰۱ دستور لینوکس، این بار کتاب جامع و کاربردی با عنوان کتاب مرجع کامل مدرک بینالمللی LPIC-1 در مرحله نهایی انتشار است.
🔸این مرجع علاوه بر آموزش گامبهگام مباحث اصلی لینوکس، با ارائه محتوای بیشتر از کتابها و منابع بینالمللی، مطالعهای منسجم و کامل را برای شما فراهم میسازد. با مطالعه این کتاب نیاز به مطالعه کتابهای زیر نمیباشد و تمامی مباحث و سرفصل های کتابهای زیر را پوشش میدهد:
• LPIC-1 Objectives V5.0 – Linux Professional Institute
• LPI Linux Certification in a Nutshell: A Desktop Quick Reference (O'Reilly, 3rd Edition)
• LPIC-1 Linux Professional Institute Certification Study Guide (Sybex)
• CompTIA Linux+ / LPIC-1 Cert Guide: Exams LX0-103 & LX0-104 / 101-400 & 102-400
• Practical LPIC-1 Linux Certification Study Guide
• LPIC-1 Linux Professional Institute Certification Study Guide (Sybex)
• LPIC-1 Linux Professional Institute Certification Bible
• LPIC-1 Linux Certification in a Nutshell
🔹نویسنده: حسین سیلانی
🔹انتشارات یافته
🔹فرمت فایل pdf در 650 صفحه تماما رنگی
اطلاع رسانی به زودی از کانال:
https://t.iss.one/linuxtnt
🔸پس از انتشار کتاب مرجع دستورات لینوکسی تحت نام ۱۰۰۱ دستور لینوکس، این بار کتاب جامع و کاربردی با عنوان کتاب مرجع کامل مدرک بینالمللی LPIC-1 در مرحله نهایی انتشار است.
🔸این مرجع علاوه بر آموزش گامبهگام مباحث اصلی لینوکس، با ارائه محتوای بیشتر از کتابها و منابع بینالمللی، مطالعهای منسجم و کامل را برای شما فراهم میسازد. با مطالعه این کتاب نیاز به مطالعه کتابهای زیر نمیباشد و تمامی مباحث و سرفصل های کتابهای زیر را پوشش میدهد:
• LPIC-1 Objectives V5.0 – Linux Professional Institute
• LPI Linux Certification in a Nutshell: A Desktop Quick Reference (O'Reilly, 3rd Edition)
• LPIC-1 Linux Professional Institute Certification Study Guide (Sybex)
• CompTIA Linux+ / LPIC-1 Cert Guide: Exams LX0-103 & LX0-104 / 101-400 & 102-400
• Practical LPIC-1 Linux Certification Study Guide
• LPIC-1 Linux Professional Institute Certification Study Guide (Sybex)
• LPIC-1 Linux Professional Institute Certification Bible
• LPIC-1 Linux Certification in a Nutshell
🔹نویسنده: حسین سیلانی
🔹انتشارات یافته
🔹فرمت فایل pdf در 650 صفحه تماما رنگی
اطلاع رسانی به زودی از کانال:
https://t.iss.one/linuxtnt
Telegram
linuxtnt(linux tips and tricks)
مرجع فارسی کامل دستورات لینوکسی
کتاب 1001 دستور لینوکس.
⭕️به جای خواندن چندین کتاب لینوکسی، این کتاب را چند مرتبه بخوان
ویرایش سوم کتاب :
🔹تنها منبع فارسی کامل با تمرکز بر دستورات لینوکسی با پوشش کامل دستورات موجود در دوره های:
Linux Essentials
Linux…
کتاب 1001 دستور لینوکس.
⭕️به جای خواندن چندین کتاب لینوکسی، این کتاب را چند مرتبه بخوان
ویرایش سوم کتاب :
🔹تنها منبع فارسی کامل با تمرکز بر دستورات لینوکسی با پوشش کامل دستورات موجود در دوره های:
Linux Essentials
Linux…
Forwarded from Armon technical logs (armon Taheri)
این ویدیو جز ویدیو هایی بود که خیلی جای خالیشو حس میکنم
بیان صادقانه و بدون سانسور مسیر شغلی و زندگی یک متخصص ایتی
https://youtu.be/tNZnLkRBYA8
بیان صادقانه و بدون سانسور مسیر شغلی و زندگی یک متخصص ایتی
https://youtu.be/tNZnLkRBYA8
YouTube
ThePrimeagen: Programming, AI, ADHD, Productivity, Addiction, and God | Lex Fridman Podcast #461
ThePrimeagen (aka Michael Paulson) is a programmer who has educated, entertained, and inspired millions of people to build software and have fun doing it.
Thank you for listening ❤ Check out our sponsors: https://lexfridman.com/sponsors/ep461-sb
See below…
Thank you for listening ❤ Check out our sponsors: https://lexfridman.com/sponsors/ep461-sb
See below…
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 هم زمان با ضبط دوره لاراول, بالاخره من به جمع فول استک MERN پیوستم که قرار است که پروژه مدیریت وظایف با تکنولوژی React, Node.js, MongoDB, Express بنویسم که مبتنی بر SaaS است.
امیدوارم خروجی خوبی از آب در بیاد.
@TheRaymondDev
امیدوارم خروجی خوبی از آب در بیاد.
@TheRaymondDev
Forwarded from Gopher Academy
اگه بگم یه زبان برنامه نویسی داریم که حجم کامپایلرش کوچیک تر از 1kb باور میکنی؟
برینفاک (BrainFuck) یه زبان برنامه نویسی رمزی هستش که تو سال 1993 توسط آربن مولبر به هدف کوچکترین کامپایلر دنیا نوشته شد.
هدف مولبر رقابت با کامپایر 1024 بایتی زبان FALSE بود و کامپایلر برینفاک فقط 296 بایت فضا اشغال میکرد که البته توی نسخه بعدی این فضا به 240 بایت هم کاهش یافت!!
امروزه توی اینترنت اگر بگردید افرادی هستن که حجم کامپایلر این زبان رو با بهینه سازی الگوریتم هاش به 100 بایت هم برسونن! فکرشو بکن این کامپایلر توی ⅕ یه سکتور دیسک ذخیره میشه (یک دهم کیلوبایت)
حالا از بحث فضا که بگذریم میرسیم به خود زبان که کل دستوراتش از هشت کاراکتر ساخته میشه: + - , . <> [ ] و همونطور که از اسمش مشخصه به شدت دشواره و مغز شما رو هدف قرار میده.
داکیومنت خیلی وحشتناکی هم داره وقتی وارد سایتش میشی انگار رفتی تو دارک وب:
brainfuck.org
| <Farzad Ebrahimi/>
برینفاک (BrainFuck) یه زبان برنامه نویسی رمزی هستش که تو سال 1993 توسط آربن مولبر به هدف کوچکترین کامپایلر دنیا نوشته شد.
هدف مولبر رقابت با کامپایر 1024 بایتی زبان FALSE بود و کامپایلر برینفاک فقط 296 بایت فضا اشغال میکرد که البته توی نسخه بعدی این فضا به 240 بایت هم کاهش یافت!!
امروزه توی اینترنت اگر بگردید افرادی هستن که حجم کامپایلر این زبان رو با بهینه سازی الگوریتم هاش به 100 بایت هم برسونن! فکرشو بکن این کامپایلر توی ⅕ یه سکتور دیسک ذخیره میشه (یک دهم کیلوبایت)
حالا از بحث فضا که بگذریم میرسیم به خود زبان که کل دستوراتش از هشت کاراکتر ساخته میشه: + - , . <> [ ] و همونطور که از اسمش مشخصه به شدت دشواره و مغز شما رو هدف قرار میده.
داکیومنت خیلی وحشتناکی هم داره وقتی وارد سایتش میشی انگار رفتی تو دارک وب:
brainfuck.org
| <Farzad Ebrahimi/>
Forwarded from Md Daily (Mahan)
احتمالا اسم freecodecamp رو زیاد شنیده باشید و اولین مورد لیستم هست :
1. https://freecodecamp.org/learn/
2. دوره های دانشگاه هلسینکی:
https://programming-25.mooc.fi
https://courses.mooc.fi/org/uh-cs/courses/data-analysis-with-python-2024-2025
https://elementsofai.com
https://devopswithkubernetes.com
https://fullstackopen.com
همه ی دوره هاش: https://mooc.fi/en/courses/
3. سیسکو نتاکد (Cisco Netacad)
https://netacad.com/courses/python-essentials-1
https://netacad.com/courses/javascript-essentials-1
https://netacad.com/courses/data-analytics-essentials
https://netacad.com/courses/ethical-hacker
https://netacad.com/courses/networking-basics
4. گواهینامههای اوراکل (Oracle Certifications)
☁️ Cloud
5. آکادمی سیلور (Saylor Academy)
6. دانشگاه هاروارد
https://cs50.harvard.edu/x/2025/
https://cs50.harvard.edu/python/2022/
https://cs50.harvard.edu/ai/2024/
https://cs50.harvard.edu/web/2020/
7. آکادمی هاباسپات (HubSpot Academy)
میتونید گواهینامههای مربوط به سئو (SEO)، بازاریابی، فروش و کلی چیزای دیگه رو بگذرونید
8. Neo4j
❯ Neo4j Certified Professional
https://graphacademy.neo4j.com/certifications/neo4j-certification/
❯ Neo4j Graph Data Science Certification
https://graphacademy.neo4j.com/courses/gds-certification/
9. Hackerrank
Get certified and also earn badges for free on Hackerrank.
❯ DSA
10. Kaggle
وقتی منابع یادگیری زیاد میشن، لزوما این نیست که برید همشون رو یاد بگیرید و اون کمال گرایی درونیتون که میگه اگه همش رو نبینم پس از یه چیزی عقب میوفتمم رو باید کنترل کنید :)
یکی از کار هایی که میشه کرد اینکه توشون چرخ بزنید، ایده بگیرید و بالاخره با یکیشون حال میکنید و ادامه میدید دیگه.
---
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Agora (Alireza)
مکانیزم Multi-Leader Replication و مصائب Write Conflict - بخش ۲
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
سه تا روش وجود داره برای این که این کانفلیکتها به صورت خودکار حل بشند. من تا جایی فهمیدم هر کدوم رو سعی میکنم توضیح بدم.
۱- Operational Transformation (OT)
مثالی که راجعبه collaborative document editing زدم، دقیقا مورد کاربرد این الگوریتمه. گوگل از همین الگوریتم برای رفع مشکل کانفلیکتهاش توی live editorش استفاده کرده (البته میگن که الان دیگه از این استفاده نمیکنه و رفته سرغ CRDT. ولی من چیزی راجعبهش نمیدونم.)
به طور خلاصه عملکرد الگوریتم اینطوریه که وقتی دو یا چند تغییر همزمان دریافت میشه، یکی از اونها روی سند اعمال میشند، و باقی تغییرها طور تبدیل میشند که روی سند بعد از اعمال شدن تغییر اول کار کنند. به عنوان مثال:
کاربر A تو اندیس سوم حرف «X» اضافه میکنه.
همون موقع، کاربر B تو اندیس شماره ۱، حرف «Y» اضافه میکنه.
بدون OT، مشخصا اگر اول تغییر B اعمال بشه، اندیس ۳ دیگه همونی نیست که کاربر A میخواست تغییر بده و این باعث تغییر اشتباه میشه.
با OT، وقتی تغییر B اول اعمال شد، تغییر A transform میشه (چون حالا موقعیت ۳ شده ۴)، پس تغییر A اصلاح میشه و همه یک نتیجه یکسان رو میبینن.
برای مطالعهی بیشتر: لینک ۱ و لینک ۲
۲- Conflict-free Replicated Datatypes (CRDTs)
چند ماه پیش که قرار بود که توی یک پروژهای یه لایو ادیتور بنویسیم، اولین نتیجهای که توی گوگل بهش رسیدم همین بود. احتمالا با این بیشتر آشنا هستید. کتابخونههای معرفی مثل Ypy و Yjs هم برای همین کار پیاده شدند که این امکان رو میده که بدون کانفلیکت یک سری دیتااستراکچر رو به طور همزمان تغییر بدیم.
فرض کنید که دو تا پراسس (مولتی پراسسینگ خیلی شبیه سیستمهای توزیع شدهست. واسه همین همچین مثالی میزنم. ولی شما میتونید دو تا کلاینت کاملا مستقل و یک دیتابیس در نظر بگیرید)، میخوان که مقدار counter رو توی یک shared memory که برابر ۰ه تغییر بدن. یکی میخواد اون رو +۲ کنه و یکی دیگه +۳.
چیزی که همه اینجا انتظار داریم اینه که یک حالت غییر قطعی پیش بیاد. یک بار counter=2 بشه یکبار counter=3. ولی ایدهی CRDT اینه که اینها رو باهم ترکیب کنیم. یعنی این که مستقل از ترتیب هرکدوم، در نهایت با به counter=5 برسیم:
یا توی مثال collaborative editor. دوباره همون فضا رو تصور کنید:
اول داکیومنت نوشته:
رضا میخواد که اول Ali یه aqa بذاره
علی هم میخواد که بعد از Ali یه khan بذاره.
اتفاقی که توی CRDTمیفته اینه که هر کارکتر یک آیدی یونیک دارند و توی کیس ما تغییر رضا رو وقتی دریافت میکنه، اینطوره که قبل از آیدی مربوط به حرف A توی ایندکس ۱۰، یه aqa بذار. وقتی که درخواست علی رو هم میگیره میگه بعد از آیدی مربوط به کارکتر i تو اندیس ۱۲، یه khan میذاره. اینطوری خروجی اینطور خواهد بود:
بدون این که هیچ کانفلیکتی وجود داشته باشه.
نکتهای که راجعبه CRDT و OT وجود داره اینه که الگوریتم CRDT برخلاف OT نیاز به یک co-ordination نداره و میشه که decentralized باشه.
برای مطالعهی بیشتر: لینک ۱، ویدیوی Martin Kleppmann (نویسندهی کتاب Designing Data Intensive Applications)، لینک ۳ + ارائهی Kelppman
۳- Mergable Persistent Data Structures (MPDS)
ساختماندادههایی که اگر تغییری توشون بدین، اون تغییرات از بین نمیرند. درست همونطور که توی git هم داریم و میشه برنچها رو باهم مرج کرد. البته نه یک مرج عادی یا two-way merge (که توی CRDT استفاده میشد) که three-way merge. بذارید با مثال بهتر توضیح بدم:
فرض کنید یک لیستی داریم:
همزمان یک ترد به این لیست مقدار ۴ رو اضافه میکنه:
و درست در همون زمان، یک ترد دیگه، مقدار ۵ رو:
هردوی این نسخهها توی لیست ما که Persistentعه ذخیره میشند. حالا هروقت که بخواییم این تغییرات رو باهم مرج کنیم، بنا به سیاست مرجی که داریم میتونیم این دو تا تغییر رو باهم ادغام کنیم. درست همونطور که دو تا برنچ رو باهم توی گیت مرج میکنیم. اما داستان مرج سهطرفه چیه؟ فرقش با مرج دوطرفه چیه؟ این مثال رو در نظر بگیرید:
نسخهی Base ما اینه:
نسخهای که کاربر A تغییر میده اینه:
نسخهای که کاربر B تغییر میده اینه:
حالا ما برای مرج کردن، سه طرف دخیل در تصمیم گیری داریم:
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
سه تا روش وجود داره برای این که این کانفلیکتها به صورت خودکار حل بشند. من تا جایی فهمیدم هر کدوم رو سعی میکنم توضیح بدم.
۱- Operational Transformation (OT)
مثالی که راجعبه collaborative document editing زدم، دقیقا مورد کاربرد این الگوریتمه. گوگل از همین الگوریتم برای رفع مشکل کانفلیکتهاش توی live editorش استفاده کرده (البته میگن که الان دیگه از این استفاده نمیکنه و رفته سرغ CRDT. ولی من چیزی راجعبهش نمیدونم.)
به طور خلاصه عملکرد الگوریتم اینطوریه که وقتی دو یا چند تغییر همزمان دریافت میشه، یکی از اونها روی سند اعمال میشند، و باقی تغییرها طور تبدیل میشند که روی سند بعد از اعمال شدن تغییر اول کار کنند. به عنوان مثال:
کاربر A تو اندیس سوم حرف «X» اضافه میکنه.
همون موقع، کاربر B تو اندیس شماره ۱، حرف «Y» اضافه میکنه.
بدون OT، مشخصا اگر اول تغییر B اعمال بشه، اندیس ۳ دیگه همونی نیست که کاربر A میخواست تغییر بده و این باعث تغییر اشتباه میشه.
با OT، وقتی تغییر B اول اعمال شد، تغییر A transform میشه (چون حالا موقعیت ۳ شده ۴)، پس تغییر A اصلاح میشه و همه یک نتیجه یکسان رو میبینن.
برای مطالعهی بیشتر: لینک ۱ و لینک ۲
۲- Conflict-free Replicated Datatypes (CRDTs)
چند ماه پیش که قرار بود که توی یک پروژهای یه لایو ادیتور بنویسیم، اولین نتیجهای که توی گوگل بهش رسیدم همین بود. احتمالا با این بیشتر آشنا هستید. کتابخونههای معرفی مثل Ypy و Yjs هم برای همین کار پیاده شدند که این امکان رو میده که بدون کانفلیکت یک سری دیتااستراکچر رو به طور همزمان تغییر بدیم.
فرض کنید که دو تا پراسس (مولتی پراسسینگ خیلی شبیه سیستمهای توزیع شدهست. واسه همین همچین مثالی میزنم. ولی شما میتونید دو تا کلاینت کاملا مستقل و یک دیتابیس در نظر بگیرید)، میخوان که مقدار counter رو توی یک shared memory که برابر ۰ه تغییر بدن. یکی میخواد اون رو +۲ کنه و یکی دیگه +۳.
چیزی که همه اینجا انتظار داریم اینه که یک حالت غییر قطعی پیش بیاد. یک بار counter=2 بشه یکبار counter=3. ولی ایدهی CRDT اینه که اینها رو باهم ترکیب کنیم. یعنی این که مستقل از ترتیب هرکدوم، در نهایت با به counter=5 برسیم:
counter = 0 + 2 + 3 = 5
یا توی مثال collaborative editor. دوباره همون فضا رو تصور کنید:
اول داکیومنت نوشته:
Edited by Ali
رضا میخواد که اول Ali یه aqa بذاره
علی هم میخواد که بعد از Ali یه khan بذاره.
اتفاقی که توی CRDTمیفته اینه که هر کارکتر یک آیدی یونیک دارند و توی کیس ما تغییر رضا رو وقتی دریافت میکنه، اینطوره که قبل از آیدی مربوط به حرف A توی ایندکس ۱۰، یه aqa بذار. وقتی که درخواست علی رو هم میگیره میگه بعد از آیدی مربوط به کارکتر i تو اندیس ۱۲، یه khan میذاره. اینطوری خروجی اینطور خواهد بود:
Edited by aqa Ali khan
بدون این که هیچ کانفلیکتی وجود داشته باشه.
نکتهای که راجعبه CRDT و OT وجود داره اینه که الگوریتم CRDT برخلاف OT نیاز به یک co-ordination نداره و میشه که decentralized باشه.
برای مطالعهی بیشتر: لینک ۱، ویدیوی Martin Kleppmann (نویسندهی کتاب Designing Data Intensive Applications)، لینک ۳ + ارائهی Kelppman
۳- Mergable Persistent Data Structures (MPDS)
ساختماندادههایی که اگر تغییری توشون بدین، اون تغییرات از بین نمیرند. درست همونطور که توی git هم داریم و میشه برنچها رو باهم مرج کرد. البته نه یک مرج عادی یا two-way merge (که توی CRDT استفاده میشد) که three-way merge. بذارید با مثال بهتر توضیح بدم:
فرض کنید یک لیستی داریم:
Persistent List: [1, 2, 3]
همزمان یک ترد به این لیست مقدار ۴ رو اضافه میکنه:
Persistent List: [1, 2, 3, 4]
و درست در همون زمان، یک ترد دیگه، مقدار ۵ رو:
Persistent List: [1, 2, 3, 5]
هردوی این نسخهها توی لیست ما که Persistentعه ذخیره میشند. حالا هروقت که بخواییم این تغییرات رو باهم مرج کنیم، بنا به سیاست مرجی که داریم میتونیم این دو تا تغییر رو باهم ادغام کنیم. درست همونطور که دو تا برنچ رو باهم توی گیت مرج میکنیم. اما داستان مرج سهطرفه چیه؟ فرقش با مرج دوطرفه چیه؟ این مثال رو در نظر بگیرید:
نسخهی Base ما اینه:
Hello world
نسخهای که کاربر A تغییر میده اینه:
Hello A world
نسخهای که کاربر B تغییر میده اینه:
Hello world B!
حالا ما برای مرج کردن، سه طرف دخیل در تصمیم گیری داریم:
Base=Hello world
A=Hello A world
B=Hello world B!
Forwarded from برند کارفرمایی همکاران سیستم
🔴 مدیریت حافظه همیشه یکی از چالشهای پنهان دنیای برنامهنویسیه؛ همون جایی که عملکرد واقعی یک زبان مشخص میشه. در Go این موضوع نهتنها به بهینهسازی سرعت کمک میکنه، بلکه کلید اصلی مقیاسپذیری و اجرای همزمان هزاران goroutine بهشمار میاد.
💻 ما در دومین رویداد تکوتاک – سلسله رویدادهای تخصصی در حوزه توسعه نرمافزار همکاران سیستم – که به صورت #رایگان و #آنلاین برگزار میشه، سراغ مبحث مدیریت حافظه در Go میریم:
🔺 ساختار حافظه در برنامهها
🔺 استک در Go (Escape Analysis و Dynamic Sized Stack)
🔺 هیپ در Go (Garbage Collector و Mark & Sweep)
👨🏻💻 ارائهدهنده: سهند صفیزاده | تیملید شرکت همکاران سیستم
📅 پنجشنبه ۱۳ شهریورماه | ساعت ۱۰ تا ۱۲
🔴 شرکت در رویداد فقط در صورت ثبتنام امکانپذیره.
🔗 اطلاعات بیشتر و لینک ثبتنام:
تکوتاک ۰2 : مدیریت حافظه در Go - همکاران سیستم
Linkedin | Instagram
💻 ما در دومین رویداد تکوتاک – سلسله رویدادهای تخصصی در حوزه توسعه نرمافزار همکاران سیستم – که به صورت #رایگان و #آنلاین برگزار میشه، سراغ مبحث مدیریت حافظه در Go میریم:
🔺 ساختار حافظه در برنامهها
🔺 استک در Go (Escape Analysis و Dynamic Sized Stack)
🔺 هیپ در Go (Garbage Collector و Mark & Sweep)
👨🏻💻 ارائهدهنده: سهند صفیزاده | تیملید شرکت همکاران سیستم
📅 پنجشنبه ۱۳ شهریورماه | ساعت ۱۰ تا ۱۲
🔴 شرکت در رویداد فقط در صورت ثبتنام امکانپذیره.
🔗 اطلاعات بیشتر و لینک ثبتنام:
تکوتاک ۰2 : مدیریت حافظه در Go - همکاران سیستم
Linkedin | Instagram
Forwarded from AI Labdon
دیپسیک برگ برنده رو رو کرد ؛ حالا اندازه 400 صفحه میتونی باهاش صحبت کنی!
▪️همین چند وقت پیش کلی بحث شد سر اینکه مدلهای باز مثل DeepSeek فقط کپیکاری میکنن و شانسی جلوی Open Ai و آنتروپیک ندارن. ولی الان؟ نسخه جدید DeepSeek V3.1 رسماً معادله رو بهم زد.
▪️این مدل میتونه 128 هزار توکن رو یکجا هندل کنه؛ یعنی شما میتونید باهاش به اندازه یه کتاب ۳۰۰ تا ۴۰۰ صفحهای گپ بزنین ، رایگان!
ظرفیتش؟ 685 میلیارد پارامتر! برای مقایسه، بعضی از غولهای فعلی نصف این رو هم ندارن. مهمتر اینکه به صورت متنباز و از طریق API در دسترس توسعهدهندههاست
▪️همین چند وقت پیش کلی بحث شد سر اینکه مدلهای باز مثل DeepSeek فقط کپیکاری میکنن و شانسی جلوی Open Ai و آنتروپیک ندارن. ولی الان؟ نسخه جدید DeepSeek V3.1 رسماً معادله رو بهم زد.
▪️این مدل میتونه 128 هزار توکن رو یکجا هندل کنه؛ یعنی شما میتونید باهاش به اندازه یه کتاب ۳۰۰ تا ۴۰۰ صفحهای گپ بزنین ، رایگان!
ظرفیتش؟ 685 میلیارد پارامتر! برای مقایسه، بعضی از غولهای فعلی نصف این رو هم ندارن. مهمتر اینکه به صورت متنباز و از طریق API در دسترس توسعهدهندههاست
Forwarded from Linux Labdon
Mini Floating Panel Extension Adds Sought-After Features
https://www.omgubuntu.co.uk/2025/08/mini-floating-panel-gnome-extension-update-indicators-scrolling
https://www.omgubuntu.co.uk/2025/08/mini-floating-panel-gnome-extension-update-indicators-scrolling
OMG! Ubuntu
Mini Floating Panel Extension Adds Sought-After Features
A new version of the nifty Floating Mini Panel GNOME Shell extension is available, and adds the sought-after ability to show/hide indicator and applet icons.
Forwarded from lune blessée
https://t.iss.one/IMHStudents/752
در رابطه با اینکه کارکرد توپولوژی جبری چیه صحبت کردیم.
در رابطه با اینکه کارکرد توپولوژی جبری چیه صحبت کردیم.
Telegram
بخش دانشجویی خانه ریاضیات اصفهان
🔹 ویدیوی #گپ_دانشجویی با موضوع «توپولوژی جبری؛ از شهود تا فرمالیسم»
👤 ارائهدهنده: مهدیس امامی
دانشجوی کارشناسی ارشد توپولوژی جبری، دانشگاه تهران
🗓 برگزار شده در تاریخ ۳۰ مرداد ۱۴۰۴
@IMHStudents
@IMHSArchive
👤 ارائهدهنده: مهدیس امامی
دانشجوی کارشناسی ارشد توپولوژی جبری، دانشگاه تهران
🗓 برگزار شده در تاریخ ۳۰ مرداد ۱۴۰۴
@IMHStudents
@IMHSArchive
Forwarded from Hamed
📘 Task Programming in C# and .NET
یه خبر خوب! 🎉
شروع کردم به ترجمهی این کتاب. که به صورت تخصصی وارد دنیای برنامهنویسی Task و async/await در #C و .NET میشه و منبع خیلی خوبی برای درک عمیق این مفاهیمه.
لطفاً حمایت کنید.❤️
🔗 https://github.com/hheydarian/task-programming-in-csharp-dotnet-persian
یه خبر خوب! 🎉
شروع کردم به ترجمهی این کتاب. که به صورت تخصصی وارد دنیای برنامهنویسی Task و async/await در #C و .NET میشه و منبع خیلی خوبی برای درک عمیق این مفاهیمه.
دو فصل هم ترجمه شده
لطفاً حمایت کنید.❤️
🔗 https://github.com/hheydarian/task-programming-in-csharp-dotnet-persian
GitHub
GitHub - hheydarian/task-programming-in-csharp-dotnet-persian: Persian translation of "Task Programming in C# and .NET" by Vaskaran…
Persian translation of "Task Programming in C# and .NET" by Vaskaran Sarcar. - hheydarian/task-programming-in-csharp-dotnet-persian