Консольный английский. Урок 1. "Награбить" английских фраз

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

Сайт этот — audio-class.ru/. Он помогает быстро освоить или подтянуть разговорный английский. Я туда зашел как раз с этой целью: понадобилось освежить речевые навыки. Чтобы не выглядеть наглым пиратом и неблагодарной скотиной, искренне хочу поспособствовать посещаемости этого отличного ресурса, который его авторы развивают, как говорится, не за страх, а за совесть. Отличный контент, с юмором всё сделано, доброжелательно и без всякой рекламы. Спасибо, чуваки, энергии вам в вашем благородном деле!

Теперь о шкурном интересе. Одной из самых важных фишек вышеупомянутого сайта является сборник озвученных фраз, запоминание которых на слух и является, как известно, залогом успеха в изучении языка. Всё там прекрасно работает: небольшие аудиофрагменты звучат прямо с веб-страницы, только успевай глазами соответствующий текст читать. Всего 8 страниц по 50 фраз, итого 400. Но есть недостаток. Память у меня пока еще довольно цепкая и при повторном прослушивании я поймал себя на том, что помню не саму фразу, а ее положение на странице. А хотелось бы рандомно… Вот эта мысль и толкнула на небольшое «преступление»: решил выкачать все аудиофрагменты и прослушивать локально.



( Читать дальше )

Вытащить базы данных из устройства с Android

Если подключить рутованный аппарат с Андроидом к ПК USB-шнуром, то с помощью штатной утилиты из комплекта Android SDK можно слить базу контактов такой командой:

$ adb pull /data/data/com.android.providers.contacts/databases/contacts2.db ; sqlite3 -batch <<EOF contacts2.db <CR> .header on <CR> .mode tabs <CR> select * from data; <CR> EOF


Чтобы вытащить все СМС можно использовать

adb pull /data/data/com.android.providers.telephony/databases/mmssms.db ; sqlite3 -batch <<EOF contacts2.db <CR> .header on <CR> .mode tabs <CR> select * from sms; <CR> EOF


Источник.

Графический интерфейс в bash скриптах

Сегодня приведу небольшой пример того, как можно сделать графический интерфейс выбора из списка с помощью bash и т.н. zenity (gtk).

Окно выбора представляет собой список из 2х организаций, например (названия замазаны квадратиками)



Если нажать «Отмена» скрипт просто прекратит работу, если нажать «ОК» выбрав филиал, или просто 2 раза щелкнуть на названии филиала — сработает та или иная часть скрипта.

Сам скрипт:

( Читать дальше )

10 случайных обоев из командной строки

Удивительно, до чего иной раз додумываются гении консоли:

for i in {1..10}; do wget $(wget -O- -U "" "http://images.google.com/images?imgsz=xxlarge&hl=en&q=wallpaper&sa=N&start=$(($RANDOM%700+100))&ndsp=10" --quiet | grep -oe 'http://[^"]*\.jpg' | head -1);done


А почему бы и не испытать этот трюк? Скопипастить строку в консоль и дождаться результата закачки при хорошем соединении займет не более 3 минут. Вот такой получился «улов».



Остальное под катом.


( Читать дальше )

Qr-код из текста

Сгенерировать можно так:

$ qrencode -o contact.png ?`cat contact.vcs`?


vcs — текстовой формат для обмена визитными карточками.

Рекурсивное добавление расширения к именам файлов.

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

Рекурсивно в bash можно добавить расширение так:

find . -type f -not -name "*.doc" -exec mv "{}" "{}".doc \;


Источник

Список каталогов и файлов в виде дерева

Выводится на консоль такой остроумной командой:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'




Источник.

Вывести содержимое веб-ресурса на экран

Понадобилось скачать исходник на Java из Сети, причем в консольном режиме. Решение простое: команда

wget -O - http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/src/Timeout.java


выведет поток не в файл, а на экран. Только вот вспомогательный аутпут wget'а всё дело портит:

$ wget -O - http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/src/Timeout.java
--2012-05-03 18:54:32--  http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/src/Timeout.java
Resolving docs.oracle.com... 77.109.171.186, 77.109.171.152
Connecting to docs.oracle.com|77.109.171.186|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2514 (2.5K) [text/plain]
Saving to: `STDOUT'

 0% [                                       ] 0           --.-K/s              
/* 
 * "@(#)Timeout.java	1.1	02/11/01 SMI"
 * 
 * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
 * и т.д.


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

$ wget -O - http://docs.oracle.com/javase/jndi/tutorial/ldap/connect/src/Timeout.java  2>/dev/null
/* 
 * "@(#)Timeout.java	1.1	02/11/01 SMI"
 * 
 * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * Sun grants you ("Licensee") a non-exclusive, royalty free,
 * license to use, modify and redistribute this software in source and
 * binary code form, provided that i) this copyright notice and license


Юниксвей, фигли.

Замена пробелов на нижние подчеркивания в именах файлов

for file in *; do echo mv "${file}" "${file// /_}"; done


Не забудьте убрать слово echo, которое предохраняет от реального переименования на период отладки

Или даже так:

for file in "* *"; do mv "${file}" "${file// /_}"; done


Ох уж эти пробелы в именах файлов…

Отсюда.

Автоматическая разметка жесткого диска

Прикольно: создается единственный раздел на диске, причем это работает даже если диск уже размечен.

$ echo -e "o\nn\np\n1\n\n\nw\n" | fdisk /dev/sdX


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