Pull to refresh
4
0
Андрей @UncleAndy

User

Send message

Как пропущенный var сорвал наш запуск

Reading time4 min
Views2.6K
Перевод этой заметки никак не нацелен оттолкнуть читателя от использования Node.js, и на старуху бывает проруха, а лишь призывает быть внимательными, и, возможно, подскажет решение тем, кто вдруг столкнётся с подобным поведением своего приложения. Лексика автора оставлена без особых изменений и цензуры.

Кратко сказка сказывается, да долго дело делается, MelonCard сегодня был представлен на TechCrunch вместе с другими компаниями, как вдруг всё внезапно сломалось. Каждая. маленькая. мелочь. Мы только что обновили сайт, чтобы он выглядел и ощущался более отзывчивым, используя long-polling NodeJS, с крутейшим динамическим фронтендом на jQuery Templates и KnockoutJS. Приложили все усилия и провели ручное и юнит-тестирование с помощью Vows. Все системы готовы, полный вперёд и всё такое? Не тут-то было.
Читать дальше →
Total votes 91: ↑78 and ↓13+65
Comments88

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

Reading time11 min
Views37K
Доброго времени суток. Я занимаюсь аудитом защищённости веб-приложений. По простому — тестами на проникновение в отношении веб-сайтов. Иногда в моей практике встречаются интересные и познавательные случаи, которые я бы хотел описывать в виде таких вот статей, но редко (для меня это первый случай) бывают ситуации когда клиент разрешает публикацию подобного материала с подробным описанием всех имевшихся проблем и предпринятых действий. Естественно, тут вы не встретите никаких конкретных имён, названия фирмы-заказчика и т. д. Упоминания таких данных мне, наверное, никто никогда не разрешит. Надеюсь что для вас, уважаемые читатели, данная статья окажется интересной и полезной.
Читать дальше →
Total votes 233: ↑209 and ↓24+185
Comments115

Исправление и изменение кодировок MySQL

Reading time3 min
Views26K
Боремся с кракозябрамиВ связи с тем, что довольно много людей обращается с просьбой помочь исправить проблему с кодировками MySQL, решил написать статью с описанием, как «лечить» наиболее часто встречающиеся случаи.

В статье описывается не то, как первоначально правильно настроить кодировки MySQL (об этом уже довольно много написано), а о случаях, когда есть довольно большие таблицы с неправильными кодировками и нужно всё исправить.

Самое плохое в неправильно настроенных кодировках — то, что зачастую проблему сложно обнаружить, и с первого взгляда может казаться, что сайт работает правильно, и никаких проблем нет.
Читать дальше →
Total votes 96: ↑64 and ↓32+32
Comments36

Знакомство с библиотекой шифрования libgcrypt

Reading time7 min
Views16K
Добрый день, хабрахабр!

imageВ процессе написания одной из своих программ мне понадобилось разобраться с библиотекой шифрование и де-шифрования текста. Я разобрался и теперь хочу поделиться накопленным опытом и знаниями с сообществом.

В данной статье речь пойдет о библиотеке libgcrypt.
Читать дальше →
Total votes 32: ↑26 and ↓6+20
Comments12

Метод определения и динамической защиты от DDoS типа SYN-flood

Reading time4 min
Views16K
Привет, Хабрасообщество.

Об актуальности DDoS атак в наше время рассказывать не стану. Достаточно взглянуть на статистику. Сталкиваюсь с атаками по роду деятельности довольно часто, возникла идея динамической защиты от DDoS типа SYN-flood на северах Linux и FreeBSD. Также предложена реализация мониторинга SYN-flood по SNMP.

Об этом всём под катом.
Читать дальше →
Total votes 51: ↑46 and ↓5+41
Comments30

Анимация и Система частиц в Blender

Reading time1 min
Views13K

Завершен перевод двух наиболее важных глав книги «Основы Blender»:



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

P.s.
В Blender 2.6 были сделаны БОЛЬШИЕ изменения, и нужно сказать К ЛУЧШЕМУ. Теперь работать еще удобнее и быстрее!
Total votes 46: ↑45 and ↓1+44
Comments6

Как понять почему упал сервер не подключая к нему монитор и клавиатуру?

Reading time2 min
Views13K
Так бывает что сервер зависает, но к нему не подключена ни клавиатура, ни монитор.

У меня нет лишнего монитора, и обнаружив, что сервер не отвечает по сети,
снимать монитор с моего компьютера и подключать к серверу в кладовке нет никакого желания и сил.

В Linux есть такая возможность ядра как Netconsole.
Netconsole позволяет послать сообщения от ядра на удаленный компьютер.

Для настройки netconsole нужен другой (постоянно включенный) компьютер который примет сообщение по сети.
Читать дальше →
Total votes 94: ↑89 and ↓5+84
Comments33

MySQL репликация one-slave-multi-master

Reading time3 min
Views13K

Предисловие.


Понадобилось сделать репликацию несколькими мастер-серверами с mysql, чтобы данные со всех них грузились на один слэйв-сервер. Готового решения стандартными средствами не нашлось. Но так как проблема оставалась актуальной, со временем подоспел немного усложненный, но работоспособный вариант c использованием средств самой mysql.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments14

Про догмы в криптографии

Reading time7 min
Views8.9K
Вчера я наконец-то выпустил первую публичную версию Lamer News, это одновременно и реальный пример использования Redis в виде сайта напободие Hacker News, и проект совершенно независимого сайта про новости из мира программирования.

Проект был хорошо принят сообществом, и был в топе HN в течение некоторого времени. Спасибо за обратную связь.

После релиза я получил несколько просьб об изменении хэш-функции, которую я использовал для того, чтобы хэшировать пароли в БД:

# Turn the password into an hashed one, using
# SHA1(salt|password).
def hash_password(password)
    Digest::SHA1.hexdigest(PasswordSalt+password)
end


Этот код использует SHA1 с солью. Как отметили читатели, это не самый безопасный выбор, поскольку есть способы вычислить SHA1 очень быстро. Через некоторое время люди хором начали твитить и писать в комментах одно и то же предложение: «используй BCrypt». Я предложил использовать вложенные SHA1 в цикле, чтобы избежать добавления новых зависимостей в коде (если вы проверите README, одной из целей является сделать код простым и с как можно меньшим количеством зависимостей). И тут это случилось: догма шифрования. Никаких рассуждений о криптопримитивах и их возможных применениях и комбинациях, просто тупо «используй BCrypt». В глазах этих товарищей программисты — просто тупые дроны, исполняющие гайдлайны, которые не могут ни в коем случае рассуждать о криптографии. Но об этом позже…

Давайте пока сделаем шаг назад и рассмотрим исходную проблему со всем этим, и насколько небезопасен этот код.
Читать дальше →
Total votes 172: ↑161 and ↓11+150
Comments99

Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

Reading time5 min
Views174K
К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

Читать дальше →
Total votes 385: ↑339 and ↓46+293
Comments186

Проксируем Cookies на Nginx при помощи модуля lua-nginx

Reading time4 min
Views31K


Я уже писал о том, как с помощью Nginx трансформировать контент на лету. С момента публикации статьи на базе описанного метода запущен и развивается реальный проект ecommerce. Помимо перевода и трансформации также реализован и SEO рерайт по заветам руководства для начинающих от Google.

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

В чем суть проблемы


Проблема заключается в том, что любой нормальный сервер приложений всегда выставляет Cookie, например для того, чтобы сохранять сессию клиента или корзину с его товаром. Если этот сервер (точнее его администратор) озабочен поддержанием определенного уровня безопасности, то он выставляет в теле Cookie домен и путь, например domain= backend.org; path=/path1. Наш Nginx запущенный в режиме Reverse Proxy замечательно меняет все ссылки в теле документов с backend.org на frontend.org, но не делает этого для кук! Это означает что браузер клиента отвергнет такие куки.

Этот вопрос с давних пор волнует умы администраторов nginx, в рассылках он всплывает по 1-2 раза в год. Большинство вопрошавших, по-видимому, решили свои проблемы подкручивая логику backendа, но не я! После очередного апдейта оригинального сайта стало понятно, что костыль с PHP + Curl тянуть больше невозможно и надо непременно найти решение с помощью Nginx!

Я вернул тему в рассылку, попутно перебирая варианты из ngx_http_perl_module и переменной $upstream_http_set_cookie, даже заглянул в дебри сорсов с призрачной надеждой написать модуль самому. Но все было неудачно пока в один прекрасный момент я не получил письмо от Mikhail Mazursky, который дал ценный совет. Благодаря этому совету я не только с легкостью решил задачу проксирования Cookie, но и получил новый инструмент, с помощью которого можно создать версию 2.0 своего проекта.

Решение


Название этого инструмента lua-nginx-module, который написан еще одним китайским самородком с корнями из Taobao. Из названия легко понять, что речь об языке скриптов Lua встроенном в Nginx — но это больше чем просто интерпретатор! Эти ребята создали полностью неблокируемую реализацию с производительностью десятки тысяч операций в секунду, которая имеет хуки ко всем событиям внутри Nginx. То что раньше можно было реализовать только написав свой модуль на C, теперь можно сделать несколькими строчками на Lua. Заинтересовались?
Тогда добро пожаловать под кат!
Total votes 64: ↑63 and ↓1+62
Comments18

Немного о деревьях

Reading time3 min
Views27K

Вступление


Встречалась ли вам ситуация, когда необходимо реализовать хранение древовидной структуры в реляционной БД?

PostgreSQL on tree

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

В данном топике мы с вами поговорим об одной из тех возможностей, которые существуют для организации хранения деревьев в PostgreSQL — ltree.
Читать дальше →
Total votes 86: ↑84 and ↓2+82
Comments54

Сервер очень точного времени stratum 1 на Garmin GPS

Reading time13 min
Views82K
GPS приемники можно использовать не только для определения местоположения, но и для получения сигналов точного времени. В статье я покажу как настроить сервер точного времени, использующий в качестве источника GPS и работающий с точностью до нескольких микросекунд. В качестве примера я использую приемник Garmin и ОС FreeBSD, но статья также будет полезна обладателям Linux и Windows.



UPD: сервер доступен по адресу stratum1.net Веб-морда: www.stratum1.net.

Читать дальше →
Total votes 96: ↑93 and ↓3+90
Comments79

Выбираем дисковую систему для базы MySQL

Reading time3 min
Views32K
Для многих крупных высоконагруженных веб-проектов зачастую «узким» местом в производительности становится скорость работы базы данных. Можно добавлять память, тюнить те или иные параметры… Но в итоге чаще всего всё упирается в диск.



Мы и сами на собственных проектах сталкивались с подобными «бутылочными горлышками» (bottleneck), периодически наблюдая близкую к 100% утилизацию диска в iostat.

О нашем опыте решения этого вопроса и хотим рассказать вам в этом посте…
Читать дальше →
Total votes 79: ↑65 and ↓14+51
Comments84

Universal Binary JSON — ещё один бинарный JSON

Reading time4 min
Views27K
Статья является вольным переводом информации предоставленной на официальном сайте.

Введение


JSON является широко распространённым и популярным форматом для обмена данными. Его изящность, простота обработки и относительно богатая система типов стали естественным выбором для многих разработчиков, которым необходимо быстро и просто сохранять или случайным образом передавать данные между системами.

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

Для достижения лучших результатов в таких случаях становится полезным использование двоичного формата JSON.
Читать дальше →
Total votes 36: ↑32 and ↓4+28
Comments49

Опыт перехода на DNS-сервер NSD

Reading time3 min
Views17K
В далеком 2007 году, когда Ukrnames был еще маленьким и делал первые шаги, большую часть работы выполняли программисты. Они и разрабатывали систему управления доменами, и тестировали ее, и администрировали сервера, где все это добро работало.

А там где домены, там DNS. А какой самый простой способ сделать DNS-сервер? Поставить вездесущий BIND. Да BIND непростой, а с DLZ патчем, чтобы с MySQL дружил.

Шли годы, система работала, мощности серверов росли. А как водится, пока работает – не трогай. Так бы это все и продолжалось, если бы нагрузка не начала упираться в очередной 8-ми ядерный сервер.

В этот момент пришлось принять волевое решение и построить новую систему DNS-серверов, вместо того чтобы в очередной раз апгрейдить железо для ненасытного BIND+DLZ.

И тут закончилась сказка, и начались суровые будни администратора.
Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments26

Методы борьбы с DDoS-атаками

Reading time5 min
Views116K
Хотелось бы поговорить с вами на актуальную нынче тему, а именно — про DDoS и методы борьбы с ним. Рядовые администраторы знают, что это такое, а вот для большинства вебмастеров это аббревиатура остается загадкой до того момента пока они на личном опыте не столкнуться с этой неприятностью. Итак, DDoS — это сокращение от Distributed Denial of Service (распределенный отказ в обслуживании), когда тысячи зараженных компьютеров отправляют на сервер множество запросов, с которыми он, в последствии, не может справиться. Целью DDoS атаки является нарушение нормальной работы сервера, а в дальнейшем — «падение» сайта или сервера целиком.

Как же от этого защититься? К сожалению, универсальных мер защиты от DDoS-атак до сих пор не существует. Тут необходим комплексный подход, который будет включать меры аппаратного, программного и даже организационного характера.
Читать дальше →
Total votes 123: ↑94 and ↓29+65
Comments66

Электронные деньги. Без купюр

Reading time7 min
Views27K
Нам в Эльбе довольно часто задают вопросы по типу «Я „упрощёнщик“, у меня есть электронный кошелёк в Яндекс.Деньгах, как его в доходах-расходах учитывать и перед налоговой отчитаться?».

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

Читать дальше →
Total votes 97: ↑91 and ↓6+85
Comments70

Производительность пакетов ООП в Perl

Reading time5 min
Views5.8K
Как известно в Perl не очень удобная поддержка объектно-ориентированного программирования. Если хочется программировать с классами, то многое приходится делать вручную. Однако у Perl'а есть очень богатые возможности расширения, поэтому со временем появилось много библиотек (пакетов) обеспечивающих поддержку классов, методов и свойств с синтаксисом различной степени удобности. Но как оказалось, эти пакеты проигрывают в производительности по сравнению с ручной реализацией конструкций ООП. Т.е. с одной стороны, их приятно использовать, а с другой, они делают код медленнее. Мне всегда хотелось узнать насколько медленее становится код, и какие из этих пакетов стоит применять, а какие нет. Поэтому я решил провести небольшое исследование.

Читать дальше →
Total votes 43: ↑40 and ↓3+37
Comments62

Приём и обработка SMS-сообщений на Linux-машине

Reading time5 min
Views42K
В одном из наших свежих проектов команде разработчиков была поставлена задача собрать максимально реальные контактные данные о пользователях нашего сайта. Жаркое обсуждение правильных и неправильных форм регистрации, одно- и двушаговые, дополнение информации по мере пользования сайтом… Казалось поток идей не остановится. Однако ни одна из них не гарантировала, что в результате мы не получим кучу никчемных данных. Валидировать? Можно, но разве все предусмотришь? Активация учетной записи через почтовый ящик для его валидации? Но куча сервисов типа 10 Minute Mail сводят на нет эффект. К тому же, специфика проекта не позволяла слишком растягивать процесс регистрации. Решено было, что пользователь должен зайти, сделать своё дело, а потом уже активировать или нет свою учетную запись. В конце концов прозвучала фраза «А давайте активировать по SMS!». Поиск провайдеров, изучение прайс-листов и отказ от идеи взвалить обработку SMS на стороннюю контору… Стало понятно, что принимать и обрабатывать их придется самим.
Читать дальше →
Total votes 66: ↑64 and ↓2+62
Comments38

Information

Rating
Does not participate
Location
Подгорица, Подгорица, Черногория
Date of birth
Registered
Activity

Specialization

Backend Developer, Database Developer
From 500,000 ₽
Golang
Docker
PostgreSQL
Git
Nginx
High-loaded systems
Kubernetes
Linux
MySQL
Redis