Yub.js 是一個可擴展的客戶端 Web 命令列,附帶大量有用的搜尋引擎和快捷方式、可重複使用命令以及許多其他隱藏的好東西,例如秒錶和內嵌 YouTube 影片。它還具有靈活的API,因此您可以從任何地方呼叫yub.js 命令:例如,您可以直接連結到命令,或直接從瀏覽器網址列存取它們(只需設定一個指向yub.js 的搜尋快捷方式) API,並免費獲得數百個其他搜尋捷徑)。
整個事情從一開始就被設計為一個單頁獨立 html 文檔,其中包含開箱即用所需的所有內容。它可以在本地安裝並直接從您的電腦運行,無需伺服器或網站託管。從那時起,它已經有了很大的發展,並且開發已被分成單獨的、更易於管理的文件。獨立的 html 頁面版本仍然可用,儘管它現在由 ruby 腳本自動生成,並且有縮小版本和來源版本。只需將頁面直接保存到您的電腦或將其放到您的伺服器上即可開始!
可用搜尋引擎的清單是完全模組化的:您可以透過編輯或取代 mods.js 檔案 (json) 來新增您自己的常用網站清單。建立您自己的新命令很容易——只需使用create
命令(將新命令的名稱作為可選參數)。您可以隨意添加自己的新函數或透過編輯functions.js
來擴展現有函數。哦,預設情況下,正規表示式在所有地方都受支援。
了解 yub.js 工作原理的最佳方法是立即開始嘗試命令。因此,在討論歷史或內部結構等無聊的事情之前,讓我們先看看一些可以立即嘗試的很酷的命令。
list
或ls
取得所有可用搜尋捷徑的列表http://commandlinefu.com/
://commandlinefu.com/ 或ftp://ftp.mozilla.org/
!
在任何裸露 URL 前面可直接訪問該網站,例如:!smh.com.au 可訪問《悉尼先驅晨報》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
:存取隨機的 GitHub 項目watch ninja cat
:觀看搜尋字詞「ninja cat」的 YouTube 影片結果的嵌入式播放列表link flint tigers
:取得指令flint Tigers的永久連結(指令在 flickr 中搜尋以「興趣度」排序的老虎圖片)fspell sometext
: 用 flickr 圖像寫出一些文本ascii sometext
: 在 ascii 藝術中寫出 _sometextwhere gn
:顯示指令gn的關鍵字和預設搜尋地址> am Alice in Wonderland
:直接前往 Amazon.com 上「愛麗絲夢遊仙境」一詞的第一個 Google 搜尋結果> wpde Turing complete
:閱讀德語維基百科中關於「圖靈完備性」的文章cat engadget.com
:顯示 engadget.com 網頁的純文字版本pop bbc gn yn bn
:透過一個指令彈出包含 BBC 新聞、Google 新聞、雅虎新聞和 Bing 新聞的各個選項卡pop gim yim bim -t horses
:彈出新選項卡,顯示在 Google、Yahoo 和 Bing 上對馬進行圖像搜尋的結果注意:要使用pop
命令,您可能需要在瀏覽器的彈出視窗阻止程式中為 yub.js 設定例外
預設搜尋引擎儲存在engines.js 檔案中。其中包含各種通用 Web 快捷方式、搜尋引擎、新聞源和其他有趣的內容,這些內容演示了 yub.js 的基本功能,並且應該讓您了解哪些類型的快捷方式可能對您自己的需求有用。
您可以在engines.js中找到的內容有:主要搜尋引擎(Google、Yahoo、Bing...等)及其各種相關產品(圖像、影片、地圖、新聞、天氣、機器翻譯)、Wikipedia 及其各種維基媒體姊妹網站(維基字典、維基語錄、維基新聞...等)、精選主要新聞機構(BBC、德國之聲、法國24 頻道...等)、主要網路郵件供應商(Gmail、雅虎、Hotmail...等)、幾種流行的腳本語言(Bash、JS、PHP、Python、Ruby)的文檔,以及許多其他有用的網站和工具(Down For Each Or Just Me?、Whois、What Is My Ip?更詳細的指南可以在 wiki 中找到。
使用 yub.js 快捷方式的一個很好的好處是,只要有可能(即在所有支援它的地方),就會預設使用 https。
為了方便起見,所有自訂連結和快捷方式都放在 mods.js 中。該文件完全是可選的,因此您可以根據需要將內容放入或取出。您不需要 mods.js 檔案即可使用 yub.js 。
存儲庫中發現的巨大 mods.js 文件純粹是一個示例,用於演示 yub.js 的各種功能,例如 unicode 正則表達式搜索,以及各種本地搜索站點和其他您可以挑選的有趣內容你自己的用途。 106 Kb / 870+ 條目(截至撰寫本文時)也表明,即使有大量自訂快捷方式,yub.js 也能順利運行,速度沒有任何明顯下降。
範例 mods.js 檔案中不加區別地轉儲的一些範例:
ebin
,或英國亞馬遜的amuk
)enes
,對於西班牙語-英語詞典使用esen
; enko
和koen
代表韓語, enfr
和fren
代表法語等。需要注意的一件事是,一些非常有趣的網站已被排除在engines.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]
替換為您選擇的貨幣的三字母代碼)主題支援以透過skin
命令加載的自訂 CSS 檔案的形式提供。皮膚基本上只是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
並根據您的喜好進行自訂! (並且不要忘記將您的自訂皮膚添加到 wiki 中的皮膚庫中,以便其他人可以享受它們!)
以下是 yub.js 附帶的一些皮膚的截圖:
預設:
終端:
山湖:
射線:
天際線:
沒有CSS :
當然,您不需要安裝 yub.js 即可開始使用它。對於一次性搜索,您可以輕鬆使用 GitHub 上託管的最新版本的 yub.js。一切都完全在客戶端完成,因此您的任何查詢都不會透過網路發送。
您甚至可以使用 API 將 GitHub 版本設為瀏覽器的預設搜尋。但是,如果您使用 API,您輸入的任何命令都將可見(例如,在 GitHub 伺服器日誌中),因此您可能更願意設定 yub.js 的本機版本並完全離線運行(或在您自己的網站上) )。
wiki 中有關於如何將 yub.js 設定為預設搜尋引擎的詳細指南。您可以找到有關如何為 Chrome/Chromium 和 Firefox 設定 yub.js 的逐步說明(如果您使用其他瀏覽器並且能夠安裝 yub.js,請考慮將您執行的步驟新增至指南) 。
安裝 yub.js 時要考慮的一件事是要將其設定為關鍵字搜尋還是將其用作預設搜尋引擎。將其設為預設值的好處是,它基本上使瀏覽器的 URL 欄本身變成了 Web 命令列。
yub.js 最有用的功能之一是其易於使用的 API,它在筆記型電腦上的運作效果與在伺服器上的運作效果一樣好。只需將連結、書籤或關鍵字搜尋指向 yub.js URL 並添加?
加上您的命令或搜尋字詞即可直接轉到結果。
範例1:
http://example.com/yub
http://example.com/yub?weather tokyo
範例2:
file:///home/user/yub/index.html?rand site
您可以將 yub.js 嵌入到任何網頁上,並獲得如下所示的功能性 Web 命令列:
只需複製以下程式碼並將其包含在頁面的任意位置即可:
<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 檔案真是太棒了 - 可以在 wiki 中共享這些文件的鏈接,不過如果列表足夠大,將來也可以使用單獨的存儲庫。同時,如果您有想要分享的 mods.js 文件,請告訴我 - 特別是如果它是圍繞特定主題組織的(例如,社交媒體網站、瑞典報紙、研究資料庫、歷史學家或工具的集合)海洋生物學家...等)。
一些仍在開發中的計劃功能:
watch
,但用於音樂)如果您想為添加任何這些功能(或其他我沒有想到的功能)做出貢獻,請隨時提交拉取請求。
很久以前(確切地說是 2005 年),一個名為 YubNub 的開創性網站推出,允許用戶為各種 Web 服務編寫自己的命令和快捷方式。使用類似於 bash 的簡短命令訪問網站的想法非常引人注目,而且實際上令人上癮,並很快催生了諸如split和gimyim 之類的各種創意工具。與許多其他人一起,我創建了一堆命令並大量使用網站一段時間。
然而,有一件事永遠沒有道理——為什麼有人想要過濾他們透過(另一個)第三方網站所做的每一個搜尋?無論如何,一旦 Firefox 的關鍵字搜尋功能廣為人知,使用 YubNub 快捷方式的吸引力就開始減弱——為最常見的搜尋設定本地 Firefox 關鍵字然後使用這些關鍵字會更容易。因此,一個包含數十個以前的YubNub 命令(以搜尋關鍵字的形式)的書籤檔案從一台計算機傳輸到另一台計算機,存活了近十年,然後才發現該系統也非常笨重、緩慢且不切實際(例如,從另一台計算機很痛苦,並且在計算機之間保持列表更新也不令人愉快)。更糟的是,這種方法也錯過了 YubNub 提供的許多令人興奮的非搜尋命令功能。
九年後,對 YubNub 的訪問顯示該服務仍在運行,並且根據維基百科,截至 2008 年甚至擁有超過 22,000 個用戶貢獻的命令。 查看命令列表會得出令人沮喪的結論:曾經很棒的服務 查看命令列表。被成千上萬的垃圾郵件條目淹沒,扼殺了任何剩餘的社區意識(社交命令行),而這曾經是該網站最可愛的東西之一。
更令人失望的是,許多最酷的命令(例如split 、 gimyim )甚至不再運作。當然,這其實並不令人驚訝——自2005 年以來,網路架構已經發生了很大變化。事情,另一方面此外,正如gimyim所證明的那樣,因為谷歌和雅虎——以及幾乎所有其他主要網站——現在都積極阻止嘗試從外部網站加載其內容)。真糟糕。
Yub.js 最初是為了在一個完全客戶端應用程式中恢復舊 YubNub 命令列的一些功能,任何人都可以調整或調整以滿足他們的需求,然後在本地電腦上運行 - 或者刪除進入雲端或私有伺服器並從任何地方訪問。
雖然多年來我一直在閒逛這個想法,但它始終只是一個白日夢,因為我甚至不確定是否可以用 JavaScript 完成我想做的大部分事情。最終,我創建了一個小 html 頁面,將查詢重定向到一些常見的搜尋引擎,「yubSearch」就這樣誕生了。
然而,很快我們就發現僅靠搜尋快捷方式是不夠的。搜尋快捷方式清單的簡單命令後面跟著其他命令,用於列印日期和時間、顯示每個快捷方式的說明以及對文字進行排序。新增了計算器,然後新增了秒錶。隨著新指令從各地的程式碼片段和變通方法中演變而來,了解僅用純 JavaScript 可以拼湊出什麼內容幾乎成為一個挑戰。它不再只是搜尋快捷方式——因此 yubSearch 變成了 yub.js。
開發工作是在嚴格的抓緊基礎上進行的,並根據實際需要添加新功能。從很早起,yub.js 就成為了自己的開發環境,並且有內建的 JavaScript 參考工具(以及其他流行的腳本語言)、linter 和內部命令創建語法,有助於共同開發- 相關任務變得更加容易。
在某個時刻,yub.js 獲得了自己的生命。雖然圖靈並不完全完整,但當考慮透過補丁添加 Eliza 作為回應對話提示的引擎時,它變得危險地接近了…
Yub.js 繼續使用純 JS 開發,不使用框架或外部函式庫。儘管可以使用伺服器端腳本、框架和其他高超的重型編碼大砲來添加許多有趣的功能,但主要目標始終是可移植性和響應能力——您幾乎可以將 yub.js 放在任何地方:桌面、伺服器、ChromeBook、甚至手機,其運作方式幾乎完全相同。事實證明,這在行動裝置上是一個特別的救星,在行動裝置上,即使是簡單的搜尋(更不用說任何更複雜的搜尋)有時也會變得非常笨拙和令人沮喪,而且行動網站經常隱藏或簡化搜尋等基本功能。
然而,如上所述,程式碼實際上是用備件拼湊而成的,(直到最近)沒有考慮過使其看起來漂亮,更不用說標準化或高效了。儘管如此,由於檔案大小相對較小以及完全在客戶端運行的好處,一切都以令人難以置信的速度進行。
還能更快嗎?絕對地!毫無疑問,仍有大量工作需要優化和美化現有的(誠然相當難看)程式碼庫。普通用戶會注意到這些改進嗎?這很難說——畢竟,瞬時反應時間和一半速度的反應時間之間的差異很難辨別。 JavaScript 在任何給定時間處理的大多數單獨任務都非常瑣碎(製作清單、重定向到 URL),因此在實際使用過程中速度很少成為問題。
另一方面,如果比實際需要慢的事情原則上困擾您,您可能需要看看下一節。
雲端同步愛好者:如果您仍然想知道這一切的意義何在,而您只需使用 Firefox Sync 或使用 Google 帳戶登入 Chrome,那麼 yub.js 可能不適合您。
書籤管理器:幾乎所有主要瀏覽器的雲端同步選項現在無處不在,如果沒有這些服務之一,您始終可以將書籤檔案備份到某個伺服器上並完成它。如果這對你有用,那就太好了——但是對這些方法的挫敗感才是導致 yub.js 誕生的首要原因。
追求優雅程式碼的人:如前所述,目前的程式碼相當醜陋——當然不是故意的,而是因為每個新功能都是由於一些緊迫的需求、拼湊和各種強力低效循環而添加的盛產。隨著程式碼(緩慢)重構,這種情況有望隨著時間的推移而改變。但如果醜陋的程式碼冒犯了你,你可能想避開你的視線。
eval 的仇恨者:如果您認為 eval 在任何情況下都是邪惡的(甚至解析經過淨化的數學表達式)...那麼您可能只想從您的 yub.js 版本中刪除計算器函數。
bash.js 的探索者:Yub.js 不是 bash 到 JavaScript 的連接埠。如果您想知道為什麼 yub.js 不提供mount
命令,或者沒有辦法kill
進程,或者modprobe
您的滑鼠驅動程式...您可能來錯地方了(也許您正在尋找 unixkcd)。另一方面,如果您能想到一個在Web命令列上有意義的mount
、 kill
或modprobe
適當的隱喻,我很樂意聽取您的意見! ?
非常感謝 Jon Aquino 以及在 YubNub 鼎盛時期做出貢獻的每個人,感謝 Web 即命令列的比喻,這是 yub.js 的最初靈感。
使用 Uglifier for Ruby 製作的縮小單頁版本。
由 https://github.com/dohliam/tocdown 產生的目錄。
隨機 GitHub 儲存庫基於 RyanDavison 的 RandomRepo。
各種皮膚的背景壁紙:
麻省理工學院—有關詳細信息,請參閱許可證文件。