Страницы

понедельник, 8 октября 2012 г.

Валидация телефонного номера

Поискал в сети, всё что-то не подходящее, написал своё.
Реализация на JavaScript:
var phone = function (str0) {
var str = str0||"",
re1 = /^((\+?7)|8)[-\s]?(\(\d{3}\)|\d{3})[-\s]?\d{3}[-\s]?\d\d[-\s]?\d\d$/,
re2 = /^(8?[-\s]?(\(\d\d[-\s]?\d\d\)|(\d\d[-\s]?\d\d)))?[-\s]?\d\d[-\s]?\d\d[-\s]?\d\d$/;
if (re2.test(str) || re1.test(str)) return true;
else return false;
}

Первое правило проверяет мобильные номера, например:
8(916)3267527
8(916)326-75-27
8 (916) 326 75 27
8 916 326-75-27
8 916 326 75 27, ...
тоже самое, но с +7.

Второе правило проверяет городские (областные) номера, например:
8(8182)218920
8 8182 21 89 20
8182 218929
218929
21-89-29, ...

четверг, 13 сентября 2012 г.

mod_rewrite + mod_proxy Apache 2.2 и обработка параметра в адресной строке

Задача

Обработать нужные параметр в адресной строке. Конкретно - выдать forbidden при использовании определённого параметра:
http://example.com/?foo=bar - forbdden

Проблема

Во-первых, оказалось, что команда mod_proxy PxoxyPassMatch не обрабатывает параметры в строке, т.е. такое не прокатит:
ProxyPassMatch foo=bar !
Во-вторых, использование правила mod_rewrite тоже не сработало:
RewriteEngine On
RewriteCond %{QUERY_STRING} foo=bar
RewriteRule ^.*$  - [F,P]
Точнее, оно работает, если нет других правил в mod_proxy, но они были, и вначале обрабатывались они. Казалось бы параметр [P] должен был заставить воспринимать rewrite как proxy, и просто записать это правило выше, но ничего подобного.

Решение

Rewrite правило, записанное выше, надо было просто поместить в <Location /></Location> и mod_rewrite стал срабатывать первым. На официальном сайте об этом ни слова, более того, там написано это:
The rewrite engine may be used in .htaccess files and in <Directory> sections, with some additional complexity.
Although rewrite rules are syntactically permitted in <Location> and <Files> sections, this should never be necessary and is unsupported.
В интернетах пишут, что mod_rewrite должен первым срабатывать, но такого не произошло, поместив правила в <Directory>   (они кста и без включения в него работают норм по себе).

пятница, 24 августа 2012 г.

Photo Google+ vs Picasa

С появлением Google+ Photo возникла некая неразбериха у меня в голове, в чём его разница с Picasa. И тот и другой предоставляют доступ к одним и тем же фотографиям, но немного отличаются по возможностям.

Picasa удобнее и богаче по функционалу, тут с лёгкостью можно создать public link на фотку или добавить пользователей для совместного использования альбома. Зато в Google+ photo нет ограничения на объём заливаемых фоток. Получается отличный облачный сторедж всех своих фоток. Для удобства закачать большой объём фотографий попробовал десктопную программу Picasa. Оказалось, она использует старый API, и поэтому учитывает объём залитых фотографий.

Поэтому исходя из необходимости иногда пользуюсь интерфейсом пикасы, а иногда гугл+ фото.

https://picasaweb.google.com/home
https://plus.google.com/u/0/photos/

суббота, 11 августа 2012 г.

1С-программист

Вспомнилось тут из школьного.

Ехал в поезде то ли в из Питера в Архангельск, то ли из Архангельска в Карпогоры. В купе ехал парень, уже отучившийся в университете, наш местный. А я тогда закончил 8 или 9 класс. Интересно было, кем он работает. И он сказал, что 1С-программистом. Тогда я подумал, какой он крутой, разрабатывает игры. Ещё помню спросил, сложно это или нет. Он ответил, что не сложно.

Потом уже несколько лет спустя всё встало на свои места :-)

Чего я про 1С-то сегодня вспомнил.
Наткнулся на замечательную ссылку: CouchDB + 1С-Предприятие 8.2, был в шоке узнать, что и такое бывает.

среда, 8 августа 2012 г.

Переехал на blog.dander.ru

Теперь совсем как взрослый :)
Давно хотел, а дел-то на 5 минут.
Руководство по переносу здесь.
Единственное, sweb потребовал IP для изменения CNAME, доменное имя ghs.google.com ему не понравилось =/

UPD Ага, первые последствия: сервисы, завязанные на старый домен не знают о новом. От этого не работает виджет вконтакте и не создался твит с новым сообщением. Ок.

Apache 2.2 + SSL на Windows 7

Зачем это всё надо спросите вы? А вот понадобилось :)

Скачиваем

Итак. У нас есть Windsows 7. Осталось скачать Apache (httpd-2.2.22-win32-x86-no_ssl.msi) и OpenSSL (Win32OpenSSL-1_0_1c.exe)  или 2 в 1  Apache с включенным OpenSSL (httpd-2.2.22-win32-x86-openssl-0.9.8t.msi).

Устанавливаем

Установку Apache описывать не буду. Там всё понятно.
Я вначале не знал, что можно воспользоваться OpenSSL включённым в Apache, поэтому качал отдельно. OpenSSL не установится без Visual C++ 2008 Redistributables.
Вкратце об OpenSSL:
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA исертификаты X.509, подписывать их, формировать CSR и CRT. Также имеется возможность шифрования данных и тестирования SSL/TLS соединений.

Настраиваем

Сперва подключим модуль SSL в Apache и файл конфигурации SSL. Для этого откроем httpd.conf (например, c:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf) и раcкомментируем строки:
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
Теперь создадим необходимые ключи и самозаверенный сертификат.

Создание ключей

Открываем командную строку с OpenSSL (c:\Program Files(x86)\Apache Software Foundation\Apache2.2\bin\openssl.exe) (можно, как обычно, в командной строке, но с командой openssl и указанием пути до неё). И укажите свой путь до openssl.cnf, возможно он совпадёт с моим:
OpenSSL> req -config ..\conf\openssl.cnf -new -out server.csr
Там можно ничего не вводить, кроме пароля - он дальше потребуется. A challenge password и An optial company name необходимо пропустить (не знаю зачем). В результате этой команды в нашей директории появятся два файла privkey.pem и server.csr.
Сгенерируем ключ сервера server.key (потребуется ввести пароль, который задали ранее):
OpenSSL> rsa -in privkey.pem -out server.key
Осталось сгенерировать сертификат, например на 365 дней:
OpenSSL> x509 -in server.csr -out server.crt -req -signkey server.key -days 365
Создадим отдельную папку для сертефикатов (c:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\cert) и переместим туда все получившиеся файлы server.key, privkey.pem, server.csr и server.crt.

Настраиваем дальше

в файле настройки SSL (c:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\extra\httpd-ssl.conf) меняем путь к server.crt:
SSLCertificateFile "C:/Program Files(x86)/Apache Software Foundation/Apache2.2/conf/cert/server.crt"
и к server.key:
SSLCertificateKeyFile "C:/Program Files(x86)/Apache Software Foundation/Apache2.2/conf/cert/server2.key"
Перезапускаем Apache ииии...
Вариант 1: сервер перезапустился, https://localhost работает.
Вариант 2: ничего не работает! т.е. не запускается Apache. Пишет ошибку:
The requested operation has failed
Как у меня и случилось. Это и сподвигло написать статью на будущее.
Пока не сползал в error.log, не понял в чём дело. А проблема известная и даже описана в вики apache, и предложено несколько решений.

Проблема

В httpd-ssl.conf есть такой пункт:
SSLSessionCache  "shmcb:C:/Program Files(x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
Windows 64-bit устанавливает 32-bit приложения в Program Files(x86), ошибка как раз из-за этих скобок.

Решение

Я создал ярлык Apache для C:/Program Files(x86)/Apache Software Foundation/Apache2.2/ и поместил его в корень.
Затем в той строке, где возникает ошибка, изменил путь с применением ярлыка:
SSLSessionCache  "shmcb:C:/Apache/logs/ssl_scache(512000)"
Перезапускаем Apache. Заходим на https://localhost, работает!

Винда есть винда - грабли везде.