Yub.js é uma linha de comando da web extensível do lado do cliente que vem com vários mecanismos de pesquisa e atalhos úteis, comandos reutilizáveis e muitos outros recursos ocultos, como cronômetros e vídeos embutidos do YouTube. Ele também possui uma API flexível para que você possa chamar comandos yub.js de qualquer lugar: por exemplo, você pode vincular diretamente aos comandos ou acessá-los diretamente na barra de endereço do navegador (basta configurar um único atalho de pesquisa apontando para yub.js API e obtenha centenas de outros atalhos de pesquisa gratuitamente).
A coisa toda foi projetada desde o início para ser um documento HTML independente de uma única página contendo tudo o que é necessário para funcionar imediatamente. Ele pode ser instalado localmente e executado diretamente no seu computador, sem a necessidade de um servidor ou hospedagem na web. Desde então, cresceu consideravelmente e o desenvolvimento foi dividido em arquivos separados e mais gerenciáveis. A versão independente da página HTML ainda está disponível, embora agora seja gerada automaticamente por um script Ruby e venha em versões minificadas e de origem. Basta salvar a página diretamente em seu computador ou soltá-la em seu servidor e você estará pronto para começar!
A lista de mecanismos de pesquisa disponíveis é completamente modular: você pode inserir sua própria lista de sites comumente visitados editando ou substituindo o arquivo mods.js (json). Criar seus próprios novos comandos é fácil - basta usar o comando create
(com o nome do novo comando como argumento opcional). Sinta-se à vontade para adicionar suas próprias novas funções ou estender as existentes editando functions.js
. Ah, e expressões regulares são suportadas em todos os lugares por padrão.
A melhor maneira de entender como o yub.js funciona é começar a tentar os comandos. Portanto, antes de entrar em coisas chatas como história ou detalhes internos, vamos dar uma olhada em alguns dos comandos interessantes que você pode experimentar imediatamente.
list
ou ls
http://commandlinefu.com/
ou ftp://ftp.mozilla.org/
!
na frente de qualquer URL simples para ir diretamente ao site, por exemplo: !smh.com.au para ir ao Sydney Morning Heraldg [searchterm]
para uma pesquisa simples do Google. Ou você pode preferir usar y
, b
, ix
ou sp
em vez dissohelp
ou man
(opcionalmente incluindo o comando com o qual você deseja ajuda como argumento, por exemplo, help shuffle
)calc 857*2^3
: resolva fórmulas matemáticas simplescalc (25+2)==(28-1)
: teste de equivalênciacalc ~32.56
: números redondosrand 550
: retorna um número aleatório entre 0-550rand site
: vá para um site aleatóriorand img
: mostra uma imagem aleatóriarand git
: visite um projeto aleatório do GitHubwatch ninja cat
: assista a uma lista de reprodução incorporada de resultados de vídeo do YouTube para o termo de pesquisa "gato ninja"link flint tigers
: obtenha um link permanente para o comando flint tigres (que pesquisa no flickr por fotos de tigres classificados por "interesse")fspell sometext
: escreva algum texto com imagens do flickrascii sometext
: escreva _sometext em arte asciiwhere gn
: mostra a palavra-chave e os endereços de pesquisa padrão para o comando gn> am Alice in Wonderland
: vá diretamente para o primeiro resultado de pesquisa do Google para o termo "Alice no País das Maravilhas" na Amazon.com> wpde Turing complete
: leia o artigo sobre "Turing completeness" na Wikipedia alemãcat engadget.com
: exibe uma versão somente texto da página da web em engadget.compop bbc gn yn bn
: abre guias individuais com BBC News, Google News, Yahoo News e Bing News, tudo em um comandopop gim yim bim -t horses
: abre novas guias mostrando resultados de uma pesquisa de imagens de cavalos no Google, Yahoo e Bing Nota: para usar o comando pop
você provavelmente precisará configurar uma exceção no bloqueador de pop-up do seu navegador para yub.js
Os mecanismos de pesquisa padrão são armazenados no arquivo engines.js. Ele contém uma grande variedade de atalhos da web de uso geral, mecanismos de pesquisa, fontes de notícias e outras coisas interessantes que demonstram os recursos básicos do yub.js e devem dar uma ideia de quais tipos de atalhos podem ser úteis para suas próprias necessidades.
As coisas que você pode esperar encontrar em engines.js são: principais mecanismos de busca (Google, Yahoo, Bing... etc) e seus vários produtos associados (imagens, vídeo, mapas, notícias, previsão do tempo, tradução automática), Wikipedia e seus vários Sites irmãos da Wikimedia (Wiktionary, Wikiquote, Wikinews... etc), uma seleção das principais organizações de notícias (BBC, Deutsche Welle, France 24... etc), principais provedores de webmail (Gmail, Yahoo, Hotmail... etc), documentação para diversas linguagens de script populares (Bash, JS, PHP, Python, Ruby) e vários outros sites e ferramentas úteis (Down For Everyone Or Just Me?, Whois, What Is My Ip?... etc). Um guia mais detalhado pode ser encontrado no wiki.
Um bom benefício de usar atalhos yub.js é que https é usado por padrão sempre que possível (ou seja, em todos os lugares onde há suporte).
Todos os links e atalhos personalizados vão para mods.js por conveniência. Este arquivo é totalmente opcional, então você pode inserir e retirar coisas dele como desejar. Você não precisa do arquivo mods.js para usar yub.js .
O gigantesco arquivo mods.js encontrado no repositório é apenas um exemplo para fins de demonstração de vários recursos do yub.js, como pesquisas regex unicode, bem como vários sites de pesquisa local e outras coisas interessantes que você pode escolher seus próprios usos. Com 106 Kb/870+ entradas (no momento em que este livro foi escrito), ele também demonstra que, mesmo com uma lista enorme de atalhos personalizados, o yub.js funciona perfeitamente, sem qualquer diminuição perceptível na velocidade.
Alguns exemplos de coisas que foram descartadas indiscriminadamente no arquivo mods.js de amostra:
ebin
para eBay India ou amuk
para Amazon UK)enes
para o dicitonário inglês-espanhol e esen
para espanhol-inglês; enko
e koen
para coreano, enfr
e fren
para francês, etc.Uma coisa a notar é que alguns sites realmente interessantes foram deixados de fora do engines.js e até mesmo do mods.js para manter os atalhos padrão tão úteis quanto possível. Mas não tenha medo, você ainda pode adicioná-los ao seu arquivo mods.js! Aqui estão algumas coisas que você pode considerar adicionar para personalizar mods.js:
cl
ou kj
para o local desejado e soltá-lo em mods.jshttp://www.xe.com/ucc/convert.cgi?Amount=%s&From=[CURRENCY1]&To=[CURRENCY2]
(substitua [CURRENCY1]
e [CURRENCY2]
pelos códigos de três letras das moedas de sua escolha ) O suporte a temas está disponível na forma de arquivos CSS personalizados carregados por meio do comando skin
. Skins são basicamente arquivos css (localizados na pasta /css
) e podem ser carregados digitando o comando skin
e o nome do skin (não há necessidade de adicionar a extensão .css
).
Para retornar ao skin padrão, basta digitar skin default
. Para remover todo o CSS, use skin none
.
Atualmente, os skins não persistem nas sessões do yub (isso exigiria a configuração de um cookie, o que conseguimos evitar até agora), mas você pode alterar o link/marcador da sua instância do yub.js para algo como https://dohliam.github.io/yub/?skin%20terminal
para sempre iniciar o yub.js com um skin específico carregado. Como alternativa, depois de decidir sobre um skin que deseja tornar padrão para sua instalação local, basta renomeá-lo para default.css
(você pode renomear o arquivo default.css
original para old.css
ou similar se não quiser sobrescrever isto). Seu novo arquivo será carregado como padrão na próxima vez que você abrir o yub.js.
Para criar um novo skin, basta copiar um dos arquivos de skin existentes para um novo arquivo, por exemplo, mynewskin.css
e personalizar como desejar! (E não se esqueça de adicionar suas skins personalizadas à galeria de skins no wiki para que outras pessoas possam aproveitá-las!)
Aqui estão algumas capturas de tela dos skins que vêm com o yub.js:
padrão :
terminal :
lago da montanha :
raios :
horizonte :
nocss :
Claro que você não precisa instalar o yub.js para começar a usá-lo. Para pesquisas únicas, você pode usar facilmente a versão mais recente do yub.js hospedada aqui no GitHub. Tudo é feito inteiramente do lado do cliente, portanto nenhuma de suas consultas é enviada pela rede.
Você pode até usar a API para tornar a versão do GitHub a pesquisa padrão do seu navegador. No entanto, se você usar a API, todos os comandos inseridos ficarão visíveis (por exemplo, nos logs do servidor GitHub), então você pode preferir configurar uma versão local do yub.js e executá-lo totalmente offline (ou em seu próprio site ).
Há um guia detalhado no wiki sobre como tornar o yub.js seu mecanismo de pesquisa padrão. Você pode encontrar instruções passo a passo sobre como configurar o yub.js para Chrome/Chromium e Firefox (se você usa um navegador diferente e consegue instalar o yub.js, considere adicionar as etapas executadas ao guia) .
Uma coisa a considerar ao instalar o yub.js é se você deseja configurá-lo como uma pesquisa por palavra-chave ou usá-lo como seu mecanismo de pesquisa padrão. A vantagem de configurá-lo como padrão é que basicamente transforma a barra de URL do seu navegador em uma linha de comando da web.
Um dos recursos mais úteis do yub.js é sua API fácil de usar, que funciona tão bem em um laptop quanto em um servidor. Basta apontar um link, marcador ou pesquisa por palavra-chave para o URL do yub.js e adicionar ?
além de seus comandos ou termos de pesquisa para ir diretamente ao resultado.
Exemplo 1:
http://example.com/yub
http://example.com/yub?weather tokyo
Exemplo 2:
file:///home/user/yub/index.html?rand site
Você pode incorporar yub.js em qualquer página da web e obter uma linha de comando da web funcional semelhante a esta:
Basta copiar o código a seguir e incluí-lo em qualquer lugar da página:
<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="" />
Provavelmente existe uma maneira mais elegante de fazer isso, mas depois de alguns testes, essa parecia ser a única maneira que funciona tanto no Firefox quanto no Chrome. Sinta-se à vontade para experimentar e abrir uma solicitação pull se encontrar algo melhor!
Existem muitos recursos que ainda não foram implementados. Tanto quanto possível, as novas funcionalidades planejadas e os recursos solicitados estão sendo rastreados no rastreador de problemas. Se você tiver uma ideia, vá em frente e adicione-a (ou bifurque o projeto e faça uma solicitação pull)!
Seria incrível ver os arquivos mods.js personalizados de todos - links para eles podem ser compartilhados no wiki, embora um repositório separado seja outra possibilidade no futuro se a lista ficar grande o suficiente. Enquanto isso, deixe-me saber se você tem um arquivo mods.js que gostaria de compartilhar - especialmente se estiver organizado em torno de um tema específico (por exemplo, coleções de sites de mídia social, jornais suecos, bancos de dados de pesquisa, ferramentas para historiadores ou biólogos marinhos... etc).
Alguns recursos planejados que ainda estão em andamento:
watch
, mas para música)Se você quiser contribuir para adicionar algum desses recursos (ou outros que não tenha pensado), sinta-se à vontade para enviar uma solicitação pull.
Há muito tempo (2005 para ser exato), foi lançado um site inovador chamado YubNub que permitia aos usuários escrever seus próprios comandos e atalhos para vários serviços da web. A ideia de acessar sites com comandos curtos do tipo bash era bastante atraente e realmente viciante, e rapidamente levou a todos os tipos de ferramentas criativas como split e gimyim . Junto com muitos outros, criei vários comandos e usei bastante o site por um tempo.
No entanto, havia uma coisa que nunca fazia sentido: por que alguém iria querer filtrar todas as pesquisas feitas por meio de um (outro) site de terceiros? De qualquer forma, assim que a funcionalidade de pesquisa por palavras-chave do Firefox se tornou amplamente conhecida, o fascínio de usar os atalhos do YubNub começou a desaparecer – era mais fácil apenas configurar palavras-chave locais do Firefox para as pesquisas mais comuns e depois usá-las. Assim, um arquivo de favoritos contendo dezenas de comandos antigos do YubNub na forma de palavras-chave de pesquisa viajou de computador para computador, sobrevivendo por quase uma década antes de se tornar óbvio que esse sistema também era muito desajeitado, lento e impraticável (por exemplo, acesso de outro computador era uma dor, e manter a lista atualizada entre computadores também não era agradável). O que foi pior, esse método também perdeu grande parte da emocionante funcionalidade de comando sem pesquisa que o YubNub oferecia.
Nove anos depois, uma visita ao YubNub revelou que o serviço ainda está em execução e, de acordo com a Wikipedia, ostentava até mais de 22.000 comandos contribuídos por usuários... em 2008. Observar a lista de comandos leva à conclusão desanimadora de que o outrora um serviço incrível foi inundado por milhares e milhares de entradas de spam, sufocando qualquer senso de comunidade remanescente (a linha de comando social ) que já foi uma das coisas mais cativantes do site.
Ainda mais decepcionante, muitos dos comandos mais legais (por exemplo, split , gimyim ) não são mais funcionais. Claro, isso não deveria ser tão surpreendente - a arquitetura da web mudou muito desde 2005. (No caso da divisão, tanto porque carregar sites em frames deixou de ser uma coisa normal e aceitável de se fazer, e também, como demonstrado por gimyim , porque tanto o Google quanto o Yahoo - bem como praticamente todos os outros sites importantes - agora desencorajam ativamente as tentativas de carregar seu conteúdo de sites externos). Desapontamento.
Yub.js começou como uma tentativa de recuperar algumas das funcionalidades da antiga linha de comando YubNub em um aplicativo inteiramente do lado do cliente que qualquer um poderia ajustar ou ajustar para atender às suas necessidades e depois executar em sua máquina local - ou descartar na nuvem ou em um servidor privado e acesse de qualquer lugar.
Embora eu estivesse pensando nessa ideia há anos, ela sempre foi uma espécie de sonho impossível, já que eu nem tinha certeza se era possível fazer a maior parte das coisas que eu queria fazer com JavaScript. Eventualmente, criei uma pequena página html para redirecionar consultas para alguns mecanismos de pesquisa comuns e o "yubSearch" nasceu.
No entanto, logo ficou claro que os atalhos de pesquisa por si só não eram suficientes. Um comando simples para pesquisar na lista de atalhos foi seguido por outros comandos para imprimir a data e hora, mostrar descrições de cada atalho e classificar o texto. Uma calculadora foi adicionada e depois um cronômetro. À medida que novos comandos evoluíram a partir de pedaços de código e soluções alternativas de todos os lugares, tornou-se quase um desafio ver o que poderia ser remendado apenas com JavaScript puro. Não se tratava mais apenas de atalhos de pesquisa - e assim o yubSearch se tornou o yub.js.
O desenvolvimento prosseguiu de forma rigorosa, com novas funcionalidades sendo adicionadas quando e quando realmente necessário. Desde muito cedo, yub.js se tornou algo com seu próprio ambiente de desenvolvimento, e existem ferramentas de referência integradas para JavaScript (bem como outras linguagens de script populares), linters e uma sintaxe de criação de comandos internos que ajudaram a tornar o desenvolvimento comum. tarefas relacionadas muito mais fáceis.
Em algum momento, yub.js ganhou vida própria. Embora não seja exatamente Turing completo, ficou perigosamente próximo quando um patch foi considerado para adicionar Eliza como um mecanismo para responder a prompts de conversação...
Yub.js continua sendo desenvolvido em JS puro, sem o uso de frameworks ou bibliotecas externas. Embora muitas funções interessantes possam ser adicionadas usando scripts do lado do servidor, estruturas e outras peças de artilharia de codificação pesada, os objetivos principais sempre foram portabilidade e capacidade de resposta - você pode colocar o yub.js praticamente em qualquer lugar: um desktop, um servidor, um ChromeBook, até mesmo um telefone celular, e funcionará exatamente da mesma maneira. Isso provou ser um salva-vidas específico em dispositivos móveis, onde até mesmo pesquisas simples (sem falar em qualquer coisa mais sofisticada) às vezes podem ser incrivelmente desajeitadas e frustrantes de trabalhar - e quando sites móveis muitas vezes ocultam ou simplificam recursos básicos como pesquisa.
Como mencionado acima, no entanto, o código foi literalmente montado a partir de peças sobressalentes, sem (até muito recentemente) qualquer pensamento em torná-lo bonito , muito menos padronizado ou eficiente . No entanto, tudo funciona a uma velocidade incrível, graças aos tamanhos de arquivo relativamente pequenos e aos benefícios de rodar inteiramente no lado do cliente.
Poderia ser ainda mais rápido? Absolutamente! Sem dúvida, ainda há muito trabalho a ser feito para otimizar e embelezar a base de código existente (reconhecidamente bastante feia). O usuário médio notará essas melhorias? Isso é mais difícil de dizer – afinal, a diferença entre tempos de resposta instantâneos e aqueles que têm metade dessa velocidade pode ser muito difícil de discernir. A maioria das tarefas individuais que o JavaScript realiza em um determinado momento são incrivelmente triviais (criar listas, redirecionar para URLs), portanto, a velocidade raramente ou nunca foi uma preocupação durante o uso real.
Por outro lado, se as coisas que são mais lentas do que o necessário o incomodam em princípio , você pode dar uma olhada na próxima seção.
Aficionados pela sincronização na nuvem : Se você ainda está se perguntando qual é o sentido de tudo isso quando você pode simplesmente usar o Firefox Sync ou fazer login no Chrome com sua Conta do Google, então yub.js pode não ser para você.
Gerenciadores de favoritos : as opções de sincronização em nuvem para quase todos os principais navegadores agora são onipresentes e, se não for um desses serviços, você sempre pode fazer backup de seu arquivo de favoritos em um servidor em algum lugar e pronto. Se isso funcionar para você, ótimo - mas a frustração com essas abordagens foi o que levou ao yub.js em primeiro lugar.
Defensores do código elegante : como mencionado antes, o código está muito feio no momento - não de propósito, é claro, mas já que cada novo recurso foi adicionado devido a alguma necessidade urgente imediata, erros e todos os tipos de loops ineficientes de força bruta abundam. Esperançosamente, isso mudará com o tempo, à medida que o código for refatorado (lentamente). Mas se um código feio o ofende, você pode querer desviar os olhos.
Odiadores de eval : Se você acredita que eval é mau em qualquer circunstância (até mesmo analisando expressões matemáticas higienizadas)... então você pode querer apenas remover a função de calculadora da sua versão do yub.js.
Buscadores de bash.js : Yub.js não é uma porta do bash para JavaScript. Se você está se perguntando por que o yub.js não oferece um comando mount
, ou tem uma maneira de kill
processos, ou modprobe
o driver do mouse ... você provavelmente está no lugar errado (talvez esteja procurando por unixkcd). Por outro lado, se você puder pensar em uma metáfora apropriada para mount
, kill
ou modprobe
que faça sentido em uma linha de comando da web , adoraria ouvir sua opinião! ?
Muito obrigado a Jon Aquino e a todos que contribuíram para o YubNub em seu apogeu, pela metáfora da web como linha de comando que foi a inspiração original para o yub.js.
Versão reduzida de página única feita usando Ugliifier for Ruby.
Índice gerado por https://github.com/dohliam/tocdown.
O repositório aleatório do GitHub é baseado no RandomRepo de RyanDavison.
Papéis de parede de fundo para vários skins:
MIT - consulte o arquivo LICENSE para obter detalhes.