Введение, которое можно не читать
Современному программисту, а тем более новичку уровнем ниже junior, адово необходимо умение пользоваться поисковиком. Вроде ничего сложного в этом нет, но тем не менее на вопросниках частенько всплывают вопросы, на которые уже давно есть ответ в первой вкладке из выдачи поисковика. Почему так? Неопытность, лень — причин много. Нас интересует лень, давайте немного упростим и автоматизируем процесс «гугления».
Собственно, сама суть
Итак, представляю вам сервис «cheat.sh». Написан он на Python, так что питонисты могут заинтересоваться. Существует несколько его реализаций:
- Через «curl» в командной строке;
- Через браузер.
- Через редакторы кода: Emacs, Vim, Sublime Text, VSCode.
Как использовать
Используя «curl»
Здесь нужно иметь утилиту «curl». В дистрибутивах Linux она уже есть, для Windows её нужно устанавливать отдельно. Проблем на Windows у меня не возникло.
Заходим в консоль и отправляем запрос такого типа:
curl cht.sh/[язык]/[запрос-с-дефисом-вместо-пробела]
Получаем ответ:
$ curl cht.sh/python/how-to-read-text-file
# How to read a text file into a list or an array with Python ...
#
# You will have to split your string into a list of values using split()
#
# So,
lines = text_file.read().split(',')
# [Achrome] [so/q/14676265] [cc by-sa 3.0]
Изначально утилита задумывалась как шпаргалка по командам для терминала Linux, поэтому можно искать справку по ним:
$ curl cheat.sh/tar
$ curl cht.sh/curl
$ curl https://cheat.sh/rsync
$ curl https://cht.sh/tr
Ещё можно установить консольную утилиту:
$ curl https://cht.sh/:cht.sh > ~/bin/cht.sh
$ chmod +x ~/bin/cht.sh
Пример использования здесь.
Для Windows таких команд нет, поэтому есть вариант использовать Cygwin, Git bash и так далее.
На ваш страх и риск.
Используя браузер
Просто переходим по нужной ссылке в браузере.
На примере www.cht.sh/python/how-to-read-text-file
Ссылку можно отправить в качестве ответа на Stackoverflow, к примеру.
Используя редакторы кода
Зачем? Чтобы не выходя из редактора получить копипастом код решения.
Плагин для Emacs,
Плагин для Sublime Text,
Плагин для Vim,
Плагин для VSCode.
Интересности
Авто-дополнение на Tab
Установка для Bash:
$ curl https://cheat.sh/:bash_completion > ~/.bash.d/cht.sh
$ . ~/.bash.d/cht.sh
$ # and add . ~/.bash.d/cht.sh to ~/.bashrc
Установка для ZSH:
$ curl https://cheat.sh/:zsh > ~/.zsh.d/_cht
$ echo 'fpath=(~/.zsh.d/ $fpath)' >> ~/.zshrc
$ # Open a new shell to load the plugin
Параметры ответа
Если вам не нужна подсветка синтаксиса в ответе:
curl cht.sh/python/open-file?T
Если вам нужен только код без комментариев:
curl cht.sh/python/open-file?Q
Вы можете это комбинировать:
curl chr.sh/python/open-file?QT
Стелс-режим
Открываем клиентскую версию с параметром «--shell» и используем:
$ cht.sh --shell [язык программирования]
$ stealth [параметры]
Зачем? Чтобы быстро получить ответ. Автор предлагает использовать такое на дистанционных собеседованиях. Тут лишь вопрос вашей собственной совести.
One-line решения
curl cht.sh/[язык]/1line
Тут даже для Python есть. Да-да, для языка, где разделением блоков кода является перевод строки.
Странности языков программирования
curl cht.sh/[язык]/weirdness
Посмотреть другой ответ
Если вас не устроил текущий ответ на ваш запрос, можете посмотреть другой:
curl cht.sh/[язык]/[запрос]/[номер ответа]
И что, с помощью одной утилиты можно выучить основы языка?
$ curl cht.sh/[язык]/:learn
Заключение
В общем-то, всё. Возможно, кто-то уже знает о «cht.sh» и использует, но на русском я не нашёл нормальных материалов о нём. На GitHub есть таблица полноты «cht.sh» по языкам, ссылки на плагины для редакторов и полное руководство, если кого-то не устроило моё. Спасибо, что прочли.
Комментарии (31)
evocatus
20.08.2018 21:02+1У новичков проблема, как правило, с английским, на котором написаны самые качественные и лёгкие в освоении материалы на любой вкус и для любого уровня (от stackoverflow до man-pages и официальной документации ЯП, баз данных и т.п.).
А вы свой сервис для новичков на английском сделали… Если они его выучат так, чтобы понимать вашу шпаргалку, она им будет уже не нужна.ZXZs Автор
20.08.2018 23:05Возможно так и есть. Сам этот сервис в обучении не использовал, он у меня как авто-завершение стоит в Sublime. Но если он такой относительно популярный (12 тысяч звёзд на GitHub), значит он кому-нибудь да пригодился.
evocatus
21.08.2018 01:22Звёздочки на GitHub не следует оценивать как признак востребованности. Лично я звёздочки использую как лайки и как закладки — я большую часть своих звёздочек даже не установил ни разу, не то, что использовал.
algotrader2013
21.08.2018 23:24какое эгоистичное поведение… а люди ведь доверяют таким, как Вы. Выходит, чтобы звездочки были полезными, гитхаб должен всякие лаплассианы считать, веса проставлять, доверие, и прочие неочевидные вещи, чтобы можно было просто смотреть на звездочки
selivanov_pavel
21.08.2018 14:42Одно другого не касается. Можно уже знать английский и только учиться программировать, можно наоборот(что бывает, конечно, реже).
grundic
20.08.2018 22:16Есть похожая утилита только для StackOverflow: https://github.com/santinic/how2
ZXZs Автор
20.08.2018 22:44«cheat.sh» тоже со StackOverflow работает. Надо будет сделать сравнение, наверное.
Yavanosta
21.08.2018 00:58delvin-fil
21.08.2018 04:42TLDR не умеет ЯП совсем. Это очень удобная вещь для подсказки в один экран, но не ЯП.
SanSYS
21.08.2018 11:07Вы знакомы с сервисом https://duckduckgo.com/?
Спецом для it-шников сделан)ZXZs Автор
21.08.2018 13:11Угу, есть такое :) Когда впервые ввёл туда запрос, был удивлен режимом Q\A, когда поисковик сразу выдёргивает для тебя ответ с какого-нибудь сайта. В гугле такого нет.
dimm_ddr
21.08.2018 14:17Есть же, причем давно:
dimm_ddr
21.08.2018 14:13Качество выдачи в нем все еще хромает. Я несколько раз пытался начать им пользоваться, но каждый раз приходилось возвращаться в гугл, где нужный ответ находился в первых же нескольких ссылках. Но может это мне так везло конечно. Ну и насколько я знаю он не для айтишников, а для параноиков сделан, его фича это же отсутствие слежки, а не специализированный улучшеный поиск по SO или нативная интеграция с vim.
selivanov_pavel
21.08.2018 20:00+1Я на него вполне успешно перешёл, очень очень редко на первой странице нет подходящего результата. По чётко сформулированным запросам, типа "nginx limit_req" "ansible module template", результат как правило будет в первой же ссылке.
Ну и да, основная фишка в соблюдении приватности пользователя. Кто-то говорит паранойя, кто-то — сильно развитая предусмотрительность :)
dimm_ddr
22.08.2018 10:58Я не спорю с тем что это штука хорошая, просто это не ИТ же. А так-то да, если бы поиск выдавал адекватные для меня результаты я и сам бы давно пользовался.
prefrontalCortex
21.08.2018 14:24Установил расширение для Emacs, набрал в Lookup «python 1line» и…
И да, у вас заявлена поддержка ivy, я использую для автодополнения helm, и там не очень удобно переходить по пунктам, которые включают в себя / (тот же python/1line) — нажав enter на пункте python/, попадаешь на страничку для просто python.
В общем, этот проект — хорошее дальнейшее развитие старого доброго howdoi, но ещё есть, куда расти.
Source
21.08.2018 23:48+1Современному программисту, а тем более новичку уровнем ниже junior, адово необходимо умение пользоваться поисковиком.
Основная суть умения пользоваться поисковиком заключается в подходящей формулировке запроса. И тут ваш сервис, к сожалению, ничем новичку не поможет.
Firemoon
Это, безусловно удобно, но копипаста, на мой взгляд, едва ли полезна новичку, который хочет научиться. Где-то я видел плагин в браузер, который не даёт копипастить код со stackoverflow.
ZXZs Автор
Вообще да, копипастить плохо, если ты ещё не до конца всё понимаешь. Но что плохого, когда новичок копирует только тот код, в котором он разобрался? Да и если речь не идёт об обучении, то можно использовать сею шпаргалку как auto-complete: говоришь программе «объединить два списка» и она вставляет кусок кода, который объединяет два списка.
Плагин «анти-копипаста» это конечно жесть, если честно :)
Glays
Мне не нравится что пользуясь копипастой кодеры не задумываются:
0) о соглашении о наименовании и форматировании кода текущего проекта.
1) о повторном использовании кода
2) что иногда можно модифицировать текущий код, для удовлетворения новой задачи.
3) что код из примера, всё равно нужно дописывать.
4) если кода много, он выполняет какую-то уникальную работу, при этом отлично изолирован и описан, его просто стоит подключить как отдельный юнит/библиотеку не изменяя, а не тащить в свой код копипастой.
В итоге получается, даже если копипаста идеально написана и подходит под всю инфраструктуру, нужно как минимум переименовать переменные.
siziyman
Все озвученные проблемы проистекают не из копипасты, а из головы программиста.
Ничего не мешает скопипастить, а потом уже локально поправить нейминг, определиться, нужно ли что-то дописывать (для этого, кстати, бывает полезно потестировать имеющееся скопипасченное решение), вынести в правильный модуль.
Glays
Нет, копипастить в тест это даже правильно, никто не исключает описок.
Но в продукте у кого с головой всё нормально копипаста не ускоряет написание кода (может разве что если нет нормальной IDE с автодополнением), потому что всё равно нужно изменять, а у кого похуже вместо тренировки изложения своих мыслей в коде или очень быстро делают очень плохо или тратят времени ещё больше.
siziyman
Я могу не знать, как изящнее/идиоматичнее/производительнее сделать какую-то конкретную вещь, например, из-за того, что не очень хорошо знаком с языком — положим, новый продукт пишется на новом стеке технологий. Как итог, гугление и копипаста (естественно, с сопутствующим анализом) этой самой вещи мне поможет.
algotrader2013
меня давно посещала мысль, что подобно соглашениям о том, как помечать файлы автоматически сгенерированного кода, необходимо иметь соглашения о том, как помечать файлы копипастного кода (в тех редких случаях, когда есть достаточное доверие к качеству кода и его способности решить задачу, и нет понимания, как код работает — к примеру, это реализация хардкорного, крайне неочевидно оптимизированного математического алгоритма, которая работает непосредственно с полями доменного объекта).
zac04
>Вообще да, копипастить плохо
смотря в какой среде и при каких условиях и при каком контексте. часто копипаста позволяет быстро разобраться в коде и проще его поддерживать. при этом правда модфицируемая часть уже может не быть похожей на когда то скопированную.
так что все зависит от условий — крайне глупо гнаться за уникальностью кода, в ущерб дальнейшей поддержке, или модификации.
aPiks
Когда вы просто переписываете код со stackoverflow вместо комбинации кнопок для копирования — это тоже не особо полезно, понимание не придет. Когда человек захочет разобраться в том, как работает код, он откроет книгу или ресурс и прочитает, а когда решение надо здесь и сейчас — stackoverflow в помощь. И еще пару вещей. Иногда, те, кто только учат программирование застревают на какой-то задачке и, пытаясь решить её в течении долгого времени, теряют интерес. Поэтому как крайний случай сниппеты кода очень полезны и по ним тоже можно учится.