Мировые новости за февраль

Twitter променял Гугл на Яндекс.

А Гугл в отместку Яндексу сделал панорамы российских городов.
Яндекс правда сделал их давно, но побоялся гопников и не заехал ко мне в район.
Гугл же даже панорамы моего двора разместил.
Так что теперь я люблю Гугля.

Американские солдаты будут ходить в кевларовых труселях, а Sony разошлась с Ericsson.

Гуглу же было мало панорамы моего двора и он занялся панорамами Большого Барьерного рифа.

PHP разучился считать до 2-х и разродился 8-м релизкандидатом версии 5.4.

А Гугл тем временем не унимается и обещает реализовать в своём браузере новый стандарт ECMA.
Стандарт называется Harmony и всем теперь будет гармония и Щастье.
Хотя Firefox давно уже начал всё это реализовывать, но никому до этого нет дела.

Украинская милиция закрыла файлообменный сервис ex.ua. Или не закрыла. Ещё не известно, да и всем похер.

Биомедики создали имплантат для плавания по кровотоку.
Теперь он излечит нас от всех болезней.
Или всех убьёт, но это уже частности.

Инженеры создали сканер бактерий для мобильника.
Теперь можно сканировать микробов не вставая с унитаза.
Всё бы им какую-нибудь херню сделать.

Открылся музей техники Apple.

Гугл же в Хроме не только реализует новый стандарт ECMA, но и прекратит отслеживать поведение пользователей.
Наконец-то можно будет смотреть в интернете какую-нибудь гадость и не ощущать над собой его всевидящее око.

getCookie сосёт

Лет 15 назад какой-то кудесник написал следующую функцию на тогда ещё новом языке JavaScript:

function getCookie(name) {
    var start = document.cookie.indexOf(name + "=");
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) return null;
    var end = document.cookie.indexOf(';', len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len, end ));
}

С тех пор она обошла весь интернет и сотню рейтингов типа «10 самых обосраться лучших JavaScript-функций за все времена».

С тех пор все подряд либо тянут её себе, либо, как обычно, переписывают на свою «ещё более лучшую, ведь я программист», но везде впихивают этот грёбаный indexOf().
Чем он вам понравился?
Даже Дэвид Флэнаган в своём «подробном руководстве» не удержался.

indexOf(name + "=") — мы здесь не переменную «name» ищем, мы ищем переменную, заканчивающуюся на «name».
Что следующий код нам вернёт?

setCookie("sex", "yes");
setCookie("x", "no");
 
console.log(getCookie("x"));

Правильно:

sex=yes; x=no;

Ну и escape/unescape совершенно для других целей нужны.

А посему:

function getAllCookie() {
    var parts  = document.cookie.split(";"),
        cookie = {},
        part,
        name,
        value,
        i,
        len = parts.length;
    for (i = 0; i < len; i += 1) {
        part  = parts[i].split("=");
        name  = part[0].replace(/^\s+/, "").replace(/\s+$/, "");
        value = (part[1] || "").replace(/^\s+/, "").replace(/\s+$/, "");
        cookie[name] = decodeURIComponent(value);
    }
    return cookie;
}

mysqldump: игнорирование данных в определённых таблицах

mysqldump

(картинку увёл с adw0rd.ru)

Итак, хотим мы, значит, сделать дамп какой-то mysql-базы с рабочего проекта.
Чтобы скачать себе и развернуть у себя локальную копию.
Или просто в целях бэкапа.

Ну и, конечно, для этого у нас есть наша любимая утилита mysqldump.

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


Ну ладно, просто воспользуемся опцией --ignore-table-data, которая, конечно, где-то в обильном списке опций должна быть.
Опа, а нет, оказывается, ничего подобного.
Только заявка на неё и благодарность за заявку.

Какие же другие варианты у нас есть?

--ignore-table: просто игнорировать таблицы. Не катит, структура нам нужна, в них же всё равно что-то писаться будет.

--where="true limit 100": выбрать только сотню записей. Плохо, другие таблицы нам нужны полными.

Придётся сделать в два захода:

1. Сохранить для таблиц с логами только структуру (--no-data).

2. Сделать дамп всех остальных таблиц.

И в сочетании с моими потугами о области изучения баша, получается следующее (здесь мы ещё заодно архивируем дамп в файл с указанием текущей даты):

#!/bin/sh
 
DB_NAME="dbname"
DB_USER="username"
DB_PASS="qwerty"
 
OUTPUT_FILE="$DB_NAME-$(date +%Y-%m-%d).sql.tar.gz"
 
TMP_SQL_FILE="$DB_NAME.sql"
 
tables_cmd=""
ignore_cmd=""
 
for table in "log_table_1" "log_table_2" "log_table_3"
do
    tables_cmd="$tables_cmd $table"
    ignore_cmd="$ignore_cmd --ignore-table=$DB_NAME.$table"
done
 
echo "Dump to $TMP_SQL_FILE"
 
mysqldump \
    -u$DB_USER \
    -p$DB_PASS \
    --databases $DB_NAME \
    --no-create-db \
    --add-drop-table \
    $ignore_cmd \
    > $TMP_SQL_FILE;
 
echo "Append big tables structures to $TMP_SQL_FILE"
 
mysqldump \
    -u$DB_USER \
    -p$DB_PASS \
    --databases $DB_NAME \
    --no-create-db \
    --add-drop-table \
    --tables $tables_cmd \
    --no-data \
    >> $TMP_SQL_FILE;
 
echo "Archiving to $OUTPUT_FILE"
tar -czf $OUTPUT_FILE $TMP_SQL_FILE
 
echo "Remove $TMP_SQL_FILE"
rm $TMP_SQL_FILE

Мои познания в баше не позволили мне вынести список таблиц в отдельную переменную, но и так работает.

Контактики

Обновил страничку контактов для вас мои дорогие.

Там мои мыльца, жежешечки, твиттерочки и гуглоплюсики.

Френдите, фоловьте, плюсуйте и следуйте за мной на твиттер, БЛЕАДЬ!

Локальные новости за последний год

На дворе конец февраля — время выносить ёлку и писать отчёт о прошедшем годе.

Весь прошедший год мы хуячили без обеда и выходных, бездельничали и снова хуячили.
Сделали много лабуды и не сделали много полезных вещей.
Познакомились со многими интересными людьми, в том числе с настолько интересными, что лучше бы не знакомились.
Обогатились бесценным опытом о том, как делать множество новых для нас вещей.
И ещё более бесценным о том, как их делать не стоит.

Hotel-inn

Ну и так, как нужно показать что-то материальное: встречайте, альфа-версия системы бронирования гостиниц Hotel-inn.
В ролях: я, дизайнер Асанов, программист Марио и другие.
Сначала я хотел показать её тогда, когда мы наконец её закончим. Потом, когда её закончат уже другие люди. А теперь приходится показывать, пока эти люди ещё не успели всё убить.


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