Мы уже писали о методах (Mobile First и Response Web Design), которые используем при разработке нашего сервиса. В этой статье я хочу поделиться с вами нашим опытом. То, что в теории кажется простым, на практике порой оборачивается кошмаром. Речь пойдет о том, как нам удается создавать универсальный веб-сервис, способный работать на большом количестве устройств.
Сергей Турсунов @fiveze
iOS Developer
Авторы Хабрахабра в поисковой выдаче Google
1 min
7.3KTutorial
Как вы знаете, недавно компания Google запустила пилотный проект по представлению сведений об авторстве в результатах поиска. Учитывая количество уникального контента на Хабрахабре, мы решили не упускать возможность воспользоваться данной функцией и интегрировали её в сайт.
Более подробно об этой функции можете почитать на официальной странице компании Google.
А пока, если хотите мелькать в результатах поиска, проделайте следующее.
Более подробно об этой функции можете почитать на официальной странице компании Google.
А пока, если хотите мелькать в результатах поиска, проделайте следующее.
+138
PHP: фрактал плохого дизайна
32 min
206KTranslation
Предисловие
Я капризный. Я жалуюсь о многих вещах. Многое в мире технологий мне не нравится и это предсказуемо: программирование — шумная молодая дисциплина, и никто из нас не имеет ни малейшего представления, что он делает. Учитывая закон Старджона, у нас достаточно вещей для постижения на всю жизнь.
Тут другое дело. PHP не просто неудобен в использовании, плохо мне подходит, субоптимален или не соответствует моим религиозным убеждениям. Я могу рассказать вам много хороших вещей о языках, которых я стараюсь избегать, и много плохих вещей о языках, которые мне нравятся. Вперёд, спрашивайте! Получаются интересные обсуждения.
PHP — единственное исключение. Фактически каждая деталь PHP в какой-то мере поломана. Язык, структура, экосистема: всё плохо. И даже нельзя указать на одну убийственную вещь, настолько дефект систематичный. Каждый раз, когда я пытаюсь систематизировать недостатки PHP, я теряюсь в поиске в глубину обнаруживая всё больше и больше ужасных мелочей(отсюда фрактал).
PHP — препятствие, отрава моего ремесла. Я схожу с ума от того, насколько он сломан и насколько воспеваем каждым уполномоченным любителем нежелающим научиться чему-либо ещё. У него ничтожно мало оправдывающих положительных качеств и я бы хотел забыть, что он вообще существует.
+334
Лайткуб (Фотобокс, Лайтбокс) своими руками за 300р
3 min
388KДопустим, вы хотите сделать качественные фотографии гаджета для обзора или вас интересует предметная съемка в домашних условиях, но под рукой лишь недорогая мыльница. Как быть? Вам нужен лайткуб! О том, как я сделал свой недорогой, но прочный лайткуб, примеры фоток и многое другое – под катом.
+112
+14
Face.com API определяет возраст по фотографии
1 min
38KВ Face.com API добавлена функция определения возраста. Интерфейсы Face.com API используются многими приложениями, в том числе фейсбуковскими Photo Finder и Photo Tagger. «Яндекс» как один из акционеров Face.com использует их API на «Яндекс.Фотках».
API показывает минимальный и максимальный возраст, а также среднюю оценку.
Возможно, новая функция может использоваться на сайтах знакомств для сортировки набора фотографий (анкет), а также в системах безопасности, требующих авторизации по веб-камере — для запрета на доступ лиц моложе определённого возраста.
API показывает минимальный и максимальный возраст, а также среднюю оценку.
Возможно, новая функция может использоваться на сайтах знакомств для сортировки набора фотографий (анкет), а также в системах безопасности, требующих авторизации по веб-камере — для запрета на доступ лиц моложе определённого возраста.
+35
По колено в PDF. PHP парсер с плюшками
9 min
11KТак получилось, что с месяц назад передо мной выросла совершенно неожиданная задача: сконвертировать PDF в html по имеющемуся шаблону. В том числе необходимо было разбивать все на страницы и выделять в них параграфы. Да и много еще чего. И все бы ничего, и обошелся бы я какой-нибудь левой библиотечкой, но кое-какие специфичные штучки-финтеплюшки, так необходимые мне, в библиотеках не нашлись. И это было печально…
+50
Создаём Instagram фильтры с помощью PHP и ImageMagick
5 min
20KTranslation
В этой статье я покажу как создать некоторые эффекты на фотографиях (как на Instagram) с помощью PHP и ImageMagick.
+61
iPhone: MiTM-атака из кармана
3 min
93KПриветствую, коллеги!
Традиционным устройством для проведения атаки на сети Wi-Fi, пожалуй, является ноутбук. Это обусловлено многими факторами: возможностью использования «специфичных» модулей Wi-Fi, наличием необходимого ПО и достаточной вычислительной мощностью. Поэтому «классическим» образом злоумышленника является человек в машине с ноутбуком и торчащей из окна антенной. Но развитие мобильных платформ не стоит на месте, и многие операции давно уже можно выполнять «из кармана».
Многие из нас пользуются «яблочными» устройствами на операционной системе iOS. И ни для кого не является секретом, что iOS является по-сути представителем *nix-семейства со всеми вытекающими из этого плюсами, в числе которых и возможность использовать многие классические pentest-приложения. Сегодня мне хотелось бы рассказать об инструментах для проведения простейшей классической атаки Man in the Middle на клиентов сети Wi-Fi с использованием метода arp poisoning.
Традиционным устройством для проведения атаки на сети Wi-Fi, пожалуй, является ноутбук. Это обусловлено многими факторами: возможностью использования «специфичных» модулей Wi-Fi, наличием необходимого ПО и достаточной вычислительной мощностью. Поэтому «классическим» образом злоумышленника является человек в машине с ноутбуком и торчащей из окна антенной. Но развитие мобильных платформ не стоит на месте, и многие операции давно уже можно выполнять «из кармана».
Многие из нас пользуются «яблочными» устройствами на операционной системе iOS. И ни для кого не является секретом, что iOS является по-сути представителем *nix-семейства со всеми вытекающими из этого плюсами, в числе которых и возможность использовать многие классические pentest-приложения. Сегодня мне хотелось бы рассказать об инструментах для проведения простейшей классической атаки Man in the Middle на клиентов сети Wi-Fi с использованием метода arp poisoning.
+76
Перестаньте писать классы
9 min
186K Признак того, что объект не должен быть классом — если в нём всего 2 метода, и один из них — инициализация, __init__. Каждый раз видя это, подумайте: «наверное, мне нужна просто одна функция».
Каждый раз когда из написанного класса вы создаёте всего один экземпляр, используете только раз и тут же выбрасываете, следует думать: «ой, надо бы это отрефакторить! Можно сделать проще, намного проще!»
Перевод доклада Джэка Дидриха, одного из ключевых разработчиков языка Питон. Доклад прозвучал 9 марта 2012 на конференции PyCon US.
Каждый раз когда из написанного класса вы создаёте всего один экземпляр, используете только раз и тут же выбрасываете, следует думать: «ой, надо бы это отрефакторить! Можно сделать проще, намного проще!»
Перевод доклада Джэка Дидриха, одного из ключевых разработчиков языка Питон. Доклад прозвучал 9 марта 2012 на конференции PyCon US.
+178
jQuery File Upload
2 min
182KУра! Еще один, свеженький… чем он лучше других?
а) Новенький! Всегда, кто берется что-то делать, то обычно смотрит: есть ли в этом смысл, и если есть — делает это.
б) Красивенький! Можно не точить, а ставить из коробки. Основан на Bootstrap'е и иконках Glyphicons
в) Само собой мультиселект файлов, Drag&drop, прогрессбар и превьюшки фотографий.
г) Поддержка кросдоменного соединения, докачка и ресайз фоток на стороне клиента.
д) Готов для любой платформы сервера (PHP, Python, Ruby on Rails, Java, Node.js, и тому подобное.)
blueimp.github.com/jQuery-File-Upload
Поддержка браузеров:
github.com/blueimp/jQuery-File-Upload/wiki/Browser-support
а) Новенький! Всегда, кто берется что-то делать, то обычно смотрит: есть ли в этом смысл, и если есть — делает это.
б) Красивенький! Можно не точить, а ставить из коробки. Основан на Bootstrap'е и иконках Glyphicons
в) Само собой мультиселект файлов, Drag&drop, прогрессбар и превьюшки фотографий.
г) Поддержка кросдоменного соединения, докачка и ресайз фоток на стороне клиента.
д) Готов для любой платформы сервера (PHP, Python, Ruby on Rails, Java, Node.js, и тому подобное.)
blueimp.github.com/jQuery-File-Upload
Поддержка браузеров:
github.com/blueimp/jQuery-File-Upload/wiki/Browser-support
+197
API со вкусом Eviterra
1 min
4.4KПривет, Хабрахабр!
Мы — один из самых современных (и дешевых) авиабилетных сервисов
Eviterra.com давно ничего здесь не писали, потому что готовим несколько очень интересных новостей: например, скоро у нас будет очень существенный апдейт интерфейса (такого, кстати, вообще никто не делал раньше), бонусные программы и много всего более лучшего.
Ну а тем временем есть отличная новость для всех гиков, веб-разработчиков, маркетологов, стартаперов, хипстеров, авиаторов и не только. Если у вас есть сайт, где вы хотите реализовать поиск авиабилетов, то вы можете сделать это вместе с нами прямо сейчас.
Мы — один из самых современных (и дешевых) авиабилетных сервисов
Eviterra.com давно ничего здесь не писали, потому что готовим несколько очень интересных новостей: например, скоро у нас будет очень существенный апдейт интерфейса (такого, кстати, вообще никто не делал раньше), бонусные программы и много всего более лучшего.
Ну а тем временем есть отличная новость для всех гиков, веб-разработчиков, маркетологов, стартаперов, хипстеров, авиаторов и не только. Если у вас есть сайт, где вы хотите реализовать поиск авиабилетов, то вы можете сделать это вместе с нами прямо сейчас.
+18
Разработчики PHP перешли на Git
1 min
1.4KСпустя пол года после голосования о переходе на DVCS
и вслед за релизом PHP5.4, команда разработчиков PHP переехала с Subversion на Git.
Официальный анонс: www.php.net/archive/2012.php#id2012-03-20-1
и вслед за релизом PHP5.4, команда разработчиков PHP переехала с Subversion на Git.
Официальный анонс: www.php.net/archive/2012.php#id2012-03-20-1
+49
Smart pointers для начинающих
6 min
204KЭта небольшая статья в первую очередь предназначена для начинающих C++ программистов, которые либо слышали об умных указателях, но боялись их применять, либо они устали следить за new-delete.
+60
Советы себе в прошлом
4 min
23KУ меня очень мало опыта (суммарно программистом я проработал 16 месяцев), тем не менее, я хотел бы дать несколько советов себе-в-прошлом, ну, или иными словами всем тем, кто сейчас учится в университете и планирует стать разработчиком ПО. Ни в коей мере не претендую на мудрость или опытность. Немного подумав, я понял, что все эти советы как никогда актуальны для меня и сегодня тоже. Первую заметку я опубликовал в своем блоге в прошлом году, а сейчас публикую здесь список, расширенный советами читателей блога.
Все советы автономны и их порядок не имеет значения.
Все советы автономны и их порядок не имеет значения.
+167
Защищаем сайт от атак на примере ХабраХабра
5 min
16KРано утром Хабр «выкатил» своё новое обновление, и я с чистой совестью достаю эту статью из черновиков.
Вчера у меня случился epic fail и этот топик частично, включая строчку об апдейте выше, попал в паблик на пару секунд. За эти секунды топик успело плюсануть несколько человек.
Ещё раз, теперь публично, прошу прощения у администрации!
Совет остальным — НИКОГДА не храните в черновиках информацию вроде этой.
В последнее время в сети Интернет можно найти очень много пособий для «Начинающих хакеров», в которых подробно описываются все основные методы взлома сайтов. Думаете, веб-разработчики стали от этого умнее и предприняли все возможные методы для защиты? Я так не думаю.
В настоящей статье я хочу ещё раз поведать разработчикам о том, как ломают сайты, а чтобы вам не было скучно, я попутно буду ломать Хабр и подробно описывать, как я это делал. Мы рассмотрим такие интересные штучки, как «Активная XSS в профиле», «Бесконечное обнуление кармы», «Публикация топиков со значком 'Из песочницы'», «CSRF через Flash и дыру в Internet Explorer 6» и многое другое.
Все уязвимости уже исправлены. Ну или почти все. Поэтому, если вы найдёте очередную дыру, то пишите на support@habrahabr.ru — миф о том, что эту почту никто не читает всего лишь миф.
+224
Рисуем код из «Матрицы» на PHP
5 min
15KОднажды мне пришла в голову идея сделать динамически создаваемый фон для блога в виде пресловутого кода из фильма «Матрица». После убийства вечера и половины ночи я-таки достиг желаемого результата, и решил поделиться им с народом. К сожалению, я не нашёл подобной реализации, а иметь динамически создаваемую «матрицу» как фон бложика таки хочется.
Итак, пишем генератор кода «Матрицы» на PHP с использованием библиотеки gd.
Итак, пишем генератор кода «Матрицы» на PHP с использованием библиотеки gd.
+19
Документация jQuery UI на русском
1 min
54KВ справочнике jquery.page2page.ru появилась документация jQuery UI. Помимо подробного описания каждого плагина, она содержит статьи о фабрике виджетов, с помощью которой можно создавать собственные подобные плагины, правилах темизации (оформления) виджетов UI, собственной системе позиционирования UI, а так же о расширенных анимационных эффектах, доступных при подключении jQuery UI к сайту. Ну и конечно же есть вводная статья с которой можно начать изучение jQuery UI.
Кроме этого, обновлена карта функций, в которую были добавлены методы с двух последних обновлений jQuery, а так же все плагины jQuery UI.
Кроме этого, обновлена карта функций, в которую были добавлены методы с двух последних обновлений jQuery, а так же все плагины jQuery UI.
+46
PHP Unit. Опыт тестирования классов, работающих с Базой Данных
7 min
16KТестировать или нет классы, взаимодействующие с Базой данных — вопрос куда более холиварный, чем спор «покрывать код тестами или нет». Просмотрев свой проект, нам стало очевидно, что львиная доля классов основана на взаимодействии с базой данных. Поэтому было однозначно решено: «тестированию быть».
Далее я хочу поделится опытом написания модульных тестов для кода, работающего с базой данных.
PHPUnit содержит расширение для тестирования базы данных. Расширение выполняет следующие функции:
К сожалению в этом списке отсутствует одна очень нужная нам фича — восстановление данных в состояние, в котором они находились до тестов. Я хочу предложить 2 варианта решения этой проблемы. Так же попутно остановлюсь на проблеме внешних ключей, которая часто возникает при накатывании не полных тестовых данных на «рабочую» базу.
Итак, я предлагаю 2 варианта решения проблемы: как после проведения юнит теста вернуть базу данных в исходное состояние:
Первый путь — «Транзакционный». Суть которого сводится к выполнению всего теста в рамках одной транзакции, и последующему rollback'у транзакции.
Второй — Перед выполнением теста скопировать структуру «рабочей» базы и проводить тестирование на ней.
Далее я хочу поделится опытом написания модульных тестов для кода, работающего с базой данных.
PHPUnit содержит расширение для тестирования базы данных. Расширение выполняет следующие функции:
- перевод базы данных в заранее известное состояние,
- выполнение необходимых модификаций данных,
- проверка, что в базе данных созданы ожидаемые записи.
К сожалению в этом списке отсутствует одна очень нужная нам фича — восстановление данных в состояние, в котором они находились до тестов. Я хочу предложить 2 варианта решения этой проблемы. Так же попутно остановлюсь на проблеме внешних ключей, которая часто возникает при накатывании не полных тестовых данных на «рабочую» базу.
Итак, я предлагаю 2 варианта решения проблемы: как после проведения юнит теста вернуть базу данных в исходное состояние:
Первый путь — «Транзакционный». Суть которого сводится к выполнению всего теста в рамках одной транзакции, и последующему rollback'у транзакции.
Второй — Перед выполнением теста скопировать структуру «рабочей» базы и проводить тестирование на ней.
+18
Как я делал самый популярный сайт о выборах
10 min
15K Друзья, я хочу вам рассказать историю развития проекта president2012.ru. Сайт является лидером по тематике выборов президента России, за 3 месяца его посетило около 2 млн. человек, в пике имел до 20 тыс. посетителей онлайн и более 1 млн. хитов в сутки, задействовано было 3 сервера облака.
Интересных моментов в процессе работы над проектом набралось столько, что держать в себе эти знания я не могу, и хочу поделится с вами. Я понимаю, что многое, о чем я сейчас собираюсь рассказать, уже описано качественнее в специализированных разделах, и ничего нового я не открою. Моя задача скорее в том, чтобы через отдельные нюансы передать ту атмосферу, в которой проходила работа над проектом. А так же в миллионный раз с помощью success story показать таким же как я людям, что всё возможно и всё в их руках.
Кому это может быть интересно? Всем, кто так или иначе занимается созданием тематичных веб-сайтов и рассчитывает работать с высоконагруженными проектами.
Интересных моментов в процессе работы над проектом набралось столько, что держать в себе эти знания я не могу, и хочу поделится с вами. Я понимаю, что многое, о чем я сейчас собираюсь рассказать, уже описано качественнее в специализированных разделах, и ничего нового я не открою. Моя задача скорее в том, чтобы через отдельные нюансы передать ту атмосферу, в которой проходила работа над проектом. А так же в миллионный раз с помощью success story показать таким же как я людям, что всё возможно и всё в их руках.
Кому это может быть интересно? Всем, кто так или иначе занимается созданием тематичных веб-сайтов и рассчитывает работать с высоконагруженными проектами.
+232
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity