Pull to refresh
66
0
Send message

Оптимизация связки Nginx, Apache, PHP, MySql

Reading time9 min
Views80K
Неожиданно поступила задача разобраться почему определенный сайт не работает столь быстро сколь хочется. В основе его CakePHP, в связке с Apache и MySQL. В статье описание процесса поиска узких мест и приведение в порядок на столько, на сколько это возможно.

Название сайта светить не буду — думаю, программисты сами узнают. Скажу лишь, что это приложение для социальной сети нагрузкой 70-150 тысяч посетителей в обычное время. Все усложняется тем, что периодически производится рекламная рассылка, которая привлекает около 200-300 тысяч посетителей за пару часов.

Итак, под катом описание всей борьбы на протяжении 4 дней.
Читать дальше →

Загрузка и инициализация JavaScript

Reading time10 min
Views43K

С появлением мобильного веба наш интернет стал снова плохим, а устройства медленными. 3G, 4G, Wi-Fi… — они, конечно, где-то есть, но когда очень надо, то как правило скорость падает до околомодемной и получается, что наши мобильный устройства «каменного века» попадают в условия современного объема информации. Даже в центре города (правда на 15-м этаже) значок мобильного интернета может показывать волшебную букву Е, намекающую о том, что уж лучше не тратить нервы и потерпеть. Лучше уж использовать нативную версию какого-то веб-сервиса, чем каждый раз ждать, загружать по мегабайту, чтобы отправить короткое сообщение. Нативную версию веб-сервиса... Понятное дело маркетинг, гонка приложений. Однако, же пользователи выбирают нативные веб-приложения, которые работают быстрее, не качают кучу ресурсов, хотя им приходится периодически его обновлять.

Эта статья о том какими путями можно оптимизировать загрузку и инициализацию JavaScript.
Читать дальше →

Отладка сложных веб-приложений — эффективная багодробилка на production-серверах

Reading time12 min
Views26K
Всем привет!

Сегодня расскажу, как на боевых серверах во время нагрузки, в пыли и грязи, эффективно отлавливать узкие места в производительности больших веб-приложений на PHP, а также искать и устранять «нестандартные» ошибки. Многие из описанных техник мы с успехом применяем на нашем облачном сервисе «Битрикс24».
Информация, надеюсь, пригодится системным администраторам и разработчикам, обслуживающим сложные веб-проекты, а также менеджерам, которые хотят выстроить эффективный и быстрый процесс поиска и устранения узких мест и ошибок проектов на PHP.

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

Как умирают софтварные компании

Reading time3 min
Views34K

Условия, которые питают креативных программистов, убивают менеджеров и маркетологов — и наоборот. Программирование — Великая Игра. Оно поглощает игрока полностью, включая и душу и тело. Если ты попался — то ты попался, и ничего уже больше не имеет значения. Когда ты в следующий раз вылезешь из своей берлоги, вполне могут обнаружиться лишние десять киллограммов, борода до колен и такое количество пустых коробок из-под пиццы вокруг, что уже, наверное, наступила весна? Но для тебя это всё не важно. Потому, что твоя программа работает, а код быстр и элегантен. Ты победил.
Читать дальше →

Ремонтируем монитор содой!

Reading time2 min
Views151K
В последнее время, как мне кажется, пластиковые рудники на грани истощения. Чем больше и тяжелее монитор, тем меньше и тоньше подставка. Так 23'' монитор Samsung постигла участь одуванчика. Случайно наткнулся, в одной из местных news групп, на способ восстановления пластика при помощи пищевой соды. Под катом ремонт стойки монитора.
Далее...

Простой универсальный переключатель на JavaScript

Reading time8 min
Views53K
При разработке сайтов нередко возникает необходимость в каком-либо переключении их состояния, обычно для этого используются псевдоссылки: скрыть или показать подсказку, поле ввода, другую часть страницы.

Можно каждый раз писать JavaScript-код и стили к нему, но со временем это приводит к разрастанию кода, с чем в определенный момент мы и столкнулись.

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

PHP: фрактал плохого дизайна

Reading time32 min
Views207K

Предисловие


Я капризный. Я жалуюсь о многих вещах. Многое в мире технологий мне не нравится и это предсказуемо: программирование — шумная молодая дисциплина, и никто из нас не имеет ни малейшего представления, что он делает. Учитывая закон Старджона, у нас достаточно вещей для постижения на всю жизнь.

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

PHP — единственное исключение. Фактически каждая деталь PHP в какой-то мере поломана. Язык, структура, экосистема: всё плохо. И даже нельзя указать на одну убийственную вещь, настолько дефект систематичный. Каждый раз, когда я пытаюсь систематизировать недостатки PHP, я теряюсь в поиске в глубину обнаруживая всё больше и больше ужасных мелочей(отсюда фрактал).

PHP — препятствие, отрава моего ремесла. Я схожу с ума от того, насколько он сломан и насколько воспеваем каждым уполномоченным любителем нежелающим научиться чему-либо ещё. У него ничтожно мало оправдывающих положительных качеств и я бы хотел забыть, что он вообще существует.
Читать дальше →

Полезные ссылки для изучения CSS анимации

Reading time3 min
Views24K
Мы начали наблюдать много экспериментов над CSS3 анимацией и статьи о ней в 2011-м, но тогда поддержка этой анимации была ограничена браузерами на вебките. В середине 2011-го Firefox 5 тоже получил эту поддержку, а также мы можем ожидать ее в следующей реинкарнации Internet Explorer (10), поэтому сейчас идеальное время, чтобы разобраться с синтаксисом @keyframes (покадровой анимации). Этот пост предлагает краткий обзор 10-ти статей, в которых объясняется, как использовать это клевое CSS3 свойство, с примерами и демками.


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

Пиксельные искажения с билинейной фильтрацией в HTML5 canvas

Reading time3 min
Views8.9K

В данном посте я хочу описать простую методику пиксельного искажения изображения на «чистом» javascript в 2D-Canvas без использования специальных библиотек и шейдеров, путём прямого доступа к пикселям изображения. Надеюсь, это будет интересно и полезно как для общего развития, так и для решения каких-то задач.

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

Как раскрыть мощь HTML5 Canvas для игр

Reading time8 min
Views40K


Браузеры, поддерживающие HTML5, и платформа HTML5 для Windows 8 Metro сегодня становятся серьезными кандидатами для разработки современных игр.

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

Цель данной статьи — дать вам несколько подсказок, как выжать максимум мощности из HTML5 Canvas. Статья состоит из двух основных частей [вы читаете первую]. David Rousset скоро опубликует вторую часть.

В статье я буду показывать ключевые идеи на одном и том же примере — это эффект 2D-туннеля, который я написал для Coding4Fun-сессии на TechDays 2012 во Франции.
Читать дальше →

I'm Feeling Lucky в стандартном поиске браузера

Reading time2 min
Views5.9K
Когда-то давно, когда горы были выше, а деревья зеленее, в браузерах поиск в адресной строке работал так, как это было правильно: он использовал функцию Google I'm Feeling Lucky. Вы могли легко вводить «хабр» вместо «habrahabr.ru», вводя «Сан-Франциско», вы сразу же попадали на сайт этого города в Википедии (ведь туда вы и хотели, правда?), а фраза «php in_array» моментально перекидывала вас на документацию по этой функции, в синтаксисе которой вы в очередной раз забыли, needle или haystack идет первым.

Но потом Гугл понял, что $110 млн в год, которые они теряют из-за того, что вам никто не показал рекламу на эти запросы — это непозволительно много, и больше браузеры по умолчанию не хотят демонстрировать нам всю телепатическую магию поиска I'm Feeling Lucky, а вместо этого демонстрируют промежуточное звено поисковой страницы, на которой вы все равно как всегда сразу же нажимаете на первую ссылку (ведь где еще может быть Википедия?), но зато посмотрели рекламу и добросовестно уменьшили рекламодателю CTR.

Как вернуть все взад

Алгоритмы сегментации текста

Reading time4 min
Views15K
Здравствуйте.

В контексте анализа данных из твиттера возникла задача обработки хештегов. Нужно было взять хештег и разбить его на отдельные слова (#habratopic => habra topic). Задача казалась примитивной, но, получается, я ее недооценил. Пришлось перебрать несколько алгоритмов пока не было найдено то, что надо.

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

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

КЛАДР умер, да здравствует ФИАС?

Reading time1 min
Views85K
Уважаемые коллеги, которые сталкивались с классификатором адресов Российской Федерации КЛАДР знают, насколько это странная база (в первую очередь своей структурой), а также большим количеством неточностей в самих данных.

В 2011 году за дело взялась ФНС, которая начала разрабатывать новую единую базу Федеральной информационной адресной системы (ФИАС) для того, что бы покончить с адресным бардаком, царящим среди различных ведомств.
Читать дальше →

Hash-навигация в AJAX-сайтах

Reading time2 min
Views26K
Если вы строите ajax-cайт, то рано или поздно, вы сталкиваетесь с проблемой «не работает кнопки назад-вперед в браузере». Потому что ajax — асинхронный, он не выполняет переход на другие страницы, а всего-лишь меняет некую часть содержимого на текущей.

Вторая проблема, с которой борются все разработчики — проект перед сдачей в продакшн просто изобилирует кучами javascript (ajax) кода. Весь этот код по своей сути — всего лишь запросы страниц с севера «без шаблона», т.e., чистое содержимое страницы.
Читать дальше →

Использование Zend GData в Symfony2-проекте

Reading time7 min
Views2.3K


Ведущий разработчик фреймворка Symfony — Фабьен Потенсьер (Fabien Potencier) в 2009-м году выступил на Zend/PHP Conference с докладом о извлечении выгоды в совместном использовании Symfony 1.3/1.4 и Zend Framework. Основные тезисы его речи доступны в презентации, опубликованной на его персональном сайте [1].

Как известно, Symfony2 — это практически новый фреймворк, созданный с использованием новейших возможностей языка PHP. На данный момент разработка перешла в RC-цикл, и всё больше разработчиков, имеющих опыт работы на первой ветке Symfony (да и не только они), смотрят в сторону нового флагмана. Но, даже несмотря на значительное количество включенных в стандартное издание компонентов, Symfony2 не покрывает все нужды веб-разработчика, поэтому, рано или поздно, встает вопрос о подключении внешних библиотек.

Очевидно, что в этом свете объемный комплект библиотек Zend (Gdata, Search_Lucene, Pdf и т. д.) нельзя обойти стороной. В данном посте мной будет рассмотрен процесс интеграции Symfony2 и Zend на примере Zend Gdata — библиотеки для взаимодействия с Google Data API [2].

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

Realtime на вашем ресурсе за несколько минут

Reading time8 min
Views12K
Во время разработки игры мы столкнулись с необходимостью обеспечения максимального риалтайм обмена данных между пользователями, что повлекло за собой эксперименты с различными comet библиотеками.
Первый велосипед был построен на dklab realplexor, который, при очередной попытке его использования, как и ожидалось, нас подвел. Может у нас руки кривые, но добиться получения ивентов без задержек в 5-10-15 секунд у нас, к сожалению, не получилось.
Танцы с бубном продолжались долго, в результате чего мы решили остановиться на nginx_http_push_module, и потраченное время все же стоило того.
Читать дальше →

Новый метод замены текста картинкой, или избавляемся от -9999px

Reading time3 min
Views37K
Хотелось бы поговорить о техниках замены текста изображением. Думаю, практически все сталкивались с моментами в верстке, когда, к примеру, для заголовка страницы нужно использовать графический объект, при этом сохранив под ним текст и для поисковых роботов, и для печатной версии. Да и в принципе, никогда не хочется ломать семантинку страницы.



Немного об истории решения этого вопроса.


Самой первой популярной техникой была так называемая FIR (она же — Fahrner Image Replacement), которая появилась в 2003-м году. Она проста как пень, и многие начинающие верстальщики ее до сих пор используют:
Читать дальше →

Создание CRUD приложения на Symfony 2, часть 2

Reading time6 min
Views8.1K
Продолжение вводной статьи по Symfony 2. В первой части было описан процесс модификации формы редактирования записей, во второй части будем модифицировать интерфейс списка записей. В заготовке шаблона и контроллера списка записей, которую генерирует команда doctrine:generate:crud как минимум не хватает формы поиска записей и постраничной навигации.
Читать дальше →

Приложение Symfony2 в разрезе

Reading time6 min
Views24K
Наблюдая открыв рот за виртуозным фокусником и его красивыми помощницами, многие, однако, сосредоточенны совсем на другом: как он это делает? как там все устроенно внутри?


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

Эта статья — попытка разобраться, как происходит инициализация приложения и что же такое «Ядро Symfony2».
Посмотреть что внутри

Сортировка текстового поля как числа и как строки одновременно в MySQL

Reading time1 min
Views35K
В базе есть текстовое поле, данные из которого нужно вывести в алфавитном порядке, если данные текстовые, или отсортировать как числа, если данные представляют из себя числа.

Пример требуемой сортировки: 8, 9, 10, 11, 12, Android 2.2, Android 2.3, BlackBerry

Подобная сортировка мне понадобилась при разработке фильтра товаров для одного движка магазинов (к нему имею отношение, сочтите за рекламу), в котором могут быть как текстовые данные, так и числовые (а иногда и вместе одновременно, как в примере).

Гугл навёл только на какие-то страшные триггеры и регекспы.
Предлагаю вам предложить своё решение.

Моё решение (выделите текст, чтобы подсмотреть):
ORDER BY value=0, -value DESC, value

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity