Search
Write a publication
Pull to refresh
0
0
Alexzander thunder Shevchenko @thunderspb

DevOps

Send message

Тюнинг SQLite для PHP

Reading time11 min
Views30K

В данной статье оценивается применение SQLite для PHP-проектов, рассматриваются особенности многопоточной работы и способы ускорения работы. «На десерт» — небольшое сравнение с другими СУБД (MySQL, PosgreSQL, MS SQL, MongoDB).
Читать дальше →

Как облегчить установку .apk на Android или GUI для adb install

Reading time3 min
Views27K
Доброго времени суток, уважаемые Хабравчане! Так сложилось, что мне часто приходиться устанавливать .apk-файлы на Android-устройства — работаю тестировщиком. И вот в очередной раз, открывая терминал и набирая команду для установки очередного приложения, я задумался о том, как можно избавиться от рутинной работы. Статья предназначена для новичков, по-этому будет много пояснений.
Читать дальше →

TempusJS — работаем с датой в javascript

Reading time7 min
Views20K
Всем привет!
Мне часто приходится работать со статистическими данными и там очень много завязано на датах. Притом, одна и та же дата может быть использована на странице в разных форматах (например, в удобном для машины и в удобном для человека). Я думаю, что большинство из вас отлично представляют весь этот ужасающий по размерам код, который получается при использовании объекта Date.
К примеру, чтобы получить текущую дату в формате ДД.ММ.ГГГГ нам потребуется сделать следующее:
var d = new Date(),
       fd = d.getDate() + '.' + (d.getMonth()+1) + '.' + d.getFullYear();

А когда таких строк становится много? Легко ли упомнить, что в javascript месяц начинается с нуля, когда разрабатываешь не только на нем? Или то, что тут миллисекунды, а не секунды, как почти везде на бэкенде? Можно решить часть задач популярной библиотекой Moment.js, но она работает весьма медленно.
Рассматриваемая библиотека решает эти проблемы.
Если интересно, предлагаю вам прочитать этот небольшой обзор.

Читать дальше →

Взлом корпоративного портала SAP

Reading time9 min
Views19K
Популярность SAP NetWeaver Portal и его доступность из сети Интернет делают его привлекательным объектом для атаки на компании разного масштаба и профиля. В данной статье рассматривается, как потенциальный злоумышленник может взломать этот популярнейший модуль ERP-системы SAP и каким образом можно избежать подобной угрозы.

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

SAP NetWeaver Portal (EP) является основной точкой входа в ERP-систему SAP для всех пользователей корпоративной сети. Портал, как правило, используется внутри компании как площадка, где хранится и обрабатывается как открытая информация (включая новости компании, данные о работниках и т. д.), так и закрытые сведения (внутренние документы, инструкции и распоряжения). Кроме того, портал предоставляет пользователям необходимые инструменты, с помощью которых они могут выполнять свои повседневные рабочие задачи: проводить встречи и совещания, управлять пользователями, редактировать документы, работать с необходимыми таблицами и т. д.

Читать дальше →

Microsoft выпустила программу для бесшовной циклической анимации

Reading time2 min
Views67K
При просмотре GIF-анимации или других зацикленных роликов всегда заметен переход от конца видеоролика к началу, как бы скачок на исходную позицию. Специалисты из Microsoft Research выпустили программу автоматической обработки видео, которая элегантно решает эту проблему.



Алгоритмы работы описаны в научной работе. Если вкратце, то программа изолирует все движущиеся объекты в кадре, определяет скорость их движения. После этого осуществляется оптимизация движения элементов таким образом, чтобы первый и последний кадр видеоролика совпадали. Грубо говоря, некоторые объекты нужно чуть замедлить, а другие — чуть ускорить. Оптимизация практически незаметна на глаз и выглядит очень естественно (см видео под катом).
Читать дальше →

Десктоп в домашнем сервере или «всё-в-одном»

Reading time4 min
Views89K
image
Цель: недорого собрать систему поддерживающую проброс PCI-устройств в виртуальную машину (c IOMMU). Создать полноценное рабочее место, поднять виртуальный маршрутизатор и еще полезные мелочи.
Читать дальше →

Создание конструктора кирпичной кладки для сайта

Reading time5 min
Views24K
Компания Сиджеко занимается поддержкой сайта организации Реконстрой, которая продаёт и доставляет кирпич, черепицу, архитектурный декор и многие другие строительные материалы в Центральном Черноземье.

В процессе работы над сайтом возникла идея конструктора кладки.

У немецкого концерна «Feldhaus Klinker» существуют модельные ряды кирпича «Vascu Mix» и «Sintra Mix», которые специально предназначены для смешивания в разных пропорциях и создания неповторимого рисунка кладки. К ним существует ряд замазок «Quick Mix», применяемых при замазывании швов кладки между кирпичами. Для демонстрации этого подхода мы решили сделать конструктор кирпичной кладки, аналогов которому в рунете я пока не видел (буду рад примерам).

Конструктор кирпичной кладки

Подробности создания

Проблема одновременного использование kernel raid autodetect для / на /dev/md0 и superblock v1.2 для других /dev/md, или как можно уронить (и поднять) сервер после его обновления

Reading time3 min
Views8K

Спасибо, что дочитали заголовок. Это был тест.


Сегодня, после наката очередных обновления на свой любимый Gentoo сервер и профилактического reboot'a, внезапно, отвалился /dev/md1 со словами мудрого ядра: sdc1 does not have a valid v0.90 superblock, not importing!

Шок! Паника! хорошо, что не в ядре…

А в чём, собственно, дело?


Для начала расскажу о конфигурации сервера, чтобы было легче понять суть проблемы и способ её решения. Итак, ядро 3.10.7 с включённым RAID autodetect и двумя RAID1 (зеркало) дисками.

На /dev/md0 монтируется root, на /dev/md1 база данных (Percona):
db13 ~ # cat /etc/fstab | grep md
/dev/md0                /               ext3            noatime         0 1
/dev/md1                /mnt/db         reiser4         noatime         0 0

И кусочек /boot/grub/grub.conf:
title Gentoo Linux 3.10.7 md0
root (hd0,0)
kernel /boot/kernel-3.10.7 root=/dev/md0

Так вот, для успешной сборки md устройств ядром во время загрузки должно быть выполнено два условия:
  1. Тип 0xFD у партиций, на которых строится RAID
  2. Версия формата superblock 0.90 на устройстве /dev/md, которое создается при помощи mdadm

Если с п.1. в моей конфигурации все было хорошо, то, как оказалось, формат superblock был 1.2 Подозреваю, что /dev/md1 я создавал после того, как пришла новая версия mdadm, которая по-умолчанию использует именно этот формат. Как результат, ядро ругается страшными словами:
dmesg | grep md
[    0.000000] Command line: root=/dev/md0 raid=/dev/md0
[    0.000000] Kernel command line: root=/dev/md0 raid=/dev/md0
[    1.063603] md: raid1 personality registered for level 1
[    1.266420] md: Waiting for all devices to be available before autodetect
[    1.266494] md: If you don't use raid, use raid=noautodetect
[    1.266781] md: Autodetecting RAID arrays.
[    1.293670] md: invalid raid superblock magic on sdc1
[    1.294210] md: sdc1 does not have a valid v0.90 superblock, not importing!
[    1.312482] md: invalid raid superblock magic on sdd1
[    1.312556] md: sdd1 does not have a valid v0.90 superblock, not importing!
[    1.312579] md: Scanned 4 and added 2 devices.
[    1.312595] md: autorun ...
[    1.312610] md: considering sdb3 ...
[    1.312626] md:  adding sdb3 ...
[    1.312641] md:  adding sda3 ...
[    1.312657] md: created md0
[    1.312665] md: bind<sda3>
[    1.312754] md: bind<sdb3>
[    1.312770] md: running: <sdb3><sda3>
[    1.313064] md/raid1:md0: active with 2 out of 2 mirrors
[    1.313166] md0: detected capacity change from 0 to 7984840704
[    1.313262] md: ... autorun DONE.
[    1.320413]  md0: unknown partition table
[    1.338528] EXT3-fs (md0): mounted filesystem with ordered data mode
[    2.581420] systemd-udevd[861]: starting version 208
[    3.122748] md: bind<sdc1>
[    4.896331] EXT3-fs (md0): using internal journal


Когда не помогает Google


Выбор совсем небольшой — либо отключать автоопределение массивов в ядре (перекомпиляция и правки в grub.conf), либо изменять формат суперблока (полный бэкап данных и убийство зеркала с последующим его восстановлением). Оба варианта «не вариант», так как по сути своей деструктивны и могут привести к потери данных, да и времени могут занять немало (как выяснилось в процессе поиска решения kernel autodetect is depricated feature)

К слову сказать, после старта севрера /dev/md1 прекрасно запускается при помощи команды
mdadm --manage /dev/md1 --run
. Конечно, можно было бы прописать эту строчку куда-нибудь в rc-скрипты, но, согласитесь, это как-то не спортивно.

Эврика!


Решение пришло не сразу, хотя лежало на поверхности — всё, что нужно сделать, это убрать тип 0xFD (заменить на 0х83) у дисков в /dev/md1 и тогда ядро перестанет безуспешно пытаться собрать этот массив, мешая при этом udevd делать свою работу. И действительно, после применения fdisk для изменения типа партиций на обеих зеркалах и перезагрузки сервера, все чудесным образом завелось:
dmesg | grep md
[    0.000000] Command line: root=/dev/md0 raid=/dev/md0
[    0.000000] Kernel command line: root=/dev/md0 raid=/dev/md0
[    1.063924] md: raid1 personality registered for level 1
[    1.248078] md: Waiting for all devices to be available before autodetect
[    1.248201] md: If you don't use raid, use raid=noautodetect
[    1.248504] md: Autodetecting RAID arrays.
[    1.265058] md: Scanned 2 and added 2 devices.
[    1.265243] md: autorun ...
[    1.265258] md: considering sda3 ...
[    1.265274] md:  adding sda3 ...
[    1.265290] md:  adding sdb3 ...
[    1.265305] md: created md0
[    1.265321] md: bind<sdb3>
[    1.265331] md: bind<sda3>
[    1.265428] md: running: <sda3><sdb3>
[    1.265865] md/raid1:md0: active with 2 out of 2 mirrors
[    1.265891] md0: detected capacity change from 0 to 7984840704
[    1.266068] md: ... autorun DONE.
[    1.276627]  md0: unknown partition table
[    1.294892] EXT3-fs (md0): mounted filesystem with ordered data mode
[    2.713383] systemd-udevd[860]: starting version 208
[    3.128295] md: bind<sdc1>
[    3.159107] md: bind<sdd1>
[    3.170320] md/raid1:md1: active with 2 out of 2 mirrors
[    3.170333] md1: detected capacity change from 0 to 17170300928
[    3.178113]  md1: unknown partition table
[    4.911712] EXT3-fs (md0): using internal journal
[    5.027077] reiser4: md1: found disk format 4.0.0.


Буду рад, если Google, найдя этот текст, покажет его моим коллегам по цеху, попавшим в похожую ситуацию.

Бюджетные VDS для обучения и разработки

Reading time4 min
Views61K
Преветствую, Хабр!

Вступление

Многие из нас сталкивались, сталкиваются или будут сталкиваться с выбором VDS сервера по принципу дешево и сердито. Зачем такие серверы нужны? Скорее всего наибольшая польза будет для новичков, т.к. можно «пощупать» разное ПО, поэкспериментировать с различными конфигурациями и рецептами. Потестировать свои способности и раскрыть новые горизонты. Фрилансеру создать необходимое окружение для очередного заказа и развернуть там девелоперскую версию проекта, доступ к которой можно иметь всегда и везде как фрилансеру так и заказчику.
Читать дальше →

Наш опыт тестирования LXC (Linux Containers) на примере Debian Wheezy

Reading time8 min
Views39K


Мы в компании Centos-admin следим за появлением новых технологий, тестируем их и, конечно же, внедряем. Почти на всех серверах мы используем контейнерную виртуализацию OpenVZ. В целях расширения набора инструментов, применяемых в работе, мы решили изучить и протестировать нативную виртуализацию Linux LXC.
Под катом вы найдете небольшой обзор технологии и краткий мануал по использованию LXC в Debian Wheezy и наши выводы.
Читать дальше →

Кешируем статику

Reading time4 min
Views37K
Существует мнение, что nginx — отличный инструмент для отдачи статики.
Есть статьи, где описываются настройки sendfile или aio для «улучшения» отдачи.
На Хабре есть чего почитать о настройке proxy_store с proxy_cache для минимизации проблем со стороны мозгов сайта.
Еще в QA иногда возникают вопросы про кеширование картинок, например.
Зачем заниматься этой ерундой! — говорят опытные пользователи — OS лучше вас знает как кешировать файлы! С кешем и префетчем в современных OS, точнее FS, проблем нет! Зачем плодить свои кеши и списки популярных материалов и все такое?...

Есть только одно вредное «но» — в среде исполнения nginx (в общем случае Linux) понятие "файл" и вообще «файловая система» — просто понятие.
И однажды, когда я, подмонтировав сервер по sshfs, обновил один скриптик, случилось волшебное:
1. На каждой страничке стало на 4 картинки больше.
2. Сервера сдохли.

Что поделать — картинки хранились на glusterFS. Наступил полный FUSE.
Читать дальше →

В России появился бесплатный Jelastic

Reading time2 min
Views19K
С момента первого появления нашей Java & PHP платформы, одно из самых больших пожеланий, которые мы слышали было: «дайте бесплатную версию». Мы сами, конечно, такую дать не можем – хостинг предоставляют наши партнеры. Но вот один из наших российских партнеров – Инфобокс – начал опробовать такую модель. Давайте мы вам расскажем, как они это делают.

Freemium – это модель, позволяющая использовать какой-то продукт до определенных объемов совершенно бесплатно. Уже потом – когда проект вырастет и станет большим и серьезным – клиенту и заплатить будет не жалко.

Загвоздка всегда в том, как правильно очертить границы, чтобы и пользователи были довольны, и хорошие проекты в итоге действительно приносили производителю деньги.

В реализации Инфобокса, ограничение достаточно простое – по потребляемым ресурсам.
До 3 клаудлет (то есть до 128 МБ * 3 = 384 МБ оперативной памяти) тарификация не идет. Но требуется, чтобы деньги на балансе были.

Т.е. вы регистрируетесь здесь: http://infoboxcloud.ru/jelastic/ — это дает вам пятидневный совершенно бесплатный тестовый период.

free resources
Читать дальше →

RabbitMQ tutorial 4 — Роутинг

Reading time4 min
Views79K
Продолжаю серию перевода уроков с официального сайта. Примеры будут на php, но их можно реализовать на большинстве популярных ЯП.
В предыдущей статье мы разработали систему логирования. Нам удалось отправлять сообщения нескольким получателям. В этой статье модернизируем нашу программу — будем отправлять получателю только часть сообщений. Например, мы сможем сохранять на диске только сообщения с критическими ошибками (экономия места на диске), а в консоли будем отображать все сообщения.
Читать дальше →

RabbitMQ tutorial 3 — Публикация/Подписка

Reading time5 min
Views116K
Хочу продолжить серию перевода уроков с официального сайта. Примеры будут на php, но их можно реализовать на большинстве популярных ЯП.

Публикация/Подписка


В предыдущей статье было рассмотрено создание рабочей очереди сообщений. Было сделано допущение, что каждое сообщение будет направлено одному обработчику(worker). В этой статье усложним задачу – отправим сообщение нескольким подписчикам. Этот паттерн известен как "publish/subscribe" (публикация/подписка).
Чтобы понять этот шаблон, создадим простую систему логирования. Она будет состоять из двух программ – первая будет создавать логи, вторая считывать и печатать их.

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

По существу, каждое сообщение будет транслироваться каждому подписчику.
Читать дальше →

Drupal 7. Модуль подписок своими руками

Reading time6 min
Views6.5K

Вместо предисловия


Функциональность подписок на какой-либо контент – одна из востребованных в веб-индустрии. Многие сайты могут похвастаться подобным. И наш проект не стал исключением. Дано: сайт на Drupal 7. Что требуется: найти или написать модуль, реализующий все необходимые функции. Какой вариант был выбран и что из этого вышло, Вы можете прочитать далее.



Читать дальше →

Получаем тип и размеры изображения без скачивания его целиком, используя Python

Reading time2 min
Views17K
Возникла задача профильтровать базу данных ссылок на изображения и удалить большие. В результате было найдено решение на Python, которым я поделюсь под хабракатом:

image
Читать дальше →

Мигаем Scroll lock'ом при входящем email сообщении (perl + bash)

Reading time3 min
Views8.5K
По мотивам этого вопроса.

Задача: научиться моргать светодиодом клавиатуры в случае, если есть новые непрочитанные сообщения в нашем почтовом ящике.

Доп. условия: ОС — linux, язык — perl (проверка почты) и bash (собственно моргание).

Читать дальше →

Расширение возможностей массива в PHP

Reading time5 min
Views17K
Уровень статьи: начальный/средний

Массив в PHP — один из самых мощных типов данных. Он может работать как линейный массив (список), как ассоциативный (словарь) и как смешанный. В качестве ключа массива может использоваться либо целое число, либо строка, причем строка, если она представляет собой целое число (например, «5»), будет конвертирована в целое. Остальные типы, за исключением массивов и объектов, так же конвертируются в целое или строку — подробнее можно прочитать в документации.

Несмотря на мощные возможности базового типа array иногда хочется их расширить. Например, подобный кусок кода можно встретить, наверное, в большинстве php-проектов:

$foo = isset($array['foo']) ? $array['foo'] : null;
$bar = isset($array['bar']) ? $array['bar'] : null;


Один из способов сделать этот код короче и элегантней — использовать короткую запись тернарного оператора:

$foo = $array['foo'] ? : null;
$bar = $array['bar'] ? : null;


Но такой код выкинет PHP Notice в случе, когда ключ не определен, а я стараюсь писать максимально чистый код — на сервере разработки выставлено error_reporting = E_ALL. И именно в подобных случаях на помощь приходит ArrayObject — класс, к объектам которого можно обращаться используя синтаксис массивов и позволяющий изменять поведение используя механизм наследования.

Рассмотрим несколько примеров изменения поведения.

Читать дальше →

«Идеальный» www кластер. Часть 1. Frontend: NGINX + Keepalived (vrrp) на CentOS

Reading time9 min
Views113K


Этом цикле статей «Идеальный www кластер», я хочу передать базовые основы построения высокодоступного и высокопроизводительного www решения для нагруженных web проектов для неподготовленного администратора.
Статья будет содержать пошаговую инструкцию и подойдет любому человеку кто освоил силу copy-paste
Ошибки найденые вами, помогут в работе и мне и тем кто будет читать эту статью позже! Так что любые улучшение и правки приветствуются!

Хочу отметить, что эта инструкция родилась в процессе миграции web-систем компании Acronis в высокодоступный кластер. Надеюсь мои заметки будут полезны и для Вас!.

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

На frontend мы будем использоваться связку из двух службы:



keepalived — реализации протокола VRRP (Virtual Router Redundancy Protocol) для Linux. Демон keepalived следит за работоспособностью машин и в случае обнаружения сбоя — исключает сбойный сервер из списка активных серверов, делегируя его адреса другому серверу.

Другими словами, у нас 2 сервера на которых прописано по одному публичному адресу. Если любой из этих серверов падает, то адрес упавшего подхватывается вторым.
Демоны keepalived общаются по протоколу VRRP, посылая друг другу сообщения на адрес 224.0.0.18.
Если сосед не прислал свое сообщение, то по истечению периода он считается умершим и оба адреса обслуживает оставшаяся нода. Как только упавший сервер начинает слать свои сообщения в сеть, все возвращается на свои места


nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 15.08% самых нагруженных сайтов в октябре 2013 года.

Основная функциональность HTTP-сервера

  • Обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;
  • Акселерированное обратное проксирование с кэшированием, простое распределение нагрузки и отказоустойчивость;
  • Акселерированная поддержка FastCGI, uwsgi, SCGI и memcached серверов с кэшированием, простое распределение нагрузки и отказоустойчивость;
  • Модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, XSLT-фильтр, SSI-фильтр, преобразование изображений; несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно;
  • Поддержка SSL и расширения TLS SNI.


Другие возможности HTTP-сервера

  • Виртуальные серверы, определяемые по IP-адресу и имени;
  • Поддержка keep-alive и pipelined соединений;
  • Гибкость конфигурации;
  • Изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
  • Настройка форматов логов, буферизованная запись в лог, быстрая ротация логов;
  • Специальные страницы для ошибок 3xx-5xx;
  • rewrite-модуль: изменение URI с помощью регулярных выражений;
  • Выполнение разных функций в зависимости от адреса клиента;
  • Ограничение доступа в зависимости от адреса клиента, по паролю (HTTP Basic аутентификация) и по результату подзапроса;
  • Проверка HTTP referer;
  • Методы PUT, DELETE, MKCOL, COPY и MOVE;
  • FLV и MP4 стриминг;
  • Ограничение скорости отдачи ответов;
  • Ограничение числа одновременных соединений и запросов с одного адреса;
  • Встроенный Perl.


Читать дальше →

Добавляем беспроводную зарядку стандарта QI в свой смартфон

Reading time4 min
Views211K
Пару месяцев назад я стал обладателем весьма интересного смартфона — TCL Idol X S950 (он же Alcatel One Touch 6040D). На сегодня имеющий одно из лучших соотношение цена/качество. Все характеристики перечислять не буду — Google их знает. Остановлюсь лишь на 5" — FullHD(Sharp) — 140.4 x 67.5 x 6.99 — 120 гр.

И все бы было хорошо, но вот заряжать его приходилось все так-же, по старинке, каждодневным изнашиванием маленького microUSB разъема.
Провода уже давно надоели, а к стандартизации беспроводных ЗУ производители все никак не доходили. А здесь в пользовании появился Nexus 7, с возможностью беспроводной зарядки, и оказалось, что наконец-то и стандартизация подоспела. Вот и было принято решение проапгрейдить свой смартфон такой удобной функцией, как беспроводная зарядка.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity