Как стать автором
Обновить
56
0

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

Отправить сообщение

PhantomJS + JSCoverage + QUnit или консольные JS юнит-тесты с подсчетом покрытия

Время на прочтение4 мин
Количество просмотров6.1K
Поговорим о случае, когда нужно автоматизировать запуск тестов и сбор статистики покрытия, к примеру, для гипотетической клиентской JS библиотеки. Задача не совсем тривиальна, поскольку для нормальной работы библиотеки требуется полноценный браузер — библиотека является визуальной оберткой над стандартными компонентами формы. Библиотека должна быть написана так, чтобы все взаимодействие с ее объектами можно было производить с помощью методов, которые они предоставляют, а не только через непосредственные манипуляции с DOM (т.е. любое действие юзера может быть запущено не только событием, допустим, клика по чему-то, но и руками через метод). Но тем не менее, надо этот DOM иметь, чтобы результаты работы методов помимо изменения внутреннего состояния объектов также отображались и в DOM. В целом напоминает приложения на Sencha (ExtJS).

Для достижения поставленных целей нужен некий контролируемый браузер, фреймворк для запуска тестов и утилита, которая позволит посчитать покрытие кода тестами, а также некоторый код, который соединит все компоненты.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии12

Набор инструментов для построения графиков, блок-схем и диаграмм

Время на прочтение3 мин
Количество просмотров172K


Есть много разных сервисов, облегчающих жизнь веб-разработчику или дизайнеру, в том числе создающих разные графики, диаграммы, блок-схемы и т.д. Ниже представлена небольшая подборка.
(Осторожно, много изображений)
Читать дальше →
Всего голосов 151: ↑144 и ↓7+137
Комментарии40

Колоночная верстка

Время на прочтение5 мин
Количество просмотров16K
Существует много способов по верстке колоночных макетов. Уже не один нос разбит в течении холиваров, разожженных по поводу использования тех или иных методов. Казалось бы, что все должно быть предельно ясно и понятно, но все-равно возникает много трудностей. Я хочу и свою лепту вложить во всеобщее благое дело, и потому потратил относительно немного времени на эксперименты, которые привели меня к созданию еще одного метода, в котором есть следующие плюсы и минусы:

Плюсы
  • Есть прижимающийся к полу футер
  • Колонки меню растягиваются по 100% высоте
  • Колонок может быть сколько душе угодно
  • Колонки могут быть как лево- так и правосторонними, а также совмещенными, например 2 справа и 1 слева
  • Ширина как резиновая, так и фиксированная
  • Критический минимум хаков
  • Не используется Javascript
  • Не используются бекграундовые изображения для создания эффекта колонки
  • Никаких таблиц
  • Одинаковый результат в ie5.5, ie6, ie7, ie8, ff3.5, o10, chrome4 (Если у вас не работает в каком-то браузере — отпишитесь, пожалуйста, в комментах. Исправим и приведем к универсальному виду)

Минусы
  • Есть несколько «лишних» блоков. (Я бы и сам рад от них избавиться)
  • Есть несколько абсолютно-позиционируемых блоков
Читать дальше →
Всего голосов 106: ↑97 и ↓9+88
Комментарии134

Мобильная безлимитка от Мегафона

Время на прочтение1 мин
Количество просмотров1.2K
С 1 августа 2009 года Северо-западный филиал ОАО «Мегафон» открывает для подключения новый тарифный план «Безлимитный Интернет».

Тариф доступен на территории Санкт-Петербурга и Ленинградской области, Архангельской области и Ненецкого АО, Вологодской, Калининградской, Мурманской, Новгородской, Псковской областей и республики Карелии.

Абонентская плата от 499 до 799 рублей (в зависимости от региона).
Скорость до 7,2 Мбит/с.
Сразу скажу, что после скачивания 2 Гигабайт в месяц начинается ограничение в скорости до 64 кбит/сек.

Официальный пресс-релиз.

P.S. Очень рад прогрессу в этом аспекте, особенно вспоминая свой первый выход во всемирную паутину с обычного модема на 14400 :)
Всего голосов 39: ↑28 и ↓11+17
Комментарии116

Нужны ли «приватные» свойства объектов в Javascript?

Время на прочтение4 мин
Количество просмотров4.7K
В последнее время во многих статьях (на Хабре и не только) я часто вижу примеры эмуляции приватных свойств объектов в JS через замыкания. Авторы обычно объясняют это своим желанием использовать такой механизм ООП, как инкапсуляция, и тем самым гарантировать работу с объектом исключительно посредством его методов, не затрагивая напрямую свойства.

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

Читать дальше →
Всего голосов 40: ↑35 и ↓5+30
Комментарии193

Как стать Zend PHP 5 Certified Engineer

Время на прочтение3 мин
Количество просмотров27K
Свершилось, ура! Теперь я имею почетный статус ZCE :)

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

Читать дальше →
Всего голосов 117: ↑104 и ↓13+91
Комментарии93

Слушаем вызовы функций в Javascript

Время на прочтение12 мин
Количество просмотров9.8K
Многие знают о механизме Event-Dispatcher-Listener'ов, реализованному во многих языках программирования. Я же создам подобный механизм не для Event'ов, а для любого метода объекта JavaScript — Object.
Я не претендую на оригинальность, нет. Основная цель статьи — рассмотреть интересные механизмы прототипирования в JavaScript, создание декораторов и, собственно, постараться хоть немного раскрыть мощь и гибкость это чудесного языка, который так часто обижают и недооценивают.

UPD1: краткое содержание:
1. Создание декоратора на JavaScript
2. Создание механизма Function call listener с помощью декораторов

UPD2: от 09.06.2009
В конце статьи я добавил раздел Update: Decorator Mark II. В нём — исправления и улучшения (я не перекраивал всю статью из-за этого)

Итак, первый (и, надеюсь, не последний) рецепт в моей поваренной книге JavaScript.
Перейти к рецепту
Всего голосов 112: ↑107 и ↓5+102
Комментарии37

О том, что сегодня произошло с «аськой» (часть 1-я)

Время на прочтение3 мин
Количество просмотров17K
Итак, по просьбе Shoohurt рассказываю все известное нам (команде разработчиков Miranda IM) на данный момент о проделках AOL.

Сегодня, около 13.00 МСК почти все пользователи неофициальных клиентов после входа в сеть и загрузки контакт-листа получали от пользователя с UIN 1 сообщение о том, что используемая версия клиента не используется и неавторизованна. На официальном сайте прямо на главной появилось сообщение, гласящее о том, что отныне поддерживаются только официальные версии программ, которые вот прям тут и можно скачать.

Пользователи, которые уже находились в сети, никаких изменений не почувствовали и не были отключены от сервера. У тех, кто пытался подключиться в первые час-полтора это получалось с переменным успехом: это объясняется тем, что что сеть icq распределенная и состоит из множества серверов, и даже после входа вас могут перебросить на другой, и судя по всему изменения применялись на них по очереди.

Немного технических деталей. Процедура входа проходит вполне обычно: проходит инициализация протокола, отсылка capabilities, загрузка серверного контакт-листа и собственных данных. Примерно в это время и приходит сообщение от номера один, и после этого получить что-либо с сервера становится невозможно.

Решив, что сегодня повторилась ситуация 8-го декабря, когда клиенты перестали работать из-за того что во время логина идентифицировали себя как icq5.1 и более ранние версии, мы попробовали идентифицировать себя как icq6.5 последней модели. Это не принесло никаких результатов. Стало понятно, что в этот раз АОЛ пошел путем глубокой защиты — видимо теперь уже стали учитываться отправляемые капсы (capabilities, информация о поддерживаемых клиентом фишках протокола). Действительно, подмена их набора на тот, что использует icq6 помогла, однако только на время первого входа — если после этого переподключиться, то это уже не поможет. Судя по всему в последовательность входа и начальной инициализации внесли какие то изменения, при невыполнении которых клиент считается альтернативным. Разработчики QIP высказали предположение о том, что серверу нужен некий дополнительный ключ, который может как просто быть зашит в клиент, так и вычисляться на основе полученной от сервера информации. Они в настоящий момент тоже усиленно работают над поиском причины отказа клиента.

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

Кроме того хочу заметить интересный факт — эти изменения затронули только жителей стран СНГ. Когда я связался с нашими разработчиками из Чехии и Германии они были слегка в недоумении — у них все работало прекрасно. Кроме того мы успешно смогли подключиться с миранды, используя американский прокси-сервер, так что есть подозрения о том, что это целенаправленная блокировка разрабатываемых в России альтернативных мессенджеров.

UPD: Сейчас разработчик QIP, INF, поделился со мной мыслью о том, что все дело в используемом начальном значении идентификатора последовательности у отправляемых пакетов. Все неофициальные клиенты генерируют их случайным образом, и это может быть тот самый ключ. Основная проблема заключается в том чтобы узнать алгоритм его генерации.

Еще небольшой UPD: для наглядности можете сравнить скриншоты сайта icq.com, отдаваемые российским и американским посетителям

Обсуждение происходящего ведется в жаббере, в конфе icq_stop@conference.jabber.ru

UPD2: Как сообщает Shoohurt, завтра, возможно, в течение дня будут комментарии со стороны господ, имеющих непосредственное отношение к русской версией ICQ (Рамблер-ICQ). Следите за обновлениями.

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

Похоже что команда разработчиков QIP нашла решение проблемы, уже доступны рабочие билды QIP Infium 9022

Как и обещал — исправленная версия плагина Miranda IM ICQ+ — качаем

Господа, прошу терпения. Я сегодня вымотан на нет и уже больше суток без сна. Завтра я выложу весь код и объясню суть моего решения. Оно довольно тривиальное, и основано на том что исходное предположение про seq ид верно. И вообще оно слегка на подпорках.

Внимание! Продолжение истории :)

Всего голосов 522: ↑495 и ↓27+468
Комментарии1076

IronPython как движок для макросов в .NET приложениях

Время на прочтение6 мин
Количество просмотров11K
Подозреваю, многие из вас задумывались — как можно в .NET приложение добавить поддержку макросов — чтобы можно было расширять возможности программы без ее перекомпиляции и предоставить сторонним разработчикам возможность легко и просто получить доступ к API вашего приложения? В статье рассмотрено, как в качестве основы для выполнения макросов использовать IronPython — реализацию языка Python на платформе .NET.
Читать
Всего голосов 34: ↑33 и ↓1+32
Комментарии38

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность