Хакер - Мастерская хакера. ИИ-помощники, работа с JSON и приятные мелочи, которые пригодятся в работе

Хакер - Мастерская хакера. ИИ-помощники, работа с JSON и приятные мелочи, которые пригодятся в работе

hacker_frei

https://t.me/hacker_frei

Польский Кот

Сос­кучил­ся по нашим под­боркам ути­лит? Сей­час испра­вим! Сегод­ня я при­нес тебе замор­ские диковин­ки, которые и код напишут, и отла­дят его, и рас­ска­жут, как работу пра­виль­но сде­лать. А бонусом еще нем­ного штук, которым ты и сам най­дешь при­мене­ние. Поеха­ли!

«Мастерская хакера»

Это уже шес­тая моя под­борка ути­лит, облегча­ющих жизнь в мелочах. Бла­годар­ные читате­ли про­дол­жают откры­вать передо мной свои кла­дов­ки, а я выношу отту­да и показы­ваю на стра­ницах «Хакера» самое луч­шее.

MOAR

Пер­вый релиз стра­нич­ного прос­мот­рщи­ка less сос­тоял­ся в 1985 году. Сегод­ня, спус­тя боль­ше чем 35 лет, име­ет смысл поис­кать ему замену. Встре­чай Moar — более сов­ремен­ную аль­тер­нативу less, написан­ную на Go.

Де­монс­тра­ция работы Moar на при­мере собс­твен­ного исходни­ка

Moar уме­ет под­све­чивать син­таксис кода, под­держи­вает UTF-8, инкре­мен­таль­ный поиск, поиск по регуляр­кам и авто­мати­чес­кое разар­хивиро­вание .gz.xz и .bz2. При этом раз­работ­чик при­лага­ет уси­лия, что­бы Moar был пол­ностью сов­местим с less и миг­рация не сос­тавля­ла осо­бого тру­да.

Для уста­нов­ки дос­таточ­но ска­чать бинар­ник для сво­ей плат­формы со стра­ницы релизов, дать нуж­ные пра­ва (chmod a+x moar-*) и ско­пиро­вать его в пап­ку, про­писан­ную в $PATH:

sudo cp moar-* /usr/local/bin/moar

Что­бы сде­лать Moar прос­мот­рщи­ком по умол­чанию, добавь эту стро­ку в свой .zshrc (или .bashrc, если ты все еще сидишь на Bash):

export PAGER=/usr/local/bin/moar

AI-CLI

Час­то гуг­лишь нуж­ную коман­ду и руга­ешь себя, что не можешь запом­нить? Не беда, мож­но и не запоми­нать! С ai-cli тебе не понадо­бит­ся перехо­дить в бра­узер и перека­пывать десят­ки отве­тов на форумах: готовые решения будут появ­лять­ся в тер­минале. А писать их будет извес­тная ней­росеть GPT-3.

ИИ‑помощ­ник в деле

Что­бы начать исполь­зовать пер­сональ­ного ИИ‑кон­суль­тан­та, дос­таточ­но сде­лать сле­дующие шаги:

  1. Пос­тавить Node.js.
  2. Ус­тановить пакет ai-clinpm i @abhagsain/ai-cli -g
  3. За­логи­нить­ся в OpenAI.
  4. Сге­нери­ровать API-ключ на соот­ветс­тву­ющей стра­нице. Ключ нуж­но сох­ранить, боль­ше его пос­мотреть не получит­ся.
  5. Вы­пол­нить коман­ду ai auth, пос­ле чего ввес­ти сге­нери­рован­ный на прош­лом шаге ключ (он не отоб­ража­ется при вво­де, так что луч­ше ско­пиро­вать и вста­вить).

Что­бы спро­сить что‑то у ней­росети, дос­таточ­но написать ai ask и даль­ше в кавыч­ках воп­рос на англий­ском. Нап­ример:

ai ask "How to save xakep.ru main page to file?"

Толь­ко имей в виду, что при слиш­ком слож­ных зап­росах GPT-3 может и не понять, что ты от нее хочешь, и выдать не то, что нуж­но. Так что хотя бы прос­матри­вай гла­зами коман­ду, преж­де чем ее выпол­нить (о чем прог­рамма нас чес­тно пре­дуп­режда­ет, ког­да показы­вает ответ)!

Те­перь о грус­тном — о цене. Она сос­тавля­ет поч­ти два цен­та за один зап­рос, и это не очень хорошо, с уче­том того, что Google и Stack Overflow бес­плат­ны. Фак­тичес­ки единс­твен­ное пре­иму­щес­тво ai-cli в ско­рос­ти, с которой тебе дос­тавля­ется (воз­можно, пра­виль­ный) ответ.

В опи­сании прог­раммы перечис­лено еще и авто­допол­нение команд, но оно и так есть в том же Zsh и мно­гих дру­гих обо­лоч­ках.

CLICKBAIT REMOVER FOR YOUTUBE

Нас­трой­ки

Мно­гие авто­ры роликов на YouTube для прив­лечения вни­мания ста­вят на обложку видео не реаль­ный кадр, а клик­бей­тное непонят­но что. В резуль­тате весь YouTube пок­рыт ярки­ми кар­тинка­ми, а что за ними скры­то, неяс­но (и без прос­мотра двух рек­лам и длин­ного вступ­ления час­то не узнать).

Бра­узер­ное рас­ширение Clickbait Remover for YouTube реша­ет эту проб­лему, прос­то заменяя обложки кад­рами из видео, а наз­вания роликов пишет строч­ными бук­вами с заг­лавной, если изна­чаль­но оно было наб­рано заг­лавны­ми.

Есть вер­сии рас­ширения для Chrome и для Firefox. Уста­нав­лива­ем, и клик­бейт прак­тичес­ки исче­зает.

Не подумай толь­ко, что твой тра­фик нач­нет ухо­дить на фоновое ска­чива­ние видео. Дело в том, что у YouTube есть авто­мати­чес­кие сге­нери­рован­ные мини­атю­ры и рас­ширение прос­то получа­ет их в готовом виде.

Ис­ходни­ки Clickbait Remover дос­тупны на GitHub

CLI-EXERCISES

Хоть в этой прог­рамме и нет искусс­твен­ного интеллек­та, она все рав­но при­годит­ся нович­ку, что­бы научить­ся работе в тер­минале. Вмес­то того что­бы спра­шивать каж­дую мелочь у ИИ (что дорого и потен­циаль­но опас­но), мож­но посидеть какое‑то вре­мя с тре­наже­ром и научить­ся все­му самос­тоятель­но. Прог­рамма cli-exercises — это как раз такой тре­нажер, который учит работе с тер­миналом на при­мерах час­тых задач.

Сна­чала понадо­бит­ся уста­новить зависи­мос­ти (python3python3.10-venv и git), затем кло­ниро­вать репози­торий с про­ектом, и мож­но запус­кать:

$ python3 -m venv textual_apps

$ cd textual_apps

$ source bin/activate

$ pip install textual==0.5.0

$ git clone --depth 1 https://github.com/learnbyexample/TUI-apps.git

$ cd TUI-apps/CLI-Exercises

$ python cli_exercises.py

Спи­сок задач находит­ся в фай­ле questions.json. По умол­чанию в нем уже есть 40 заданий на работу с тек­сто­выми фай­лами, но ник­то не зап­реща­ет дописать туда свои, на любые темы.

Струк­тура фай­ла с задани­ями

К каж­дой задаче есть ответ, который ты уви­дишь при вво­де пра­виль­ного решения или нажав Ctrl-S. Мож­но про­пус­кать (Ctrl-N) воп­росы и воз­вра­щать­ся к ним поз­же (Ctrl-P).

JSON FX

Все мы зна­ем о jq (а если не зна­ем — идем и чита­ем про сам jq и пе­соч­ницу с ним). Так вот, если jq — это редак­тор и поис­ковик по JSON, то FX — это прос­мот­рщик. Работать в нем мож­но в том чис­ле при помощи мыши.

FX удоб­но отоб­ража­ет даже очень боль­шие чис­ла, а еще показы­вает вни­зу экра­на JSON path, который потом мож­но лег­ко скор­мить jq или ана­логич­ной ути­лите.

Кил­лер‑фича: мож­но филь­тро­вать дан­ные выраже­ниями на JavaScript или Python! При­мер:

fx data.json '.filter(x => x.startsWith("xakep"))'

Ну и сов­сем уж мелочи: FX под­держи­вает темы (их мож­но поп­равить в фай­ле theme.go), а выбира­ются они уста­нов­кой соот­ветс­тву­ющей перемен­ной окру­жения (что тоже удоб­но добавить в .zshrc):

export FX_THEME=8

Все­го пос­тавля­ется девять тем, их мож­но уви­деть на скрин­шоте ниже.

Встро­енные темы

Ус­тановить FX мож­но из snap (пакет fx) или прос­то ска­чав бинар­ник со стра­ницы релизов.

Ес­ли рань­ше я для прос­мотра JSON поль­зовал­ся VS Code, то теперь для быс­тро­го прос­мотра исполь­зую толь­ко FX. 

YQ

На JSON свет кли­ном не сошел­ся, и один из его глав­ных кон­курен­тов — фор­мат YAML (Yet Another Markup Language). И если для ана­лиза и пре­обра­зова­ния JSON час­то исполь­зуют jq, то для YAML есть yq.

Ко­неч­но, ник­то не зап­реща­ет при­менять sed, но это, во‑пер­вых, лотерея, а во‑вто­рых, зачем мучить­ся с регуляр­ками, если есть спе­циаль­ные инс­тру­мен­ты?

Нап­ример, что­бы поп­равить сох­ранен­ное имя поль­зовате­ля в таком фай­ле:

users:

admin: admin

editor: xakep

corrector: autospellcheck

мож­но исполь­зовать сле­дующую коман­ду:

cat xakepusers.yaml | yq '.users.corrector=chatgpt'

При­мер выг­лядит надуман­ным, но в скрип­тах такая адресная замена может быть полез­на.

Что­бы уста­новить yq, дос­таточ­но одной коман­ды:

wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq &&\

chmod +x /usr/bin/yq

Как отменить исправление форматирования

У yq есть одна проб­лема: фор­матиро­вание ути­лита переде­лыва­ет, как ей нра­вит­ся, и пус­тые стро­ки выкиды­вает. Нек­то vladimir259 при­думал ре­шение, которое поз­волит сох­ранить про­пус­ки:

# Сделаем изменения и сохраним в новый файл

yq '.data.TEST="NewValue"' sample.yaml > sample.yaml.new

# Удалим только пустые строки, без обновления самих данных

yq '.' sample.yaml > sample.yaml.noblanks

# Найдем сами полезные изменения

diff -B sample.yaml.noblanks sample.yaml.new > patch.file

# Применим их к оригиналу

patch sample.yaml patch.file

Под­разуме­вает­ся, что, кро­ме самого yq, на тво­ей машине уста­нов­лены patch и diff. 

ADRENALINE

Наз­вание прог­раммы зву­чит мощ­но, но на деле это прос­тень­кий сер­вис, который поз­воля­ет скар­мли­вать GPT-3 код с ошиб­ками, что­бы ней­росеть объ­ясни­ла, в чем зак­люча­ется тот или иной баг. Она может даже попытать­ся испра­вить ошиб­ки!

Что­бы вос­поль­зовать­ся «Адре­нали­ном», нуж­но зай­ти на сайт про­екта либо раз­вернуть его у себя локаль­но. Сер­вис бес­плат­ный, но тре­бует вво­да API-клю­ча для OpenAI. Раз­работ­чики клят­венно обе­щают, что ключ будет хра­нить­ся локаль­но, но, так это или нет, мы не зна­ем.

Кро­ме клю­ча, пот­ребу­ется ввес­ти дефек­тный кусок кода на одном из 22 под­держи­ваемых язы­ков и ошиб­ку, которую тебе выда­ет ком­пилятор или интер­пре­татор. Потом жмешь Debug, и в окне спра­ва дол­жно появить­ся объ­ясне­ние. Магия!

TEETTY

Инс­тру­мент teetty при­годит­ся, ког­да нуж­но орга­низо­вать для прог­раммы фаль­шивый тер­минал и рулить вво­дом‑выводом через фай­лы. На скрин­шоте как раз при­мер такого исполь­зования: инте­рак­тивная прог­рамма висит в фоне, а ввод в нее пода­ется в спе­циаль­ный хит­рый файл. Ана­логич­но вывод отоб­ража­ется из дру­гого фай­ла. И конеч­но, эти фай­лы могут быть проб­рошены через сеть или быть дос­тупны­ми не одно­му челове­ку.

Фак­тичес­ки teetty — это обо­лоч­ка, соз­дающая фей­ковые stdin и stdout, которые ведут себя точ­но как нас­тоящие. С их помощью мож­но даже соз­давать кла­виатур­ные события. Нап­ример, отпра­вить Ctrl-D, записав в вир­туаль­ный stdin сим­вол 0x04, и таким обра­зом завер­шить ввод.

На­писан teetty на Rust и ста­вит­ся через Cargo:

cargo install teetty

У прог­раммы есть два режима: сырой и для скрип­тов (--script-mode). Отли­чают­ся они тем, что в сыром кон­соль эму­лиру­ется пол­ноцен­но, но stdout и stderr не раз­делены. Так работа­ют пос­тра­нич­ные прос­мот­рщи­ки, тек­сто­вые редак­торы и дру­гие прог­раммы, которые рису­ют целый экран. В скрип­товом режиме кон­соль получа­ется непол­ноцен­ная, зато поток оши­бок ста­новит­ся дей­стви­тель­но отдель­ным и его мож­но тоже куда‑нибудь нап­равить. 

TTOP

Так уж получи­лось, что в каж­дой из моей под­борок есть вари­ация на тему top. Этот раз не ста­нет исклю­чени­ем. Пред­лагаю тво­ему вни­манию ttop. Пос­ле все­го, что мы уже видели в прош­лых выпус­ках, он не выг­лядит каким‑то уж осо­бен­но кру­тым, но изю­мин­ку все же име­ет: он может записы­вать исто­рию активнос­ти и поз­воля­ет прос­матри­вать ее. Это не atop, конеч­но, но тоже ничего.

Ус­тановить ttop мож­но, прос­то ска­чав готовый бинарь с GitHub:

wget https://github.com/inv2004/ttop/releases/latest/download/ttop

chmod +x ttop

Что­бы запус­тить сбор ста­тис­тики, выпол­ни ./ttop --on, а для оста­нов­ки — ./ttop --off. Прос­матри­вать исто­рию мож­но будет при обыч­ном запус­ке.

SHELLJACK

Shelljack — это ути­лита, которая работа­ет в прос­транс­тве поль­зовате­ля и с помощью ptrace сни­фает тер­минал и поз­воля­ет пересы­лать куда‑нибудь получен­ные дан­ные. Эта­кий кей­лог­гер, который уме­ет еще и зах­ватывать ввод.

При­мене­ние такому инс­тру­мен­ту есть не толь­ко в целевых ата­ках, но и в мир­ной пов­седнев­ной жиз­ни. Допус­тим, ты вынуж­ден пре­дос­тавить кому‑то дос­туп к обо­лоч­ке на сер­вере, который ты адми­нис­три­руешь. Но как про­кон­тро­лиро­вать про­исхо­дящее там? Мож­но прос­то запус­тить shelljack и нас­тро­ить его пересы­лать тебе все, что тво­рит­ся в тер­минале, в реаль­ном вре­мени, и, если что‑то идет не так, ты сра­зу узна­ешь, что имен­но сде­лал поль­зователь, и смо­жешь вов­ремя дроп­нуть сес­сию.

Обыч­но подоб­ные защит­ные при­колы реали­зуют с помощью фун­кций ауди­та, политик SELinux или даже спе­циаль­ного модуля в ядре, но эта ути­лита поз­воля­ет вооб­ще не лезть в ядро и сде­лать все в поль­зователь­ском прос­транс­тве. Тебе не пот­ребу­ется даже root!

Но не думай, что ты смо­жешь вот так вот прос­то сле­дить за любыми поль­зовате­лями. Мало того, на Ubuntu, начиная с еще допотоп­ной вер­сии 10.10, при­менен спе­циаль­ный патч, который огра­ничи­вает воз­можнос­ти ptrace, и имен­но в Ubuntu работа этой ути­литы все же пот­ребу­ет прав root. Впро­чем, если ты админ, то это вряд ли вызовет какие‑то проб­лемы.

Го­тово­го бинар­ника у shelljack нет. Для сбор­ки пот­ребу­ется уста­новить зависи­мос­ти ptrace_do и ctty, но они тоже собира­ются без малей­ших зат­рудне­ний:

git clone https://github.com/emptymonkey/ptrace_do.git

cd ptrace_do

make

cd ..

git clone https://github.com/emptymonkey/ctty.git

cd ctty

make

cd ..

git clone https://github.com/emptymonkey/shelljack.git

cd shelljack

make

Пос­ле это­го дос­таточ­но любым спо­собом под­смот­реть PID про­цес­са эму­лято­ра тер­минала, за которым нуж­но сле­дить. Коман­да запус­ка в общем слу­чае такая:

shelljack [-f FILE]|[-n HOSTNAME:PORT] <PID>

Оп­ция -f ука­зыва­ет на файл для хра­нения логов, а -n поз­воля­ет переда­вать перех­вачен­ные дан­ные в реаль­ном вре­мени по сети на ука­зан­ный IP-адрес и порт. <PID> — это, соот­ветс­твен­но, иден­тифика­тор про­цес­са‑жер­твы.

PRIVAXY

Бло­киров­щик рек­ламы и сле­дящих скрип­тов Privaxy работа­ет не как бра­узер­ное рас­ширение, а как отдель­ный прок­си‑сер­вер, который ста­вит­ся на компь­ютер и филь­тру­ет тра­фик. Учи­тывая, что с Chrome Manifest v3 появи­лись проб­лемы, которые меша­ют работать бло­киров­щикам рек­ламы, такая замена может быть очень кста­ти.

Вме­шивать­ся в HTTPS-тра­фик Privaxy поз­воля­ет самопод­писан­ный сер­тификат: прог­рамма добавит его в спи­сок доверен­ных, и бра­узер не будет под­нимать лиш­нюю панику.

Скрин­шот взят из репози­тория про­екта

Privaxy написан на Rust и эко­номич­но отно­сит­ся к ресур­сам — по заяв­лени­ям раз­работ­чика, на ~320 000 филь­тров нуж­но все­го око­ло 50 Мбайт опе­ратив­ки!

Для уста­нов­ки дос­таточ­но ска­чать соб­ранный бинар­ник со стра­ницы релизов на GitHub. Сбор­ки дос­тупны для Windows, Linux (пакеты deb и AppImage) и macOS, при­чем для пос­ледних двух есть бил­ды и для ARM.

Прок­си под­нима­ется на локаль­ном хос­те (не смот­рит в сеть) на пор­те 8100. Для управле­ния сущес­тву­ет GUI и CLI-интерфейс.

Что немало­важ­но, есть воз­можность выбороч­но отклю­чать вме­шатель­ство в тра­фик до опре­делен­ных хос­тов.

CHATGPT FOR GOOGLE

Про ChatGPT в 2023 году слы­шал каж­дый. Эта замеча­тель­ная ней­росеть сво­бод­но понима­ет на мно­гих язы­ках, отве­чает на любые воп­росы и уме­ет врать нас­толь­ко убе­дитель­но, что даже понадо­бились детек­торы, спо­соб­ные рас­познать кон­тент, сге­нери­рован­ный ИИ (одиндру­гой).

Для нас, инже­неров, важ­но то, что ChatGPT с пол­пинка понима­ет задачу и выда­ет кра­сивое готовое решение. Осо­бен­но удоб­но это исполь­зовать при решении типовых проб­лем, в духе «соз­дать React-ком­понент» или «рас­парсить JSON на C#». Мож­но гуг­лить, перека­пывать Stack Overflow, а мож­но прос­то спро­сить ИИ и получить ответ для кон­крет­но тво­ей ситу­ации.

Рас­ширение ChatGPT for Google поз­воля­ет сов­местить эти спо­собы: каж­дый раз, ког­да ты спра­шива­ешь что‑то в Google, Bing, DDG, Brave или еще некото­рых поис­ковиках, рас­ширение про­дуб­лиру­ет твой зап­рос в ChatGPT и покажет ответ пря­мо на стра­нице резуль­татов.

Под­держи­вает­ся под­свет­ка кода, Markdown в отве­тах кор­рек­тно пар­сится, есть кноп­ка копиро­вания отве­та и, самое глав­ное, тем­ная тема!

Ус­тановить это чудо прог­ресса мож­но из офи­циаль­ных магази­нов Chrome и Firefox, а если у тебя бра­узер Brave, то нуж­но будет снять в нас­трой­ках галоч­ку «Prevent sites from fingerprinting me based on my language preferences», ина­че рас­ширение не смо­жет показы­вать отве­ты на стра­ницах поис­ковика.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page