Yota Samsung SWC-U200 in Ubuntu Linux

Установка предельно проста (проводил на 11.10):

git clone https://github.com/ago/madwimax.git
cd madwimax
autoreconf --install
sudo apt-get install libusb-1.0-0-dev liblua5.1-0-dev asciidoc docbook2x
./configure
make
sudo make install

Втыкаем модем, проверяем:

sudo ifconfig
#должен появиться wimax0 или по типу того

Заходим на Yota.ru, жмём Личный кабинет, там “привязать устройство” и всё! Покупка-продажа модема весьма проста, не надо никаких симок ни кодов. Нужен просто модем. Больше ничего. Никаких договоров. Удобно. Единственное – при привязке спрашивают как зовут, где живёшь, №паспорта. В остальном хорошо! Посмотрим, что за качество связи у Yota, на что жалуются чуть более чем 100% моих друзей 🙂

Speedtest:
speedtest yota

Google переворачивается при наборе “do a barrel roll”

Попробуйте перейти на главную страницу Google, в строке поиска ввести “do a barrel roll” и нажать enter. Вы увидите следующее:

Представленный очередной прикол от Google, демонстрирующий всю мощь CSS3, был создан software-инженером Google для развлечения пользователей. Прикол, как говорит Google, не работает в старых браузерах, не поддерживающих HTML5.

В twitter поступает много сообщений от пользователей, открывших для себя прикол “Do a barrel roll“:

> Google search “Do A Barrel Roll.” Right now.

> GOOGLE TRICKS: →type in “do a barrel roll” and hit enter, the screen should spin. (:

> Quick! Do a backflip! Actually, do a barrel roll!

Также при наборе слова “tilt” Google наклоняется!

При наборе “zerg rush” поисковую выдачу поедают буквы OOO из Gooooogle.

Весь список “пасхальных яиц” Google на Wiki:

List of Google’s hoaxes and easter eggs

How to make Wikipedia work #wikipediablackout

The Wikipedia community has blacked out the English version of Wikipedia for 24 hours to raise awareness about legislation being proposed by the U.S. Congress — the Stop Online Piracy Act (SOPA) in the U.S. House of Representatives, and the PROTECT IP Act (PIPA) in the U.S. Senate — and to encourage readers to speak out against it.

What should we do if we want knowledge? Just do the following to view Wikipedia normally:

  1. Open the desired link
  2. Wait some time (about a second or two, depends on your Internet connection speed)
  3. Just press the ESCAPE button to avoid redirect to the black page

[youtube=http://www.youtube.com/watch?v=1zmwL-09aVM&w=320&h=240]

[youtube=http://www.youtube.com/watch?v=C73iKkkreWs&w=320&h=240]

The English Wikipedia will be accessible on mobile devices and smart phones. Because the protest message is powered by JavaScript, it’s also possible to view Wikipedia by completely disabling JavaScript in your browser.

Enjoy Wikipedia and support the blackout!
I support #wikipediablackout! Show your support here http://tinyurl.com/7vq4o8g

Thanks

How do geeks shop? (Inspired by Stanford DB-Class)

Recently online shopping has become especially popular, superseding and leaving far behind its competitors who work in usual shops. It’s quite convenient, online shops are open 24h without breaks and days-off!

Sometimes I buy goods from StrawberryNET.Com for my wife and myself. Unfortunately, there is a huge problem with the seller’s website. Its interface doesn’t provide customers the ability to sort goods by price, discounts, etc. I don’t know if it is made for special reason or it’s just some human laziness, but it’s none of my business. The geek can get everything he wants from the site.

This year I am taking Stanford’s online class launched this fall by Jennifer Widom: Introduction to Databases. I like the course very much and the author of the course as well! Inspired by db-class I implemented the website’s missing sort feature and was able to sort goods as much as I wished.

To implement the feature I used SQL and sed on my Ubuntu Linux 11.10 oneiric ocelot. First of all I parsed the site’s data and received it in this form (data.txt file):

Ermenegildo Zegna - Z Zegna
Z Zegna Deodorant Stick 75g/2.5oz
Price: US$ 18.50 - (Save 8%)
Giorgio Armani - Acqua Di Gio
Acqua Di Gio Deodorant Stick 75g
Price: US$ 29.00
Joop - Joop Thrill
Joop Thrill For Him Deodorant Stick 70g
Price: US$ 13.00 - (Save 50%)
Paco Rabanne - Paco Rabanne Pour Homme
Pour Homme Deodorant Stick 75ml/2.2oz
Price: US$ 21.50 - (Save 2%)
Bvlgari - Aqva Pour Homme Marine
Aqva Pour Homme Marine Deo Stick 75g/2.7oz
Price: US$ 16.50 - (Save 41%)
Ralph Lauren - Polo Blue
Polo Blue Deodorant Stick 75g/2.5oz
Price: US$ 29.00
Hugo Boss - Hugo
Hugo Deodorant Stick 70g/2.4oz
Price: US$ 26.50
Loris Azzaro - Azzaro Elixir
Azzaro Elixir Coffret: Eau De Toilette Spray 100ml/3.3oz + Deodorant Stick 75g/2.5oz 2pcs
Price: US$ 42.50 - (Save 50%)

Then I designed my SQL database:

drop table if exists Strawberry;
create table Strawberry(brand text, series text, title text, price real, save int);
select * from Strawberry;

Using sed I converted the parsed data to SQL insert queries. sed script (sed.sed file):

1~3 s/ - /","/
1~3 s/^/INSERT INTO Strawberry VALUES ("/
1~3 s/$/"/
2~3 s/^/"/
2~3 s/$/"/
3~3 s/Price: US$ //
3~3 s/$/,0);/
3~3 s/ - (Save /,/
3~3 s/%),0//
3~3 s/%)\ ,0//

The script is ready to be executed by this bash command:

sed -f sed.sed data.txt | sed -e ':a;N;$!ba;s/"\n/",/g' | xclip

xclip is a nice tool to output data to directly to OS clipboard.

The data I got using sed script:

INSERT INTO Strawberry VALUES ("Ermenegildo Zegna","Z Zegna","Z Zegna Deodorant Stick 75g/2.5oz",18.50,8);
INSERT INTO Strawberry VALUES ("Giorgio Armani","Acqua Di Gio","Acqua Di Gio Deodorant Stick 75g",29.00,0);
INSERT INTO Strawberry VALUES ("Joop","Joop Thrill","Joop Thrill For Him Deodorant Stick 70g",13.00,50);
INSERT INTO Strawberry VALUES ("Paco Rabanne","Paco Rabanne Pour Homme","Pour Homme Deodorant Stick 75ml/2.2oz",21.50,2);
INSERT INTO Strawberry VALUES ("Bvlgari","Aqva Pour Homme Marine","Aqva Pour Homme Marine Deo Stick 75g/2.7oz",16.50,41);
INSERT INTO Strawberry VALUES ("Ralph Lauren","Polo Blue","Polo Blue Deodorant Stick 75g/2.5oz",29.00,0);
INSERT INTO Strawberry VALUES ("Hugo Boss","Hugo","Hugo Deodorant Stick 70g/2.4oz",26.50,0);
INSERT INTO Strawberry VALUES ("Loris Azzaro","Azzaro Elixir","Azzaro Elixir Coffret: Eau De Toilette Spray 100ml/3.3oz + Deodorant Stick 75g/2.5oz 2pcs",42.50,50);

Using the database I was able to construct as much SQL-queries as I wished, to sort goods of my favorite brands using SELECT, SORT, ORDER and other SQL structures.

The profit I received:

  • saved some money buying the goods
  • saved some time (it’s easier to manage DB than to use that site)
  • the most important: put into practice the knowledge I gained after listening the db-class Stanford course!

Many thanks to Stanford Engineering and Prof. Jennifer Widom.

rTorrent with ruTorrent GUI from GIT on Ubuntu Linux 12.04

Bash script:

sudo apt-get --purge remove libxmlrpc* libtorrent* rtorrent
sudo apt-get install build-essential checkinstall libcurl4-openssl-dev libncurses5-dev libncursesw5-dev libsigc++-2.0-dev libtool git autoconf automake libcppunit-dev subversion

# Check that your g++ is 4.7+ (if so, skip this block)
g++ --version
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get install gcc-4.7 g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --config gcc

#fresh xmlrpc-c lib install
svn co https://svn.code.sf.net/p/xmlrpc-c/code/advanced xmlrpc-c
cd xmlrpc-c
./configure --prefix=/usr
make
#change version from "C" to smth else while installing the package
sudo checkinstall -D
cd ..

#libtorrent install
git clone git://github.com/rakshasa/libtorrent.git
cd libtorrent
./autogen.sh
./configure --prefix=/usr --with-posix-fallocate
make
sudo checkinstall -D
cd ..

#rtorrent install
git clone git://github.com/rakshasa/rtorrent.git
cd rtorrent
./autogen.sh
./configure --prefix=/usr --with-xmlrpc-c
make
sudo checkinstall -D

#rutorrent web-GUI
cd /var/www/
sudo svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent
sudo chown -R  www-data:www-data /var/www/
sudo chmod -R  777 /var/www/rutorrent/share

#update rutorrent
cd /var/www/rutorrent
sudo svn up

#autolaunch on startup
sudo apt-get install screen
echo "screen -fa -d -m rtorrent" >> /etc/rc.local

# nginx
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx

Last revised: Nov 22, 2014 (script is originally written for Ubuntu 12.04)

Разделение страниц пополам в DJVU с помощью ImageMagick

Bash script:

#!/bin/bash
#sudo apt-get install djvulibre-bin imagemagick libtiff-tools
#rm *.tif
for (( i=0; i<=317; i++ ))
        do ddjvu -page=$i -format=tiff assimil_france.djvu tmp$i.tif
        convert tmp$i.tif -crop 50%x100% $i%d.tif
        rm tmp$i.tif
done
for a in [0-9]*.tif; do
    mv $a "printf %05d.%s ${a%.*} ${a##*.}"
done
tiffcp *.tif out.tif && tiff2pdf out.tif -j -o out.pdf && rm *.tif

Выбор самого быстрого зеркала репозиториев через консоль в Ubuntu Linux

С помощью GUI легко выбирать самый быстрый сервер репозиториев для загрузки обновлений. Но как сделать это через командную строку? Очень просто! apt поддерживает директиву mirror, с помощью которой система может выбирать наиболее лучшие зеркала в зависимости от вашего местоположения.

Всё, что нужно – это добавить следующие строки вверху файла

/etc/apt/sources.list
deb mirror://mirrors.ubuntu.com/mirrors.txt oneiric main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt oneiric-updates main restricted universe multiverse

Пользователи Lucid (10.04), Maverick (10.10), Natty (11.04) могут поменять слово oneiric в командах на имя своего дистрибутива.

Настройка трекбола Logitech TrackMan Marble Mouse в Ubuntu Linux


В статье описывается настройка трекбола Logitech TrackMan Marble с возможностью прокрутки страниц. Основной ref тут (документация сообщества Ubuntu) и тут.

Добавьте следующий код в

/usr/share/X11/xorg.conf.d/11-evdev-quirks.conf

и перезапусте X Window сервер:
(или в /etc/X11/xorg.conf.d/50-marblemouse.conf, предварительно выполнив

gsettings set org.gnome.settings-daemon.plugins.mouse active false

)

Section "InputClass"
        Identifier  "Marble Mouse"
        MatchProduct "Logitech USB Trackball"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "ButtonMapping" "1 8 3 4 5 6 7 2 9"
        Option "EmulateWheel" "true"
        Option "EmulateWheelButton" "8"
        Option "ZAxisMapping" "4 5"
        Option "XAxisMapping" "6 7"
        Option "Emulate3Buttons" "true"
EndSection

Я обычно предпочитаю ставить ButtonMapping таким, как указано выше, но некоторые предпочитают вот такой:

Option "ButtonMapping" "1 2 3 4 5 6 7 8 9"

С моим ButtonMapping я могу легко закрывать ненужные вкладки в браузере, использовать функцию копирования-вставки, и то, и другое с помощью малой левой клавиши. С альтернативным ButtonMapping теряются “возможности средней кнопки” и малая левая кнопка работает как кнопка “назад” при нажатии.

Обновление: работает также в Ubuntu 13.10, 14.04, Debian Squeezy.