جنگولرن
3.8K subscribers
288 photos
74 videos
31 files
556 links
آموزش Django و بستگان
Download Telegram
بیست میلیون تومن برای باگ Critical 🚬

https://twitter.com/1rpwn/status/1716379134207615329?t=C_5-yG7xiJXtqW0Llgk1ew&s=35
🤮6👎2👍1
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* حمله بافراورفلو در عمل چجوریه؟
* چجوری با gdb میتونیم زیر باک یه برنامه رو نگاه کنیم؟
* مموری-سیف نبودن یه زبانی مثل C چطور ممکنه اشکال امنیتی ایجاد کنه؟

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

قبلتر مفهوم حمله از طریق بافراورفلو ر بصورت انتزاعی توضیح دادیم:
▪️حمله بافر-اورفلو چیست؟

و فهمیدیم که توی RAM یا مموری مربوط به برنامه اطلاعاتی نوشته شدن که هر کدوم بصورت یه بافر (حافظه موقت) هستن، حالا یه زمانی بخاطر دسترسی بازی که توی زبانهای سطح پایینی مثل C و یا حتی پایینتر مثل اسمبلی داریم، ممکنه یه مقداری اضافه از توی رم خونده/نوشته بشه...
ممکنه یه مقدار روی یه مقدار دیگه نوشته بشه، یا طول یه بافر به اشتباه زیاد/کم بشه و مقدایر دیگری که نباید خونده بشن، خونده بشن.
گاها و عمدتا اشتباهی از سمت برنامه‌نویس هست که باعث بروز این اتفاق میشه.
میخوایم اینو در عمل ببینیم.

بار اولی که من داشتم این کد رو مینوشتم، توی تابع مموری‌دامپ() ، طول متغیر هگز رو یه آرایه‌ای از کرکترها [بخونید استرینگ] 2 بایتی گرفتم یعنی به جای
char hex[4];
نوشته بودم
char hex[2];
چرا؟ چون فکر میکردم که آرگومان
"%02hhX "
همیشه یه هگز با طول 2 برمیگردونه، اما اینطور نیست... اولا که یه اسپیس آخرش گذاشتیم یکی به طولش اضافه میشه... که من حواسم نبود حسابش کنم، دوما که... استرینگها در زیر باک زبان C و البته زیر باک تقریبا هر زبان دیگری، با بایت نیول/نال تموم میشن که کامپیوتر بفهمه استرینگ تموم شده...
قبلتر توی توضیح اینتیجر گفتیم که:
بایت 00000000 یا بایت صفر، توی جهان کامپیوتر به بایت خالی یه بایت نیول/نال شناخته میشه:
0 000 00 00000000 NUL � Null character
و کرکتر اسکی‌ش خالیه.
و البته توی توضیحات فیلم TENET (🥴) هم گفته بودیم که:
سی این روزا با استرینگ‌دات‌ایچ هم کامپایل میشه، ولی قدیما استرینگ نداشت،...در حقیقتC کلا استرینگ نداره... توی اون رشته‌ها، "آرایه‌ای از کرکترها" هستن... و خود کرکترها یه بایت هستن (با انکدینگ اسکی)
پس زیر باک کامپایلر رشته‌ها، فقط آرایه ای از بایتها هستن:)
نکته: برای همینه که توی سی وقتی میخوان یه بایت دیتا ذخیر کنن از نوع داده char استفاده میکنن... چون یه بایته:3
از 0 تا 255 ...
عجیبه که اونجا اینارو درس دادیم ولی خب😬

نهایتا این آرایه 2عنصری ما (2 بایتی) اورفلو میکنه به 4 عنصر (4 بایت)
یعنی بخاطر بایت NULL هم یکی به مقدارش اضافه میشه و نهایتا میشه 4 بایت، ما براش 2 بایت تخصیص داده بودیم، اروری اتفاق نمیفته (چون زبان دست شمارو باز میذاره) و بافر اورفلو صورت میگیره.
2 بایت اضافه تر نوشته میشن توی رم روی یه چیزایی که نباید نوشته بشن...
و توی کامپایلر و سیستم من، برنامه یکهو میفته روی یه حلقه بینهایت!
ممکنه توی سیستم شما اینطور نشه، یا اتفاق عجیبتری بیفته، اما اینطوری که gcc داره کامپایل میکنه بایتهارو پشت هم ذخیره میکنه و من هنوز تست نکرده میتونم حدس بزنم چه اتفاق عجیبی میفته، مقدار i شمارنده حلقه خط بعدی باشه تغییر میکنه و احتمالا شرط هیچوقت False نمیشه و حلقه به اتمام نمیرسه!!!
بریم ببینیم*-*
5👍2
Forwarded from Golem Course
زمانی که در حال توسعه یک محصول هستید و ابعاد آن از یک حد خاصی بیشتر می‌شود، نیاز به استراتژی برای ایجاد شاخه در گیت پیدا می‌کنید. استراتژی‌های متنوعی مانند:
gitflow
github flow
gitlab flow
trunk-based development
برای مدیریت شاخه‌ها وجود دارد. من یک ویدیو درباره مدل gitflow ضبط کرده‌ام که می‌توانید آن را از طریق این لینک در کانال یوتیوب من تماشا کنید.

@golemcourse
👍3
Forwarded from Learn with Osman (Osman Makhtoom)
Media is too big
VIEW IN TELEGRAM
من بعنوان یک انسان وظیفه خودم میدونم درمورد جنایات جنگی در فلسطین سکوت نکنم و دعوتتون میکنم شما هم نسبت بهش بی تفاوت نباشین.
این قضیه ربطی به دین و مذهب نداره و موضوعی مربوط به انسانیته!

@osmanpydev
👍45👎331
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
پروژه aggify اوپن سورس شد 🥳

این پروژه با سینتکس ساده و شبیه به django orm میتونه pipeline های aggregate رو بسازه و کوئری های پیچیده MongoDB رو بشدت ساده سازی کنه

با استفاده از این کتابخونه شما به راحتی میتونید از جوین استفاده کنید توی MongoDB

در حال حاضر این کتابخونه با فرض بر اینکه مدل های دیتابیس شما با MongoeEngine نوشته شده اند کار میکنه و در آینده روش های دیگه هم قراره ساپورت کنه

اگر مشتاق هستید میتونید توی توسعه این پروژه مشارکت کنید

github: github.com/Aggify/aggify
pypi : https://pypi.org/project/aggify/
website : aggify.org
mail : support@aggify.org
Telegram : @Aggify

توی کانال تلگرام جوین بشید و به پروژه توی گیتهاب ستاره بدید 🥰
با پخش این پست به شناخته شدن این پروژه کمک کنید ❤️
@SEYED_BAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* مفهوم ضربان قلب در علم کامپیوتر چیست؟

اون قدیمترها من وقتی که تازه‌کار بودم و وبسرور راه مینداختم و API مینوشتم، یه کاری رو میکردم که مطمئن بشم سروری که راه انداختم داره بدون اشکال کار میکنه، اونم این بود که با یه برنامه زماندار (کرونجاب/cronjob) هر چند دقیقه سرور رو پینگ میکردم که مطمئن بشم هنوز داره کار میکنه...
اما پبینگ کردن کافی نبود، شما میتونی برنامه‌ای بنویسی که هر چند وقت (زمانش بستگی به شما داره) به سرور بگه که من ادمین هستم، بگو ببینم وضعیتت چطوره؟
* بگو دیسکت چقدر جا داره
* بگو آپتایمت چقدره
* بگو آمپر CPUت روی چند درصده
* بگو چقدر رمت پره و چقدر خالیه

هر چند دقیقه اینارو از سرور بپرسه...

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

این میشه مفهوم ضربان قلب که الان تخصصی‌تر میگم*
=+=+=+=+=+=+=+=

مانیتور کردن سیستم خیلی بحث مهمیه،
فرض کنین یه API ثالث (ثرد-پارتی) که توی سرورتون استفاده کردین بنا به دلایلی داون میشه، سرور ازش ریسپانس نمیگیره و به ارور میخوره... اما به کارش ادامه میده، چون شما زرنگ بودی و ارور هارو با ترای-کچ هندل کردی:
▪️فرق بین ارور و اکسپشن و وارنینگ و نوتیس چیه؟
▪️فلسفه ترای-کچ چیه؟

سیستم به کارش ادامه میده و شروع میکنه به لاگ انداختن که توی ساعت فلان، ثانیه فلان من این ریکوئست روبه API زدم منتهی داون بود و جواب نداد...
1 بار لاگ میندازه 2 بار لاگ میندازه 3 بار لاگ میندازه...
ایــــــــنقدر لاگ میندازه که یهو فایل لاگ میشه 60 گیگ، دیسک ددیکیت‌شده شما پر میشه و سرورتون داون میشه.
این یه مثال عملی بود از اینکه سرورها ممکنه به چه مشکلاتی بخورن...

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

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

مثلا من یه برنامه داشتم که یه رکوئست HTTP میزد (با پست) و به سرور میگفت من ادمینم اینم توکنم، بهم بگو علائم حیاتیت چیه...؟
سرور جواب میداد که:
* آپتایم 24 روز و 8 ساعت
* سی‌پی‌یو 7 درصد
* رم 1 گیگ
* دیسک 128 گیگ خالی دارم
* سرعت پینگم هم 60 میلی ثانیه‌ست

برنامه اینارو چک میکرد و اگه چیز آنرمالی میدید به من خبر میداد.
شما اگه خیلی خفن بودین میتونستین برنامه رو جوری بنویسین که مثلا بصورت نمایی، اطلاعات چندتا ضربان قلب قبلی سرور رو ذخیره کرده باشه و کنار هم بذاره و رشد خاصی رو برونیابی کنه و اگه حدس میزنه چیزی در حال تغییر غیر عادیه خبر بده...،
مثلا 5 ساعت پیش دیسک 128 گیگ خالی داشته،
4 ساعت پیش 128 گیک خالی داشته،
3 ساعت پیش 120 گیگ خالی داشته،
2 ساعت پیش 89 گیگ،
حالا هم 24 گیگ،

خب این یه تغییر غیر طبیعیه، فرمولهای ساده ریاضیاتی هستن که میتونن نسبت بگیرن و تغییرات ناخواسته‌ای مثل این رو دیتکت کنن، برنامه به شما سریع sms بده که زود باش SSH کن به سرور که یه اتفاقی افتاده دیسک داره پر میشه...
شما سریع میری و مثلا میبینین که یه I/O اکسپشنی رخ داده یه فایل بسته نشده و هی داره توش داده نوشته میشه...،
قبل از اینکه دیسک پر بشه و سرور داون بشه و محاسباتتون دچار مشکل بشه و یا اطلاعات خاصیتون بپره، فیکسش میکنین*-*

اما،
امــــا،...
بعدا که رفتم ارشد، توی یه درسی همینو به ما درس دادن و فهمیدم این حرکت اصلا یه قسمت از علم کامپیوتره که بهش میگن کاندیشن مانیتورینگ
* Condition Monitoring
و اصلا یه پرتکل شبکه‌ای وجود داره به اسم SNMP:
Simple Network Management Protocol
که روی UDP ران میشه و کارش مدیریت کردن خودکار یه دستگاه شبکه‌ای هست و این پرتکل بای دیفالت مثلا روی روترها و سوئیچها پشتیبانی میشه....
اگه میخواین بیشتر بخونین:
https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol
=+=+=+=+=+=+=+=

حالا شما میتونین خودتون یه پرتکل ضربان قلب پیاده کنین...
کتابخونه‌ها و پرتکلهای آماده ای هم براین این موضوع هستن،
اگه سرورتون بزرگ و حساس هم هست میتونین بازه زمانی ضربان قلب گرفتن رو کمتر کنین، مثلا هر 1 دقیقه سیستم رو مانیتور کنین.
اگه میخواین ضربان قلب یا heartbeat رو تخصصی مطالعه کنین:
https://en.wikipedia.org/wiki/Heartbeat_(computing)
👍13🔥21
کم کم داره از تلگرام بدم میاد. مگه clash of clans ع که برای تغییر رنگ کانال باید لول 5 باشی 🤢 این مسخره بازیا چیه
😁13👍41
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
آیا تلگرام امنه؟ آیا میشه بهش اعتماد کرد؟

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

آیا تلگرام امنه؟ آیا میشه بهش اعتماد کرد؟
پاسخ خیلی خیلی مختصر اینه:
خیــــر، خیر! اصلا به هیچ وجه امن نیست!

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

این پست به شدت طولانی خواهد بود، چون میخوام یه بار برای همیشه پرونده تلگرامو ببندم و دیگه هیچوقت ازش حرف نزنم (احساس خوبی نسبت بهش ندارم:3)

توضیحات علمی:
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

آیا تلگرام امنه؟
امنیت به چه معنی؟ منظورمون از امنیت چیه؟

* اینکه دسترسی خود تلگرام به محتوا چقدره؟
* یا اینکه از بیرون کسی نمیتونه به ارتباطاتش رخنه کنه؟

اگه مورد اول منظورمونه، تلگرام به همه چــــــــی دسترسی داره،
تلگرام از پرتکل خودش استفاده میکنه که اسمشو گذاشته MtProto ، فکر کنم بِرارِ خود دوروف طراحیش کرده، خودش ادعا میکنه که نسبت به بیرون امنه و براش بانتی هم گذاشته، اما امنیتش همیشه مشکوک تلقی میشه چون بارها نشون دادن که توش موارد عجیبی وجود داره. رمزنگاریش مثل واستاپ e2e نیست، بلکه کلاینت سروریه:
client ==🔐==Telegram==🔐== client

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

اسم واتساپو آوردم، معماری اونم توضیح بدم خالی از لطف نیست.
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
واتساپ اگه درست یادم باشه داره از پرتکل سیگنال استفاده میکنه، که محتوای پیامها
end-to-end
رمزنگاری میشه، یعنی رمزنگاری اینجوریه:
client =====🔐===== client
خود واستاپ نمیتونه رمز پیامهارو باز کنه.
ولی متادیتای پیامهارو میبینه- لاگ کلاینتها، با کیا سرکار داشتن، آیپی ها، ساعتها،‌ مقدار محتوا و...

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

پس واتساپ به متن مراوردات دسترسی نداره، فقط متادیتا.

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

تلگرام فقط زمانی که روی سکرت-چت کار میکنه شبیه واتساپ میشه.

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

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

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

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

حالا به این قسمتها بیشتر برمیگردیم.

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

من با یه استاد دانشگاه امیرکبیر صحبت میکردم، راجع به تلگرام میگفت که دولتهایی که ریسورس شکستن aes128 رو دارن پرتکل MTPtorto تلگرامو فیلتر نمیکنن... میذارن که کار کنه، هر موقع بخوان میتونن شنودش کنن، و دولتهایی که نمیتونن بشکننش فیلترش میکنن!

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

خیلی میشه راجع به ریز جزئیاتشون بحث کرد، منتهی احتمالا از حوصله یه پیام تلگرامی خارجه.

اگر کسی علاقمنده، میتونه ساختار mtproto رو بخونه:
https://core.telegram.org/mtproto

و همچنین پیاده‌سازی واتساپ از سیگنال رو بخونه:
https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf

لازم نیست به حرفهای من طوطیوار اعتماد کنید، خودتون زیر باک این پروتکلهارو بخونید.
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
👍12👎21
برنامه‌ نویسی تدافعی (Defensive Programming) در پایتون مساله مهمی هست، متاسفانه بخاطر EAFP در پایتون، خیلی از برنامه نویس‌های پایتون با تکنیک‌های برنامه نویسی تدافعی برای افزایش پایداری و اطمینان نرم افزارها و همچنین کاهش باگ‌ها و اتفاقات غیرمنتظره، آشنا نیستند. اگر به ساخت نرم افزارهای قابل اطمینان و پایدار با پایتون علاقمند هستید این ویدیو رو از دست ندید.

🖥 مشاهده در یوتوب
👉 Link: https://youtu.be/wNiQwj9qKvc?si=MHlWs0iTPn3ddYZH

〰️〰️〰️〰️〰️〰️
@BobyDotCloud
🙃 ما برای یه پروژه خودمون یه فایل منجر نوشتیم. امان از مبتدی بودن

پکیج django-filer برای مدیریت فایل
آپدیت: آقا من ننوشتم من استفاده کننده ام فقط 😂

https://pypi.org/project/django-filer/
👏8👍5
Media is too big
VIEW IN TELEGRAM
بخشی از آپدیت جدید دوره ساخت فروشگاه اینترنتی با جنگو

لینک ویدئو در آپارات:
https://www.aparat.com/v/42cSP

لطفا ایرادهایی که توی این قسمت دیدید. خصوصی برای @miladhzz بفرستید.
👏7👍1
یه ابزار آنلاین برای ساخت دیاگرام ER با قابلیت اشتراک گذاری برای دیگران
https://dbdiagram.io/home
👍6🔥2👏1
This media is not supported in your browser
VIEW IN TELEGRAM
بخشی از آپدیت جدید دوره ساخت فروشگاه اینترنتی با جنگو
✔️ چرخه حیات Request در جنگو

لینک ویدئو در آپارات:
https://www.aparat.com/v/npWM2

هر مشکل یا ابهامی دیدید. خصوصی به @miladhzz پیام بدید
6👍2👏2
جنگولرن
با عرض پوزش از همه دوستان من باز سوزنم روی html css گیر کرده لذا این پست رو میزارم و بقیه مطالب مرتبط اش رو توی کامنت می نویسم. شاید به درد کسی خورد. ✔️ اولین نکته مهم: html رو برای structure استفاده میکنیم. و css رو برای style گاهی اوقات ما با استفاده بیخودی…
کتاب Head First HTML and CSS رو کامل خوندم.
لذا دیگه unpin شد.
با خوندنش یکم html css یاد گرفتم.
تلاشم اینه که html css رو اصولی یاد بگیرم.
نکاتی که یاد بگیرم توی جنگولرن میزارم.
پیشاپیش عذرخواهی میکنم به خاطر مطالب سطح پایینی که در موردhtml css میزارم
7👍1
جنگولرن
لینک زیر تقریبا همین داستان ماست 😉 واقعا html css سخته #سوزن_گیر_کرده_روی_html https://www.geeksforgeeks.org/why-margin-on-child-element-moves-the-parent-element-in-css/
منم همیشه گفتم html css سخته.
قبول کن سخته
مهم نیست چند وقته داری CSS کار میکنی. اصولی بلدش نباشی ازش لذت نمیبری.
#سوزن_گیر_کرده_روی_html_css
👍7😁2
پستی از لینکدین Saeed Shahrivari Joghan
لینک در نظرات. کامنت هارو هم بخونید جالبه

دواپس: خوردن خربزه با عسل

پیرو پست قبلی راجع به دواپس و SRE بازخوردهای متفاوتی دریافت کردم و بنابر امر تعدادی از دوستان کاربلد در این پست قصد دارم خیلی مختصر راجع به دواپس صحبت کنم. از دید من با وجود اینکه دیدگاه‌های مختلفی از دواپس حداقل در بازار ایران وجود داره، اما داستان دواپس بسیار ساده و سرراسته.
از اواخر دهه ۹۰ میلادی اینترنت تکون اساسی به دنیا داد. با گسترش اینترنت اغلب نرم‌افزارهای دنیا از نسخه‌های نصبی روی کامپیوترهای شخصی به سرویس‌های آنلاین تبدیل شدند. خیلی سریع یه دو قطبی جون‌دار در اغلب شرکت‌ها شکل گرفت: «توسعه» (Development) در مقابل «عملیات و نگهداشت» (Operations). به صورت طبیعی توسعه‌دهنده‌ها در راستای ارتقای نرم‌افزار دوست دارن تا بشه نسخه‌های جدید منتشر کنند و در مقابل بر و بچ عملیات در راستای پایداری بیشتر دوست دارند هیچ نسخه جدیدی منتشر نشه چون معمولاً این دید رو دارند که هزینه‌ اشتباهات توسعه‌دهنده رو باید قسمت عملیات بده (منصفانه هم ببینیم بخش عملیات بیشتر مظلومه). در سال ۲۰۰۹ یه کنفرانسی با عنوان DevOps در بلژیک برگزار شد که آقا بیاید بین توسعه و عملیات آشتی ملی برگزار کنیم و یه کارایی انجام بدیم که در تقابل نباشیم و یه هدف مشترک تعریف کنیم: «انتشار هر چه سریعتر نسخه و در عین حال حفظ پایداری». به عبارتی میشه خربزه رو با عسل خورد ولی دل درد نداشت.

حالا دواپس چیه؟ «دواپس یک فلسفه یا به نوعی فرهنگه که با استفاده از یک سری ابزار و پرکتیس سعی میکنه تیم‌های عملیات و توسعه رو با هم همراه و همراستا بکنه تا انتشار نسخه‌های جدید با سرعت، پایداری و کیفیت بیشتری انجام بشه». به همین سادگی! توی پارانتز عرض کنم بازم اگه ته ماجرا رو بگیریم به تغییر در نرم‌افزار می‌رسیم یه جورایی میشه گفت بیشتر مهندسی نرم‌افزار در راستای تغییرپذیری ساده‌تره، بگذریم. حالا این ابزار و پرکتیس‌ها چیا هستن؟ جون مطلب رو بخوام بگم، این چند موضوع خیلی تو چشمه:
۱- خودکارسازی:‌ تا می‌تونیم هر چیزی رو خودکار کنیم تا سریع‌تر و مطمئن‌تر انجام بشه مثال ابزاری بگم Ansible.
۲- استفاده از CI/CD: این بحث خیلی مفصله ولی مثال ابزاری بگم میشه GitLab یا Jenkins.
۳- پایش و ثبت وقایع: واقعا خیلی مفصله ولی مثال ابزاری بگم میشه prometheus و ELK.
۴- رایانش ابری:‌ مثال ابزاری میشه AWS یا داکر و کوبر.

چند نکته کنکوری:
- چیزهای دیگه‌ای هم در دواپس وجود داره مثل IaC ولی به نظرم اصل جنس این ۴ مورده.
- دواپس وحی منزل نیست و شاید برای سازمان شما کارایی نداشته باشه البته معمولاً داره.
- دقت داشته باشید دواپس فقط استفاده از ابزار نیست بلکه داشتن فرهنگ دواپس به نظرم حتی از ابزار هم مهمتره.
- دواپس به نظرم از نظر تعریف خیلی شفافه اگه شما کار دیگه‌ای در شرکتتون انجام می‌دید لازم نیست برای اعتبار دادن به اون کار از دواپس مایه بذارید مخصوصاً اگه تیمی با این عنوان دارید ولی با تعاریف بالا سازگار نیست با کمی خلاقیت شاید بشه اسم دیگه‌ای براش پیدا کرد.
- خوندن کتاب زیر رو شدیداً توصیه می‌کنم:
https://lnkd.in/dM4uCdRJ

پانوشت: اگه تجربه متفاوتی از اجرای دواپس دیدید یا فکر می‌کنید یه جای مواردی که عرض کردم میلنگه لطفاً فیدبک بدید تا اصلاح کنم.
#devops
#devopsengineer
🤔2
یعنی به ۱۰ هزار کاربر پیامک بدیم و بگیم که CTRL+F5 بزنن؟!

چند روز پیش یاد یک خاطره‌ای افتادم که برمی‌گرده به سال دومی که #برنامه_نویسی می‌کردم و هنوز #جونیور بودم. قرار بود یک قابلیتی رو به سایت شرکت اضافه کنم و بچه‌های دیجیتال مارکتینگ‌مون این #Feature رو تبلیغ کنن تا 10 هزار کاربری که داشتیم بتونن ازش استفاده کنن. ۳-۴ روز زمان گذاشتیم برای اینکه اون قابلیت‌ رو به وب‌سایت اضافه کنیم و بچه‌های #مارکتینگ بتونن حسابی روش مانور بدن. فردای روز انتشار و بعد از اجرا شدن کمپین…

مدیر #دیجیتال_مارکتینگ‌مون اومد تو اتاق تیم فنی و به من گفت که چرا بعضی کاربرها می‌گن از این قابلیت نمی‌تونن استفاده کنن؟! گفتم حاجی بخدا دیشب منتشرش کردم و اصلا بیا خودت ببینش روی لپتاپ من! اومدم بهش روی لپتاپ خودم نشون بدم که دیدم برای من هم نمایش داده نمی‌شه! یادم اومد برای اینکه نمایش پیدا کنه CTRL+F5 نیاز داره. بعد از اینکه درست شد، بهش گفتم:‌ واسه اینکه کاربرها هم بتونن ببیننش باید CTRL+F5 رو بزنن! یهو سرم حسابی داد کشید و گفت: یعنی به ۱۰ هزار تا کاربر دوباره پیامک بدیم و بگیم برای استفاده از این قابلیت باید CTRL+F5 بزنین؟! معلوم هست چی می‌گی؟!

کمپین ما که خیلی خوب پیش نرفت. ولی این داستان درس عبرتی برای من شد که موضوع CTRL+F5 رو خیلی جدی بگیرم. چون می‌تونه مشکلات پرهزینه‌ای رو برای سازمان ایجاد کنه.

متن کامل رو از لینک بخونید. نظرات فنی خوبی هم داره. با سطوح مختلف کش هم یکم آشنا میشید.
از لینکدین Amirhosein Golshani
لینک در کامنت
6
جنگولرن
یعنی به ۱۰ هزار کاربر پیامک بدیم و بگیم که CTRL+F5 بزنن؟! چند روز پیش یاد یک خاطره‌ای افتادم که برمی‌گرده به سال دومی که #برنامه_نویسی می‌کردم و هنوز #جونیور بودم. قرار بود یک قابلیتی رو به سایت شرکت اضافه کنم و بچه‌های دیجیتال مارکتینگ‌مون این #Feature رو…
کامنت دوستان در مورد همین داستان ctrl + F5 توی جنگو
Amir:
میشه از روش های cache busting استفاده کرد، که یه روش مرسومش اینه که میاد یه بخشی از هش فایل رو به اسم فایل اضافه میکنه و با این کار مرورگر کاربر رو فورس میکنه که فایل‌های استاتیک جدید رو دانلود کنه.
توی جنگو هم هست.
--------------------------------------------------
Ali:
{% now "U" %}
اینو به آدرس فایل استاتیک اضافه میکنی
همونه؟
--------------------------------------------------
Amir:
میشه از این هم استفاده کرد، اما چند تا مشکل داره، اول این که هر جا داری آدرس استاتیک فایل میدی باید تهش یه همچین تگی اضافه کنی
?timestamp={% now 'U' %}
که خب یه کار حوصله سر بریه و ممکنه بعضی جاها دولوپر یادش بره و... مشکل دوم که مهم تر هم هست اینه که وقتی از now استفاده میکنی در واقع داری هر ثانیه تگی که به استاتیک فایلت میزنی رو عوض میکنی و اینجوری عملا مرورگر دیگه نمیتونه کش کنه و هر ثانیه باید دوباره استاتیک فایل ها رو دانلود کنه چون فکر میکنه که ندارتشون! خب همین باعث میشه تعداد ریکوئست هایی که میاد سمت سرور خیلی زیاد بشه (البته اگر فایل های استاتیک رو خودت serve کنی اگر نه تعداد ریکوئست ها به CDN ای که داری استفاده میکنی بیشتر میشه) و این که با توجه به سرعت نت کاربر ممکنه لود سایت براش کند بشه!
راه بهترش اینه که فقط موقعی مرورگر رو فورس کنی فایل جدید رو بگیره که واقعا محتوای فایل استاتیک عوض شده باشه! برای همین از هش فایل استفاده میکنن. برای این کار یه روشش اینه که STATICFILES_STORAGE رو داخل فایل settings عوض کنی، بعد با هر بار اجرای collectstatic اسم فایل ها به همراه هش اش ذخیره میشه و البته یه فایل staticfiles.json هم ذخیره میشه که map بین اسم اصلی فایل و اسم فایل+هش فایل هست، خوبیش اینه که دیگه نمیخواد دستی هر جا داری به استاتیک فایل رفرنس میدی تگ اضافه کنی، کلا کار اضافه ای نیاز نیست بکنی، خودش کار هارو هندل میکنه (حتی اگر مثلا فایل های استاتیکت رو میریزی توی یه object storage مثل minIO، اون رو هم ساپورت میکنه). اینطوریه:
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

راه های دیگه هم هست مثل استفاده از webpack یا پکیج whitenoise که اینا یه سری کارهای دیگه هم انجام میدن، مثل compress کردن و minify کردن و optimize کردن فایل های استاتیک و...
👍111