заплатка для php 7

December 29th, 2020

  Не прошло и трёх лет, даже php 8 ещё не выпустили, а разработчики php уже смогли принять мою заплатку к php 7 в ПЯТЬ символов, которая предотвращала segfault.
  А вот другое улучшение уже видно никогда не примут, восемь лет прошло…

Кататься на лыжах в Альпы

December 21st, 2018

  В Италии есть неплохой для начинающих лыжный курорт Adamello в Passo Tonale. К тому же, в начале сезона – до 21 декабря, можно получить ski pass бесплатно при аренде отеля или апартаментов напрямую (через посредников типа booking.com не работает –  тогда ski pass стоит 160 евро на шесть дней для взрослого).
  Добраться из Риги довольно просто и дёшево: Ryanair продает билеты до Бергамо от 25 евро в одну сторону. Однако, по новым правилам бесплатно в салон можно пронести только одну маленькую сумку, а не чемодан как раньше.
  От аэропорта в Ponte di Legno три раза в день идёт рейсовый автобус из Милана SAB BS1остановка (Orio al Serio) рядом с переходом через дорогу к торговому центру напротив аэропорта. Автобус едет 120 километров за 3 часа, билет стоит 8 евро. Дальше двадцать минут вверх до Passo Tonale на местном автобусе за два евро или можно подняться на фуникулёре за пять.
  В начале сезона трёхзвёздочный отель на двоих с завтраком в 100 метрах от подъемников можно снять на неделю за 500 евро. Аренда лыж с ботинками – 60 евро на человека.
  Лыжный отдых, так же как и пляж, позволяет хорошо расслабить голову – кроме катания заняться просто нечем, разве что ходить пешком по окрестным горам.
Read the rest of this entry »

Выходные в Вене

November 22nd, 2017

  Благодаря чудесным ноябрьский праздникам удаётся хотя бы на несколько дней вырваться из латвийской мерзости (в плане осенней погоды). В этот раз выбор встал между Прагой и Веной.
  После долгого перерыва в связи с ценовой политикой, в этот летели airBaltic – он оказался чуть дороже, но более удобный по времени. И были развлечения: самолёт приземлился только со второго раза – в первый раз пилот на последних метрах передумал садиться.

В Вене есть свои прелести и странности:

  • Кареты ездят по улицам
  • Парки в центре города по вечерам не освещаются, зато заводы весело подсвечены
  • Негров в городе действительно мало
  • В кафе можно курить
  • Средняя цена билета в музей 12 EUR
  • Местные в метро не пользуются валидаторм билетов – все пассажиры просто проходят мимо

Много картинок далее

Read the rest of this entry »

SGW на PHP

July 19th, 2016

  Ехали медведи на велосипеде…
  У swedbank есть API для работы со счетом – посмотреть там чего или даже деньги перевести кому. Называется SGW и доступно за деньги. API супер безопасное, использует эстонскую систему электронных подписей и в связи с этим жутко замороченное – подписанный xml внутри bdoc, который внутри cdoc (утка в зайце, яйцо в утке, игла в яйце). Ну и еще цифровая временная метка при перечислении.
  Клиентская библиотека на богомерзкой джаве и кусками на сях и плюсах.
  А теперь, моими стараниями, еще и на php, лежит php-sgw на github. В комплекте: создание и разбор CDOC, создание и разбор BDOC без подтверждения подлинности (что не сложно сделать, но в данном случае не нужно, после использования двух сертификатов-то), код для работы с REST от Swedbank. Код временной метки OCSP отсутствует, так как использует отдельный платный сервис.
  Что хочется сказать про разработчиков этого “прекрасного” сервиса, который не позволяет получить ответ на определенный запрос, а тупо присылает всё подряд по мере обработки. Документация – на уровне презентации в PowerPoint о жизни леммингов, причем в разных версиях есть нестыковки. Отладочная информация отсутствует в принципе – у сервиса одна ошибка “что-то не катит”. Сишный код как бы есть, но как-бы не актуальный. Прекрасный двойной паддинг, намекающий на слабое шифрование. Ну а Джава такая Джава… Вроде банк, эстонцы – могли бы постараться; ан нет, без поллитра черт ногу сломит.

Барселона – Салоу – Камбрильс

July 16th, 2016

  Испанское побережье, Costa Daurada, прекрасное место провести пару ленивых летних месяцев рядом с морем. Три часа на самолёте из Риги, час-полтора на машине либо в поезде или в автобусе, и длинный широкий песчаный пляж к нашим услугам.
  За последние пару лет, мы посвятили провинции Таррагона без малого четыре месяца.
  Ниже то, что запомнилось или показалось достойным записи.
Барселона:

  • Tapas это такие бутерброды, в основном с рыбой или с рыбной пастой. Есть даже привычные с килькой
  • Магазины местного цветастого Desigual на каждом шагу
  • Общепит дороже на треть чем в Риге, шмотки дороже чем в Европе, а вот еда и алкоголь в магазине в целом дешевле
  • Очень широкие дороги, с пешеходными зелеными полосами по центру или бокам, отделяющими полосу для общественного транспорта
  • На перекрестках перед светофором отдельное место для мототранспорта впереди полосы для машин
  • Масса народа, в любое время. На удивление, в выходные не особо больше
  • Последние отправления автобусов в 22:30, далее ходят отдельные ночные маршруты
  • Очередь на check-in/baggage drop у Vueling в BCN часа на полтора-два, не меньше
  • Половина рейсов Vueling задерживается

Costa Daurada:

  • Вермут из Reus со льдом и долькой апельсина весьма хорош в жару
  • Пиво продают в литровых бутылках, йогурт – килограммами
  • Сезон начинается в июле, в июне тепло – 22-26, бывает жарко – больше тридцати, вода понемногу становиться достаточно теплой чтобы купаться
  • Бриты приезжают в мае, когда дёшево
  • В магазинах разных сетей сильно разный ассортимент – в Lidl есть то, чего нет в Esclat и Mercadona и наоборот. Приходится ходить по всем сразу и собирать что надо
  • В магазинах продают местное молодое вино по евро за стеклянную бутылку с невзрачными этикетками – довольно вкусное. В каждой сети свой поставщик и только один вид.
  • В Salou полно русских и соответственно обслуживающего персонала говорящего по русски, включая продавцов автобусных билетов на остановке.
  • Детские площадки на центральном пляже Salou через каждые 25 метров. На остальных – через 500
  • В Portaventura детям ниже 1 метра делать нечего
  • В Portaventura лучше ехать с утра, когда очереди на аттракционы небольшие. Либо брать express pass. Стоять в очереди сорок минут ради 5 минут аттракциона удовольствие сомнительное
  • В конце июня местные выезжают на море и на пляже становится не протолкнуться
  • купаться в удовольствие в море можно где-то после 20 июня
  • Заснуть при 26 градусах на улице без охлаждения комнаты кондиционером очень тяжело. До комфортных 21 температура в конце июня ночью редко падает.
  • Людей на пляже после обеда в разы меньше чем с утра

Rigas Satiksme ворует у пассажиров

August 17th, 2015

  Некоторое время являлся пользователем синего электронного билета от Rigas Satiksme.
  Потом стал замечать, что как-будто количество поездок сокращается быстрее, чем должно было бы исходя из пользования общественным транспортом.
  И в один прекрасный день, записывая поездки и сверяя с остатком на билете, с удивлением обнаружил пропажу поездок-денег с синего талона.
  Так как Rigas Satiksme больше не обслуживает проблемы с электронными билетами по телефону, по факту пропажи было написано заявление в центре обслуживания пресловутого предприятия. Ответили ровно через четыре недели, особо не разбираясь что к чему, что всё в порядке. И на второе заявление ответили отказом, приложив однако распечатку поездок. Так как в RS особо не увлекаются работой, или может тупо ничего не парят как это принято в госуправлении, то в распечатке оказались доказательства пропажи. Этакий эпик фэйл.
  И вот уже после третьего письма с чёткими доказательствами из их же распечаток, долбаные уроды, без всяких извинений и раскаяний, соблаговолили вернуть мне мои деньги.
  Rigas Satiksme уже ворует напрямую у пассажиров, такие дела.

История одного взлома

August 13th, 2015

  Интересно ломать чужое. Досадно, когда ломают твоё.
  На днях с удивлением обнаружил, что сайты, расположенные на сервере, постоянно что-то загружают и ходят куда-то, куда явно не надо. Стал смотреть и обнаружил, что уже какой месяц назад хостинг взломали, залили шел и делают что хотят. Что получается, точнее.
  Небольшое расследование показало: нашли инсталляцию opencart с паролем по умолчанию (тут я плакал и зарекался), зашли в админку, поменяли “Error Log Filename” на имя с расширением .php и через вызов ошибки залили туда php код. Ну и далее php шел со всеми вытекающими – заменой всех jquery файлов на модифицированные.
  Благодаря php-fpm от пользователя, пострадали только некоторые сайты, запущенные от данной учётки. Неработающий mail() не дал рассылать спам, а закрытый исходящий трафик исключил проксирование.
  Благодаря логам удалось найти все (надеюсь!) залитые файлы.
  Мораль: пароли по умолчанию великое зло !

Жизненный опыт

May 16th, 2015

  Лёжа дома в Риге в кровати с температурой, закрывая глаза и вспоминая Пхукет, Гоа, Пралин и Канкун, океан и джунгли, напряжение дороги и негу пляжа, даже не вериться, что это происходило со мной и буквально вчера.

дешёвый wizzair

May 7th, 2015

  Если кто-то думает, что у Ryanair плохой сервис, то стоит попробовать лететь венгерским дешёвым перевозчиком Wizzair.

  Для начала, рейс перенесут на час позже за неделю-две (деньги вернуть нельзя), потом, уже в аэропорту, ещё минут на 20. И конечно, не преминут задержать посадку на десяток минут и вылет ещё на столько же. В итоге, можно прилететь на пару часов позже времени, указанного при покупке билетов.

  Другие неприятные сюрпризы возникают в момент online-регистрации: посадочные талоны не предлагают сохранить или получить на имэйл – можно только сразу распечатать, что совсем не удобно сделать с телефона. Место в самолёте не фиксируется – пассажиры занимают места по мере загрузки в режиме живой очереди.

  В самолёт можно пронести только ОДИН предмет ручной клади – дамские сумки, пакеты из duty-free и остальное придётся как-то запихнуть в одну сумку, иначе не пустят на борт.

  Поесть в самолёте довольно трудно – из трёх вариантов бутербродов (единственная сколько-нибудь стоящая еда в меню) на моём рейсе не было ни одного. Было предложено печенье, но услышав что я говорю по-русски, стюард нагнувшись шёпотом сказал буквально следующее “Не советую вам это брать” :)

  Ну и выгрузили на взлетное поле в два часа ночи, как у лоукостеров принято.

Термостат heatmiser для Junkers

February 12th, 2015

  В течении зимнего отопительного сезона столкнулся с проблемой – газовый котел Junkers не отключает насос даже при неработающей горелке, постоянно гоняя воду и создавая лишний шум по ночам.
  В результате небольшого исследования, на официальном сайте был куплен внешний беспроводной термостат heatmiser. Из Британии доставили в течении недели.
  За подключение местные специалисты просят до сорока евро. Однако, доброе представительство Bosch в Латвии любезно выслало мне схему подключения – пару проводов воткнуть в дырки я смог сам бесплатно.
  Что нравится и чем я пользуюсь:

  • Термостат беспроводной, работает на перезаряжаемом аккумуляторе – можно переносить в любое место, а также крепить к стене в держателе. К Junkers подключается только приемник.
  • Четыре температурных режима на каждый из семи дней недели или пару рабочие-выходные. Например, в 8 часов включается 21 градус C, в 10:30 – 18C, вечером снова 21C и 17C на ночь. Работает с шагом в пол-часа.
  • Есть возможность единовременно переопределить текущий температурный режим до наступления следующего – поставить 23C вечером, а на ночь автоматически переключиться в предустановленный.
  • Можно выставить нужную температуру на определенный период – уходя на пол-дня ставим 18С на четыре с половиной часа. Затем термостат переключается в основной режим.
  • Есть режим блокировки экрана, который не позволяет менять режимы.
  • Светится в темноте, показывает время.

В целом, очень удобная штука и не понятно как я жил без неё раньше.

heatmiser - схема подключения к Junkers ZW32-KE


heatmiser - приёмник


heatmiser - термостат на столе


heatmiser - термостат в держателе на стене

Родос – записки путешественника

October 1st, 2014

Родос, главный город острова Родос

Парадокс – аренда квартиры 140мм рядом со старым городом на Родосе в сентябре (в среднем 28-30 градусов, каждый день солнечный) стоит столько же, сколько аренда дачного домика 45мм рядом с Йомас в августе (две неделе из четырех дождь).

Город Родос расположен на склоне горы – с одной стороны ветер и волны, с другой – спокойное теплое море.

Западное побережье

Read the rest of this entry »

memcache и грабли eviction

July 23rd, 2014

  Есть в memcached такая неприятная штука как eviction. Случается когда свободной памяти не осталось для выделения новых страниц в slab, а свободных чанков в slab-e тоже нет. Тогда в slab-e берется какой-нибудь занятый чанк и затирается новыми данными. И это не взирая на то, что в соседних slab-ах могут быть свободны целые страницы – если страница выделена в slab, она останется там навсегда. Если не воспользоваться штукой под названием Slabs Automove. Иначе можно найти знатные грабли как мы. Read the rest of this entry »

vqmod xml для Cupid темы Opencart

July 18th, 2014

  Есть такая неплохая масштабируемая тема
Cupid – R.Gen OpenCart Store Template, с доступной в тырнетах версией 1.2 под opencart 1.5.5. Из коробки не имеет поддержки vQmod. Добрый человек потратил полчаса времени и напилил vqmod_cupid_1.2.xml XML файлик, позволяющий не перезаписывать оригинальные части opencart.

DEAC и электричество

May 30th, 2014

  Давненько ничего весёлого, достойного рассказа, не случалось с железками inbox.lv в DEAC. Происходили мелкие неурядицы, что-то быстро решалось и чинилось. Но вот в понедельник случился очередной epic fail.
  Предыстория примерно следующая: в DEAC находятся примерно с десяток стоек с оборудованием сервиса inbox.lv, запитанных на разные электрические фазы для снижения нагрузки на сеть.
  Прекрасным утром понедельника система мониторинга предупредила об отключении части оборудования в датацентре. Служба поддержки DEAC однако уверенно сообщила что все сервера включены и проблем нет.
  Возникла идея о проблеме со свичами – сотрудник DEAC на месте сходил в серверную и по нашей просьбе отключил некоторые коммутаторы от электричества, затем включив обратно. Что однако не дало ожидаемого результата – по сообщению сотрудника на свичах не было никакой активности.
  Наши ребятки поехали на место.
  По прибытию в DEAC обнаружилось отсутствие электричества в части розеток – кто-то в DEAC решил отключить одну из фаз электричества, питающую наши стойки. Без какого-либо предупреждения. Без уведомления собственного технического персонала. Технического персонала, который не может отличить включенный коммутатор от обесточенного.
  Сервис inbox.lv частично был недоступен примерно час.

playlist.m3u для IPTV Lattelecom

January 2nd, 2014

  Lattelecom предоставляет услуги IPTV под вывеской Интернет ТВ. Качество среднее – HQ это 640×480 при битрейте ~500kbps , доступ с авторизацией для подписчиков, три типа потоков – flash для хомяков, HLS для мажоров и rtsp для хардкора. До 31.01.2014 можно смотреть бесплатно.
  Понятное дело, хочется смотреть на телевизоре. Есть Dune HD с wifi свистком (спасибо Вове), которая на ура играет потоки из интернетов и даже показывает список каналов – знает толк в m3u8 в общем.
  Что делаем ? Идем на ltc.tv, регистрируем учётную запись, заходим и смотрим идентификатор сессии в печеньке (он же PHPSESSID). Создаём сценарий bash следующего содержания, подставляя свой идентификатор:

#!/bin/bash

PHPSESSID="0baug7n1kd44227bk6696828j1"
FILE='./ltc/playlist.m3u'

COOK="Cookie: PHPSESSID=${PHPSESSID}; MobBitr=1; mobtv_cache=fXibixGlYd6zEaOUmCfXKcGYvYDtjdd6"
UA='Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53'
REF='http://m.ltc.tv/tiesraide/?autoplay=pirmais_baltijas_kanals'
URL='http://m.ltc.tv/free_origin?show_origin=1&type=1&chan=kanals_2&streamurl=kanals2_lv&bitrate=1'

TTL=112 # in min
generate() {
echo "#EXTM3U"
wget -q -O- --header="${COOK}" --user-agent="$UA" "${REF}" | egrep -o '<div class="chanel_list_info"[^>]+' |cut -d ' ' -f 4,5 | while read U S; do
U=${U//\"/}
U=${U#*=}
S=${S//\"/}
S=${S#*=}
#echo "$U $S"
echo "#EXTINF:-1,${U}"
wget -q -O- --header="${COOK}" --user-agent="$UA" --referer="$REF" "http://m.ltc.tv/free_origin?show_origin=1&type=1&chan=${U}&streamurl=${S}&bitrate=1"
echo
done
}

keep_session() {
wget -q -O- --header="${COOK}" --user-agent="$UA" "${REF}" | fgrep -q 'div class="chanel_list_info' || echo FAIL
}

if find ${FILE%/*} -name ${FILE##*/} -mmin -${TTL} | fgrep -q ${FILE}; then
keep_session
else
generate > ${FILE}
fi

  Далее ставим в крон для поддержания сессии в активном состоянии и в любое время наслаждаемся рабочим playlist.m3u :)

Проверка DKIM на PHP

August 25th, 2013

  Как это ни забавно, мне не удалось найти в тырнетах ни одной рабочей реализации проверки DKIM подписи писем на PHP. На Perl есть, на Python – пожалуйста, не говоря уже о сишных библиотеках. На PHP отыскалось лишь какое-то поделие злой мартышки на гитхабе, которое как-бы “Finally, a PHP5 class for not just signing, but verifying DKIM signatures”, но в то же время “Still doesn’t verify signatures properly”.
  Пришлось пару дней покопаться в разном коде, почитать внимательно RFC и voila – код уже может подтверждать подпись писем gmail и airbaltic как минимум.
  По хорошему, шимпанзёвое поделие надо полностью переделывать, добавлять полную поддержку RFC. Но это уже без меня.

Tropea – городишко на юге Италии

August 16th, 2013

  Тропеа – небольшой уютный сонный городок на юге Италии с пляжем и мороженным, булками и макаронами, персиками и помидорами, вином красным и белым. Девиз города – “Ешь – бухай – купайся – покупай сувениры”. В конце июля Тирренское море прозрачное и тёплое, днём на пляже жарко даже под зонтиком, народу – не протолкнуться.

Главная достопримечательность Тропеа


Больше картинок Read the rest of this entry »

Как не надо делать бэкап скрипт

July 5th, 2013

  Вот таким печальным образом некто mikus@hostnet.lv делает бэкапы удалённых linux серверов. Тут вам в 10 строках и создание полной копии в /tmp папке без ограничения прав доступа, и передача через сеть в нешифрованном виде, и использование национальных слов наряду с английскими, и запутывание логики в следствии то ли отсутствия логического мышления, то ли неумения пользоваться командой man.
  “Ietaupiet līdz pat 80% no saviem IT izdevumiem, izmantojot ārpakalpojumu LINUX serveru administrēšana” – написанно на сайте hostnet.lv. Вот что бывает при экономии 80% – linux начинают администрировать сельские сторожа.

#!/bin/bash

LOCALHOST=cargomix.hostnet.lv
DATE=$(date +%Y-%m-%d)
HOST=”webconcept.lv”
LOGIN=”backup”
PASS=”XXXXXX”
PORT=”21″
REMOTEDIR=”www/”$DATE
BACKUPDIR=”/tmp/all_backup/”;
ADMINEMAIL=”mikus@hostnet.lv”

mkdir -p $BACKUPDIR/;

# var/log

for directory in etc root var/spool/cyrus var/lib/mysql var/lib/cyrus; do
cd /$directory;
echo “Backuping /$directory…”
mkdir -p $BACKUPDIR
dir2=$(echo $directory | cut -d “/” -f 2)
tar cfz /tmp/all_backup/$dir2.tar.gz . > /dev/null ;
#rm -rf $BACKUPDIR$directory
done

if
ncftpput -u $LOGIN -p $PASS -P $PORT -Rm -r 10 -DD $HOST $REMOTEDIR $BACKUPDIR*;
then
echo “Backup Succsefull”;
echo “Backup was succesfull at $LOCALHOST” | mail -s “$LOCALHOST all backup succsesfull – $laiks” $ADMINEMAIL;

else
echo “Backup Error”;
echo “Backup ERROR at $laiks.” | mail -s “ALL BACKUP ERROR $LOCALHOST” $ADMINEMAIL;
fi

rm -rf $BACKUPDIR/;

Мексика в панорамах

June 30th, 2013


Улицы Теотиуаканы


Вид с пирамиды Солнца


Вид с пирамиды Луны


Терраса в Aldea Thai в Плая дель Кармен


Сенот


Чичен-Ица – Пирамида Кукулькана


Канкун – пляж зоны отелей

(не) покупайте билеты у KLM

June 30th, 2013

  Забавная история приключилась со мной при перелёте по билетам, купленным у KLM. Похоже, от такого нельзя быть застрахованным при полёте с любой авиакомпанией и надо быть просто более внимательным.
  В общем, купил билеты RIX-CDG-MEX и обратно плюс багаж у KLM (он же Air France). Между Ригой и Парижем летит airBaltic, а далее Aeroméxico. Стыковка выглядела очень удачно – пять часов в одну сторону и час обратно. До Мехико долетел без приключений. Но вот путь в обратную сторону доставил массу впечатлений.
  При сдаче багажа, работники Aeromexico сообщили, что не знают про такую компанию как airBaltic и не имеют с ней договора. Мой багаж они могут отправить только в Париж. И то, что за час стыковки я никак не могу забрать багаж и сдать его снова в большом аэропорту Шарль-де-Голль, это не их проблема. Но пометили багаж как приоритетный.
  Самолёт в Париж прилетел с двадцатиминутным опозданием. Бегом-бегом к стойке KLM в трансферной зоне, где мороженная коренная француженка 20 минут (!) узнавала из какого же терминала летит airBaltic и что мне делать. В результате – “у Вас есть 15 минут чтобы забрать свой багаж в терминале F и сесть в самолёт в терминале D. Вам на это потребуется минимум 20 минут”. Е%@>!. Бегом-бегом по незнакомому аэропорту забрать 30-ти килограммовый чемодан в терминала F, на поезде в терминал D и к стойке регистрации airBaltic. Где мне заявили, что я могу лететь, но без чемодана – погрузка багажа уже давно закончена. Потом вроде сжалились и разрешили за 60 евро взять чемодан с собой, выкинув предварительно все жидкости. Пришлось отказаться. Самолёт улетел в Ригу без меня.
  Оставшись в лёгком расстройстве, после 11ти-часового ночного перелёта из Мексики в огромном аэропорту, неспавши уже часов 20, побрёл в KLM выяснять отношения. К счастью, мне попался негр, который, поудивлявшись на мой билет и время стыковки, постучал в компьютере, сделал несколько звонков и в течении часа выдал мне талоны на еду и гостиницу, а также билет в Ригу на следующий день.
  Я легко отделался. Вот урок: если стыковочные рейсы выполняют разные авиакомпании, времени пересадки должно хватать чтобы выйти из транзитной зоны, забрать багаж, зарегистрировать багаж (закрывается за 40 минут до вылета) и плюс запас на задержку рейса. Итого – минимум два часа.