Введение, которое можно не читать


Современному программисту, а тем более новичку уровнем ниже 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


image


Ссылку можно отправить в качестве ответа на 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)


  1. Firemoon
    20.08.2018 20:27

    Зачем? Чтобы не выходя из редактора получить копипастом код решения.

    Это, безусловно удобно, но копипаста, на мой взгляд, едва ли полезна новичку, который хочет научиться. Где-то я видел плагин в браузер, который не даёт копипастить код со stackoverflow.


    1. ZXZs Автор
      20.08.2018 22:52

      Вообще да, копипастить плохо, если ты ещё не до конца всё понимаешь. Но что плохого, когда новичок копирует только тот код, в котором он разобрался? Да и если речь не идёт об обучении, то можно использовать сею шпаргалку как auto-complete: говоришь программе «объединить два списка» и она вставляет кусок кода, который объединяет два списка.

      Плагин «анти-копипаста» это конечно жесть, если честно :)


      1. Glays
        21.08.2018 14:19

        Мне не нравится что пользуясь копипастой кодеры не задумываются:
        0) о соглашении о наименовании и форматировании кода текущего проекта.
        1) о повторном использовании кода
        2) что иногда можно модифицировать текущий код, для удовлетворения новой задачи.
        3) что код из примера, всё равно нужно дописывать.
        4) если кода много, он выполняет какую-то уникальную работу, при этом отлично изолирован и описан, его просто стоит подключить как отдельный юнит/библиотеку не изменяя, а не тащить в свой код копипастой.

        В итоге получается, даже если копипаста идеально написана и подходит под всю инфраструктуру, нужно как минимум переименовать переменные.


        1. siziyman
          21.08.2018 20:56
          +3

          Все озвученные проблемы проистекают не из копипасты, а из головы программиста.
          Ничего не мешает скопипастить, а потом уже локально поправить нейминг, определиться, нужно ли что-то дописывать (для этого, кстати, бывает полезно потестировать имеющееся скопипасченное решение), вынести в правильный модуль.


          1. Glays
            21.08.2018 21:50

            Нет, копипастить в тест это даже правильно, никто не исключает описок.
            Но в продукте у кого с головой всё нормально копипаста не ускоряет написание кода (может разве что если нет нормальной IDE с автодополнением), потому что всё равно нужно изменять, а у кого похуже вместо тренировки изложения своих мыслей в коде или очень быстро делают очень плохо или тратят времени ещё больше.


            1. siziyman
              21.08.2018 22:21

              Я могу не знать, как изящнее/идиоматичнее/производительнее сделать какую-то конкретную вещь, например, из-за того, что не очень хорошо знаком с языком — положим, новый продукт пишется на новом стеке технологий. Как итог, гугление и копипаста (естественно, с сопутствующим анализом) этой самой вещи мне поможет.


        1. algotrader2013
          21.08.2018 23:20

          меня давно посещала мысль, что подобно соглашениям о том, как помечать файлы автоматически сгенерированного кода, необходимо иметь соглашения о том, как помечать файлы копипастного кода (в тех редких случаях, когда есть достаточное доверие к качеству кода и его способности решить задачу, и нет понимания, как код работает — к примеру, это реализация хардкорного, крайне неочевидно оптимизированного математического алгоритма, которая работает непосредственно с полями доменного объекта).


      1. zac04
        23.08.2018 00:08
        +1

        >Вообще да, копипастить плохо

        смотря в какой среде и при каких условиях и при каком контексте. часто копипаста позволяет быстро разобраться в коде и проще его поддерживать. при этом правда модфицируемая часть уже может не быть похожей на когда то скопированную.
        так что все зависит от условий — крайне глупо гнаться за уникальностью кода, в ущерб дальнейшей поддержке, или модификации.


    1. aPiks
      22.08.2018 16:56

      Когда вы просто переписываете код со stackoverflow вместо комбинации кнопок для копирования — это тоже не особо полезно, понимание не придет. Когда человек захочет разобраться в том, как работает код, он откроет книгу или ресурс и прочитает, а когда решение надо здесь и сейчас — stackoverflow в помощь. И еще пару вещей. Иногда, те, кто только учат программирование застревают на какой-то задачке и, пытаясь решить её в течении долгого времени, теряют интерес. Поэтому как крайний случай сниппеты кода очень полезны и по ним тоже можно учится.


  1. evocatus
    20.08.2018 21:02
    +1

    У новичков проблема, как правило, с английским, на котором написаны самые качественные и лёгкие в освоении материалы на любой вкус и для любого уровня (от stackoverflow до man-pages и официальной документации ЯП, баз данных и т.п.).
    А вы свой сервис для новичков на английском сделали… Если они его выучат так, чтобы понимать вашу шпаргалку, она им будет уже не нужна.


    1. ZXZs Автор
      20.08.2018 23:05

      Возможно так и есть. Сам этот сервис в обучении не использовал, он у меня как авто-завершение стоит в Sublime. Но если он такой относительно популярный (12 тысяч звёзд на GitHub), значит он кому-нибудь да пригодился.


      1. evocatus
        21.08.2018 01:22

        Звёздочки на GitHub не следует оценивать как признак востребованности. Лично я звёздочки использую как лайки и как закладки — я большую часть своих звёздочек даже не установил ни разу, не то, что использовал.


        1. algotrader2013
          21.08.2018 23:24

          какое эгоистичное поведение… а люди ведь доверяют таким, как Вы. Выходит, чтобы звездочки были полезными, гитхаб должен всякие лаплассианы считать, веса проставлять, доверие, и прочие неочевидные вещи, чтобы можно было просто смотреть на звездочки


    1. selivanov_pavel
      21.08.2018 14:42

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


  1. grundic
    20.08.2018 22:16

    Есть похожая утилита только для StackOverflow: https://github.com/santinic/how2


    1. ZXZs Автор
      20.08.2018 22:44

      «cheat.sh» тоже со StackOverflow работает. Надо будет сделать сравнение, наверное.


    1. TheDeadOne
      21.08.2018 10:28

      image


      1. ZXZs Автор
        21.08.2018 16:43

        На заметку возьму. Это самый лучший дебаггинг :)


      1. algotrader2013
        21.08.2018 23:25
        +1

        зачем картинкой то…


        1. ZXZs Автор
          23.08.2018 00:09

          Для наглядности, наверное


  1. Yavanosta
    21.08.2018 00:58

    1. delvin-fil
      21.08.2018 04:42

      TLDR не умеет ЯП совсем. Это очень удобная вещь для подсказки в один экран, но не ЯП.


  1. SanSYS
    21.08.2018 11:07

    Вы знакомы с сервисом https://duckduckgo.com/?
    Спецом для it-шников сделан)


    1. ZXZs Автор
      21.08.2018 13:11

      Угу, есть такое :) Когда впервые ввёл туда запрос, был удивлен режимом Q\A, когда поисковик сразу выдёргивает для тебя ответ с какого-нибудь сайта. В гугле такого нет.


      1. dimm_ddr
        21.08.2018 14:17

        Есть же, причем давно:


        Заголовок спойлера

        image


        1. ZXZs Автор
          21.08.2018 16:43

          У меня такого нет. Не знаю, почему.


    1. dimm_ddr
      21.08.2018 14:13

      Качество выдачи в нем все еще хромает. Я несколько раз пытался начать им пользоваться, но каждый раз приходилось возвращаться в гугл, где нужный ответ находился в первых же нескольких ссылках. Но может это мне так везло конечно. Ну и насколько я знаю он не для айтишников, а для параноиков сделан, его фича это же отсутствие слежки, а не специализированный улучшеный поиск по SO или нативная интеграция с vim.


      1. selivanov_pavel
        21.08.2018 20:00
        +1

        Я на него вполне успешно перешёл, очень очень редко на первой странице нет подходящего результата. По чётко сформулированным запросам, типа "nginx limit_req" "ansible module template", результат как правило будет в первой же ссылке.


        Ну и да, основная фишка в соблюдении приватности пользователя. Кто-то говорит паранойя, кто-то — сильно развитая предусмотрительность :)


        1. dimm_ddr
          22.08.2018 10:58

          Я не спорю с тем что это штука хорошая, просто это не ИТ же. А так-то да, если бы поиск выдавал адекватные для меня результаты я и сам бы давно пользовался.


  1. prefrontalCortex
    21.08.2018 14:24

    Установил расширение для Emacs, набрал в Lookup «python 1line» и…
    image

    И да, у вас заявлена поддержка ivy, я использую для автодополнения helm, и там не очень удобно переходить по пунктам, которые включают в себя / (тот же python/1line) — нажав enter на пункте python/, попадаешь на страничку для просто python.

    В общем, этот проект — хорошее дальнейшее развитие старого доброго howdoi, но ещё есть, куда расти.


  1. Source
    21.08.2018 23:48
    +1

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

    Основная суть умения пользоваться поисковиком заключается в подходящей формулировке запроса. И тут ваш сервис, к сожалению, ничем новичку не поможет.