تنظیم ادیتور ویم برای برنامه نویسی [پایتون]

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

لینک تنظیم ادیتور ویم برای برنامه نویسی در آپارات و یوتیوب.

نصب خود ویم

توی قسمت های قبلی که با ویم کار کردیم پس منطقا نصب شده (: اما بحث اینه که انتظار می ره ویم شما نسبتا جدید باشه، حداقل بالاتر از ۷.۳.

➜  ~ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Apr 12 2020 17:46:58)

اگر روی مک هستین و ورژن شما پایینتر است، شاید با brew update و brew install vim بتونی وضع رو بهتر کنین. روی لینوکس ها احتمالا به اندازه کافی به روز هستین.

پلاگین‌‌های ویم

ویم الان یه شبیه یه پلتفرم شده که روش کلی پلاگین نصب می کنین و کارهایی رو می کنه که شما دوست دارین. نصب پلاگین‌های از طریق مدیراکستنش‌ها انجام می‌شه که یکی از مرسوم‌هاش Vundle است. نصبش ساده است. واندل رو کلون می کنینش توی تنظیمات پلاگین های ویم؛ یه چنین چیزی:

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

حالا برای شروع تنظیمات کافیه یه فایل به اسم .vimrc توی هوم درست کنین:

touch ~/.vimrc

و توش تنظیمات واندل رو اضافه کنین:

set nocompatible              " required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" add all your plugins here (note older versions of Vundle
" used Bundle instead of Plugin)

" ...

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

set encoding=utf-8

بقیه کارها واضحه: اضافه کردن پلاگین ها و تنظیم کردن چیزها و یاد گرفتن شورتکات ها.. الان اگر برین توی ویم و این دستور رو اجرا کنین، واندل پلاگین هایی که بهش گفتین رو براتون نصب یا به روز می کنه.

:PluginInstall

حالا وقتشه که قدم به قدم پیش بریم.

استفاده خوب

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

تا کردن کد

تا کردن؟ انگلیسی ها می گن fold. در حالت عادی با za فولد می شد ولی خیلی ها می ذارن روی space.

" Enable folding
set foldmethod=indent
set foldlevel=99

البته دقت کنین که فولد بر اساس ایندنت انجام می شه. برای پیشرفته‌تر کردن با درک زبان و … SimpylFold رو سرچ کنین.

فرمت بهتر فایل برای پایتون

برای ایندنت کردن بر اساس پپ۸، اینها رو اضافه کنین:

au BufNewFile,BufRead *.py
    \set tabstop=4
    \set softtabstop=4
    \set shiftwidth=4
    \set textwidth=79
    \set expandtab
    \set autoindent
    \set fileformat=unix

و برای ایندنت خوب اتوماتیک:

Plugin 'vim-scripts/indentpython.vim'

و چنین چیزی برای مشخص کردن اسپیس های اضافی

au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
 highlight BadWhitespace ctermbg=red guibg=darkred

اتوکامپلیت

اتوکامپلیت ایده ها و شکل های مختلفی داره. مثلا ممکنه فانکشن های اصلی رو بدونه یا ممکنه متغیرها رو زیر نظر بگیره و … گزینه اصلی خیلی ها برای مجموعه ای از زبان‌ها ِYouCompleteMe است که باید مستقل نصبش رو پیش برین. با این به واندل اضافه اش کنید:

Bundle 'Valloric/YouCompleteMe'

و بعد از نصبش چند تا تغییر ریز هم بدیم:

let g:ycm_autoclose_preview_window_after_completion=1
map g  :YcmCompleter GoToDefinitionElseDeclaration

ویرچوال انوها

معلومه که ویم درکی از ویرچوال انوها نداره. برای ایجاد کردن این درک می تونیم اینکار رو بکنیم:

"python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
  project_base_dir = os.environ['VIRTUAL_ENV']
  activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
  execfile(activate_this, dict(__file__=activate_this))
EOF

چک کردن سینتکس

پلاگین داریم دیگه...

Plugin 'vim-syntastic/syntastic'
Plugin 'nvie/vim-flake8'
let python_highlight_all=1
syntax on

تنظیم رنگ ها

یک نگاه خودتون بندازین... سخته انتخاب کرده و من هی عوض می کنم. ولی در نهایت با

colorscheme desert

درخت فایل ها

اوه اوه.. بعضی ها عاشق اینن بعضی ها نمی دونن اصلا چرا هست! نرد تری مرسمترین است:

Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree

می تونین با :NERDTree فعالش کنین ، با o در بافر جدید باز کنین. با t در تب جدید، با i در اسپلیت افقی و با s در معودی. p می ره دایرکتوری بالا و r ریفرش می کنه. بقیه اش؟ ? (: بستن؟ :NERDTreeClose

قرتی بازی های آخر

مثلا

set number
set showmatch
set history=1000
set undolevels=1000
set wildignore=*.swp,*.bak,*.pyc
set visualbell
set noerrorbells

و پلاگین هایی مثل

Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}

کتاب رایگان رد هت برای پترن دیزاین‌های کوبرنتیس

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

برای غلبه به این ماجرا و ایجاد روشی برای طراحی نرم افزارهای بزرگ مبتنی بر ابر که قراره رو کوبرنتیس اجرا بشن، شرکت ردهت یه کتاب رایگان ۲۶۰ صفحه ای منتشر کرده که سعی می کنه تجربیات متنوع رو جمع کنه و ایده‌هایی برای طراحی به ما بده. این کتاب سعی می کنه الگوهای طراحی اش رو در پنج لایه طبقه بندی کنه: زیرساختی، رفتاری، ساختاری، تنظیمی و پیشرفته.

اگر شما هم علاقمند هستین سواد کوبرنتیس خودتون رو ارتقاء بدین، کتاب دیزاین پترن های کوبرنتیس ردهت حسابی توصیه می شه. البته همیشه لازم به تکرار است که «شما گوگل نیستین» (: اگر گوگل چیزی رو توسعه می ده معنی اش این نیست که شرکت ما هم حتما باید استفاده کنه (: چیزی مثل میکروسرویس کلی دردسر داره و کلی پیچیدگی اضافه درست می کنه و تصمیم رفتن به سمتش باید مستقل از بحث های مد روز باشه، ولی اگر کوبرنتیس کار هستین و طراح نرم افزار، خوندن یا حداقل تورق این کتاب رو حسابی توصیه می کنم.

هوش مصنوعی مایکروسافت که با دقت ۹۷٪ باگ‌های امنیتی رو تشخیص می ده

مایکروسافت مدعی شده که سیستمی رو توسعه داده که می‌تونه یک باگ امنیتی رو از یک باگ غیرامنیتی تشخیص بده، اونم با دقت ۹۹٪، همچنین این سیستم می‌تونه در ۹۷٪ مواقع، بحرانی بودن یک باگ رو هم مشخص کنه. گفته شده که این سیستم در طول چند ماه آینده بازمتن خواهد شد تا بقیه هم بتونن ازش استفاده کنن.

می‌شه حدس زد که یکی از پایه‌های رسیدن به این مساله، خریدن گیت هاب توسط مایکروسافت در ۲۰۱۸ و دسترسی مستقیم به حجم عظیمی از کد و ایشوهای مرتبط با اونها بوده. مایکروسافت می‌گه این سیستم بر اساس ۱۳ میلیون نمونه قبلی کار می کنه و احتمالا همراه خوبی خواهد بود در انسان‌هایی که می‌خوان باگ‌های رو دسته بندی کنن. ادعا می‌شه هر برنامه نویس در هر ۱۰۰۰ خط تقریبا ۷۰ باگ تولید می‌کنه و بنا به تخمین، حل یک باگ ۳۰ برابر بیشتر از نوشتن یه خط کد زمان می‌خواد. در حال حاضر گفته می‌شه که آمریکا به تنهایی ۱۱۳ میلیارد دلار هزینه کشف و حل مشکلات نرم‌افزاری می‌کنه.

مدلی که مایکروسافت توسعه داده، بر اساس دیتاهای لیبل خورده کار می کنه و در دو سطح: اول تشخیص امنیتی بودن باگ و بعد تعیین سطح اون. سیستم بر اساس الگوریتم فراوانی وزنی TF-IDF کار می کنه و به گفته مایکروسافت در داخل شرکت در حال استفاده است. این سیستم باگ های وارده رو نگاه می کنه و سعی می کنه اونهایی که از نظر امنیتی مهم هستن رو مشخص کنه تا بشه زودتر سراغشون رفت. چیزی که وقت زیادی از نیروهای انسانی شرکت ها رو به خودش اختصاص می ده و در نهایت هم بازدهی کمتری از این سیستم ایجاد می‌کنه.

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

جادی تی وی – نوشتن یه رمز کننده فایل به زبان سی

من که نوجوون بودم تنها فرمت تصویری مرسوم، گیف بود. که البته صاحبش بهش می گه جیف. در نتیجه ما باید فایل های گیف خودمون رو جایی مخفی می کردیم. من فلاپی هاش رو می ذاشتم لای یه سررسید که توش با تیغ جای فلاپی در آورده بودم ولی خود فایل ها رو هم باید مخفی می کردم – جو هکری (: . یه برنامه نوشته بودم که اینکار رو می کرد.. بیاین بازنویسی اش کنیم و کمی پیش تر بریم تا درک بهتری از فایل ها، اینکه سیستم چطوری می فهمه این یه عکسه و اعداد جادویی و ایکس اور و … پیدا کنیم.

ویدئوی رمز کننده فایل گیف توی آپارات و یوتیوب

نوشتن برنامه «بازی زندگی» با زبان سی، به یاد کانوی و اتوماتای سلولی

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

آپارات و یوتیوب.

این یه شاخه باحالی از کامپیوتر بود که امروزه زیر سیطره «هوش مصنوعی» و «یادگیری ماشین» ازش کمتر می شنویم؛ به اسم «حیات مصنوعی» (:

در این دوران کرونا، برای سرگرمی و یاد گرفتن کرنل لینوکس خودتون رو کمپایل و استفاده کنید؛ ویدئو

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

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

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

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

در سه ویدئو با داکر آشنا بشیم و مفاهیم اصلی اش رو یاد بگیریم

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

دلگرمی در این روزها؟ سابسکرایب؟ (: یوتوب و آپارات. خوش و خندون باشین (:

تشریح و نمایش فنی باگ و حمله‌های استک اورفلو و بافر اورفلو

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

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

ویدئوی اول حمله استک اورفلو در یوتوب و آپارات و ویدئوی دوم هم در یوتوب و آپارات.