Search
Write a publication
Pull to refresh
22
0
Андрей Щетинин @andrewsch

User

Send message

Pngquant — библиотека и утилита командной строки для сжатия png с потерями

Reading time1 min
Views11K
Вышла новая версия (2.0.1) утилиты.

Утилита позволяет преобразовывать png с 24 и 32 битами на пиксель в png с палитрой (8 бит).

Разработчики утверждают, что утилита в некоторых случаях позволяет уменьшить размер файла аж на 70% от исходного, сохраняя при этом альфа прозрачность (при этом утверждают, что прозрачность обрабатывается в IE6 лучше, чем у 24-битных png — не то, чтобы это всерьёз кого-то заботило...).

Особенности:

— создание новой палитры с использованием алгоритмов векторного квантования
— уникальный дизеринг, добавляющий к картинкам меньше шума, чем стандартный алгоритм Флойда-Стейнберга
— легко интегрируется со скриптам и gui (ну ещё бы, это же командная строка)
— есть ускоренный режим работы, для обработки большого кол-ва изображений

Давайте проверим. Под катом — картинки (сюрприз), i.e. — трафик.
Читать дальше →

Packet crafting как он есть

Reading time14 min
Views121K


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

Scapy — это один из лучших, если не самый лучший, инструмент для создания пакетов вручную.
Утилита написана с использованием языка Python, автором является Philippe Biondi.
Возможности утилиты практически безграничны — это и сборка пакетов с последующей отправкой их в сеть, и захват пакетов, и чтение их из сохраненного ранее дампа, и исследование сети, и многое другое.
Всё это можно делать как в интерактивном режиме, так и создавая скрипты.
С помощью Scapy можно проводить сканирование, трассировку, исследования, атаки и обнаружение хостов в сети.
Scapy предоставляет среду или даже фреймворк, чем-то похожий на Wireshark, только без красивой графической оболочки.
Утилита разрабатывается под UNIX-подобные операционные системы, но тем не менее, некоторым удается запустить ее и в среде Windows.
Эта утилита так же может взаимодействовать и с другими программами: для наглядного декодирования пакетов можно подключать тот же Wireshark, для рисования графиков — GnuPlot и Vpython.
Для работы потребуется права суперпользователя (root, UID 0), так как это достаточно низкоуровневая утилита и работает напрямую с сетевой картой.
И что важно, для работы с этой утилитой не потребуются глубокие знания программирования на Python.
Читать дальше →

Что же там такого тяжелого в обработке исключений C++?

Reading time12 min
Views72K
image
Исключения и связанная с ними раскрутка стека – одна из самых приятных методик в C++. Обработка исключений интуитивно понятно согласуется с блочной структурой программы. Внешне, обработка исключений представляется очень логичной и естественной.

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

Тем не менее, в C++, исключения традиционно рассматриваются буквально как исключительные ситуации, связанные с восстановлением после ошибок. Трудно сказать, является ли это причиной или следствием того, что реализация обработки исключений компиляторами чрезвычайно дорога. Попробуем разобраться почему.
Читать дальше →

Не полагайтесь на цвет при проектировании интерфейсов

Reading time2 min
Views28K
Одной из достаточно важных ошибок в проектировании интерфейса является передача смысла посредством цвета. Тестировщику очень просто проверить любой продукт на допущение этой ошибки. Просто спросите себя — останется ли информация той же, если из картинки убрать цвет?


Мой сайт в своем нормальном состоянии.
Читать дальше →

Яндекс.Карты меняют API. Почему нам понадобилось ломать обратную совместимость в кластеризаторе

Reading time14 min
Views62K
Я работаю в Яндексе, у Яндекса есть карты, а у карт есть API. API – вещь, которая позволяет встроить карты Яндекса на свой сайт. С версии 2.0 наш API умеет кластеризовать метки на клиенте. Вот как выглядят метки до и после кластеризации:

image

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

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

Доставка: решаем задачу оптимизации путей и вскрываем «леваки»

Reading time7 min
Views60K
image
Пример карты из ГИС-системы, на которой обозначены зоны доставки – для разных машин свой цвет.

Сотня курьеров с точки зрения руководителя – это такой филиал ада с краткосрочным планированием. Эта формулировка, конечно, не передаёт ощущения от намертво вставшего Рязанского шоссе, прыгуна на путях на Новокузнецкой и девушку-оператора, которая отправила машину в Зеленоград вместо Москвы. Ну и до кучи – ДТП с грузовиком, везущим срочный товар.

С точки зрения клиента, даже опоздание на 5 минут превращается в трагедию. И это, кстати, правильно и понятно. С точки зрения маркетинга, каждый промах курьера – это потерянный клиент. А вот с точки зрения части водителей – автоматизация – это явное зло. Потому что даже бензин не даёт сливать в своё удовольствие. В реальности мы встречались с настоящими бунтами водителей против внедрения IT-систем.
Читать дальше →

Создание собственных драйверов под Linux

Reading time24 min
Views210K


Многие мои друзья и знакомые крутят пальцем у виска или задаются вопросом: не жмёт ли мне череп, когда узнают, что я пишу драйвера под Linux. Слово “драйвер” окутано каким-то почти мистическим смыслом, и постичь Дао его написания способны лишь избранные гуру.
К счастью это не так. Не знаю, как обстоят дела с написанием драйверов под другие операционные системы, в т.ч. и наиболее популярные, но под linux, вне зависимости от аппаратной архитектуры драйвера пишутся очень просто. Для написания драйвера необходимы базовые знания языка си, представление о работе ОС линукс (базовые), понимание того, что мы хотим получить, желание чтения документации и исходных кодов, ну и усидчивость. Всё.
Вы хотите посмотреть как написать драйвер для своего устройства? Тогда ныряйте под кат!
Читать дальше →

Arcanum и Fallout 2 с сенсорным экраном и стилусом в Windows 8

Reading time7 min
Views60K
Как-то так вышло, что завелся у меня Windows 8 планшет. Не очень удачная модель — громоздкий как помощник, слабоватый как рабочая станция, но зато с стилусом, а самое важное, с 32-битной Win32 системой. Имея некое количество старых игр с распродаж GOG и Steam, я планировал как-нибудь засесть с этой таблеткой и переиграть все, что можно и нельзя. Но вот как-то не хватало времени и настроения, да еще и пробные запуски показали, что играть надо с мышью — курсор от тач-скрина убегал неизвестно куда, да и правый клик долгим нажатием был бы откровенно неудобным. Планшет пылился пол-года в углу до недавней раздачи Fallout от GOG и эта раздача подтолкнула меня к действию. Начинался вечер пятницы, планшет обзавелся USB мышью, а я устроился поудобнее на диване и начал по списку с самого верха — с Arcanum.
Через пол-часа создания персонажа (а ведь это дело очень важное и ответственное!) левая рука с трудом держала устройство, а запястье правой подозрительно начало тянуть, намекая о туннельном синдроме и прочих радостях неудобного хвата. Вспомнив нехорошим словом разработчиков некой эргономичной складывающейся мыши, я полез искать драйвера, патчи или еще хоть что-то, чтобы играть с тачскрина или хотя бы стилуса.
Патчей не нашлось. Единственный похожий драйвер был платным и без пробного режима. Вот в этот момент в голову и пришла идиотская (это я теперь понимаю!) мысль — «там ведь наверняка приходит какой-то WM_TOUCH и неправильно преобразуется в WM_MOUSEMOVE»… Забегая вперед, Арканум теперь у меня полностью управляется с тачскрина, правда, выходные закончились и больше хочется спать, чем играть.
Как не надо проводить викэнд

Кубака. Два года из жизни лемура. Год 2012: Погружение

Reading time8 min
Views6.3K
qbaka
Привет, Хабр.

2 года назад два разработчика из Петербурга начали делать сервиc, который решает тривиальную, но вполне актуальную проблему: мониторинг JavaScript-ошибок в продакшене. Что из этого вышло и легко ли программисту стать стартапером постараемся рассказать в нашей истории. О менталитетах, двух долгих поездках в штаты, стартап-буллшите, интроверсии, победах и медном тазе, много ли денег $200K, почему iPad нужен чаще ноутбука и как получить год бесплатного хостинга.

Давайте знакомиться, нам есть что рассказать.
Читать дальше →

250 строк кода, распознающих дату на русском языке

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



Пример и код в jsFiddle.
Читать дальше →

Простая публикация геоданных на собственной карте на базе 2ГИС

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

Более формально задача сводилась к тому, чтобы дать возможность пользователям задавать некий список гео-объектов, дать им возможность легко и быстро этими объектами управлять и автоматически отображать эти объекты на некоей карте.

Для реализации задумки была выбрана связка Google Docs и API картографического сервиса 2ГИС. Решение получилось действительно простым, в духе знаменитых «30 строк» :)
Читать дальше →

Почему 98% текстов на ваших сайтах не работают. Вообще. И как это починить

Reading time7 min
Views285K

Вот так люди видят вашу страницу

Привет!
Проблема вот в чём. Если зайти на практически любой сайт интернет-магазина или компании с услугами, вы встретите контент. Точнее — отвратительные тексты, которые писали, кажется, маркетологи, воспитанные сеошниками.

Разумеется, можно не делать, как они. Если работать по-умному, то вы поможете и читателям по жизни, и себе в продажах.

По моим примерным подсчётам (усреднение с ряда позиций), конверсии для нас выглядят так:
  • Только название и картинка — около 1,5%.
  • С описанием от производителя — чуть более 2%.
  • С описанием человека, который держал это в руках и знает правила — около 6%.

Ниже — рассказ про то, как мы доводили время на сайте от 3 минут сначала до 6:40, а потом до 20:48. Да-да, двадцати минут сорока восьми секунд для среднего посетителя. Честного среднего, с учётом отказов и по полной выборке.
Читать дальше →

Задача о ранце и код Грея

Reading time4 min
Views42K
Не так давно на Хабре была статья «Коды Грея и задачи перебора». Статья эта скорее, математическая, нежели программистская, и мне, как простому программисту, читать её было невыносимо тяжело. Но сама тема мне знакома, поэтому я решил описать её своим взглядом, а так же рассказать о том, как использовал её в решении задачи о ранце.

image
КДПВ: задача о ранце на живом примере

Предыстория


Всё началось 10 лет назад, когда я учился в девятом классе. Я случайно подслушал разговор учителя по информатике, рассказывающего задачку кому-то из старших: дан набор чисел, и ещё одно число — контрольное. Надо найти максимальную сумму чисел из набора, которая не превышала бы контрольное число.

Задача почему-то запала мне в душу. Вернувшись домой, я быстро накатал решение: наивный перебор всех возможных сумм с выбором наилучшего. Сочетания я получал, перебирая все N-разрядные двоичные числа и беря суммы тех исходных чисел, которым соответствуют единицы. Но я с огорчением обнаружил, что при количестве элементов начиная где-то с 30, программа работает очень долго. Оно и не удивительно, ведь время работы такого алгоритма — n*2n (количество сочетаний, умноженное на длину суммы).
Чем же всё закончилось?

Reverse engineering на собеседовании: как мы нанимаем на работу

Reading time11 min
Views134K
Привет. Меня зовут Алексей Маланов, я пять лет проработал руководителем Отдела антивирусных исследований в «Лаборатории Касперского». Хочу поделиться с вами своим опытом найма вирусных аналитиков. Пост, надеюсь, будет интересен и полезен в первую очередь молодым специалистам, которые только собираются сделать первый шаг в карьере. Ну а матерым IT-шникам тоже может быть любопытно, какие же вопросы задают на собеседовании в ЛК. В свое время у меня в команде было несколько десятков человек и нанимали мы постоянно. Я стремился присутствовать на каждом собеседовании лично, чтобы быть уверенным, что человек будет что надо.


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

Быть менеджером среднего звена — не проблема, если вы готовы к этому

Reading time8 min
Views47K
Точнее было бы сказать, если у вас есть способности к этому.

В продолжение темы, затронутой в этом посте.

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

— Вам, конечно,  известно,  как  осуществляется  на  Земле  программа образования. Практически любой человек  может  усвоить  любые  знания,  но каждый индивидуальный мозг лучше подходит для одних видов знаний, чем  для других.  Мы  стараемся  по  возможности  сочетать   устройство   мозга   с соответствующими  знаниями  в  пределах  квоты  на   специалистов   каждой профессии.
А.Азимов, Профессия


Удивительно, как написанное фантастом претворяется в жизнь. Сегодня некоторые ученые (Сергей Савельев) говорят о возможности сделать систему анализа врожденных способностей и талантов человека, другие более аккуратны в оценках (Дробышевский мне ответил на вопрос, что есть предрасположенности врожденные, но они перекрываются средой). В одном все сходятся, что именно мозг определяет способности человека и то, как у него пойдет та или иная деятельность; и что мозги у нас у всех уникальные и постоянно изменяющиеся (связи постоянно перестраиваются).
Читать дальше →

Печенье от Ватсона

Reading time3 min
Views32K
Суперкомпьютер IBM Watson уже успел продемонстрировать успехи в медицине и телевикторинах. Его планируют использовать в службах техподдержки вместо живых операторов. Однако все эти задачи связаны скорее с нахождением правильного ответа на запросы пользователей на базе известной информации. В IBM считают, что настоящий искусственный интеллект должен уметь находить творческие решения, создавать и изобретать новое, а не только анализировать старое.

Для развития креативных способностей Ватсона его создатели выбрали кулинарное искусство. Это весьма удобный испытательный полигон: приготовление пищи — очень «человеческий», интуитивный процесс, слабо поддающийся алгоритмизации и стандартизации. А оценить результат способен любой человек с улицы. Миндально-шоколадное печенье в испанском стиле, клубничный десерт по-эквадорски, помидоры гриль на гренках с шафраном — эти и другие блюда, созданные Ватсоном, уже были приготовлены и с удовольствием съедены в ходе экспериментов. А пару недель назад был опубликован препринт статьи с описанием алгоритмов и математических моделей, которые Ватсон использует для создания оригинальных рецептов.

image
Печенье, испечённое по рецепту Ватсона
Читать дальше →

Поверхностно об основах рыночной архитектуры и алготрейдинге

Reading time37 min
Views107K
Многие знают, что одно из первых, что говорят в техническом ВУЗе — забыть все, что проходили в школе. Данная рекомендация актуальна и здесь. Полезно иногда с чистого листа начать.

На данный момент все рынки автоматизированы. По этой причине какие-то экономические объяснения ценообразования являются некими рудиментами. Рулят алгоритмы + некое ручное вмешательство.

Задача каждого торгового алгоритма всегда одна и та же — принести денег владельцу. Алгоритм тем лучше, чем больше денег он в состоянии принести.
Читать дальше →

Сделай свой AngularJS: Часть 1 — Scope и Digest

Reading time34 min
Views89K
Angular — зрелый и мощный JavaScript-фреймворк. Он довольно большой и основан на множестве новых концепций, которые необходимо освоить, чтобы работать с ним эффективно. Большинство разработчиков, знакомясь с Angular, сталкиваются с одними и теми же трудностями. Что конкретно делает функция digest? Какие существуют способы создания директив? Чем отличается сервис от провайдера?

Несмотря на то, что у Angular довольно хорошая документация, и существует куча сторонних ресурсов, нет лучшего способа изучить технологию, чем разобрать ее по кусочкам и вскрыть ее магию.

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

After Reset — игра в которую сложно поверить даже увидев (Kickstarter Campaign)

Reading time16 min
Views112K


Страница проекта на Кикстартер — (Kickstarter link page)
Страничка проекта на Фейсбуке — (Facebook game page)
Официальный сайт разработчика After Reset Official web-site
Гейм-плейное видео на Youtube Video-link
Эксклюзивное видео снятое специально для Хабра на Vimeo Video-link

Так уж получается, что под Новый Год разработчики начали выбрасывать на Кикстартер проекты один краше другого. Если честно – не знаешь, о каком из них писать первым. Их действительно много, и многие из них достойны огласки. Сегодня мне хочется остановить наше внимание на проекте After Reset. Также мне подумалось, что будет хорошей практикой брать интервью у разработчика, по возможности с эксклюзивными материалами. Все-таки Хабр, крупнейший российский IT-ресурс, как тут обойтись без редких артефактов?



Если кратенько, — это еще один проект, претендующий на пьедестал нашего любимого пустынного изометрического друга с блек-джеком и сами знаете кем. Претензия серьезна столь, что впору усомниться. И я усомнился. И не стесняюсь этого. Сомневаюсь, кстати, даже после того как ознакомился с редкими публикациями в сети, видео и даже погонямши билд для прессы (именно с этой версии и сняты скриншоты). Выглядит блюдо отменно. Особенно на фоне Пустынного Гамбургера. Откуда же сомненья?

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


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

FindBugs помогает узнать Java лучше

Reading time7 min
Views52K
Статические анализаторы кода любят за то, что они помогают найти ошибки, сделанные по невнимательности. Но гораздо интереснее то, что они помогают исправить ошибки, сделанные по незнанию. Даже если в официальной документации к языку всё написано, не факт, что все программисты это внимательно прочитали. И программистов можно понять: всю документацию читать замучаешься.

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

В этом посте я расскажу о некоторых тонкостях Java, о которых я узнал в результате использования статического анализатора FindBugs. Возможно, какие-то вещи окажутся неожиданными и для вас. Важно, что все примеры не умозрительны, а основаны на реальном коде.

Тернарный оператор ?:


Казалось бы, нет ничего проще тернарного оператора, но у него есть свои подводные камни. Я считал, что нет принципиальной разницы между конструкциями
Type var = condition ? valTrue : valFalse;
и
Type var;
if(condition)
  var = valTrue;
else
  var = valFalse;

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

Information

Rating
Does not participate
Location
Реховот, Мерказ, Израиль
Date of birth
Registered
Activity