Архив автора

Ошибка при использовании imputmask и validator

При совместном использовании плагинов https://github.com/RobinHerbots/jquery.inputmask и https://github.com/yairEO/validator при пустом поле inputmask возникала ошибка:

Uncaught TypeError: Cannot read property ‘replace’ of null

Лечится путём замены строки

field.data( 'val', field[0].value.replace(/^\s+|\s+$/g, "") );  // cache the value of the field and trim it

на

// if the field value is null. May be with RobinHerbots/jquery.inputmask plugin.
var fieldVal = !field[0].value ? '' : field[0].value.replace(/^\s+|\s+$/g, "");
field.data( 'val', fieldVal );  // cache the value of the field and trim it

В методе checkField.

Также исправленную версию можно скачать у меня в GitHub

Changes.check в Яндекс.Директ API

Вчера ходил на очередную встречу разработчиков по API Директа. Андрей Кашин, он в Яндексе отвечает за API Директа, рассказывал про закрытие API версий 4 и 4 Live и про развитие 5-й версии.

Во время встречи из зала было задано множество вопросов по поводу метода Changes.check. Для меня это было странно, т.к. не для всех был понятен алгоритм работы с этим методом. В связи с этим решил написать небольшую документацию, ну и заодно рассказать про некоторые подводные камни, которые могут встретиться при работе с сервисом Changes.

Читать полностью →

brothersstore.ru

Некоторое время назад мне начали приходить странные письма о необходимости продления домена brothersstore.ru (уже свободен) от Naunet. Домен в общем-то не мой и никогда мне не принадлежал, но письма приходили.

Написал в техподдержку по этой причине. Как оказалось, мой адрес был указан как контактный. Других адресов указано не было. ТП предложила восстановить доступ к аккаунту и скинула ссылку на восстановления пароля по имени домена. На почту пришло письмо и я действительно получил возможность сменить пароль к аккаунту.
Читать полностью →

Ruby 2.3 + Ubuntu

Последние несколько лет постоянно пользуюсь Ubuntu. В принципе, всё меня устраивает. Даже не смотря на тот факт, что раньше я был приверженцем Fedora Core и меня просто вымораживал тот факт, что в Ubuntu отсутствует пользователь root. Ну точнее он есть, но для того, чтобы залогиниться достаточно выполнить sudo su, а не su root. Так вот. Почти всё мне нравится. Не нравится, конечно, то, что для некоторых программ нет deb-пакетов последних версий.

Вот и сейчас мне необходимо поставить Ruby >= 2.0, а последняя версия в Ubuntu 1.9.3.

Но всегда есть хорошие люди, которые сами собирают пакеты.
Читать полностью →

10 лет домену

По данным whois сегодня моему исполняется 10 лет.

whois

А вчера заметил, что в блоге примерно полтора года работала только главная страница. Какая-то неведомая хуфигня почистила .htaccess и даже не сообщила. Тварь.

Аналог strtotime в Java

На работе пишем новый проект, который перевернёт мир рекламы. Проект пишем на Java. Почему на Java? Хуй его знает. Без меня решили. Пишем, так пишем. Значит надо учить Java. Язык хороший, мощный. Немного смущает строгая типизация и линейное мышление, привитое php.

А ещё иногда очень не хватает простых функций вроде strtotime.

Для форматирования даты в нужный формат в php требуется 2 функции: strtotime и date.

date('Y-m-d', strtotime('дата в любом формате'));

В Java всё немного иначе.

// Создаём объект SimpleDateFormat для даты из которой будем форматировать. Дата должна быть указанного формата.
SimpleDateFormat dateSourceObject = new SimpleDateFormat("dd.MM.yyyy");

// Создаём объект SimpleDateFormat для даты в которую будем форматировать.
SimpleDateFormat dateResultObject = new SimpleDateFormat("yyyy-MM-dd");

// Форматируем дату
dateResultObject.format(dateSourceObject.parse('дата в формате dd.MM.yyyy'));

Плюсы в Java:

  • Строгая типизация
  • ООП
  • Java это круто

Плюсы в php: просто и быстро

Для преверженцев ООП есть вариант и в php:

$date = DateTime::createFromFormat('j-M-Y', '15-Feb-2009');
echo $date->format('Y-m-d');


Правда здесь необходимо указать формат даты, из которой будем форматировать.

Резервное копирование БД

Понадобилось создавать резервную копию базы. Но дамп надо было хранить на другой машине, недоступной из сети. Т.к. база занимает более 80Gb и постоянно растёт каждую таблицу необходимо было поместить в отдельный файл для случаев, если необходимо восстановить данные одной таблицы.

Для этого был написан такой скрипт на sh:

#!/bin/sh

DATE=`date -d "yesterday" +"%Y-%m-%d"`
DIR=%backups path%

HOSTUSER=%ssh user name%
HOSTNAME=%ssh host%

DBBASE=%database name%
DBUSER=%database user%
DBPASS=%database password%

echo "Create dir $DIR$DATE"
mkdir -p $DIR$DATE

for TABLE in $(ssh -p 222 $HOSTUSER@$HOSTNAME -C "mysql -B -s -u$DBUSER -p$DBPASS $DBBASE -e 'show tables'")
do
    echo "Create dump for table $TABLE"
	ssh -p 222 $HOSTUSER@$HOSTNAME -C "mysqldump -u$DBUSER -p$DBPASS $DBBASE $TABLE | gzip -c" > $DIR$DATE/$TABLE.sql.gz
done

echo "Create full archive"
tar -czvf $DIR/$DATE.sql.tar.gz $DIR$DATE

echo "Remove dir $DIR$DATE"
rm -rf $DIR$DATE

echo "Finished"

Также скрипт можно взять на GitHub

Восстановление пароля PostgreSQL 9.1

1) Открываем файл /etc/postgresql/9.1/main/pg_hba.conf
2) Находим сточку local all postgres peer
3) Меняем на local all postgres trust
4) Перезагружаем базу:

service postgresql reload

5) Логинимся в PostgreSQL без пароля:

psql -d template1 -U postgresql

6) Меняем пароль:

ALTER USER postgres WITH PASSWORD 'newpassword';

7) Возвращаем строчку на своё место local all postgres peer

Новые условия iCloud для iOS7

Сегодня обновил iPhone до iOS7. После обновления необходимо было принять новые условия использования iCloud, но при нажатии на кнопку просмотра условий просто открывались настройки. Пункт настроек iCloud выбрать было нельзя.

Для прочтения условий необходимо было выключить ограничения в настройках телефона. После выключения ограничений необходимо зайти в настройки iCloud и принять новые условия.

Антипиратский закон

Радуемся, прыгаем и веселимся!

Петиция против «антипиратского» закона набрала более 100 тысяч голосов буквально за месяц и одну неделю. Это небольшая победа. Небольшая — потому что дальше документ о «запрете произвольных блокировок сайтов» предстоит проанализировать специальной экспертной группе федерального уровня. Что будет дальше — пока не известно, но мы будем надеяться на лучшее.

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

Спасибо всем, кто поддержал эту петицию!