Search
Write a publication
Pull to refresh
18
0
Василий @PyroRed

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

Send message

Паттерн «Обозреватель» и контекст вызова в Javascript

Reading time3 min
Views13K
Хотя про паттерн «Обозреватель (Наблюдатель, Observer)» сказано достаточно, в том числе и на Хабре, вкратце повторюсь. Суть паттерна в наблюдении за состоянием неких субъектов системы и соответствующей реакции наблюдателей на изменения этих состояний. За одним субъектом может следить несколько наблюдателей, причём сам он об этом не знает (слабое связывание), но исправно оповещает всех об изменении состояния.

Удобно использовать Обозревателя на сайтах и в веб-приложениях, поэтому логично реализовать его с использованием самого популярного языка для веб-среды — Javascript.
Читать дальше →

Subtle Patterns: фоновые текстуры для вашего сайта

Reading time1 min
Views72K

Если вы запускаете новый сайт и заканчиваете его оформление, то есть смысл посмотреть коллекцию Subtle Patterns: отлично оформленную коллекцию фоновых текстур (паттернов) под лицензией Creative Commons Attribution 3.0 Unported. Их можно использовать без ограничений.



Сайт привлекает удобным предварительным просмотром: каждую текстуру можно мгновенно применить на всей странице в качестве фона. Сейчас там 93 работы, коллекция еженедельно пополняется отличными новинками.


Все текстуры на сайте Subtle Patterns являются повторяющимися, то есть склеиваются в бесшовную заливку.

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

Стратегия оптимизации веб-проекта с использованием MySQL

Reading time5 min
Views8.3K

Введение


В жизни любого крупного веб-проекта, особенно на PHP, но, в целом, это касается любого серверного ЯП, пригодного для веб-разработки, обычно наступает понимание, что «так дальше жить нельзя», и что настал момент, когда нужно провести оптимизацию работы сайта, чтобы он перестал тормозить (хотя бы на production).

Интересно, что, как правило, даже тяжелые фреймворки (вроде Symfony или RoR) на «медленных» языках, в production-окружении работают достаточно сносно по скорости, а основные «тормоза» вызываются SQL-запросами и неграмотным кешированием (к примеру, инициализация достаточно сложной и большой конфигурации проекта на Symfony занимает около 80 мс, а времена исполнения страницы, при этом, иногда достигают секунды и более).

Если вы смогли определить, что это — ваш случай, и ваш проект на MySQL, то эта статья может вам помочь принять конкретные меры и исправлению ситуации с закреплением результата и предотвращением возникновения откровенных проблем с СУБД впоследствии.
Читать дальше →

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

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

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

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

Dlink DIR-320 для организации резервного канала

Reading time7 min
Views32K
Вы же знаете, как это иногда бывает: погружённый в фантастический мир новых знаний, вы сидите, расслабившись, перед мануалом, и тут влетает некий истеричный субъект, мечет гром, молнии и икру. Когда удастся погасить взрыв эмоций, ситуация начнёт проясняться.
Итак, суть проблемы: есть некий компьютер/терминал в труднодоступном месте, до которого организован не очень стабильный канал связи. Если связи нет в нужный момент, этот терминал становится местом локального смерча, в вихре которого носятся все от мала до велика.
Суть задачи: организовать резервный канал связи с автопереключением на него, в случае падения основного и назад, когда основной поднимется.
Резервный канал на DLink DIR-320
В этой публикации я опишу своё решение на приснопамятном DLink DIR-320.
Я потратил много времени на тщетные поиски сначала способов и реализаций, потом прошивок и скриптов, прежде чем пришёл к ответу. Надеюсь эта информация окажется полезной.
Читать дальше →

Серия 2. Как выполнять методы предков в модификации прототипного наследования

Reading time15 min
Views2.7K
imageОформим начатое в habrahabr.ru/blogs/javascript/130495 в удобный для использования метод .inherit4 конструктора Constr, чтобы, фактически построить модель классов и наследования (она будет более мощной, чем классическая, но это побочный эффект). Если у Вас нет желания подключать Mootools с аналогичной моделью, будет достаточно этого метода на 2 КБ несжатого кода, чтобы нормально работать с прототипным наследованием и иметь пару дополнительных методов: доступ к методам предков .ancestor('имя_метода', номер_поколения_предка) и расширение хешей. Применение всех 3 методов позволяет исключить из лексикона слова prototype и constructor, продолжая работать с тем и другим, и делает код легко читаемым.
Читать дальше →

Как выполнять методы предков в реализации прототипного наследования

Reading time8 min
Views12K
При работе с наследованием иногда возникает желание иметь функцию доступа к методу предка (методу родительского класса) — в конструкторе (аналоге класса для Javascript) или в методе-потомке, потому что, бывает, что новый класс переопределяет его. Не просто какую-нибудь функцию (метод), а с совершенно понятной записью, чтобы название говорило само за себя, и имеющую доступ к указанному поколению предков (не «пра-пра-пра-», а «пра- 3 раза»).

Возьмём за основу метод прототипного наследования, который максимально эффективен тем, что производит минимум действий при описании цепочек наследуемых классов и при этом максимально поддерживает базовые операции и свойства наследования: instanceof, constructor. Для доступа к предку он создаёт свойство .superclass.
Читать дальше →

Имена людей и интерфейс

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

image

Заинтересованная аудитория: авторы HTML-контента, разработчики скриптов серверных приложений (PHP, JSP и т.д.), менеджеры веб-проектов и любые другие люди, так или иначе связанные с дизайном форм ввода данных, дизайна баз данных и онтологий, которые затрагивают личные имена людей.

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

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

Результаты акции с Групон. Практический опыт

Reading time4 min
Views2.2K
Вот уже несколько месяцев я развиваю LangNote.net — сервис, позволяющий совершенствовать иностранный язык. Суть сервиса крайне простая: пользователи пишут заметку на иностранном языке, преподаватель проверяет ее на предмет ошибок и возвращает исправленную версию со своими комментариями. Правки и комментарии выделены визуально для удобства изучения.

Месяц назад я решил провести акцию с сервисом коллективных покупок, чтобы ускорить продвижение Langnote. После небольшого анализа выбор пал на Групон, и акция состоялась 16 сентября. Уже сейчас результаты показывают, что подобные сервисы можно использовать для весомого ускорения бизнеса на стадии стартапа. Об этом и пойдет речь в статье ниже.
Читать дальше →

Чек-лист разработчика языка программирования

Reading time4 min
Views23K
Итак, Вы собираетесь создать новый [] функциональный, [] императивный, [] объектно-ориентированный, [] процедурный, [] стековый, [] мультипарадигменный, [] быстрый, [] статически-типизированный, [] динамически-типизированный, [] чистый, [] богатый, [] не-искусственный, [] наглядный, [] простой для новичков, [] простой даже для не-программистов, [] абсолютно непостижимый язык программирования.

Не получится. И вот почему.
Читать дальше →

Основы стереозрения

Reading time10 min
Views121K
В данной статье содержатся базовые сведения о математическом аппарате, используемом в стерео зрении. Идея ее написания появилась после того как я начал работать с методами стерео зрения, в частности использовать алгоритмы реализованные в OpenCV. Эти алгоритмы зачастую ссылаются на различные понятия, такие как "фундаментальная матрица", "эпиполярная геометрия", "триангуляция". Существуют очень хорошие книжки по компьютерному зрению, в которых описывается, в том числе и стерео зрение и все необходимые понятия, но в них, нередко, бывает представлено слишком много информации для новичка. Здесь же, в краткой форме изложены базовые сведения о том, как работает стерео зрение и основные связанные с ним необходимые понятия:
  • проективная геометрия и однородные координаты
  • модель камеры
  • эпиполярная геометрия (epiporal geomerty), фундаментальная и существенная матрицы (fundamental matrix, essential matrix)
  • триангуляция стереопары точек
  • карта глубины(depth map), карта смещений(disparity map) и идея, лежащая в основе ее вычисления
Практически весь материал статьи основан на книге "Multiple View Geometry in Computer Vision" by Hartley, R. I. and Zisserman, A., а раздел про построение карты глубины описан на основе материала из "Learning OpenCV" by Gary Bradski, Adrian Kaehler.

Для понимания содержимого статьи достаточно иметь общее представление об аналитической геометрии и линейной алгебре: знать, что такое матрица, вектор, скалярное и векторное произведение.

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

Android UI Patterns: Dashboard

Reading time6 min
Views12K
imageПосле моей недавней статьи несколько человек поинтересовались в личке как сделать Dashboard. Dashboard является одним из основных UI паттернов для Android, подробней о которых Вы можете прочесть здесь. Поиск по хабру подсказал как можно реализовать QuickAction диалоги и ActionBar. В этой статье я расскажу как легко сделать свой Dashboard.
Читать дальше →

Английский для айтишника? Легко!

Reading time2 min
Views183K
Эта тема не относится к IT напрямую, но все знают, что без нее никуда. К сожалению, далеко не у всех есть возможность изучать английский с преподавателями. Ну что ж, попробуем заняться этим дома и с максимальной отдачей!
Читать дальше →

Учебный пример разработки PHP-класса с использованием TDD

Reading time7 min
Views20K
В данном посте приводится учебный пример разработки PHP-класса, который совершает запрос к Twitter API с целью выборки статусов пользователя по его никнейму. Кроме того, Twitter-класс кеширует полученные данные с использованием еще одного PHP-класса, который осуществляет простое кеширование данных в файлах.

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

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

Анимация спрайтов при помощи CSS, JS и Canvas

Reading time4 min
Views25K
Всем привет. Пару дней назад совершенно случайно наткнулся в залежах дисков на «Космические рейнджеры 2: Доминаторы». Устанавливать не стал, так как сейчас не хватает времени, чтобы как следует в неё погрузиться. А решил посмотреть, что на диске находится. Посмотрел «Фан-Арт» и там увидел программку для ковыряния ресурсов рейнджеров. Вот и решил посмотреть, из чего же сделаны наши доминаторы. Покликав немного, нашел файлики с анимацией в формате GAI. Начал любоваться той анимацией. Захотел их сохранить в «гифки», но не как не давала та программка сохранить анимацию? Можно либо сохранить текущий кадр, либо все файлы в PNG. Я решил сохранить все кадры, а их было — 150. Картинки все есть, а почему бы не сделать с ними ту же анимацию.
Читать дальше →

Как ускорить эмулятор Android на 400%

Reading time5 min
Views143K
Последние несколько месяцев я работал над SDK для Android, входящим в платформу управления контентом Nuxeo. Особенно много работы было в последнее время, с приближением официального релиза SDK. Я хочу поделиться несколькими практическими советами по поводу разработки под Android, в частности тестирования и эмуляции. Уже после нескольких дней разработки я понял, что работа с эмулятором Android — не сахар, потому что он чудовищно медленный.

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

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

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

Характерные особенности языка Dart

Reading time8 min
Views20K
Dart был разработан так, чтобы выглядеть знакомо для программистов на таких языках, как Java и JavaScript. Если постараться, можно писать на Dart практически так же, как на одном из них. Если очень постараться — можно даже превратить его в Фортран, но при этом вы упустите множество неповторимых и классных особенностей Dart.

Эта статья поможет вам научиться писать код в стиле Dart. Так как язык всё ещё активно развивается, многие идиомы тоже могут измениться в будущем. В некоторых местах мы пока сами не определились, что является наилучшей практикой (может быть вы нам поможете?) Тем не менее, вот несколько моментов, на которые стоит обратить внимание, чтобы переключить свои мозги из режима Java или JavaScript в режим Dart.
Читать дальше →

Подборка видео с различных конференций

Reading time2 min
Views4.2K
На конференции попасть получается не всегда, а умных людей послушать хочется. Решил собрать воедино скопившиеся ссылки на видеоматериалы. Надеюсь кому то пригодится.

Известные
Читать дальше →

Базовая архитектура веб-приложения на Backbone.js

Reading time2 min
Views22K
Разработчики часто просят рассказать о моём опыте использования Backbone.
Многие слышали об этом MVC-фреймворке, смотрели примеры и документацию, но не решаются начать с ним работать. Поэтому вчера я сделал мини-доклад на встрече MoscowJS, призванный рассказать о том, как мы построили базовую архитектуру и какие получили плюсы. И сегодня в этой статье я публикую слайды, схемы и краткое описание.


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

diveintohtml5 перевозим на app engine

Reading time1 min
Views681
Т.к. с недавних пор сервис документации по html5 diveintohtml5.org Марка Пилгрима лежит — я решил поднять свой с преферансом и дамами на платформе гугла. Все доки оказались доступны на гитхабе и там лишь статические файлы, потому никаких проблем не возникло. Единственно из-за ограничений гугле на максимальный размер файла 10МБ не влезли два видео, но влезла их копия в формате webm.
Наслаждаемся.
UPD: заменил видео на более мелкие тех же форматов, и поправил пару недочетов с API геолокации гугла.

Information

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