Search
Write a publication
Pull to refresh
64
0
Денис Панаскин @Goliath

User

Send message

Потоки или события

Reading time3 min
Views14K
Существует два способа обрабатывать параллельные запросы к серверу. Потоковые (threaded, синхронные) серверы используют множество одновременно выполняющихся потоков, каждый из которых обрабатывает один запрос. В это время событийные (evented, асинхронные) серверы выполняют единственной цикл событий, который обрабатывает все запросы.

Чтобы выбрать один из двух подходов, нужно определить профиль нагрузки на сервер.
Читать дальше →

Как правильно читать объявления в Си

Reading time7 min
Views47K
Даже совсем зеленые программисты на Си, не испытывают проблем с чтением таких объявлений:
int foo[5]; // foo массив из 5 элементов типа int
char *foo; // foo указатель на char
double foo(); // foo функция возвращающая значение типа double

Но как только объявления становятся немного сложнее, проблематично точно сказать что это. Например:
char *(*(**foo[][8])())[];

Как же научиться их читать?

Hetzner dedicated или в поисках дешевого хостинга

Reading time7 min
Views21K
Хочу рассказать о том, как я озадачился поиском недорогого хостинга с поддержкой Java.
В начале решил, что неплохо бы купить железку, поставить ее дома, дать ей хороший канал и радоваться жизни. Но потом решил подсчитать примерную ежемесячную стоимость такого решения, и вышло, что 200Вт блок будет кушать ~3-4кВт в месяц (100-150Вт будет кушать железо), и это обойдется в 350-400 руб (у меня газовая плита).
Прибавим сюда хороший канал+ип, и имеем порядка 750 рублей (и это без резервного!).
Итого около 1000 рублей в месяц и еще порядка 8000 рублей уйдет разово на покупку компонентов, которые могут сойти за «файлопомойку» + UPS (>=2000 р) и мы видим что самостоятельно хостить «пару сайтов и почту» становится напряжных делом.
Кто-то предложит окупить это размещением проектов — но кто согласится платить на хостинг, которые висит дай-то бог на 30 мегабитах, при этом имеет шансы быть в offline из-за того, что кто-то перерезал провод в щитке, или у провайдера «опять сгорел dns».
Начал поиск я с матушки России и нашел
Читать дальше →

Атака на отказ в обслуживании методом slow HTTP POST

Reading time5 min
Views42K
Доброго времени суток, уважаемые хабровчане!
Я хочу рассказать вам об относительно новом и интересном, на мой взгляд, механизме атаки на отказ в обслуживании — Slow HTTP POST.
Поиск показал отсутствие на хабре информации по теме, что несколько удивило меня, и я решил восполнить это досадное упущение. Тема не нова, но, как показали мои небольшие исследования, более чем актуальна. Забегая вперед, скажу, что полученные мной результаты позволяют говорить о существовании широко доступной технологии, позволяющей с одного компьютера с небольшим каналом «укладывать» небольшие и средние сайты, а при использовании нескольких машин с повсеместно распространенным сейчас скоростным доступом в Интернет причинить немало проблем и более серьезным проектам. Всех заинтересовавшихся покорнейше прошу пожаловать под хабракат.
Читать дальше →

Нечёткий поиск в тексте и словаре

Reading time13 min
Views270K

Введение


Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
  • Расстояние Левенштейна
  • Расстояние Дамерау-Левенштейна
  • Алгоритм Bitap с модификациями от Wu и Manber
  • Алгоритм расширения выборки
  • Метод N-грамм
  • Хеширование по сигнатуре
  • BK-деревья
А также проведу сравнительное тестирование качества и производительности алгоритмов.
Читать дальше →

Автоматическое тестирование и базы данных

Reading time11 min
Views34K
Много примеров начального и среднего уровней по юнит-тестированию в любом языке показывают как просто можно проверять логику Ваших приложений с помощью юнит-тестов. Однако, не все так просто бывает при тестировании приложений, в которых центральную роль играет база данных, а именно таких большинство среди веб-приложений. Те, кто занимается юнит-тестированием своих приложений, думаю, не раз сталкивались с проблемой тестирования БД. Почти 2 года назад на хабре уже была статья на эту тему, но хотелось бы ее раскрыть больше.
Читать дальше →

Ищем быстро, еще быстрее

Reading time3 min
Views22K
Натолкнулся в разделе QA на интересный вопрос. Ответ на него заставил написать эту статью как бОлее полный ответ на вопрос «как организовать поиск по множеству параметров, как в Яндекс-маркете, например».

Я знаю, что на Хабре, да и вообще есть много сторонников noSQL решений (сам не без греха), но все же я сторонник сначала подумать, а уже потом выбирать решение.

Итак, что имеем в «ДАНО»
  • Имеем 120 чекбоксов — вариант 1/0
  • Имеем 30 «радио» с выбором «да/нет/не важно»
  • Имеем 2-3 слайдера для указания диапазона цен/размера чего нить
  • Имеем самое главное: 12 млн записей в БД.
  • Имеем Select * From tovar Where (wifi=true) and (led=false) and (type=3) and ….остальные параметры …; со временем выполнения близкому к истерике клиента.

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

TOP'ай сюда

Reading time5 min
Views184K
Обзор практически всех *top утилит под linux (atop, iotop, htop, foobartop и т.д.).

top

Все мы знаем top — самую простую и самую распространённую утилиту из этого списка. Показывает примерно то же, что утилита vmstat, плюс рейтинг процессов по потреблению памяти или процессора. Совсем ничего не знает про загрузку сети или дисков. Позволяет минимальный набор операций с процессом: renice, kill (в смысле отправки сигнала, убийство — частный случай). По имени top суффикс "-top" получили и все остальные подобные утилиты в этом обзоре.

atop


Atop имеет два режима работы — сбор статистики и наблюдение за системой в реальном времени. В режиме сбора статистики atop запускается как демон и раз в N времени (обычно 10 мин) скидывает состояние в двоичный журнал. Потом по этому журналу atop'ом же (ключ -r и имя лог-файла) можно бегать вперёд-назад кнопками T и t, наблюдая показания atop'а с усреднением за 10 минут в любой интересный момент времени.

В отличие от top отлично знает про существование блочных устройств и сетевых интерфейса, способен показывать их загрузку в процентах (на 10G, правда, процентов не получается, но хотя бы показывается количество мегабит).

Незаменимое средство для поиска источников лагов на сервере, так как сохраняет не только статистику загрузки системы, но и показатели каждого процесса — то есть «долистав» до нужного момента времени можно увидеть, кто этот счастливый момент с LA > 30 создал. И что именно было причиной — IO программ, своп (нехватка памяти), процесор или что-то ещё. Помимо большего количества информации ещё способен двумя цветами подсказывать, какие параметры выходят за разумные пределы.
Читать дальше →

Простой нагрузочный тест с Apache JMeter

Reading time7 min
Views288K
По моим наблюдениям, разработчики довольно редко делают нагрузочное тестирование сайтов и веб-приложений. И бывает так, что выставят проект в Интернет, а тут вдруг посетители начнут ходить (хабраэффект, к примеру, случился), и сайт в самый подходящий момент ложится или начинает не по-детски тормозить.

Почему бы не избежать этих неприятностей, прогнав нагрузочный тест?

Наверное, кого-то останавливает неверное представление о том, что нагрузочное тестирование — это очень сложное дело, требующее специальных знаний. Однако не боги горшки обжигают. Если выбор — тестировать не слишком профессионально, или не тестировать вовсе, я бы выбрал первое. Тем более, что организовать примитивный тест производительности очень даже просто. Можно воспользоваться онлайн-средствами (см., например, Нагрузочное тестирование по-быстренькому), а можно замутить все своими руками, это ненамного сложнее.

Под катом рассказываю, как с нуля организовать незамысловатый нагрузочный тест сайта при помощи Apache JMeter.
Читать дальше →

Рецепт нагрузочного тестирования на JMeter

Reading time4 min
Views37K

Стоит ли вообще браться за JMeter


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

Составление сценария


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

Знаешь ли ты JAVA, %username%?

Reading time11 min
Views150K
JAVA Evil EditionНедавно я сдавал экзамен Oracle Certified Professional Java Programmer (бывший Sun Certified), и за время подготовки прорешал огромное количество различных задачек. Отдельные задачки по джаве иногда появляются на хабре и вызывают немалый интерес, поэтому я решил поделиться накопленным и сделать небольшую подборку.

Итак, ниже представлен десяток наиболее, на мой взгляд, интересных задач по Java SE из более чем 1000, проработанных мной. Сложность варьируется от средней до ооооооочень сложной. Решение большинства задач практически не требует знания API, достаточно логики и фундаментальных основ Java.

К слову, сложность экзамена Oracle Certified Professional Java Programmer гораздо ниже чем сложность данного теста, поэтому все, кто правильно ответит хотя бы на половину этих вопросов, может смело сдавать этот экзамен без всякой подготовки.

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

ВНИМАНИЕ: во второй половине статьи — ответы и подробные пояснения по соответствующим нюансам JAVA.

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

Знаешь ли ты JAVA, %username%? Часть вторая

Reading time5 min
Views51K
JAVA Evil EditionВ начале января я написал пост с интересными тестовыми задачками по Java. Он вызвал достаточно большой интерес, интересные задачки еще остались, поэтому продолжим.

Сразу отвечу на некоторые вопросы, ответы на которые могли затеряться в комментах.
Во-первых, спрашивали, что почитать по теме. Очень рекомендую эту книжку. На русском не встречал, но читается она почему-то гораздо легче большинства книг по программированию, так что для большинства это не должно стать проблемой. Во-вторых, спрашивали где взять таких задачек. Тут что-то конкретное не посоветую, задачи из разных источников, в том числе некоторых нефришных наборов тестов, поэтому как вариант можно обратить внимание на источники, ссылки на которые есть в комментах к первой части статьи.

Так получилось, что в данную часть попали более легкие задачи, так что результаты должны быть лучше. Итак, очередной тест под хабракатом (Осторожно, во второй половине ответы и пояснения).
Читать дальше →

Unity3D для начинающих — Туториал 1

Reading time10 min
Views574K

Предисловие


Хабралюди проявили некоторый интерес к Unity, поэтому открываю этим постом цикл туториалов, освещающих основные моменты работы с объектом (цикл неопределённой пока длительности — если кому окажется полезным продолжу).

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

О совместимости Android-приложений на различных устройствах

Reading time4 min
Views24K
Не секрет, что число устройств на Android велико, они различаются по железу, размерам и качеству экрана, мощности процессора и др.. В отличии от iPhone- программистов, которые знают наверняка на каком устройстве будет запущено их приложение, Android-разработчикам необходимо уделять внимание совместимости приложений с различными устройствами.

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

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

Использование Android Search Dialog. Часть 2 — Recent Query Suggestions

Reading time8 min
Views5.7K
image

Статья рекомендуется к прочтению тем, кто осилил первую часть. В статье объясняется, как модифицировать ваше приложение так, чтобы к диалогу добавлялись подсказки по недавним поисковым запросам. Для понимания кода и теории (помимо той, что требовалась в первой части) требуется знание контент-провайдеров. Его можно почерпнуть из официального гайда.

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

Алгоритм Дейкстры. Поиск оптимальных маршрутов на графе

Reading time3 min
Views439K
Из многих алгоритмов поиска кратчайших маршрутов на графе, на Хабре я нашел только описание алгоритма Флойда-Уоршалла. Этот алгоритм находит кратчайшие пути между всеми вершинами графа и их длину. В этой статье я опишу принцип работы алгоритма Дейкстры, который находит оптимальные маршруты и их длину между одной конкретной вершиной (источником) и всеми остальными вершинами графа. Недостаток данного алгоритма в том, что он будет некорректно работать если граф имеет дуги отрицательного веса.

Для примера возьмем такой ориентированный граф G:

image

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

Использование Android Search Dialog. Пример простого приложения

Reading time11 min
Views39K
image

Данная статья предназначена для тех, кто уже написал свой HelloWorld для Android и знает, что такое Activity и Intent, а так же где находится манифест, и зачем нужны layout'ы. В противном случае, можно ознакомиться с этим материалом, например, на developer.android.com.

В статье описывается создание несложного приложения, которое использует механизм реализации поиска, основанный на возможностях встроенного фреймворка. После прочтения вы также сможете настроить свое приложение таким образом, чтобы оно осуществляло поиск по данным, используя стандартный Android Search Dialog.
Читать дальше →

[Программирование] Работа со строкой состояния в Android

Reading time7 min
Views40K
image
Статья рассказывает о том как работать со строкой состояния в Android. Статья рассчитана на начинающих программистов под Android только осваивающих разработку под платформу. Также стоит заметить что строка состояния в большей степени используется для уведомления пользователя о каких либо событиях произошедших в системе, что по целевой задаче роднит её со всплывающими уведомлениями Toast. На Хабрахабре уже имеется достаточно полная статья о работе с Toast, и данный пост лишь развивает тему уведомлений.

Сам текст статьи писался для песочницы, и по сути Hello world как он есть. Сейчас меня интересует интересно ли вообще кому либо это направление, или же оно того не стоит.

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

Ускоряем запуск браузера FireFox

Reading time2 min
Views36K
Ещё давно приметил, что мой любимый инструмент, запускается значительно шустрее после установки, чем после многомесячного, активного использования браузера. Заметил, но как распорядится этим знанием мыслей не было. И вот, только что наткнулся на полезную тему, где описано это узкое место, а также дан ещё один совет по ускорению запуска браузера.

И так узкое место при запуске это загрузка .sqlite, базы данных вашего профиля. При интенсивной работе с Фоксом, базы разрастаются, в них появляются «пустые места», ну и главный недостаток, файл базы данных становится сильно фрагментированными. Для решения подобной проблемы существует специальная команда «очистки», точнее операция пересоздаёт файл базы, но уже без пустых мест. Для этого нужно проделать следующее:
Читать дальше →

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity