Pull to refresh
1
0
Дмитрий Баранов @dem0n3d

Пользователь

Send message

impress.js — презентации на CSS3, рвущие шаблон

Reading time4 min
Views18K
Даже хорошие презентации, не содержащие списков из двадцати пунктов восьмым кеглем и вызывающих рвотный рефлекс картинок из бесплатных сборников клипарта “встречи и партнёрство” или “офисная жизнь”, следуют давным-давно заданному стандарту, без изменений перенесённому в офисные пакеты из мира старинных диапроекторов. Презентация всегда представляет собой набор прямоугольных картинок одинакового формата и размера. Иногда между ними добавляют переходы и анимацию, раздражающую не меньше разноцветных надписей и бессмысленно улыбающихся абстрактных офисных работников. Стандартом де-факто для хорошей презентации давно стала последовательность статичных слайдов без всякого мельтешения, с очень коротким текстом крупным шрифтом и несколькими тщательно подобранными фотографиями или скриншотами.

Основанный на трансформациях и переходах CSS3, javascript-фреймворк для создания презентаций impress.js выходит за рамки понятия “слайд” и позволяет строить презентации в открытом, неограниченном трёхмерном пространстве. Источником вдохновения для него послужил сервис prezi.com. Репозиторий impress.js на Гитхабе появился меньше месяца назад, но уже стал одним из самых популярных. Нетерпеливые могут посмотреть небольшую демку здесь, а остальные — создать пример необычной презентации прямо сейчас.
Читать дальше →
Total votes 101: ↑96 and ↓5+91
Comments46

Классическая механика: о диффурах «на пальцах»

Reading time7 min
Views18K
Недавно взглянул на сорцы Farseer Physics Engine. Стало интересно как в этом движке реализован динамический объект. Как и ожидал, не встретил там привычных мне дифференциальных уравнений и их дискретных реализаций в виде разностных уравнений или дискретных моделей пространства состояний. Главная отмазка заявляемая причина отказа от «честной» механики во многих игровых физических движках — излишняя сложность работы с дифференциальными уравнениями и слишком большая вычислительная нагрузка.
Под катом мои изыскания на эту тему
Total votes 83: ↑79 and ↓4+75
Comments21

Пишем простой плагин к веб-браузеру используя FireBreath

Reading time3 min
Views8.5K
Как уже писали ранее на Хабре, FireBreath — это фреймворк для разработки кросс-платформенных плагинов, используя технологии NPAPI [1] и ActiveX Control hosts, что позволит использовать плагин в следующих браузерах: Gecko/Firefox, Google Chrome, Apple Safari, Opera, Microsoft Internet Explorer 6, 7, and 8.

Мне пригодился этот фреймворк для следующего: в проекте (веб-приложение) использовался Java-апплет для печати Pdf-файлов напрямую на принтер, но из-за различных проблем с Java Policy и правами, не удалось добиться стабильной работы апплета + различные мелкие баги, как-то захват апплетом фокуса после загрузки или зависание браузера во время печати. Возможно, просто руки кривые. В общем, печать то работала, то нет, и это никого не устраивало.

Как вариант было решено попытаться написать плагин, который позволит избавиться от апплета и печатать файлы быстро и надежно. Собственно, печать осуществляет теперь тот же Java код, переписанный в виде jar файла. Однако прослойкой, которая осуществляет взаимодействие между джавой и клиентским кодом, является плагин браузера.

Теперь напишем простой «считай, ничего не делающий» плагин, который будет писать данные в файла в локальной файловой системе.
Читать дальше →
Total votes 57: ↑53 and ↓4+49
Comments4

Qt Quick: лучшие приёмы

Reading time1 min
Views12K
Доброе утро, Хабр!

Мы начинаем вести новую серию постов в блоге, посвящённую лучшим трюкам и приёмам в фреймворке Qt Quick, концентрируя внимание на языке QML. Весь цикл постов пишет Майкл Хассельман. Он работает в Openismus и известен разработкой виртуальной клавиатуры для Nokia N9 (MeeGo Harmattan 1.2).

Посты, написанные Хассельманом, должны показать лучшие приёмы разработки в Qt Quick путём изучения того, как использовать основные концепции рационально, и как оградить себя от распространённых ошибок.

Сразу стоит отметить, что базовые знания Qt Quick в целом и языка QML в частности, приветствуются. Введение в QML и небольшой урок — отличный способ освежить или получить эти начальные знания. Введение в язык можно по-шустрому прочитать во время завтрака — этого будет достаточно для понимания цикла статей, — а вот урок стоит прочитать внимательно, полностью разобравшись со всеми деталями.

Серия постов начнётся на следующей неделе с изучения связывания свойств и демонстрации гибкости и мощности языка. Последующие записи этой серии будут публиковаться в этом же блоге с периодичностью раз в неделю. Посты другого плана, разумеется, никуда не денутся.
Total votes 32: ↑28 and ↓4+24
Comments6

Ничего не нашлось в поиске по сайту? Нет проблем

Reading time4 min
Views9K
Представляю вашему вниманию перевод статьи под названием "Site Search: Strategies for No Results Found" от Linda Bustos. Перевели в компании UXDepot специально для пользователей Хабрахабра с одобрением компании Elastic Path.


Эта статья написана по мотивам книги Грега Ньюдельмана "Designing Search: UX Strategies for Ecommerce Success". Необычно видеть книгу на 300 страниц, посвященную одному единственному аспекту создания интернет-магазинов, но оптимизация поиска по сайту действительно заслуживает такого внимания!

image

Есть одна составляющая оптимизации поиска по сайту, на которой мы часто зацикливаемся: как удержать пользователя на сайте, даже если в результате поиска ему не удалось найти то, что требовалось. Статья основана на разделе "No Search Results Strategy: Not a Zero-Sum Game" вышеупомянутой книги. Ньюдельман говорит о том, что «нет простого набора правил, которые гарантировали бы успешное внедрение страницы результатов поиска в случае, когда не было найдено ни одного совпадения. Но есть четыре принципа, от которых стоит отталкиваться»:
Читать дальше →
Total votes 92: ↑88 and ↓4+84
Comments9

Jython-консоль вашего приложения

Reading time12 min
Views17K
Расскажу вам как я использую интерактивную консоль Jython для ускорения разработки Bean'ов в поддерживаемом мной приложении.

Суть вопроса


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

По долгу службы пришлось поддерживаю очень древнее приложение с громадной кодовой базой. Хуже всего то, что оно собирается оно от минуты до семи и ещё минуты три стартует. Опять же каждому программисту не сложно представить себе какой ад написать энное количество кода, а затем ловить NullPointerException'ы от внешних сервисов с таким длинным циклом Implement->Compile->Start Deploy->Wait->Smoke->Wait->Test.

Возможен также другой вариант. Есть энное количество кода в классе, который нужно адаптировать под выполнение задачи, близкой уже им выполняемой. А теперь представьте, что этот класс реализован в рамках Java 1.4. Он не работает с Generic'ами, потому что они были добавлены только в Java 1.5. Кроме того программисты, ранее занимавшиеся поддержкой системы, этим активно пользуются и суют в коллекции возвращаемые методами других классов, что не попадя вплоть до анонимных реализаций java.lang.Object.

Поев кактус пару дней я почувствовал, что начинаю сходить с ума от того, что пишу пять-двадцать строк работающего кода в день.
Как я сохранил здравый ум и твёрдую память
Total votes 28: ↑26 and ↓2+24
Comments16

Ускоряем Selenium-тесты

Reading time3 min
Views26K
Все, кто использует Selenium тесты в своём билде, знают, что это достаточно дорогое удовольствие, потому что очень медленно. Из-за этого многие не запускают билд полностью перед коммитами или, вообще, запускают билд только по ночам. Итак, делаем наши тесты быстрее.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments13

Визуализация каталогов на Python средствами NetworkX

Reading time5 min
Views17K
Листая на Хабре раздел Python наткнулся на интересную статью о библиотеке NetworkX. Впечатлившись красивыми графами, решил повысить свой python-скилл и покопаться в networkx.
image

Пролог


Первый вопрос — откуда взять данные для визуализации? Генерировать случайные не интересно, они и в комплекте модуля были. Тут вспомнилась Dos утилитка tree, выводящая каталоги файловой системы в виде дерева. Решено было написать красивый аналог на Python и нарисовать все в networkx с помощью matplotlib.
шоу продолжается
Total votes 49: ↑48 and ↓1+47
Comments35

WebSocket: Реализация web-приложения с использованием Jetty Web Socket. Часть 1

Reading time9 min
Views88K
Добрый день, Хабражитель!

Поздравляю всех и каждого с великим Днем Программиста! Желаю рабочего кода, уверенных сокетов и самых продвинутых пользователей!

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

Для реализации такой задачи есть три решения:
  • «бесконечный iframe»,
  • используя XMLHttpRequest (a.k.a. Ajax),
  • используя WebSocket.

Первое решение я сразу «отметаю» (причины объяснять не буду, web-разработчики меня поймут).

Второе решение нравится гораздо больше, но у него есть свои минусы:
  • браузер отправляет запрос каждую секунду создавая лишнюю нагрузку на:
    • сервер;
    • ОС, на которой работает браузер;
    • и еще раз на сервер, так как сервер постоянно выполняет запрос БД на выборку последних уведомлений.
  • тяжело отследить онлайн-статус пользователя (то есть нужно, например, хранить сессии в БД и постоянно мониторить каждую на timeout).

Третье решение — как раз то, что доктор прописал.

Итак, WebSocket.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments29

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

Reading time3 min
Views40K
Жизнь веб-разработчика омрачена сложностями. Особенно неприятно, когда источник этих сложностей неизвестен. То ли это проблема с отправкой запроса, то ли с ответом, то ли со сторонней библиотекой, то ли внешний API глючит? Существует куча различных прилад, способных упростить нам жизнь. Вот некоторые инструменты командной строки, которые лично я считаю бесценными.
Читать дальше →
Total votes 227: ↑217 and ↓10+207
Comments30

Быстрое создание нагрузочных тестов на JMeter для web-сайтов

Reading time5 min
Views151K
imageДля любого программного приложения, предназначенного для массового обслуживания пользователей, необходимо проводить нагрузочное тестирование на предмет его надежности и отказоустойчивости. А так как любой web-сайт — это по своей сути система массового обслуживания, то проверка его на отказоустойчивость всегда является неотъемлемой частью разработки. Существуют различные решения для проведения нагрузочного тестирования веб-приложений. Я не буду сейчас описывать их подробно, про некоторые из них есть упоминания здесь.

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

Для тех кто ни разу не использовал JMeter, рекомендую для начала почитать базовые обзоры, например, Простой нагрузочный тест с Apache JMeter. Когда я первый раз запустил данную программу, первая мысль была разобраться во всем методом «тыка», но как выяснилось это вообще нереально, и метод «тыка» неприменим к JMeter. Поэтому если хотите его использовать, то сразу открывайте мануал, поверьте, вам придется заглядывать туда очень часто, пока полностью не разберетесь, что и как. Я же здесь сейчас опишу самое очевидное и важное, а именно: как собственно создавать нагрузочные тесты. Если бы я в свое время сразу нашел подобную статью, то сэкономил бы без малого день на изучении этой софтины.
Читать дальше →
Total votes 74: ↑71 and ↓3+68
Comments35

Определение части речи слов в русском тексте (POS-tagging) на Python 3

Reading time9 min
Views95K
Пусть, дано предложение “Съешьте еще этих мягких французских булок, да выпейте чаю.”, в котором нам нужно определить часть речи для каждого слова:

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

Зачем это нужно? Например, для автоматического определения тегов для блог-поста (для отбора существительных). Морфологическая разметка является одним из первых этапов компьютерного анализа текста.
Узнать, как это реализовать на Python 3
Total votes 82: ↑81 and ↓1+80
Comments74

Введение в OpenCL

Reading time11 min
Views62K
Эта статья посвящена основам программирования на OpenCl. OpenCl -это язык программирования на GPU/CPU, по своей структуре близкий к стандарту c99. Его развитием занимается Khronos Group, где на их сайте доступна полная документация. Во избежание полемики на тему «ну это же всё тривиально, достаточно покопаться в инете» сразу оговорюсь: в рунете информация на эту тематику практически полностью отсутствует, а в западном инете доступна весьма в разрозненном состоянии на десятке сайтов. Здесь будет приведена некоторая компиляция базовых принципов, максимально упрощающая начинающему программисту жизнь, а так же позволяющая с самого первого проекта максимально задействовать вычислительные мощности видеокарты. Людям написавшим 2-3 серьёзных программы на OpenCl это будет уже неинтересно. Статья в некотором смысле является продолжением моей прошлой статьи.
Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments26

Chosen: сделай выпадающие списки более дружественными

Reading time1 min
Views54K
Плагин Chosen создан для оформления красивых и удобных выпадающих списков с помощью jQuery и Prototype. Для установки плагина достаточно просто скачать файлы и прописать одну строчку:

$(".chzn-select").chosen()
(версия для jQuery)

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

Поскольку Chosen заменяет стандартный элемент HTML, то не нужно беспокоиться, как он работает с браузерами без поддержки JavaScript. Также не нужно ничего менять в бэкенде: формы сабмиттятся как обычно, изменения только в пользовательском интерфейсе.

Некоторые форки:
Chosen для MooTools
Модуль Chosen для Drupal 7
Total votes 264: ↑250 and ↓14+236
Comments57

Построение индекса для поисковой машины

Reading time4 min
Views14K
Полное содержание и список моих статей по поисковой машине будет обновлятся здесь.

В предыдущих статьях я рассказывал про работу поисковой машины, вот и дошел до сложного технически момента. Напомню что разделяют 2 типа индексов – прямой и обратный. Прямой – сопоставление документу списка слов в нем встреченного. Обратный – слову сопоставляется список документов, в которых оно есть. Логично, что для быстрого поиска лучше всего подходит обратный индекс. Интересный вопрос и про то, в каком порядке в списке хранить документы.

На предыдущем шаге DataFlow от модуля-индексатора мы получили кусочек данных в виде прямого индекса, ссылочной информации и информации о страницах. Обычно у меня он составляет около 200-300mb и содержит примерно 100 тысяч страниц. Со временем я отказался от стратегии хранения цельного прямого индекса, и храню только все эти кусочки + полный обратный индекс в нескольких версиях, чтобы можно было откатиться назад.

Устройство обратного индекса с виду, простое, – храним файл, в нем в начале таблица адресов начала данных по каждому слову, потом собственно данные. Это я утрировано. Так получается самый выгодный для оптимизации скорости поиска формат — не надо прыгать по страницам — как писали Брин и Пейдж, — 1 seek, 1 read. На каждой итерации перестроения, я использую 20-50 кусочков информации описанных выше, очевидно загрузить всю инфу из них в память я не могу, тем более что там полезно хранить еще кучу служебных данных об индексе.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments9

Социальная сеть как инструмент научной работы

Reading time4 min
Views12K
Важным этапом научного исследования является выбор темы и оценка степени разработанности проблемы. В современных условиях лавинообразного роста информации проблема выбора тема усложняется еще больше: ученый оказывается просто не в состоянии отслеживать все публикации в собственной области (не говоря уже о смежных областях). Кроме того, на начальном этапе исследования достаточно сложно (кто писал кандидатскую диссертацию, тот знает) отслеживать процесс изучения собственной области на современном этапе (т. е., получать актуальную информацию о том, кто, где и чем занимается, какие публикации выходят, какие диссертации защищаются и т. п.). В настоящее время данная задача облегчается при помощи научных социальных сетей, позволяющих ученым отслеживать (а в некоторых случаях — и скачивать) последние публикации по собственной, устанавливать контакт друг с другом, а также предоставляющих некоторые дополнительные возможности. Рассмотрим некоторые популярные социальные сети для ученых более подробно. Данный обзор не претендует на исчерпывающий характер; при выборе социальных сетей я руководствовался следующими критериями: 1) интернациональность (именно поэтому в обзор не попали сервисы, ориентированные на ученых какой-то одной конкретной страны) и 2) междисциплинарность (в первую очередь меня интересовали социальные сети, которые могут использоваться учеными самой разной специализации; именно поэтому обзор не затрагивает сервисов, ориентированных на представителей какой-то одной конкретной дисциплины). Буду очень рад, если с помощью читателей удастся расширить и дополнить этот список.
Читать дальше →
Total votes 29: ↑28 and ↓1+27
Comments31

Dataflow работы поисковой машины

Reading time3 min
Views6.5K
В продолжение статьи С чего начинается поисковик, или несколько мыслей про crawler

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

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

После сбора достаточного количества страниц одного сайта запускается анализатор, выделяются паттерны, присутствующие на большинстве страниц сайта, и они вырезаются.
На выходе получаем тексты страниц без всего лишнего и сгруппированные по сайтам.
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments13

Регулярные выражения для валидации распространенных видов данных

Reading time2 min
Views493K
Для проверки текстовых полей на валидность обычно используют регулярные выражения. Существует несколько наиболе распространенных видов таких даных, как например номер кредитки, дата в определенном формате и т. д. На сайте html5pattern.com собирается коллекция регулярных выражений для таких данных (там это позиционируется, как возможное содержимое html5-атрибута pattern у inpit-элементов, но эти регулярные выражения можно использовать и для привычной валидации с помощью javascript). Актуальные для российской аудитории примеры, вместе с соответствующими регулярными выражениями вы можете посмотреть под катом.
Читать дальше →
Total votes 133: ↑97 and ↓36+61
Comments66

Information

Rating
Does not participate
Location
Оренбург, Оренбургская обл., Россия
Date of birth
Registered
Activity