نوشته‌های ترمینالی
2.61K subscribers
422 photos
12 videos
32 files
2.24K links
Download Telegram
Forwarded from Arsham's Tech Mastery (Arsham)
The devil is in the details
شیطان در جزئیات خفته

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

اما از دید من، هیچ تغییری بی اهمیت نیست،
یه اسپیس اضافه توی فایل یمل میتونه کلا کانفیگ رو خراب کنه و پاد کلا بالا نیاد.

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

|-×-×-×-|

نیاز به حساسیت رو یه سری موارد در ظاهر کم ارزش اما باطنا تاثیر گذار، باعث شد که با خیال راحت تری برای ریویو کردن کد ها حساسیت به خرج بدم.

الان اینجوری ام که حتی به تک تک اسپیس ها و فرمتینگ های نامناسب کد هم اشاره میکنم.

ولی خودمونیما، چه دلیلی وجود داره که کد فرمت نشه؟
اونم با وجود کلی ابزار برای اتومات شدن این فرآیند؟
چیزی جز مایندست "بزن بره"؟
و چه تضمینی هست کسی که رو فرمت کردن کدش تنبلی کرده، بقیه جاها مثل ساعت کوارتز، دقیق باشه؟

|-×-×-×-|

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

بنابراین به جزئیات دقت کنید،
تمام کامیت های شما میشن اعتبار آینده شغلی شما،
اعتبار شما پیش کسایی که فعلا شمارو نمیشناسن،
اما اسم و کیفیت کارتون رو خواهد شناخت.

دیر رسیدن، بهتر از رو پروداکشن ترکیدن!

|-×-×-×-|

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

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

|-×-×-×-|

از این موارد و عدم توجه به جزئیاتی که باعث فاجعه شدن زیاد توی تاریخ دنیای نرم افزار وجود داره،
ولی مایندست "بزن بره" هم همچنان به قوت خودش باقیه 🔥😂

واقعیت اینکه گاهی وقتا یه چیزایی برامون شفاف نشده،
و همین باعث میشه ندونیم چه وقت حساس باشیم و چقدر حساس باشیم.

میخوایم جلوی premature optimisation رو بگیریم،
اشتباها کد باگی میفرستیم رو پروداکشن.
چون مرز بهینگی رو مشخص نکردیم،
چون تعریف باگ رو (برا خودمون) مشخص نکردیم،
چون هیچ فریمورکی برای کد ریویو نداریم و کاملا سلیقه ای انجام میشه.
و...

|-×-×-×-|

نظر شما چیه؟ چه مثال ها و نکاتی رو دوست دارید در مورد مطالب گفته شده مطرح کنید؟
👍21🔥2😍2😁1
اگر دوست داشتید Reverse Shell رو پیگیری کنید. هکر کاری می‌کنه که سیستم قربانی خودش به سمت هکر وصل بشه و می‌تونه کنترل سیستم رو از راه دور به دست بگیره. اینطوری فایروال ها خیلی کمتر جلوش رو میگیرن.

https://www.acunetix.com/blog/web-security-zone/what-is-reverse-shell/

این هم سایت باحالی بود در این زمینه
https://revshells.com

با تشکر از دوست قديميم امیر میرزایی عزیز #ارسالی
7🔥3🆒1
چیزهای عجیبی که موقع استفاده از json در گولنگ باید حواسمون باشه
https://www.alexedwards.net/blog/json-surprises-and-gotchas
👍7🔥2😁1😐1
Forwarded from memealloc
👍11👎1
This media is not supported in your browser
VIEW IN TELEGRAM
این گیف سرعت دسترسی به لایه‌های کش رو در مقایسه با سرعت رم نشون می‌ده:

🆔 @lifeAsAService
👍19🤯4
Forwarded from It's FOSS
Happy 53rd birthday, Unix! 🥳
🍾14😢2
وقتی برنامه‌ها تموم می‌شن یه کدی دارن به اسم exit code
تو این مطلب باهاشون بیشتر آشنا می‌شیم و در مورد اینکه هر کد چه معنی‌ای می‌تونه داشته باشه صحبت می‌کنیم.
https://www.networkworld.com/article/3546937/understanding-exit-codes-on-linux-2.html
👍4
مطالب روزهای گذشته از یک بلاگ بود به اسم یونیکس به عنوان زبان دوم (unix as a second language)
به نظرم آموزش‌های لینوکسی سطح متوسط و کاربردی‌ای داره. از سایت‌های عام که آموزش‌های مقدماتی رو مدام تکرار می‌کنن فاصله گرفته ولی همچنان قابل فهم و زیبا می‌نویسه و موضوعات خوبی هم انتخاب می کنه.

https://www.networkworld.com/blogs/unix-as-a-second-language/
👍6
گیت اخیرا به اسیب پذیری داشت که یه ریپوزیتوری فقط با کلون شدن، میتونست رو سیستم سما دستورات مخرب اجرا کنه.
توضیحات خوب و توضیح کد رو اینجا ببینیم:
https://amalmurali.me/posts/git-rce/
1👍6😨4😁1
اگه براتون زیاد پیش میاد که یه تغییر رو روی چند تا فایل مختلف اعمال کنید اولا که می‌تونید براش ماکرو در ویم بنویسیم.

اما اگه ویم دوست ندارید یا میخواید مشخص تر باشه روند کاری که پیش می‌رید، امکان گرفتن diff (یا با کامند دیف یا با کمک git diff) و بعد اعمال کردنش با دستور patch می‌تونه کمک کننده باشه.


در مورد دستور patch:
https://www.youtube.com/watch?v=r9N-BOWWr-k
اموزش متنی هم قطعا ازش هست ولی ممکنه نامانوس باشه قضیه برای همین این اموزش ویدیویی برای خودم جالب تر بود.
👍3
اگه میخواین با کمک گیت فایل های patch رو بسازید یا اصلا اعمال کنید این اموزش خیلی خوبیه که با کمک ابزار git diff آموزش میده که فایل دیف بسازیم و بعد روی فایل‌ها اعمالش کنیم.

https://www.specbee.com/blogs/how-create-and-apply-patch-git-diff-and-git-apply-commands-your-drupal-website


حالا چرا وقتی دستور patch هست از گیت برای اعمال پچ ها استفاده کنیم؟ چون خیلی قابلیت‌های بیشتر بهمون میده مثل چک کردن پیشفرض سینتکس صحیح پچ و چک کردن اینکه قابل مورد تغییر کامیت شده باشه و یا حتی حل کردن کانفلیکت‌هایی که پچمون اعمال می‌کنه.
https://www.reddit.com/r/suckless/comments/pb828q/whats_the_point_of_using_git_to_apply_patches/
4👍2
از صفحاتی جالبی که امروز به چشمم خورد Write your Own Virtual Machine بود.

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

@aminrbg
🔥11😍3👍21
یه پروژه خیلی جالبی که دیدم اینه
میاد به سرورهای مختلف با پروتوکل‌های مختلف وصل میشه. برای اینکه ببینید حال اینترنتتون چطوره خیلی خوبه. من جدیدا باز میذارمش در بکگراند وقتی اینترنت ناپایدار دارم (همیشه)

https://github.com/jesusprubio/up
👍11🤣41
اگه دوست دارید از زیر و بم گولنگ سر در بیارید این ریپو منابع خیلی خوبی معرفی کرده.
البته که هر کدوم سنگین هستن و نمیشه انتظار داشت یهو بشینیم همشو (یا حتی یکیشو) بخونیم.

https://github.com/emluque/golang-internals-resources
19
Forwarded from The Machine
گیت یکی از ابزارهایی هست که باید حداقل در حد نیاز، کار باهاش رو یاد بگیریم، قبلا درموردش پست گذاشتم ولی این بار می‌خوام چند تا منبع خیلی خوب برای شروع و منابعی برای دانش عمیق‌تر معرفی کنم:

پلی لیست شروع گیت

https://youtu.be/rScUEZPeazY


دو تا از پست‌های ویرگول که برای درک under the hood گیت خیلی خوبه:

https://virgool.io/@arashjfz/%DA%AF%DB%8C%D8%AA-%D9%88-hash-object-vgwkqtie6zjo

https://virgool.io/gitscm/%DA%AF%DB%8C%D8%AA-%D9%88-three-tree-g9p6txrppcit


آقای سعید رسولی یه ارائه خیلی جذاب در مورد گیت هم داشتن که درمورد موضوعات خیلی خوبی صحبت کردن و برای کسایی هست که می‌خوان یه کم advanced تر گیت رو یادبگیرن.

لینک گیتهاب:
https://github.com/ilius

ارائه شامل موارد خیلی مهم و کاربردی‌ای بود مثل:

پیدا کردن object های unreachable با Git fsck

روش bisect که پیدا کردن کامیتی هست که باعث باگ شده به کمک باینری سرچ

و commit timestamp


و این پست هم منابع خوبی رو گفته :

https://t.iss.one/terminal_stuff/2978

https://t.iss.one/terminal_stuff/2983


اگه هم اهل کتاب هستین بهترین کتاب همین هست:

https://git-scm.com/book/en/v2



#git
👍4🔥2😁1
من تقریبا بیش از یک ماهه که دارم از دستیار هوش مصنوعی برای کد زدن استفاده می‌کنم(اینجا رو بخونید) گفتم تجربه‌ام رو باهاتون به اشتراک بگذارم شاید به دردتون بخوره.
کار کردن با این ابزار برای من در کل واقعا آورده‌های خوبی داشته. اون هم نه صرفا به چشم یک چیزی که برام کد می‌زنه، بلکه توی کلی از جنبه‌ها. من اینجا به صورت لیستوار بهشون اشاره می‌کنم و هر کدوم رو هم کمی توضیح می‌دم.

- کدنوشتن: توی تکمیل کدهایی که می‌خوام بنویسم در حالت auto-complete واقعا می‌تونه سرعت کد زدن رو ببره بالا. دسترسی به متغییرها و فانکشن‌ها بهش این اجازه رو می‌ده که کدی رو که دارید می‌نویسید با جزئیات خیلی خوبی بنویسه(نال‌ها رو چک کنه، تایپ کستینگ انجام بده و از این کارها.) ضمن این که توی بازنویسی و ری‌فکتور هم عصای دست خوبی به حساب میاد. یا مثلا برای نوشتن دیتا کلاس‌ها، صرفا چیزی که می‌خوام رو حتی به فارسی براش می‌نویسم و اون برام پراپرتی‌ها، سازنده‌ها و ... رو می‌نویسه و من صرفا خروجی رو چک می‌کنم. یا مثلا یه جی‌سون بهش می‌دم که این خروجی این API هستش بیا برام یه کلاس بنویس که این ریسپانس تبدیل به آبجکت اون بشه و.... .

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

- پرسیدن سوالات: یه بخش چت توی این اکستنشن وجود داره که شما به راحتی می‌تونی سوالاتتون رو حتی از کدهای پروژه بپرسید و اون با خروجی فرمت‌دار بهتون جواب بده یا جواب رو اعمال کنه روی کد براتون.

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

در مورد زبان‌هایی که کمتر باهاشون کار می‌کنم(پایتون مثلا یا Go) بهبود عملکرد بیشتری رو حس می‌کنم تا زبان‌هایی مثل جاوا یا جاوااسکریپت که بیشتر باهاشون سروکار دارم.
👍2