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

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

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

Извлекаем пользу из Selenium и Jenkins CI

Время на прочтение5 мин
Количество просмотров34K
image
И так, предположим абстрактную ситуацию: у вас есть набор тестов написанный с помощью Selenium WebDriver. Он постоянно пополняется, обрастает новыми деталями и вам уже действительно невмоготу разбираться в логах, кучах XML, смотреть и думать, что полетело и почему. Чуточку ниже я попытаюсь дать ряд простых советов, для стабилизации своих Selenium тестов, а так же, расскажу о способах подружить Selenium с Jenkins CI и последствиях данной дружбы. Для тех, кто заинтересовался — прошу под кат.
Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии15

Наследование в Backbone.js

Время на прочтение4 мин
Количество просмотров14K
Коллеги, использующие Backbone.js! Вы задумывались, как работает наследование в этой библиотеке?
Знаете, как себя ведет Backbone.Model.extend({})?
И наверняка знаете и помните, что у extend два опциональных параметра: proto props и static props.
Если хотя бы на один выше заданный вопрос вы ответили отрицательно — прошу под кат.
Постараюсь порадовать пошаговым исследованием, схемками, табличками и примерами.
Читать дальше →
Всего голосов 15: ↑10 и ↓5+5
Комментарии1

Evercookie — самые устойчивые куки

Время на прочтение1 мин
Количество просмотров74K
Samy Mamkar разработал систему, которая позволяет хранить куки в 8 местах, автоматически восстанавливая друг друга, и даже добиться того, чтобы куки, поставленное в одном браузере, действовало и в другом.

Удалить это куки практически невозможно! (Все возможно, конечно, но слишком много мороки)

Куки хранятся в:
  • HTTP Cookies;
  • Local Shared Objects (Flash);
  • Сохранение куки в значениях RGB автосгенерированных и форсированно кэшированных PNG с использованием HTML5 canvas;
  • Сохранение куки в Web History;
  • HTML5 Session Storage;
  • HTML5 Local Storage;
  • HTML5 Global Storage;
  • HTML5 Database Storage через SQLite.

При удалении из одного из этих мест кука автоматически восстанавливается из оставшихся. Работает даже если пользователь сменит браузер (через Local Shared Objects из Flash).

Описание (на английском) и демо: http://samy.pl/evercookie/.
Попробуйте удалить куки, почистить систему и зайти назад.



Как пользоваться?
Читать дальше →
Всего голосов 111: ↑107 и ↓4+103
Комментарии68

Python изнутри. Объекты. Голова

Время на прочтение8 мин
Количество просмотров56K
1. Введение
2. Объекты. Голова
3. Объекты. Хвост
4. Структуры процесса

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

Как я и писал в предыдущем эпизоде (который, кстати, оказался успешным; спасибо всем, ваши просмотры и комментарии буквально заставляют меня двигаться дальше!) – сегодняшний пост посвящён реализации объектов в Python 3.x. Поначалу я думал, что это простая тема. Но даже когда я прочитал весь код, который нужно было прочитать перед тем, как написать пост, я с трудом могу сказать, что объектная система Питона… гхм, «простая» (и точно не могу сказать, что до конца разобрался в ней). Но я ещё больше убедился, что реализация объектов — хорошая тема для начала. В следующих постах мы увидим, насколько она важна. В то же время, я подозреваю, мало кто, даже среди ветеранов Питона, в полной мере в ней разбирается. Объекты слабо связаны со всем остальным Питоном (при написании поста я мало заглядывал в ./Python и больше изучал ./Objects и ./Include). Мне показалось проще рассматривать реализацию объектов так, будто она вообще не связана со всем остальным. Так, будто это универсальный API на языке C для создания объектных подсистем. Возможно, вам тоже будет проще мыслить таким образом: запомните, всё это всего лишь набор структур и функций для управления этими структурами.
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии13

Поём вместе с Sinatra. Часть первая. Первое знакомство

Время на прочтение3 мин
Количество просмотров20K
Доброго времени суток!

Что такое Sinatra


Sinatra — маленький, но довольно интересный DSL (Domain-specific language) фреймворк, написанный на Ruby. В отличие от Ruby on Rails он не следует типичному паттерну MVC (Model — View — Controlller). Sinatra создавался для того, чтобы «программист смог быстро создать веб приложение, написанное на Ruby с минимальными усилиями.

Для того, чтобы воспользоваться Sinatra нам неорбходимо его установить. Сделать это можно следующей командой в RubyGems:

gem install sinatra

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

gem install shotgun

Ну вот и всё! Всё необходимое для работы у нас есть. Настал момент для творчества. Приступим…
Читать дальше →
Всего голосов 36: ↑31 и ↓5+26
Комментарии46

Ratpack — талантливо перепето

Время на прочтение6 мин
Количество просмотров14K
Исторически сложилось, что Groovy берет много хорошего у Ruby. В первую очередь, конечно Grails (от Rails), но и Spock (от Spec) и даже где-то Gradle (от Buildr, хотя никто не признается). Сегодня я вам расскажу про еще одну толковую «спертую» штуку — web framework Ratpack.
image
Списан Ratpack с Sinatra, о котором много написано на Хабре, например вот тут.
На мой взгляд, главное преимущество Синатры — что он талантливый певец что это простейший в использовании и моментальный в разработке фреймворк. Создать несколько простых страниц, менять их и видеть результаты налету, и за несколько часов сваять достаточно нетривиальный сайт с динамическим контентом — это как раз то, для чего и был придуман Синатра. Это, своего рода, ответ «ожиревшим» Рельсам. Точно в такой же роли (ответа «ожиревшим» Грейлзам) Синатра и перекочевал в Груви.

Должен заметить, что на сей раз сообщество Груви были не первыми, кто передрал Синатру. Первыми были Scala, со своей Скалатрой (ага, ответ на «ожиревший» Play). Насколько я знаю, решение не делать название похожим на слух, а искать ассоциацию по смыслу, было принято в первую очередь, придя в ужас от звучания названия версии Скалы :)

Ratpack переводится на русский как Крысиная стая, и привязка к Синатре в том, что это тусовка, в которой тусовался Франк Синатра.

А причем тут Java?

Ну, тут, мне кажется, все ясно. В отличие от Руби, где когда-то был lightweight RoR, или от Груви с его Грейлз, в Джаве никогда не было мейнстримных «легковесных» фреймворков*. У нас есть либо громоздкие server-side component фреймворки типа JSF и Wicket, либо MVC фреймворки, которые, конечно, легче компонентных монстров, но все равно, требуют нагородить MVC для простейшей странички. Тут, конечно, я говорю о Spring MVC и Struts2. И всё это с жутко медленным циклом разработки «поменял слово? перезагрузи!». Бррр.

Как справедливо заметил antonarhipov, можно воспользоваться фреймворками для REST APIs, такими как Jersey и RESTlet, но это, на мой взгляд, абьюз.

В Джаве уже есть клон Синатры, который называется Spark, так почему бы не воспользоваться им? Я вижу для этого несколько причин:
  • Freemarker или Velocity для темплейтинга. Первый, конечно, не так ужасен, как второй, но тоже не подарок. Оба хуже, чем Groovy Templates
  • Hot Swap — клон Синатры должен уметь «поменял, F5, увидел». Если нет, то увы.
  • Ratpack — прекрасная возможность плавно погрузиться в Груви. И я считаю, это главное преимущество.

Как всегда, преимущество Груви для программистов Джава — что они чувствуют себя как дома. 99% Java кода работает в Грувях без изменений, поэтому любой Груви фреймворк или инструмент может быть немедленно использован Java программистом.
Ситуация и с ratpack еще лучше — разработчики специально постарались, чтобы можно было писать на чистой Джаве, не задействуя Груви ни на одном этапе разработки. Таким образом вы можете начать не зная о Груви ничего, и потихоньку открывая для себя фичи Ratpack-а, начать писать на Груви. Один из примеров в этой статье будет написан 100% на Java. Кого на первом этапе не интересует всё это Грувийное шаманство, перекручивает прямо на последний пример. Остальные начинают здесь:
Споем?
Всего голосов 22: ↑20 и ↓2+18
Комментарии13

Dependency Injection в Unity3d

Время на прочтение7 мин
Количество просмотров50K
Добрый день, уважаемые коллеги!

Так получилось, что к моменту начала работы с Unity3D, у меня был четырехлетний опыт разработки на .NET. Три года из этих четырех я успешно применял dependency injection в нескольких крупных промышленных проектах. Этот опыт оказался для меня настолько позитивен, что я постарался привнести его и в геймдев.
Сейчас уже могу сказать, что затеял это не зря. Дочитав до конца, вы увидите пример того, как dependency injection позволяет сделать код читабельнее и проще, но в то же время гибче, а заодно еще и более пригодным для юнит-тестирования. Даже если вы впервые слышите словосочетание dependency injection — ничего страшного. Не проходите мимо! Эта статья задумана как ознакомительная, без погружения в тонкие материи.
Читать дальше
Всего голосов 17: ↑15 и ↓2+13
Комментарии38

Несколько интересностей и полезностей для веб-разработчика

Время на прочтение4 мин
Количество просмотров62K
Всем доброго времени суток. Как-то так получилось, за последнее время я увидел много интересных и полезных инструментов/библиотек/событий, которыми я хотел поделиться на Хабре. Все эти темы по отдельности, на мой взгляд, не заслуживали целой статьи. Но каждая из них достойна внимания и может кому нибудь пригодиться. В итоге получился небольшой дайджест:

Prepros



Великолепное приложение препроцессор для CSS, JS. Компилирует файлы следующих типов: LESS, Sass, SCSS, Stylus, Jade, Slim, Coffeescript, LiveScript, Haml. Минифицирует JS на лету, при каждом изменении файла. Оптимизирует изображения. Доступен для Windows и Mac, а также как расширение для Chrome. Плюс ко всему создает HTTP сервер, для тестирования сайта на разный устройствах. Бесплатная замена CodeKit'у и Ghostlab'у вместе взятых, что в сумме позволит Вам сэкономить $75.

Читать дальше →
Всего голосов 87: ↑72 и ↓15+57
Комментарии23

HipHop VM: разведка боем под Debian 7 + Nginx + Symfony2

Время на прочтение6 мин
Количество просмотров18K
Последнее время много «шума» вокруг HipHop VM и kPHP: каждый социальный гигант своё детище хвалит. Больше всего интересовала связка, указанная в заголовке. О kPHP что-то говорить ещё рано, хотя уже заранее известно, что ООП не поддерживается. А вот HipHop VM уже можно пощупать. Кто-то об этом звере слышал, некоторые пытались устанавливать, некоторым это удавалось.

В топике описывается процедура установки HipHop VM из исходных кодов под Debian 7. Возможно, кому-то этот топик сэкономит время, нервы и поможет перешагнуть грабли, по которым прошлись мы.
Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии65

Composer — менеджер зависимостей для PHP

Время на прочтение10 мин
Количество просмотров404K
Composer (getcomposer.org) — это относительно новый и уже достаточно популярный менеджер зависимостей для PHP. Вы можете описать от каких библиотек зависит ваш проект и Composer установит нужные библиотеки за вас! Причём Composer — это не менеджер пакетов в классическом понимании. Да, он оперирует с сущностями, которые мы будем называть «пакетами» или библиотеками, но устанавливаются они внутрь каждого проекта отдельно, а не глобально (это одно из основных отличий от старого-доброго PEAR).

Кратко, как это работает:
  1. У вас есть проект, который зависит от нескольких библиотек.
  2. Некоторые из этих библиотек зависят от других библиотек.
  3. Вы описываете в своём проекте те библиотеки, от которых непосредственно зависит ваш код.
  4. Composer находит нужные версии требуемых библиотек для всего проекта, скачивает их и устанавливает в папку вашего проекта.

При создании Composer авторы черпали идеи и вдохновение из аналогичных проектов: npm для Node.js и Bundler для Ruby.

Изначально он был спроектирован и разработан двумя людьми Nils Adermann и Jordi Boggiano, сейчас в проекте участвует более двадцати контрибьюторов, Проект написан на PHP 5.3, распространяется под лицензией MIT и доступен на github.

Первые коммиты были сделаны апреле 2011 года и на сегодняшний день Composer находится в стадии «alpha3». Однако, он уже достаточно стабилен и используется многими популярными PHP проектами (например, Symfony 2). Список проектов использующих Composer можно посмотреть на сайте packagist.org — это официальный репозиторий Composer пакетов. Кстати, на недавней конференции Devconf 2012 разработчик фреймворка Yii в своём докладе упомянул, что Yii2 скорее всего тоже будет использовать Composer.

В этой статье я кратко опишу основные возможности Composer и мы попробуем создать демонстрационный проект использующий Composer для загрузки необходимых библиотек. Все примеры будут доступны на github.com и bitbucket.org.

Читать дальше →
Всего голосов 73: ↑60 и ↓13+47
Комментарии43

Генераторы в действии

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

Небольшое вступление


Не так давно я решил для себя, что пора восполнить большой пробел в знаниях и решил прочитать про переходы между версиями PHP, т.к. понимал, что остался где-то между 5.2 и 5.3 и этот пробел необходимо как-то устранить. До этого я читал про namespaces, traits и т.д, но дальше чтения не уходило. И вот тут я заметил генераторы, почитал документацию, одну из статей на хабре на этот счет и после этого возникла мысль — а как раньше без них жили-то?

Данным переводом хочу помочь хотя бы новичкам, поскольку на php.net документация по генераторам на английском и, на мой взгляд, должным образом не раскрывает всю идею и места применения. Текста много, кода чуть меньше, картинок нет. Потребуются общие знания, например, про итераторы. Очевидный код комментировать не буду, а вот сложные для понимания примеры постараюсь объяснить в силу своих знаний.

UPD1: Изменил расплывчатую формулировку, про которую говорили в комментариях.
UPD2: Добавил решение с принудительным break.

И сразу под хабракат
Всего голосов 59: ↑55 и ↓4+51
Комментарии25

Crossfilter.js, dc.js и D3.js для визуализации Данных

Время на прочтение4 мин
Количество просмотров35K
Приветствую ценителей красивой и функциональной визуализации данных! Предлагаю вашему вниманию небольшой обзор нескольких JavaScript библиотек, которые вкупе с D3.js позволят создать интерактивную визуализацию многомерных данных с возможностью применения фильтрации «на лету».


Заинтересовались, тогда добро пожаловать под кат.
Читать дальше →
Всего голосов 54: ↑52 и ↓2+50
Комментарии15

Не паникуй (перевод главы книги «Passionate Programmer» by Chad Fowler)

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

Почему эта книга заслуживает перевода


Хочу поделиться своим мнением с хабрасообществом о книге «Passionate Programmer», перевод одной из глав которой представлен ниже. Книга вышла в 2009 году, но среди российских программистов она не очень широко известна, тем не менее многие, кто познакомился с ней, считают её очень достойной. Чад Фаулер (автор книги) выложился очень хорошо, чтобы передать читателям свой богатый опыт (на данный момент он CTO 6Wunderkinder, имеет более 20 лет стажа разработки и в виду своего большого опыта и круга интересов он желанный гость на Ruby- и IT-конференциях). Да, уже и не помню как нашёл эту книжку, но помню, что именно предисловие от Кента Бека (идейный вдохновитель Test Driven Development и Extreme Programming) послужило причиной прочитать её.

В этой книге нет описания конкретных технологий, алгоритмов и т.п., но есть просто куча советов, касательно того, с чем порой сталкивается любой разработчик: отсутствие мотивации, выбор приоритетов, психология программирования, отношения с руководством и коллегами; по большому счёту даётся масса наставлений, о том как сделать яркую карьеру программиста. Конечно, опытные разработчики могут найти некоторые его идеи достаточно очевидными, но для тех, кто только в самом начале своей карьеры, чтение данной книги, определённо, будет хорошим вложением времени. Большой плюс, что книга читается очень легко и, если вы достаточно хорошо владеете английским, её реально прочитать всего лишь за несколько дней. Просто интересно, почему наши издательства ещё не перевели её на русский язык?

После прочтения книги я заинтересовался Чадом. Нашёл его блог в сети. Как оказалось, он начал выкладывать в нём главы из своей книги (на данный момент опубликовано 2 главы из 53). Я спросил разрешения на перевод для хабра, он ответил, что это хорошая идея, но только сначала мне надо отправить ему письмо с тем, что конкретно я хочу переводить (видимо это пожелание было как-то связано с тем издательством, где была опубликована книга). После моего ответа неделю было молчание, я отправил повторное письмо — ответа снова не было. Потом я получил от него приглашение на Wunderlist (сервис, за который он отвечает на данный момент). В общем, я посчитал, что если явного запрета не было, а эти главы уже и так находятся в свободном доступе, и он ещё не совсем про меня забыл, то делать перевод можно. В общем, если перевод сообществу окажется полезным, я продолжу переводить другие главы. В тексте возможны ошибки (делал вычитку несколько раз, но всё же вдруг), поэтому заранее прошу прощения и прошу сообщать мне обо всех проблемах через личные сообщения.


Читать перевод
Всего голосов 87: ↑83 и ↓4+79
Комментарии24

Абсолютное горизонтальное и вертикальное центрирование

Время на прочтение5 мин
Количество просмотров314K
Сколько уже было сломано копий о задачу выравнивания элементов на странице. Предлагаю вашему вниманию перевод отличной статьи с решением этой проблемы от Стефана Шоу (Stephen Shaw) для Smashing Magazine — Absolute Horizontal And Vertical Centering In CSS.

Все мы знали о margin: 0 auto; для горизонтального центрирования, но margin: auto; не работало для вертикального. Это можно легко исправить, просто задав высоту и применив следующие стили:

.Absolute-Center {
  margin: auto;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
}

Я не первый, кто предложил это решение, однако такой подход редко применяется при вертикальном выравнивании. В комментариях к статье How to Center Anything With CSS Simon ссылается на пример jsFiddle, где приводится отличное решение для вертикального центрирования. Вот еще несколько источников на эту тему.

Рассмотрим способ поближе.
Читать дальше →
Всего голосов 112: ↑106 и ↓6+100
Комментарии10

Раздача интернета с 3G модема в локальную сеть в Linux

Время на прочтение12 мин
Количество просмотров46K
Эта статья — продолжение статьи Беспроводная точка доступа, используя Linux. Тут я опишу, что же необходимо сделать для того, чтобы раздавать интернет с 3G-модема по уже созданной по инструкции из предыдущего топика вайфай-сети.

1) Прежде всего, научить Linux работать с модемом
2) Создать NAT для раздачи интернета
3) Запихнуть всё это дело в автозагрузку
Итак, bash, wvdial и iptables под мышку — и поехали!
Читать дальше →
Всего голосов 25: ↑14 и ↓11+3
Комментарии20

Sylph: Глубокие Stub-ы для тестов от создателей PHPixie, или как конвертировать массив в класс

Время на прочтение2 мин
Количество просмотров2.6K
Юнит тестинг Sylph
Одной из самых нужных вещей при написании юнит тестов является создание mock-ов и stub-ов для объектов которые используются тестируемым классом. Здесь стоит упомянуть о важном отличии: если «mock» является исходным объектом в котором замены одна или несколько методов, то «stub» это некий фейк который полностью заменяет исходный объект. в зависимости от сценария иногда намного легче создать стаб чем сделать подходящий mock. В этой статья я покажу как эффективно и быстро создавать стабы используя небольшой класс Sylph от создателей фреймворка PHPixie.
Читать дальше →
Всего голосов 13: ↑6 и ↓7-1
Комментарии10

Основы архитектуры IIS, или запросопровод для ASP.NET

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



В прошлом году мне пришлось отсобеседовать около 10-15 кандидатов на должность веб-программиста на ASP.NET средней квалификации. В качестве вопросов «на засыпку», или «со звёздочкой», я просил рассказать, что происходит с HTTP-запросом от момента его поступления на 80-й порт сервера до передачи управления коду aspx-страницы. Статистика была удручающей: ни один из кандидатов не смог выдать хоть что-нибудь внятное. И этому есть своё объяснение: ни в MSDN с technet, ни на специализированном ресурсе iis.net, ни в книгах a-la «ASP.NET для профессионалов», ни в блогах данной теме не уделяется должного внимания – информацию приходится собирать чуть ли не по крупицам. Я даже знаю людей, которые решили написать свой собственный веб-сервер (Игорь, Георгий, привет!), чтобы не разбираться в работе IIS. Единственная толковая статья – «Introduction to IIS Architectures» Риган Темплин (Reagan Templin). Но и она остаётся на периферии интересов аспнетчиков.

Хотя мне лично уже не так интересны чисто технические вопросы, я решил собрать в кучу свой накопленный опыт, раскопать на просторах Сети любопытные детали и передать сие сакральное знание массам, пока оно ещё не устарело. Сразу оговорюсь, что статья ориентирована в большей степени на IIS 7.x, иногда будут ответвления про 6-ку. С 8-й версией в работе не сталкивался, поэтому решил обойти её в этой статье стороной. Но, уверен, читатель без труда разберётся с восьмёркой, освоив изложенный ниже материал.
Познать...
Всего голосов 71: ↑59 и ↓12+47
Комментарии9

Взаимодействие php-soap на linux с авторизацией по сертификатам с использованием алгоритмов ГОСТ

Время на прочтение8 мин
Количество просмотров23K
С криптографией я сталкивался ранее, приходилось разворачивать удостоверяющий центр на КриптоПро в свое время, так что общие представления о том что такое закрытые и открытые ключи и сертификаты у меня имелось, но вот о том как все это работает в Linux представления особого не было.
Встала задача обеспечить взаимодействие со службами РосМинздрава, а именно — с федеральным регистром медработников по протоколу SOAP. Со стороны клиента система на CentOS и работающими службами на PHP, со стороны сервера — SOAP-сервис с авторизацией по сертификатам с использованием ГОСТ алгоритмов. В наличии была флешка с закрытым ключом, сформированным удостоверяющим центром РосМинздрава и сертификат этого ключа.
После анализа ситуации по использованию ГОСТ алгоритмов шифрования в мире Linux выяснено что за последние годы здесь есть хорошее движение вперед, но все таки не совсем все хорошо. Итак, для того чтобы заставить расширение php-soap прозрачно понимать алгоритмы ГОСТ, а также использовать сертификаты и ключи выданные РосМинздравом нужно сделать следующее:

1. Обновить в дистрибутиве библиотеку OpenSSL до версии не ниже 1.0.1с и настроить поддержку ГОСТ.
2. Преобразовать выданный ключ и сертификат в формат, понятный OpenSSL. Проверить работу OpenSSL.
3. Подправить расширение OpenSSL в PHP и перекомпилировать сам PHP. Протестировать работу SOAP на PHP.

Итак, приступим.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии8

Социальные игры: сервер, клиент и общая шина событий

Время на прочтение3 мин
Количество просмотров11K
Добрый день.
У меня выдалось свободное время, и я решил написать статью про несправедливо обойденный вниманием паттерн написания api. Он подходит в случае, если у Вас и клиент и сервер содержат сложное состояние, и есть необходимость его синхронизировать. На мой взгляд, социальные игры идеально подходят под это описание. В силу того, что я ещё не достиг того уровня мастерства, когда могу писать статьи про программирование без кода, спешу предоставить пример, демонстрирующий данный подход. Посмотреть код можно на github: https://github.com/dbalakov/studio_game.

Читать дальше →
Всего голосов 11: ↑7 и ↓4+3
Комментарии2

Информация

В рейтинге
Не участвует
Откуда
Реутов, Москва и Московская обл., Россия
Зарегистрирован
Активность