Sergey Potapov

A word from rustacean, rubist and linuxoid.

Получаем Premium на busuu.com бесплатно

Пожалуйста, прочтитайте так же мою статью Почему я изучаю Эсперанто.

Недавно я начал пользоваться сервисом busuu.com. Очень классная вещь, но вот беда: спустя неделю часть функционала перестала работать, предлагая купить Premium аккаунт за 69,99 EUR.

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

bussu play button

Мне стало интересно, а можно ли это обойти? Оказалось, что можно! Файловый сервер, который отдаёт аудио-файлы никак не проверяет права пользователя, а сами ссылки на файлы можно прямо получить из ответов сервера на AJAX-запросы, которые отсылаются при нажатии на следующее/предыдущее слово.

Разгоняем мозг

Несколько месяцев назад я был очень сильно озабочен своей продуктивностью. Здесь собраны некоторые рецепты повышения эффективности мозговой деятельности, которые мне удалось отыскать, большинство из них взяты из книги Вина Венгера “Фактор Эйнштейна”.

Perfomance Benchmakrs ExecJS vs Ruby

Yesterday on RubyShift Thorben Schröder talked about ExecJS and using it for validation following DRY principle: you implement only JavaScript validator and then use it in Ruby code as well. Sounds great, right? He provided interesting benchmark results which really suprised me. ExecJS can be few times faster than Ruby 1.9.2 if you’re are using therubyracer(wrapper for Google’s V8). I decided to make my own benchmarks There is trivial example - function which caclucates fibonacci numbers. I know the algorithm sucks, but my goal is to compare perfomance.

How to Install Firefox (Iceweasel) 7 on Debian Squeeze

First remove lagacy version of Iceweasel:

aptitude remove iceweasel

Create /etc/apt/sources.list.d/squeeze-backports.list file:

# New Mozilla packages for Squeeze
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
deb http://backports.debian.org/debian-backports squeeze-backports main

Then run:

aptitude update
aptitude install iceweasel -t squeeze-backports

Enjoy!

Powering Less to Highlight Syntax and Display Line Numbers

Since I am a command line guy I use less tool everywhere and everytime to quickly take a look at files. And quite often those files are different scripts and source code. So, it would be great if syntax was highlighted automatically when I open a file with less. And probably it would be great as well if I saw line numbers.

Using update-rc.d

update-rc.d is tool for adding daemons to /etc/rc[1-6]d files.

If you are using OS with System-V style init scripts you can find you /etc the next directories:

  • rc0.d/
  • rc1.d/
  • rc2.d/
  • rc3.d/
  • rc4.d/
  • rc5.d/
  • rc6.d/
  • rcS.d/

So, what are they for?

RSpec Matchers for DataMapper (Dm-rspec)

I am currently developing a number of RSpec matchers for DataMapper models testing. You can try it. Just add the next in your Gemfile under test group:

gem 'dm-rspec'

And run bundle install to install new gems.

The main idea is to provide the same (almost the same) interface which Shoulda provides to test ActiveRecord models.

At the moment I implemented the next matchers:

  • belong_to
  • have_many
  • have_many_and_belong_to
  • have_property
  • have(n).errors_on(:property)
  • have_many(:association).trough(:another_association)
  • validate_presence_of(:property)
  • validate_uniqueness_of(:property)
  • validate_format_of(:property).with(/regexp/)

More information you can find on DataMapper RSpec github page.

Anyone is welcome to join me in developing:)

Backuping and Restoring PostgreSQL Databases

Recently I had a deal with backuping data from PostreSQL database. So I want to share two scripts I created, one to backup and one to restore databases.

The first one is for backup:

backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh

BASE_BACKUP_DIR="/backups/postgres/"

timeslot=$(date +"%F_%Hh%Mm%Ss")
backup_dir="${BASE_BACKUP_DIR}/${timeslot}"
databases=$(sudo -u postgres sh -c "psql  -c '\l'" 2> /dev/null | sed \
-n 4,/\eof/p | grep -v rows\) | awk '{print $1}' | egrep '^\w')

mkdir -p $backup_dir

for db in $databases; do
    sudo -u postgres sh -c "pg_dump -C ${db}" 2> /dev/null | xz -9e > $backup_dir/$db.xz
done

After executing script you’ll have all you database dumps in /backups/postgres/date_time directory compressed with xz. Sure instead of xz you can use gzip or bzip2.

Okay. Now let’s take a look at the restore script:

restore.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

if [ $# -lt 1 ] ; then
    echo "Error: You should specify backup directory path" 1>&2
    exit 1
fi
backup_dir=$1
if [ ! -d $backup_dir ]; then
    echo "Error: directory ${backup_dir} does not exist" 1>&2
    exit 1
fi

for db_xz in $backup_dir/*.xz; do
    db_name=$(echo $db_xz | sed 's/\.xz$//; s/^.*\///g')
    sudo -u postgres sh -c "xz -cd ${db_xz} | psql"
done

It takes one parameter: a path to back directory with *.xz archives.

Both scripts should be executed with with root permissions, cause they use sudo to execute pg_dump and pg_restore commands with postgres user permissions. It allows avoiding asking a password for database. It’s not the only way, but I decided to use this one.