🧑‍💻Cyber.vision🧑‍💻
466 subscribers
169 photos
12 videos
20 files
144 links
Python tips and tricks
The Good, Bad and the Ugly
متخصص امنیت شبکه های کنترل صنعتی
👨‍💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)
https://t.iss.one/Hacker0x01
Download Telegram
یکی از دوستان پرسیده با جنگو
Sqlalchemy
استفاده کنم؟
جواب : به هیچ عنوان

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

حالا جنگو و orm جنگو که خیلی تابلو هستش
حتی جاهایی که از هم دور تر هم هستن بازم این مساله وجود داره
مثلا دات نت کور و Microsoft sql
اینها تنها ویژگی مشترکشون مایکروسافت هستش یعنی خیلی راحت می‌شه بجاش از پستگرس استفاده کرد ولی می‌بینید که همچنان کلی شرکت Microsoft sql مهم ترین اپشنشون هست
درصورتی که ما شاید سمت پایتون اصلا خیلی درنظرش نگیریم

استثنا هم قطعا وجود داره 😒
🔥1
این ریپو اومده پروژه‌های استخدامی ی سری از شرکتای بزرگ و به همراه جوابش قرار داده که خوندنشون می‌تونه برای کسایی که دنبال کارن مفید باشه.

https://github.com/laravel98developer/laravel-hiring-projects
خیلی ابزار خوبی هست برای درک بهتر Transformers :

Link
تا الان سه تا مدل OCR واسه زبان فارسی باستان نوشتم که دو تا مدلِ
easyocr_old_persian
و
tessercat_old_persian
کار میکنند. اگر بخواید میتونید الان تست شون کنید.
توجه کنید الان فقط مدل هارو نوشتم ولی چون برای شروع دیتای کمی بهش دادم، فعلا پرفورمنسش کمه ولی در آینده با دیتای بهتر و بیشتری مدلم رو train میکنم تا به نتایج بهتری برسم. در حال حاضر، طبق نتایجی که در عکس ها ملاحضه میکنید؛
confidence score
مدلم حدود 0.5 هست.
تصویر خط میخی ای که ملاحضه میکنید مربوط به ۱۲ خطِ آخر کتیبه ی داریوش بزرگ در تخت جمشید (کتیبه DPd) هست.



#نتایج
#زبان_فارسی_باستان
خطای نصب پکیج های pip رو شاید این روزها زیاد ببینیم که میگه Timeout شدید؛ این خطا به علت مشکلات connection شما و احتمالا تحریم ها ایجاد میشه.
اگر میخواید بدون استفاده از VPN و تغییر DNS بتونید این پکیج هارو نصب کنید چند تا نکته بهتون میگم. توجه کنید نکته ها رو برای سیستم عامل GNU/Linux و توزیع Ubuntu دارم میگم:

۱. پکیج منیجر apt رو همیشه آپدیت نگه دارید و  mirror هاشو جایی تنظیم کنید که بتونه آپدیت هارو بگیره چون پکیج منیجر pip خودش توسط پکیج منیجر apt مدیریت میشه!
تنظیم میرورهای apt واسه توزیع ابونتو در این مسیره:

etc/apt/sources.list

۲. خود pip رو ورژنش رو کنترل کنید که آخرین ورژن باشه، یعنی آپدیت باشه.

۳. تمام آپدیت های روزانه سیستم عامل لینوکس که مربوط به security update میشن رو انجام بدید، به خصوص آپدیت های مربوط به system components

۴. از میرور های ایرانی pip، مستقیم در کامندش استفاده کنید، ساختار کامندش اینطوری میشه:

pip install اسم پکیج --index-url آدرس میرور

برای مثال میتونید از کامند زیر که حاوی آدرس میرور aliyun هست برای نصب پکیج pandas استفاده کنید:

pip install pandas --index-url https://mirrors.aliyun.com/pypi/simple/



آدرس میرورهای دیگه ای که میتونید استفاده کنید:

https://pypi.mirrors.ustc.edu.cn/simple/



https://repo.huaweicloud.com/repository/pypi/simple/


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


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

موفق باشید
-اصل The Newspaper Metaphor در کلین کد

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

سورس کد هم تقریبا یه چیز مشابه به اینه شما با خوندن اسم فایل (یا حالا توی oop اسم کلاس) هدف کلی اون سورس فایل رو می فهمید قسمت های بالای کد که میتونه شامل توابع مهم یا متغیر ها و پراپرتی های مهم باشه (مثل پارگراف اول مقاله توی روزنامه) تا کسی که کد رو میخونه خلاصه ای از سورس دستش بیاد.

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

#CleanCode
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
💎 دنیای رمزنگاری با DSA 💎

امروز میخوایم با هم یکی از الگوریتم‌های مهم و پرکاربرد در دنیای رمزنگاری آشنا بشیم. این الگوریتم با اسم جذاب DSA شناخته میشه که مخفف Digital Signature Algorithm هست.

حالا DSA چیه و چیکار میکنه؟ 🤔

تصور کن میخوای یه پیام خیلی مهم رو برای دوستت بفرستی. اما نگران اینی که کسی پیام رو تو راه دستکاری کنه یا به اسم تو پیام بفرسته. اینجا DSA به دادت میرسه!

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

چطور کار میکنه؟

اینجوریه که DSA از دو کلید استفاده میکنه: یک کلید عمومی و یک کلید خصوصی.

🔑 کلید عمومی: مثل یه کارت ویزیت دیجیتالی هست که همه میتونن ببینن. این کلید برای رمزگشایی پیام استفاده میشه.

🗝 کلید خصوصی: مثل یه رمز عبور خیلی محرمانه هست که فقط خودت باید بدونی. این کلید برای ایجاد امضای دیجیتال استفاده میشه.

وقتی میخوای یه پیام رو امضا کنی، DSA از کلید خصوصی‌ت برای ایجاد یه رشته تصادفی استفاده میکنه. این رشته تصادفی با پیام اصلی ترکیب میشه و یه امضای دیجیتال ایجاد میکنه. این امضا به پیام اصلی اضافه میشه و همراه با پیام برای گیرنده ارسال میشه.

گیرنده با استفاده از کلید عمومی تو، امضای دیجیتال رو بررسی میکنه. اگر امضا معتبر باشه، مطمئن میشه که پیام از طرف تو ارسال شده و دستکاری نشده.

الگوریتم‌های استفاده شده در DSA:

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

کاربردهای DSA:

1⃣ امضای دیجیتال اسناد: برای اطمینان از اصالت و عدم تغییر اسناد الکترونیکی

2⃣ احراز هویت: برای تأیید هویت کاربران در سیستم‌های امنیتی

3⃣ تأمین امنیت تراکنش‌های مالی: برای محافظت از اطلاعات حساس در تراکنش‌های آنلاین

4⃣ امضای نرم‌افزار: برای اطمینان از اینکه نرم‌افزار دستکاری نشده است
مزایای DSA:

5⃣ امنیت بالا: شکستن امضای دیجیتال DSA بسیار دشوار است.

6⃣ سرعت بالا: DSA نسبت به برخی الگوریتم‌های دیگر سریع‌تر عمل میکنه.

7⃣ استاندارد بودن: DSA یک استاندارد جهانی است و در بسیاری از سیستم‌های امنیتی استفاده میشه.

جمع‌بندی:

فهمیدیم که DSA یک ابزار قدرتمند برای تأمین امنیت اطلاعات است. با استفاده از DSA میتونیم اطمینان حاصل کنیم که اطلاعات ما دست نخورده باقی میمونه و از طرف فرد مورد نظر ارسال شده است.

⭕️ نکته: DSA یکی از چندین الگوریتم امضای دیجیتال است. الگوریتم‌های دیگری مثل RSA هم وجود دارند که کاربردهای مشابهی دارند.


#امنیت_اطلاعاتDSA #رمزنگاری #امضای_دیجیتال
👍1🔥1
استرس در مصاحبه کاری یه امر طبیعیه. قراره قضاوت شین و نتیجه‌ش رو هم نمی‌دونین! واضحه که به عنوان یک انسان باید مضطرب بشین، اما این استرس می‌تونه تا حدی مهار بشه که تأثیر منفی‌ش کنترل شه.

۳×۳ نکته‌ی مختصر درباره‌ی «مدیریت استرس در مصاحبه کاری»:

1️⃣ قبل مصاحبه:

۱. راجع به شرکت، پوزیشن، و مصاحبه‌کننده خوب تحقیق کنین.

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

آرامش فیزیکی محیط (از نظر صوتی و بصری) احترام به مخاطبه. آرامش خودتون هم کمک کنه بهترین عملکردتون رو داشته باشین، هم می‌تونه نشان از تسلط شما بر موضوع بحث داشته باشه.
۳. شب قبلش خوب بخوابین، قبل مصاحبه (و حین‌ش) آب بنوشین، و به روزمه‌تون هم افتخار کنین!

قطعاً دستاوردهای شما اون‌قدری بوده که حاضرن براتون وقت باارزش‌شون رو بذارن تا بیشتر بشناسن‌تون. پس اعتمادبه‌نفس (در حد کافی) داشته باشین و حال‌تون با خودتون خوب باشه.
  حین مصاحبه:

۱. جواب مختصر مفید (efficient) بدین. و با دست خودتون مصاحبه رو به کوچه پس‌کوچه‌های پرخطر و استرس‌زا نبرین!

حتماً هر ۳۰ الی ۴۵ ثانیه چک کنین که مخاطب همچنان توضیح می‌خواد و جلوش آپشن بذارین. چون ممکنه طرف از سر احترام نپره وسط حرفتون اما بعداً نمره منفی بده!
‏۲. تلاش برای بیش‌اثرگذاری (overimpress کردن) نکنین! صرفاً بهترینِ خودتون باشین.

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

درست مثل تمرین تئاتر که می‌تونین فرض کنین تماشاچی‌ای نیست و این یه تمرینه. این شکلی دیگه لازم نیست استرسِ درحدلحظه قضاوت شدن رو دائم به دوش بکشین.
3️⃣ بعد مصاحبه:

۱. حتماً یه «دمت گرم» به خودتون بگین که از کنج دنج راحت خودتون (کامفورت زون) بیرون اومدین و این مرحله رو پشت سر گذاشتین!

و اون والدی نباشین که فقط اگه بچه ۲۰ بگیره دوستش داره. بلکه به تلاش خودتون ارزش بدین و احترام بذارین. انشالله نتیجه هم خوب می‌شه.
‏۲. بیش‌فکری (overthink) نکنین! کنترل تمام دنیا دست شما نیست. با شفقت و صبوری سعی کنین یاد بگیرین و جاهای بهبودپذیر رو کم‌کم بهبود بدین.

صد تا فاکتور توی مصاحبه همیشه هست که ممکنه باعث نشدن بشه. و ۹۰ تاشم نمی‌تونین ببینین. پس بیش از حد تحلیل و خودقضاوت‌گری مضاعف و ناسالم نکنین.
‏۳. نهایتاً، یادتون باشه که شما یک شیر هستین که نیاز داره «یه آهو» شکار کنه. اگه این آهو رو از دست دادین، بازم آهو تو گله ممکنه باشه. و تهش کسی نه می‌پرسه و نه براش مهمه که چند تا آهو رو از دست دادین، وقتی که با یه آهو لای دندوناتون با افتخار برگردین و حالشو ببرین!
1
🧑‍💻Cyber.vision🧑‍💻
Photo
اولین دوره سمینارهای اسپارک با حمایت مرکز کارآفرینی دانشگاه صنعتی شریف

همراه با حضور ١٢ شرکت مطرح تکنولوژی و برگزاری در تاریخ ٨ و ٩ شهریور به صورت مجازی

فرصت استثناییِ بهره‌مندی از تجارب مهندسین شرکت‌های دیوار ، بازار، ترب ، یکتانت، هم‌روش، تپسل، جاباما ، تبدیل ، رمزینکس، گپیفای، زرین‌پال و اسمارتک

امکان حضور در ١٢ ارائه و دو میزگرد همراه با گواهی رسمی حضور از طرف مرکز کارآفرینی شریف، ارسال رزومه برای تمامی حامیان و فرصت استخدام در شرکت‌ها تنها با پرداخت ١٠٠ هزار تومان

فرصت رو از دست نده و همین حالا ثبت‌نام کن:
ce-spark.com

در صورت وجود هرگونه سوال، با اکانت پشتیبانی به آدرس @CE_Spark_Support در ارتباط باشید.

اسپارک؛ جرقه‌ی ارتباط با صنعت

  LinkedIn  Instagram
@ce_spark Register Now
🦋برگزاری کلاس های صفر تا صد زبان خارجه توسط اساتید نیتیو و با سابقه فوق العاده

🌿کلاس ها به صورت افلاین و انلاین برگزار میشوند
🌿از سطح مبتدی تا پیشرفته
🌿کلاس امادگی برای ازمون های بین المللی
🌿مشاوره تحصیلی و کاری به کشور مورد نظر

📍دریافت شرایط و ثبت نام فقط از طریق ایدی زیر
@nihon_admin
تقریباً توی ۲ سال گذشته وقتی یکی بهم میگه:

برای فلان موضوع منبعی وجود نداره، نمی‌تونم یاد بگیرم


واقعاً عصبیم می‌کنه.

من زمانی لینوکس رو یاد گرفتم که ۱ ماه منتظر موندم تا CD نصب لینوکس به دستم برسه
چرا ؟
چون با اینترنت dial up + کارت اینترنت ۵۰۰۰ تومانی امکان دانلود نداشتم.
۲ هفته صبر کردم نسخه جدید منتشر بشه، بعد سفارش دادم برام آوردن که ۲ هفته طول کشید.

وقتی cd به دستم رسید، یک کتاب قدیمی که از یک دانشجوی کارشناسی دانشگاه دستم رسیده بود رو نصفش رو خونده بودم و رو کاغذ تمرین کرده بودم.

انقدری که جای آیکون و آپشن‌ها و ... رو حفظ شده بودم.

سیستم وقتی خراب می‌شد و توی کتاب نبود، بهترین گزینه این بود که تا ۱ شب صبر کنم چون از ۱ شب به بعد اینترنت dial up قویتر می‌شد (۶۴ کیلوبایت بود اون موقع) و می‌شد توی فروم‌های مختلف راحت‌تر پست‌هارو دنبال کرد.

بعد شما الان به من میگی منبع نیست ؟ حتی اگر واقعاً هیچ منبعی هم وجود نداشته باشه برای دسترسی شما.

۱- داکیومنت اصلی
۲- سورس کدهای دیگران (یا حتی نویسنده اون کتاب‌‌خونه، زبان برنامه‌نویسی یا ...)
۳- هوش مصنوعی

برای مثال من می‌خوام یک کتابخونه تو Rust یاد بگیرم و منبع هم نداره :

bard.google.com
رو باز می‌کنم؛ توی اولین پیام می‌نویسم.

You are a senior Rust developer and my tutor on learning Axum, from now on you must help me understand every single line of code we will talk about.

بعد شروع می‌کنم سورس کد دیگران رو خوندن، داکیومنت خوندن و کد زدن.
و هر کدی که متوجه نشم، یا حتی متوجه هم بشم برای درک بهتر و یا اینکه مطمئن بشم درست یاد گرفتم می‌دم به این مدل و ....


حالا چرا Bard یا همون Gemini رو استفاده می‌کنم ؟
۱- دسترسی به داده سرچ
۲- طول متن ورودی طولانی‌تر
۳- توضیحات دقیقتر
۴- کاملاً رایگان
توجه کنید ازش نمی‌خوام کد بزنه، می‌خوام بهم توضیح بده.


خلاصه که برای تنبلی خودتون، دنبال بهونه نباشید.
قطعاً این تکنیک زمانبر هست، اما پیشرفت نیاز به زمان داره.


گل سر سبد، آنچه باید رو بهتون گفتم دیگه
اگه Wi-Fi سیستمتون اینتله و حس میکنید کنده با این تریک ممکنه مشکلتون حل بشه

برای این کار به فایل زیر برید
/etc/modprobe.d/iwlwifi.conf
و این خط رو اضافه کنید
options iwlwifi 11n_disable=8
این خط با غیرفعال کردن برخی از ویژگی‌های استاندارد 802.11n، می‌تونه به بهبود عملکرد در برخی شرایط خاص کمک کنه. به صورت کلی میاد فاصله زمانی بین فریم هارو کم میکنه و چند فریم رو میتونه ترکیب کنه با هم دیگه. همچنین تداخل با دستگاه های وایفای دیگه هم کم میشه.

البته توجه کنید این عمل وقتی که چند تا دستگاه رو وصل میکنید ممکنه سرعت شمارو از حالت عادی بیاره پایین تر.
امنیت در استفاده از <iframe> و window.open

اگر به دنیای امنیت وب و تست نفوذ علاقه‌مند هستید، حتماً با ابزارهایی مثل تگ <iframe> و متد window.open مواجه شده‌اید. این دو ابزار اگر به‌درستی مدیریت نشوند، می‌توانند به دریچه‌ای برای حملات XSS خطرناک تبدیل شوند. در این پست، به بررسی این دو و تهدیداتی که ممکن است ایجاد کنند، می‌پردازیم.

تگ  <iframe>

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

مثال حمله XSS با iframe:
فرض کنید یک سایت به‌درستی ورودی‌های کاربران را فیلتر نمی‌کند و یک مهاجم موفق می‌شود کد زیر را در سایت تزریق کند:

<iframe src="https://attacker.com/steal_data"></iframe>

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

متد window.open

متد window.open در جاوااسکریپت برای باز کردن یک پنجره یا تب جدید در مرورگر استفاده می‌شود. اگر این متد به‌درستی کنترل نشود، مهاجمان می‌توانند کاربران را به صفحات فیشینگ یا سایت‌های آلوده هدایت کنند.

مثال حمله با window.open:
مهاجم می‌تواند با تزریق کد جاوااسکریپتی مانند زیر، کاربران را به یک سایت فیشینگ هدایت کند:

window.open('https://attacker.com/phishing_page', '_blank');

این کد می‌تواند بدون آگاهی کاربر، او را به صفحه‌ای هدایت کند که به نظر معتبر می‌رسد اما در واقع هدف آن سرقت اطلاعات کاربر است.

روش‌های پیشگیری

برای جلوگیری از سوءاستفاده از <iframe> و window.open، این نکات را در نظر بگیرید:

1. استفاده از Content Security Policy (CSP): با تنظیم یک CSP مناسب، می‌توانید بارگذاری منابع از دامنه‌های غیرمجاز را محدود کنید.

2. محدود کردن iframe با sandbox: استفاده از ویژگی sandbox در iframe، از اجرای کدهای مخرب و ارسال فرم‌های ناخواسته جلوگیری می‌کند.

  
   <iframe src="https://example.com" sandbox="allow-scripts"></iframe>
  

3. کنترل دقیق ورودی‌ها: همیشه ورودی‌های کاربران را فیلتر کنید تا از حملات XSS جلوگیری شود.

4. بررسی URL‌ها در window.open: قبل از هدایت کاربران به یک صفحه جدید، URL را به دقت بررسی کنید.
---
به امید موفقیت در مسیر حرفه‌ای شدن در حوزه امنیت وب!

#جاوااسکریپت #تست_نفوذ #امنیت #برنامه‌نویسی #وب_اپلیکیشن
خطا داریم؟ همینه که هست!

یه مثال دیدم که می‌گفت شما وقتی ماشینتون پنچر میشه صبر می‌کنید تا تعمیرکار بیاد درستش کنه، یا با همون چرخ های پنجر با سرعت کم ادامه میدین تا به مقصد برسید؟

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

در یک برنامه معمولی جوابِ (احتمالا) درست به خیلی از این سوالا اینه که خب کارکرد برنامه رو متوقف کن و بگو نمیتونم. برنامه کار نکنه تا دوباره با برطرف شدن مشکلات یکی از اول اجراش کنه،
ولی اگر برنامه ما قراره توی یکسری از محیط‌ها اجرا بشه دیگه خبری از «من کار نمیکنم تا شرایط درست بشه» نیست. چه محیط‌هایی؟ محیط‌هایی که availability بالا مهمه مثلا سیستم های امبدد یا بک‌اند.
مثلا قراره ما مسیریابی یک هواپیما رو انجام بدیم و سیگنال GPS دریافت نمی‌کنیم، خب به هواپیما بگیم فعلا من کار نمیکنم؟! یعنی چی که کار نمیکنم، با سرعت زیاد داره میره :)))
یا مثلاً توی کلود اگر ارور بدیم و برنامه کرش کنه کنیم چی میشه؟ کوبرنتیز دوباره برنامه رو اجرا می‌کنه و دوباره با مشکل درگیریم!

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

مثلا چه مشکلاتی؟
مثلاً اگه قراره کانفیگ فایل رو از بیرون لود کنیم, آمادگی نبودنش رو هم داشته باشیم، مثلا یه کانفیگ پیشفرض داشته باشیم (البته کانفیگ چون موقع اولین اجرای برنامه خودش رو نشون میده شاید نیازی هم نباشه)
مثلا اگر داده gps به ما نرسید، با کمک داده های قبلی که ذخیره کردیم و یا ترکیبش با سرعت و شتاب و ... مشکل رو موقتا و حتی نادقیق حل کنیم
یا مثلاً اگر به سرور خارجی درخواست می‌زنیم و نیست، آمادگی نبودنش رو داشته باشیم، اینجا یکسری پترن که تو صنعت استفاده میشه داریم
مثلا چه پترنهایی؟
+ دوباره درخواست بده: retry pattern
+ به یکی دیگه درخواست بده: fallback
+ اگر خرابه تا یه مدت بهش درخواست نده تا ارور الکی نگیری: circuit breaker
+ اگه سرور خارجی کنده، خیلی صبر نکن تا response time خودت هم بالا نره
+ اگر سرور خارجی دیتا قراره بهت بده، دیتای قبلی رو کش کن.

اینها در سطح کد بودن، در سطح معماری هم میشه از قبل روش‌هایی رو تدارک دید مثلاً خود دیتابیس رو چطوری High available کنیم، یا روش‌هایی که بیشتر تو سیستم های امبدد استفاده میشه مثل اینکه یه برنامه رو با چند تا پیاده سازی همزمان اجرا کنیم تا اگر یکیش خراب شد اون یکی‌ها باشن!

منابع:
https://opensource.com/article/19/9/transient-faults-devops

https://www.jrebel.com/blog/microservices-resilience-patterns

https://learn.microsoft.com/en-us/azure/architecture/best-practices/transient-faults

https://learn.microsoft.com/en-us/dotnet/architecture/cloud-native/application-resiliency-patterns
Forwarded from Syntax | سینتکس (Daimon)
حق:
من این مشکل رو زیاد دیدم؛ بیش از حداقل 20% پروژه‌های خدماتی که دوستان روش کار می‌کنن. می‌بینم که Postgresql به معنای واقعی کلمه OverKill هست. مخصوصا وقتی Sqlite کار رو در میاره.

شاید به روی خودتون نیارید ولی خیلی از شما هم ازین پروژه‌ها دیدید دیگه.

خواستم هم اهمیت SQLite رو یادآوری کنم
هم بگم پروژه‌هایی مثل rqlite هم وجود داره‌ها

مثال:
کاری به درست و غلط بودن دیزاین و ... ندارم و بحثم فقط همین مورد Sqlite هست.
یک کدی رو دیدم؛ طرف یک سیستم verification جدا براش طراحی کرده بود و تمام پروژه‌هاشون ازین سرویس استفاده می‌کرد. فکر کنم این سرویس یا .net بود یا golang بعد بحث اصلی سر این بود که Postgres بذارند یا MsSql من درجا پیشنهاد SQlite رو دادم.
این دیتابیس خیلی اهمیت زیادی نداره؛ هر کد قراره نهایتا ۱۰ دقیقه valid باشه. در صورت پاک شدن هم طرف یکبار دیگه درخواست میده (که من تاحالا پاک شدن خود به خود توش ندیدم).

چرا می‌خواید شر درست کنید برای تیم devops, server, database, ...
خیلی ها مشکلشون این هست که اطلاعات ندارند (هیچ‌وقت هم جرات تجربه کردن نداشتند)؛ خود SQLite روی SSD طبق بنچمارک‌ها.
بیش از 500 هزار insert در ثانیه رو پشتیبانی می‌کنه و برای read هم این مورد به بیش از 1 میلیون میرسه و این مورد بدون config های پرفورمنسی هست که توی داکیومنت خودش ارائه شده.
روی NVMe هم چندسال قبل تست کردیم؛ اعداد بهتر هم میشه.

اضافه کنم :
اینم rqlite اگر حتی خواستید SQlite رو بصورت distributed داشته باشید (قبلا توی اون کی کانال راجبش صحبت کردم با   K8s )

Source
👍1🔥1