Pull to refresh
39
0
Антон Мельников @antonsnowy

Программист

Send message

Профилирование PHP-кода

Reading time3 min
Views36K
Профилирование PHP-кода

Рано или поздно каждый из нас сталкивается с унаследованным кодом и его оптимизацией. Дебаггер и профилировшик в такой ситуации — лучшие помощники программиста. У тех кто работает с PHP, благодаря Дерику Ретансу (Derick Rethans) есть хороший инструмент — xDebug. Информации касательно xDebug много даже в рунете, поэтому речь в этой статье пойдет не о нем.

Наткнувшись на упоминание о профилировщике для PHP я сразу подумал об xDebug ( о проприетарных инструментах от Zend я давно уже успел позабыть ), но на этот раз ошибся — речь пойдет об XHProf.
XHProf

Этот профилировшик был разработан специально для Facebook, а исходный код его был открыт в марте 2009 года.
Читать дальше →
Total votes 25: ↑21 and ↓4+17
Comments20

Профилирование PHP скриптов на живом сервере

Reading time5 min
Views17K
Добрый день, сообщество!

Наверняка кто-то из вас сталкивался с такой проблемой: медленно работает сайт на реальном сервере.
Важно оперативно выяснить в каких местах возникли сложности. Использовать для этого xdebug нельзя, так как он создает большую нагрузку на сервер и сам вносит погрешность в измерения. Для решения этой задачи мы выбрали систему, которая позволяет очень быстро собирать древовидную статистику по работе сайта — pinba.
Читать дальше →
Total votes 39: ↑34 and ↓5+29
Comments59

Реализация REST API на Symfony2: правильный путь

Reading time18 min
Views57K
REST
Создание REST API это нелегкая задача. Нет, серьезно! Если вы хотите написать API правильно, вам придется о многом подумать, решить, быть прагматиком, или API маньяком. REST это не только GET, POST, PUT и Delete. На практике, у вас могут быть взаимодействия между ресурсами, нужно перемещать ресурсы куда-то еще (к примеру внутри дерева), или вы захотите получить конкретное значение ресурса.

В данной статье собрано все, чему я научился реализуя различные API сервисы, используя для этих целей Symfony2, FOSRestBundle, NelmioApiDocBundle и Propel. К примеру сделаем API для работы с пользователями.
Читать дальше →
Total votes 32: ↑29 and ↓3+26
Comments25

Бесплатные книги по JavaScript

Reading time2 min
Views66K

Javascript Enlightenment


Cody Lindley


Уровень знаний: средний
Тщательный обзор мировоззрения JavaScript через разбор встроенных объектов и нюансов.

Открыть

Eloquent Javascript


Marijn Haverbeke


Уровень знаний: начинающий
Вводная книга по JavaScript и программирование в целом.
Открыть

Building A JavaScript Framework


Alex Young


Уровень знаний: продвинутый
Избранные статьи из цикла«Let’s Make a Framework».
Открыть

Читать дальше →
Total votes 77: ↑73 and ↓4+69
Comments15

Хочешь быть iOS разработчиком? Будь им!

Reading time2 min
Views388K
На хабре в прошлом месяце была опубликована статья Конкурс ВК: Мессенджер для Android. Как это было!, в которой автор поделился своими мыслями о конкурсе и опубликовал список ресурсов и статей, которые помогли ему в создании приложения. Так как в последнее время я начал изучать разработку под iOS, то у меня скопилось некоторое количество ссылок, которые могут быть полезны для начинающих. Поэтому я последую его примеру и сделаю то же самое, только для своей платформы. Надеюсь, кому-нибудь они окажутся полезны и сэкономят немного времени.

Читать дальше →
Total votes 234: ↑222 and ↓12+210
Comments38

AzaThread — многопоточность для PHP с блэкджеком

Reading time6 min
Views18K
В сети гуляет довольно много решений для эмуляции многопоточности в php. Чаще всего они основываются на форках, но есть и вариации на тему с использованием curl, proc_open и т.п.

Все встреченные варианты по тем или иным причинам меня не устроили и пришлось написать свое решение.
Набор требований у меня был следующий:
  • Использование форков;
  • Синхронный режим с сохранением интерфейса при отсутствии необходимых расширений;
  • Многократное использование дочерних процессов;
  • Полноценный обмен данными между процессами. Т.е. запуск с аргументами и получение результата по завершении;
  • Возможность обмена событиями между дочерним процессом-«потоком» и основным процессом во время работы;
  • Работа с пулом потоков с сохранением многократного использования, передачи аргументов и получения результатов;
  • Обработка ошибок выполнения;
  • Таймауты на выполнение работы, ожидание работы потоком, инициализацию;
  • Максимум производительности;

В результате получилась библиотека AzaThread (старое название — CThread).
Подробности
Total votes 156: ↑146 and ↓10+136
Comments66

Новый паттерн UI — боковая навигация

Reading time7 min
Views49K
Занимаюсь редизайном приложения 10tracks для Android, и решил позаимствовать красивый интерфейсный ход старших братьев — Facebook и других. На эту тему нашлась хорошая статья, переводом которой спешу поделиться с вами. Между тем эта статья — больше платформа для дискуссии, чем нерушимые устоявишеся правила.


За последний год интерфейс Android улучшался с феноменальной скоростью (я подобрал небольшую галерею приложений, которые мне нравятся в Google+). Много изменений являлись лишь косметическими (тема Holo в ICS, шрифт Roboto, и т.д.). Мы не увидели больших качественных изменений в принципах проектирования интерфейсов. Но, возможно, как раз сейчас происходит одно такое.

Почти одновременно несколько приложений внедрили у себя боковую навигацию как в приложении Facebook. Сначала мы увидели, как она используется в новом дизайне Spotify, а затем почти сразу решение переняли Evernote. Не прошло и года, в новом дизайне приложения Google+ представили аналогичный паттерн.
Читать дальше →
Total votes 81: ↑78 and ↓3+75
Comments40

Написание программ на PHP с использованием fork()

Reading time5 min
Views37K

Параллельные программы на PHP


Раньше заголовок темы был «Написание многопоточных программ на PHP». В PHP есть ровно один «нормальный» способ писать приложения, которые используют несколько ядер/процессоров — это fork(). О прикладном использовании системного вызова fork() в языке PHP и расширения pcntl я и расскажу. В качестве примера мы напишем достаточно быструю параллельную реализацию grep (со скоростью работы, аналогичной find . -type f -print0 | xargs -0 -P $NUM_PROCS grep $EXPR).
Читать дальше →
Total votes 111: ↑89 and ↓22+67
Comments62

Немного о связываемых переменных (prepared statements)

Reading time6 min
Views58K
Если бы мне пришлось писать книгу о том, как создавать немасштабируемые приложения Oracle, первая и единственная ее глава называлась бы «Не используйте связываемые переменные».
Том Кайт, вице-президент Oracle

Недавно на Хабре появилась статья от AlexanderPHP «SQL injection для начинающих. Часть 1». По ее содержимому и комментарием к ней может создаться впечатление, что у многих разработчиков нет понятия, что такое связываемые переменные, зачем ими следует пользоваться и какие преимущества они дают. Попытаюсь в данной статье пролить небольшой свет на данные вопросы.
Читать дальше →
Total votes 58: ↑55 and ↓3+52
Comments196

Боремся с race condition в PHP

Reading time4 min
Views8.6K
Ошибки типа «Состояние гонки» (race condition) редко встречаются на малонагруженных проектах, а с ростом нагрузки ситуация медленно, но верно меняется. И однажды обычное кеширование данных в файле, например, вот такое:

function getFlagFromFile($filename) {
    if (file_exists($filename)) {
        if (!$this->validate()) { // а не устарел ли файл?
            unlink($filename);
            return false;
        }
        else {
            return file_get_contents($filename);
        }
    }
    return false;
}

выдаёт ошибку в строке unlink(): файл $filename не существует!
Читать дальше →
Total votes 46: ↑32 and ↓14+18
Comments77

Agile: танцы с бубном или наука

Reading time3 min
Views15K
Множество достаточно опытных разработчиков и менеджеров пробовало Agile, и им не понравилось. Многие директора, руководители и специалисты даже не пробовали, ибо считают Agile религией, которая помогает, если в неё верить, либо, вообще, только создают впечатление эффективности у «верующих».



Понять последних можно, ведь большинство статей и agile-евангелистов говорят, примерно следующее: «Делайте так, как говорит методология, и ваш проект попадёт в рай. Если нарушите хотя бы одну из практик, то Agile покарает вас»
Так есть ли прок от Agile?
Total votes 42: ↑31 and ↓11+20
Comments59

Добыча и переработка игрового трафика

Reading time17 min
Views25K
Вступление

В 2007, чтобы оптимизировать рекламу наших игр, был сделан свой движок для ротации рекламы. Так родилась наша рекламная сеть. Она быстро выросла в крупную баннерную сеть, ориентированную исключительно на рекламу онлайн-игр и околоигровых ресурсов. Сегодня мы хотим поделиться своими наблюдениями и опытом. Надеемся, что материал будет полезным молодым командам, но что-то интересное смогу почерпнуть и опытные коллеги.

Материал посвящен следующим темам:

  • переработка и анализ трафика;
  • методы добычи трафика;
  • инструменты оптимизации добычи трафика.


Сначала стоит пройтись по анализу и переработке трафика, потому что прежде чем добывать трафик, надо понимать, какой именно трафик нам нужен. И сколько он должен стоить.
Читать дальше →
Total votes 91: ↑81 and ↓10+71
Comments23

Быстрый старт первого проекта в Windows Azure. Веб-сайты

Reading time7 min
Views11K
В этой статье из пяти частей показано, как: создать веб-сайт для Windows Azure из галереи образов, создать веб-сайт и развернуть собственный ASP.NET MVC 4 проект, масштабировать веб-сайт. Веб-сайты являются новой функциональностью платформы и находятся в стадии Preview — соответственно, требуется регистрация для доступа к этой функциональности.
Читать дальше →
Total votes 39: ↑28 and ↓11+17
Comments8

Формат XXEncode на VBA, или как загрузить бинарник в документ

Reading time4 min
Views3.8K
При работе в связке Excel+VBA бывает нужно хранить бинарные данные в контейнере, который накладывает ограничения содержимое. Для этих задач был разработан формат XXEncode. И вот, допустим, Вам захотелось иметь необходимые библиотеки и утилиты, связанные с вашим проектом VBA всегда при себе, внутри Рабочей книги .xls. Ниже я покажу, как я реализовал у себя хранение бинарных файлов в комментариях стандартных модулей проектов VBA.
Читать дальше →
Total votes 6: ↑3 and ↓30
Comments5

Пишем первую программу для RIM BlackBerry

Reading time5 min
Views11K
В этой статье я расскажу как написать простое приложение для смартфонов BlackBerry, которые производит канадская компания RIM (Research In Motion).

Инструментарий для разработки предоставляется компанией RIM бесплатно. Отладка приложения может производиться как на симуляторе, так и прямо на устройстве. Для того, чтобы иметь возможность выполнять приложение на устройстве, скомпилированный файл с расширением .cod надо подписать специальным электронным ключом, который предоставляется RIM и является бессрочным. Теоретически возможно обойтись без электронного ключа. В ключе нет необходимости, если вы запускаете написанные программы только в симуляторе. Также нет необходимости в ключе, если вы, при написании приложения предназначенного для выполнения на устройстве, применяете только классы не входящие в список «controlled API». Должен заметить, что большинство классов RIM API входят в этот список и приложения, их использующие, должны быть подписаны, в противном случае на устройстве они не запустятся.
Читать дальше →
Total votes 34: ↑28 and ↓6+22
Comments46

Особенности обработки HTML-писем

Reading time3 min
Views42K
Здравствуйте, хабраюзеры!

Недавно довелось копаться с рассылкой писем в HTML-формате. Есть много статей, написанных на тему валидной вёрстки рассылок, однако здесь речь пойдёт не об этом. Известно, что у каждого почтовика есть свои особенности отображения HTML-письма. Меня заинтересовали эти особенности и различия в отображении письма на разных почтовиках.
Читать дальше →
Total votes 52: ↑47 and ↓5+42
Comments19

OAuth на практике. Аутентификация и авторизация пользователей сайта через популярные социалки

Reading time14 min
Views346K
Думаю, не мне одному чрезвычайно надоели ресурсы, требующие регистрации по каждому поводу и без. С обязательной капчей, которая правильно введется только с пятого раза, с подтверждением по е-мейлу, которое обязательно свалится в спам и то — только через сутки. Придумывать каждый раз новую пару логин-пароль — забудется, вводить одно и то же на всех сайтах — небезопасно. Местами прокатывают пары вида «qwerty:qwerty» или «login:password», но, увы, далеко не везде. Надоело. Не счесть, сколько раз я, увидев надпись «только зарегистрированный пользователь может ****», просто кривился и закрывал вкладку, чтобы больше ни разу на этот сайт не заходить. Неужели администраторы ресурсов сами этого не понимают?
Читать дальше →
Total votes 126: ↑116 and ↓10+106
Comments180

Git Wizardry

Reading time17 min
Views450K
1 Введение


В своей прошлой заметке я постарался осветить в общих чертах стиль работы с
распределенной системой контроля версий git и указать на отличия по сравнению с
классическими централизованными СКВ. Целью было прежде всего обобщение опыта
работы с системой без упоминания тонкостей синтаксиса отдельных команд.

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

Читать дальше →
Total votes 89: ↑66 and ↓23+43
Comments76

Визуализация «В Контакте»: Скажи мне, кто твой друг?

Reading time2 min
Views145K
Привет, Хабралюди!

У меня есть хобби. Я ночами (в нерабочее время) пишу библиотеку укладки графов: vivagraph.js. Хотел поделиться с вами, узнать что думаете. Визуализировал я сеть друзей своих на «В Контакте» с использованием WebGL. Но лучше один раз увидеть, чем читать, верно?



Это мои друзья. Каждая точка — человек, целый мир, с которым так или иначе мне повезло встретиться. Линия между точками обозначает дружбу. По этой сети можно, правда, сказать многое о человеке.

Как построить свою сеть?
Total votes 314: ↑302 and ↓12+290
Comments256

Безопасная аутентификация между клиентом и сервером без ввода логина и пароля

Reading time7 min
Views24K
Недавно, при разработке распределенного анализатор трафика, у меня появилась задача спроектировать систему аутентификации между клиентом и сервером. Причем необходимо было спроектировать систему для двух разных ситуаций:

  • когда клиент и сервер общаются в доверенной (локальной) сети;
  • клиент и сервер взаимодействуют через глобальную, незащищенную сеть.

Отличия заключаются в том, что при взаимодействии клиента и сервера через локальную сеть, при проектировании системы исключались угрозы вторжения из вне (угроза сидящего рядом с вами хакера, перенаправляющего ваш трафик на свой компьютер, сводилась к минимуму). К тому же взаимодействие клиента и сервера в локальной сети означает, что доступ клиента и сервера к интернету отсутствует или не желателен, то есть также отсутствует доступ к центрам сертификации, и, как следствие, невозможно в полной мере использовать аутентификацию при помощи открытых ключей.

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

Читать дальше →
Total votes 40: ↑36 and ↓4+32
Comments19

Information

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