Yub.js — это расширяемая клиентская веб-командная строка, которая включает в себя множество полезных поисковых систем и ярлыков, многоразовые команды и множество других скрытых полезных функций, таких как секундомеры и встроенные видеоролики YouTube. Он также имеет гибкий API, поэтому вы можете вызывать команды yub.js из любого места: например, вы можете напрямую ссылаться на команды или получать к ним доступ прямо из адресной строки браузера (просто настройте единый ярлык для поиска, указывающий на yub.js). API и получите сотни других ярлыков поиска бесплатно).
С самого начала все это было задумано как одностраничный автономный HTML-документ, содержащий все необходимое для работы «из коробки». Его можно установить локально и запускать прямо с вашего компьютера без необходимости использования сервера или веб-хостинга. С тех пор он значительно вырос, и разработка была разделена на отдельные, более управляемые файлы. Автономная версия html-страницы по-прежнему доступна, хотя теперь она автоматически генерируется Ruby-скриптом и поставляется в уменьшенной и исходной версиях. Просто сохраните страницу прямо на свой компьютер или поместите ее на сервер, и все готово!
Список доступных поисковых систем полностью модульный: вы можете добавить свой собственный список часто посещаемых сайтов, отредактировав или заменив файл mods.js (json). Создать свои собственные новые команды легко — просто используйте команду create
(с именем новой команды в качестве необязательного аргумента). Не стесняйтесь добавлять свои собственные новые функции или расширять существующие, редактируя файл functions.js
. Да, и регулярные выражения поддерживаются везде по умолчанию.
Лучший способ понять, как работает yub.js, — это начать пробовать команды. Итак, прежде чем углубляться в такие скучные вещи, как история или внутреннее устройство, давайте взглянем на некоторые интересные команды, которые вы можете опробовать прямо сейчас.
list
или ls
http://commandlinefu.com/
или ftp://ftp.mozilla.org/
!
перед любым открытым URL-адресом, чтобы перейти непосредственно на сайт, например: !smh.com.au, чтобы перейти на Sydney Morning Herald.g [searchterm]
для простого поиска в Google. Или вы можете вместо этого использовать y
, b
, ix
или sp
help
или man
(необязательно включая в качестве аргумента команду, по которой вы хотите получить помощь, например help shuffle
)calc 857*2^3
: решать простые математические формулыcalc (25+2)==(28-1)
: проверка эквивалентностиcalc ~32.56
: круглые числаrand 550
: вернуть случайное число от 0 до 550.rand site
: перейти на случайный сайтrand img
: показать случайное изображениеrand git
: посетить случайный проект GitHubwatch ninja cat
: просмотр встроенного плейлиста с видео-результатами YouTube по поисковому запросу «кот-ниндзя»link flint tigers
: получите постоянную ссылку на команду Flint Tigers (которая ищет на Flickr изображения тигров, отсортированные по «интересности»)fspell sometext
: записать текст с изображениями Flickr.ascii sometext
: выпишите _sometext в ascii artwhere gn
: показать ключевое слово и адреса поиска по умолчанию для команды gn.> am Alice in Wonderland
: перейдите непосредственно к первому результату поиска Google по запросу «Алиса в стране чудес» на Amazon.com.> wpde Turing complete
: прочитайте статью о «Тьюринг-полноте» в немецкой Википедии.cat engadget.com
: отображает только текстовую версию веб-страницы на engadget.com.pop bbc gn yn bn
: всплывающие отдельные вкладки с новостями BBC, новостями Google, новостями Yahoo и новостями Bing — все с помощью одной команды.pop gim yim bim -t horses
: всплывающие новые вкладки, показывающие результаты поиска изображений лошадей в Google, Yahoo и Bing. Примечание. Чтобы использовать команду pop
вам, вероятно, потребуется настроить исключение в блокировщике всплывающих окон вашего браузера для yub.js.
Поисковые системы по умолчанию хранятся в файле engine.js. Он содержит множество веб-ярлыков общего назначения, поисковых систем, источников новостей и других интересных материалов, которые демонстрируют основные функции yub.js и должны дать вам представление о том, какие виды ярлыков могут быть полезны для ваших нужд.
В engine.js вы можете найти: основные поисковые системы (Google, Yahoo, Bing... и т. д.) и различные связанные с ними продукты (изображения, видео, карты, новости, погода, машинный перевод), Википедию и ее различные дочерние сайты Викимедиа (Викисловарь, Wikiquote, Wikinews... и т. д.), ряд крупных новостных организаций (BBC, Deutsche Welle, France 24... и т. д.), основные провайдеры веб-почты (Gmail, Yahoo, Hotmail... и т. д.), документация для нескольких популярных скриптов языки (Bash, JS, PHP, Python, Ruby) и множество других полезных сайтов и инструментов (Для всех или только для меня?, Whois, Какой у меня IP?... и т. д.). Более подробное руководство можно найти в вики.
Приятным преимуществом использования ярлыков yub.js является то, что https используется по умолчанию, когда это возможно (т.е. везде, где он поддерживается).
Все пользовательские ссылки и ярлыки для удобства помещаются в mods.js. Этот файл совершенно необязателен, поэтому вы можете вставлять и вынимать из него что-нибудь по своему усмотрению. Вам не нужен файл mods.js для использования yub.js.
Гигантский файл mods.js, найденный в репозитории, является просто примером для демонстрации различных функций yub.js, таких как поиск по регулярным выражениям в Юникоде, а также различных локальных поисковых сайтов и других интересных вещей, которые вы можете выбрать для себя. ваше собственное использование. При размере 106 КБ / 870+ записей (на момент написания статьи) он также демонстрирует, что даже с огромным списком пользовательских ярлыков yub.js работает плавно без какого-либо заметного снижения скорости.
Несколько примеров того, что было без разбора скопировано в образец файла mods.js:
ebin
для eBay India или amuk
для Amazon UK)enes
для англо-испанского словаря и esen
для испанско-английского; enko
и koen
для корейского языка, enfr
и fren
для французского языка и т. д.Следует отметить, что некоторые действительно интересные сайты были исключены из engine.js и даже mods.js, чтобы сделать ярлыки по умолчанию максимально полезными. Но не бойтесь, вы все равно можете добавить их в свой файл mods.js! Вот некоторые вещи, которые вы можете добавить для настройки mods.js:
cl
или kj
для желаемой локации и поместите ее в mods.js.http://www.xe.com/ucc/convert.cgi?Amount=%s&From=[CURRENCY1]&To=[CURRENCY2]
(замените [CURRENCY1]
и [CURRENCY2]
трехбуквенными кодами выбранных вами валют. ) Поддержка тем доступна в виде пользовательских CSS-файлов, загружаемых с помощью команды skin
. Скины по сути представляют собой просто файлы css (расположенные в папке /css
), и их можно загрузить, введя команду skin
и имя скина (нет необходимости добавлять расширение .css
).
Чтобы вернуться к скину по умолчанию, просто введите skin default
. Чтобы удалить весь CSS, используйте skin none
.
Скины в настоящее время не сохраняются между сеансами yub (для этого потребуется установить файл cookie, чего нам пока удалось избежать), но вы можете изменить ссылку/закладку на свой экземпляр yub.js на что-то вроде https://dohliam.github.io/yub/?skin%20terminal
, чтобы всегда запускать yub.js с загруженным определенным скином. В качестве альтернативы, как только вы определитесь со скином, который хотите использовать по умолчанию для вашей локальной установки, просто переименуйте его в default.css
(вы можете переименовать исходный файл default.css
в old.css
или аналогичный, если не хотите перезаписывать это). Ваш новый файл будет загружен по умолчанию при следующем открытии yub.js.
Чтобы создать новый скин, просто скопируйте один из существующих файлов скина в новый файл, например, mynewskin.css
и настройте его по своему усмотрению! (И не забудьте добавить свои собственные скины в галерею скинов вики, чтобы ими могли насладиться другие!)
Вот несколько скриншотов скинов, поставляемых с yub.js:
по умолчанию :
Терминал :
горное озеро :
лучи :
линия горизонта :
ноксс :
Конечно, вам не обязательно устанавливать yub.js, чтобы начать его использовать. Для одноразового поиска вы можете легко использовать последнюю версию yub.js, размещенную здесь, на GitHub. Все делается исключительно на стороне клиента, поэтому ни один из ваших запросов не отправляется по сети.
Вы даже можете использовать API, чтобы сделать версию GitHub поиском по умолчанию для вашего браузера. Однако если вы используете API, любые вводимые вами команды будут видны (например, в журналах сервера GitHub), поэтому вы можете предпочесть настроить локальную версию yub.js и запускать ее полностью в автономном режиме (или на своем собственном сайте). ).
В вики есть подробное руководство о том, как сделать yub.js поисковой системой по умолчанию. Вы можете найти пошаговые инструкции по настройке yub.js для Chrome/Chromium и Firefox (если вы используете другой браузер и можете установить yub.js, рассмотрите возможность добавления выполненных вами шагов в руководство). .
При установке yub.js следует учитывать одну вещь: хотите ли вы настроить его как поиск по ключевым словам или использовать в качестве поисковой системы по умолчанию. Преимущество установки его по умолчанию заключается в том, что он фактически превращает строку URL-адреса вашего браузера в командную строку веб-сайта.
Одной из наиболее полезных функций yub.js является простой в использовании API, который работает как на ноутбуке, так и на сервере. Просто укажите ссылку, закладку или поиск по ключевому слову на URL-адресе yub.js и добавьте ?
плюс ваши команды или условия поиска, чтобы перейти непосредственно к результату.
Пример 1:
http://example.com/yub
http://example.com/yub?weather tokyo
Пример 2:
file:///home/user/yub/index.html?rand site
Вы можете встроить yub.js на любую веб-страницу и получить функциональную веб-командную строку, которая выглядит следующим образом:
Просто скопируйте следующий код и разместите его в любом месте страницы:
<form method="get" action="#" onsubmit="window.location='https://dohliam.github.io/yub/?'+window.yub.value; return false"><img src="yub.gif" /> <input id="yub" type="text" size=27 value="yub.js web command-line" autocomplete="off" style="border-style: none none solid; color:gray; font-family:monospace;" onfocus="this.value=''; this.style.color='black'" onblur="if (this.value=='') {this.value='yub.js: enter commands here';this.style.color='gray'}"> <input style="visibility: hidden" type="submit" value="" />
Вероятно, существует более элегантный способ сделать это, но после некоторого тестирования оказалось, что это единственный способ, который работает как в Firefox, так и в Chrome. Не стесняйтесь экспериментировать и открывайте запрос на включение, если найдете что-то лучше!
Есть множество функций, которые еще предстоит реализовать. Насколько это возможно, запланированные новые функции и запрошенные функции отслеживаются в системе отслеживания проблем. Если у вас есть идея, добавьте ее (или создайте форк проекта и сделайте запрос на вытягивание)!
Было бы здорово увидеть все пользовательские файлы mods.js — ссылки на них можно публиковать в вики, хотя в будущем возможно создание отдельного репозитория, если список станет достаточно большим. А пока дайте мне знать, если у вас есть файл mods.js, которым вы хотели бы поделиться, особенно если он организован по определенной теме (например, коллекции сайтов социальных сетей, шведских газет, исследовательских баз данных, инструментов для историков или морские биологи... и т. д.).
Некоторые запланированные функции, которые все еще находятся в разработке:
watch
, но для музыки)Если вы хотите внести свой вклад в добавление какой-либо из этих функций (или других, о которых я не подумал), смело отправляйте запрос на включение.
Давным-давно (точнее, в 2005 году) был открыт новаторский веб-сайт YubNub, который позволял пользователям писать свои собственные команды и ярлыки для различных веб-сервисов. Идея доступа к веб-сайтам с помощью коротких команд, похожих на bash, была весьма привлекательной и даже захватывающей и быстро привела к появлению всевозможных творческих инструментов, таких как Split и Gimyim . Вместе со многими другими я создал кучу команд и какое-то время довольно активно пользовался сайтом.
Однако была одна вещь, которая никогда не имела смысла: зачем кому-то фильтровать каждый поиск, который они выполняют через (другой) сторонний веб-сайт? В любом случае, как только функция поиска по ключевым словам Firefox стала широко известна, привлекательность использования ярлыков YubNub начала исчезать — было проще просто настроить локальные ключевые слова Firefox для наиболее распространенных поисковых запросов, а затем использовать их вместо них. Таким образом, файл закладок, содержащий десятки бывших команд YubNub в виде ключевых слов для поиска, путешествовал с компьютера на компьютер и сохранялся почти десять лет, прежде чем стало очевидно, что эта система тоже была слишком неуклюжей, медленной и непрактичной (например, доступ с другой компьютер был проблемой, и обновлять список на разных компьютерах тоже было неприятно). Что еще хуже, этот метод также упускал большую часть захватывающей функциональности команд, не связанной с поиском, которую предлагал YubNub.
Девять лет спустя посещение YubNub показало, что сервис все еще работает и, по данным Википедии, даже может похвастаться более чем 22 000 команд, введенных пользователями... по состоянию на 2008 год. Глядя на список команд, можно прийти к обескураживающему выводу, что однажды потрясающий сервис был завален тысячами и тысячами спам-записей, подавляя любое оставшееся чувство общности ( социальная командная строка ), которое когда-то было одной из самых привлекательных вещей на сайте.
Еще более разочаровывает то, что многие из самых крутых команд (например, Split , gimyim ) больше не работают. Конечно, это не должно быть таким уж удивительным — архитектура сети сильно изменилась с 2005 года. Кроме того, как продемонстрировал gimyim , потому что и Google, и Yahoo — а также практически любой другой крупный веб-сайт — теперь активно препятствуют попыткам загрузить их контент с внешних сайтов). Облом.
Yub.js зародился как попытка вернуть часть функциональности старой командной строки YubNub в приложение, полностью клиентское, которое каждый мог настроить или настроить в соответствии со своими потребностями, а затем запустить на своем локальном компьютере - или удалить. в облако или на частный сервер и доступ из любого места.
Хотя я годами праздно вынашивал эту идею, она всегда оставалась чем-то вроде несбыточной мечты, поскольку я даже не был уверен, что можно сделать большую часть того, что я хотел сделать, с помощью JavaScript. В конце концов я создал небольшую HTML-страницу для перенаправления запросов на несколько распространенных поисковых систем, и так родился «yubSearch».
Однако вскоре стало ясно, что одних ярлыков поиска недостаточно. За простой командой поиска по списку ярлыков последовали другие команды для печати даты и времени, отображения описаний для каждого ярлыка и сортировки текста. Был добавлен калькулятор, а затем секундомер. Поскольку новые команды развивались из кусочков и фрагментов кода и обходных путей со всего мира, стало почти непросто увидеть, что можно собрать воедино с помощью одного только чистого JavaScript. Речь уже не шла о ярлыках поиска, и поэтому yubSearch стал yub.js.
Разработка велась строго по принципу «зуда», при этом новые функциональные возможности добавлялись тогда и по мере необходимости. С самого начала yub.js стал чем-то вроде собственной среды разработки, и в нем имеются встроенные справочные инструменты для JavaScript (а также других популярных языков сценариев), линтеры и внутренний синтаксис создания команд, которые помогли сделать общую разработку связанные с этим задачи намного проще.
В какой-то момент yub.js зажил собственной жизнью. Хотя это и не совсем полная версия Тьюринга, она стала опасно близка к тому, когда планировалось добавить Элизу в качестве механизма реагирования на диалоговые подсказки...
Yub.js продолжает разрабатываться на чистом JS без использования фреймворков или внешних библиотек. Хотя многие интересные функции могут быть добавлены с использованием серверных сценариев, фреймворков и других мощных инструментов кодирования, основными целями всегда были переносимость и быстродействие — вы можете разместить yub.js практически где угодно: на рабочем столе, в сервер, ChromeBook или даже мобильный телефон, и все будет работать примерно одинаково. Это оказалось настоящим спасением на мобильных устройствах, где даже простой поиск (не говоря уже о чем-то более сложном) иногда может быть невероятно неуклюжим и разочаровывающим в работе — и когда мобильные веб-сайты часто скрывают или унижают базовые функции, такие как поиск.
Однако, как упоминалось выше, код был буквально собран из запасных частей без (до недавнего времени) какой-либо мысли о том, чтобы он выглядел красиво , не говоря уже о стандартизации или эффективности . Тем не менее, все происходит с невероятной скоростью благодаря относительно небольшому размеру файлов и преимуществам работы полностью на стороне клиента.
Может ли быть еще быстрее? Абсолютно! Без сомнения, предстоит проделать большую работу по оптимизации и приведению в порядок существующей (по общему признанию, довольно уродливой) кодовой базы. Заметит ли рядовой пользователь эти улучшения? Труднее сказать — в конце концов, разницу между мгновенным временем отклика и временем отклика, вдвое меньшим, бывает довольно сложно различить. Большинство отдельных задач, которые JavaScript выполняет в любой момент времени, невероятно тривиальны (составление списков, перенаправление на URL-адреса), поэтому скорость редко, если вообще когда-либо, вызывала беспокойство во время фактического использования.
С другой стороны, если вас в принципе беспокоят вещи, которые работают медленнее, чем нужно, возможно, вам стоит взглянуть на следующий раздел.
Поклонники облачной синхронизации : если вы все еще задаетесь вопросом, какой смысл во всем этом, когда вы можете просто использовать Firefox Sync или войти в Chrome со своей учетной записью Google, то yub.js, возможно, не для вас.
Менеджеры закладок . Варианты облачной синхронизации почти для всех основных браузеров теперь повсеместно распространены, и, если это не одна из этих служб, вы всегда можете сделать резервную копию файла закладок на каком-нибудь сервере и покончить с этим. Если это вас устраивает, отлично, но именно разочарование в этих подходах и привело к созданию yub.js.
Сторонники элегантного кода . Как упоминалось ранее, код на данный момент довольно уродлив — не специально, конечно, а потому, что каждая новая функция была добавлена из-за какой-то немедленной насущной необходимости, кладжей и всевозможных неэффективных циклов грубой силы. изобилуют. Надеемся, что со временем это изменится, поскольку код будет (медленно) реорганизован. Но если вас оскорбляет уродливый код, возможно, вам стоит отвести взгляд.
Ненавистники eval : если вы считаете, что eval — это зло при любых обстоятельствах (даже при анализе очищенных математических выражений)... тогда вы можете просто удалить функцию калькулятора из своей версии yub.js.
Искатели bash.js : Yub.js не является портом bash на JavaScript. Если вам интересно, почему yub.js не предлагает команду mount
, или не имеет способа kill
процессы, или modprobe
драйвер мыши... вы, вероятно, находитесь не в том месте (возможно, вы ищете unixkcd). С другой стороны, если вы можете придумать подходящую метафору для mount
, kill
или modprobe
, которая имела бы смысл в командной строке Интернета , я был бы рад услышать ваше мнение! ?
Большое спасибо Джону Акино и всем, кто внес свой вклад в YubNub в период его расцвета, за метафору Интернета как командной строки, которая послужила первоначальным источником вдохновения для yub.js.
Минимизированная одностраничная версия, созданная с помощью Uglifier для Ruby.
Оглавление создано https://github.com/dohliam/tocdown.
Случайный репозиторий GitHub основан на RandomRepo от RyanDavison.
Фоновые обои для различных скинов:
MIT — подробности см. в файле LICENSE.