Pull to refresh
16
0
Max Yemets @myem

User

Send message

Google представил API для кроссбраузерного подключения шрифтов

Reading time1 min
Views11K
Google Font API — API для подключеня нестандартных шрифтов.
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="_http://fonts.googleapis.com/css?family=Tangerine">
    <style>
      body {
        font-family: 'Tangerine', serif;
        font-size: 48px;
      }
    </style>
  </head>
  <body>
    <h1>Making the Web Beautiful!</h1>
  </body>
</html>
Читать дальше →

Фильтруем с помощью jQuery большое количество данных

Reading time5 min
Views2.7K
image У меня на хабре очень крупное приданное избранное. Там что-то найти было очень сложно, а если ещё не помнишь как и что, то чрез чур. По сему решил написать на jQuery фильтр всего этого добра по тэгам. Для того бы сграбить закладки, прошлой весной ukko сделал простой граббер. В итоге у нас получался огромный htm в формате NETSCAPE Bookmarks и xml.

Принцип работы прост, устанавливаем себе грабер, получаем заветный habrabookmarks.htm, и просто запускаем мой файл сортировки рядом.
Читать дальше →

XML + CSS = счастье

Reading time4 min
Views13K
Возрадуйтесь, дети мои, ибо пришёл я к вам с миром и богатыми дарами. Нет, я не принёс вам того, чего вы не видели. И даже не принёс того, чего вы не имели. От чистого сердца вручаю вам то, что всегда лежало у вас под ногами, но вы не замечали того, брезгливо перешагивая, пробегая мимо по своим, несомненно самым важным, делам.

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

Примеси! Я же знаю, вы так устали без наследования. Приходится внедрять лишние классы в элементы или даже, переходить на тёмную сторону силы — копипастить по чёрному.

Отныне! Ваша душа будет чиста как у младенца. Руки в золоте как у царевичей. Дети послушными и приветливыми.

а теперь приступим к съёмкам порева

Генерируем QR-код на PHP

Reading time2 min
Views82K

QR-code, уже давно распространен повсеместно, во всех сферах человеческой жизни. Вроде такая популярная вещь, а нормальной библиотеки (Open Source) на PHP — нет. Товарища deltalab, очень напрягла эта проблема и он решил переписать имеющиеся в наличии С библиотеки ibqrencode от Kentaro Fukuchi, на более привычный ему язык PHP.
Читать дальше →

Авторизация через ВКонтакте

Reading time2 min
Views62K
Сколько процентов пользователей вашего сайта являются также пользователями ВКонтакте? Как по вашему, сколько человек ничего не пишут / комментируют / добавляют (нужное подчеркнуть), лишь потому, что им лень регистрироваться на еще одном непонятном сайте в 100й раз? Предлагаю ответить для себя на эти 2 вопроса, прежде, чем ругать ВКонтакте и Open API.

В моем случае на сайт из ВКонтакте каждый день приходят около 1500 человек и обеспечить им простой и удобный способ регистрации, как мне кажется, является моим долгом.

Вряд ли я открою что то новое, но если, хотя бы еще 1 сайт станет немного удобнее после этой статьи — значит я не зря потратил свое время на написание этого текста.
Читать дальше →

Сервер на стероидах: FreeBSD, nginx, MySQL, PostgreSQL, PHP и многое другое

Reading time16 min
Views40K
Нравится мне эта картинка, у меня, вот никогда такие красивые графики в какти не получались =(

Введение


С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный Pentium 4 c 512Мб памяти, обслуживающий одновременно до тысячи человек на форуме и до 150,000 пиров на трекере уже давно покоится на какой-нить немецкой, свалке, а клуб сменил уже не один сервер. Всё сказанное в ней всё ещё остаётся актуальным, однако есть вещи которые стоит добавить.
Статья большая, так что будет поделена на логические блоки:

0. Зачем вообще что-то оптимизировать?
  
1. Оптимизация ОС (FreeBSD)
  1.1 Переход на 7.х 
  1.2 Переход на 7.2
  1.3 Переход на amd64
  1.4 Разгрузка сетевой подсистемы
  1.5 FreeBSD и большое кол-во файлов
  1.6 Softupdates, gjournal и mount options
  
2. Оптимизация фронтенда (nginx)
  2.1 Accept Filters
  2.2 Кеширование
  2.3 AIO
  
3. Оптимизация бэкенда
  3.1 APC
  3.1.1 APC locking
  3.1.2 APC hints
  3.1.3 APC fragmentation
  3.2 PHP 5.3
  
4. Оптимизация базы данных
  4.1 MySQL 
  4.1.1 Переход на 5.1
  4.1.2 Переход на InnoDB
  4.1.3 Встроеный кеш MySQL - Query Cache
  4.1.4 Индексы
  
4.2 PostgreSQL
  4.2.1 Индексы
  4.2.2 pgBouncer и другие.
  4.2.3 pgFouine
  
4.3 Разгрузка базы данных
  4.3.1 SphinxQL
  4.3.2 Не-RDBMS хранилище
  4.4 Кодировки
  4.5 Асинхронность
  
Приложение. Мелочи.
  1. SSHGuard или альтернатива.
  2. xtrabackup
  3. Перенос почты на другой хост
  4. Интеграция со сторонним ПО
  5. Мониторинг
  
 6. Минусы оптимизации

Кому что-нибудь из этого списка интересно, жмём сюда...

Как FriendFeed использует MySQL для хранения данных без схемы

Reading time7 min
Views3.2K

Условия


Мы используем MySQL для хранения любых данных FriendFeed. Наша база данных растёт вместе с числом пользователей. Сейчас у нас более 250 миллионов записей, это записи пользователей (post'ы), комментарии, оценки («likes»)

По мере того как росла база данных, мы время от времени имели дело с проблемами масштабируемости. Мы решали проблемы стандартными путями: slave-сервера, используемые только для чтения, memcache для увеличения пропускной способности чтения и секционирование для увеличения пропускной способности записи. Однако, по мере роста, использованные методы масштабируемости привели к затруднению добавлению новой функциональности.

В частности, изменение схемы базы данных или добавление индексов к существующим 10-20 миллионов записей приводили к полной блокировке сервера на несколько часов. Удаление старых индексов требовало времени, а не удаление ударяло по производительности, так как база данных продолжала использовать их на каждом INSERT. Существуют сложные процедуры с помощью которых можно обойти эти проблемы (например создание нового индекса на slave-сервере, и последующий обмен местами master'a и slave), однако эти процедуры настолько тяжелые и опасные, что они окончательно лишили нас желания добавлять что-то новое, требующее изменение схемы или индекса. А так как наши базы сильно распределены, реляционные вещи MySQL как например JOIN никогда не работали для нас. Тогда мы решили поискать решение проблем, лежащее вне реляционных баз данных.

Существует множество проектов, призванных решить проблему хранения данных с гибкой схемой и построением индексов на лету (например CouchDB). Однако, по-видимому ни один из них не используется крупными сайтами. В тестах о которых мы читали и прогоняли сами, ни один из проектов не показал себя стабильным, достаточно зрелым для наших целей (см. this somewhat outdated article on CouchDB, например). А все это время MySQL работал. Он не портил данные. Репликация работала. Мы уже в достаточной мере понимали все его узкие места. Нам нравился MySQL именно как хранилище, вне реляционных шаблонов.

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

Обеспечение качества программного продукта

Reading time4 min
Views11K
Дисциплина «Метрология программного обеспечения» входит в учебный план подготовки дипломированных специалистов по направлению 654600 — «Информатика и вычислительная техника» по специальности 220400 — «Программное обеспечение вычислительной техники и автоматизированных систем». Дисциплина изучает проблемы оценки метрических характеристик качества ПО на этапах от разработки спецификаций до завершения отладки и тестирования программного продукта. В курсе рассматриваются критерии, характеристики и метрики качества ПО; особый упор делается на характеристики корректности, надежности и сложности программ. Изучаются формальные модели и методы оценки как статических, так и динамических характеристик качества ПО, позволяющие на различных стадиях разработки выявлять просчеты и дефекты программного изделия. Рассматриваются инструментальные средства поддержки и автоматизации измерения характеристик ПО.
Далее по тексту будет находится краткий обзор инструментов с помощью которых можно анализировать различные характиристики в приложениях созданных на PHP. Данный материал появился на свет в результате некоторых экспериментов в области непрерывной интеграции, и должен был являться частью статьи про непрерывную интеграцию (спойлерить пока не буду, боюсь сглазить) все в том же РНР, но я решил все-таки выделить его в самостоятельный обзор, так как возможно, в последующих статьях я буду ссылаться на него, а так же надеюсь узнать об аналогичных инструментах еще не попавших мне на глаза. Некоторые инструменты уже были рассмотрены достаточно подробно, но тем не менее полного списка всех доступных еще не было.
Читать дальше →

Ext JS — Учимся правильно писать компоненты. Наследование и вложенные конфиги

Reading time5 min
Views14K
Добрый день, уважаемые хабравчане. Продолжая тему о создании custom-компонентов, мы с Вами сегодня поговорим о наследовании свойств-объектов и о правильном использовании обработчиков событий.
Читать дальше →

Основы репликации в MySQL

Reading time10 min
Views333K
С репликацией серверов MySQL я познакомился относительно недавно, и по мере проведения разных опытов с настройкой, записывал, что у меня получалось. Когда материала набралось достаточно много, появилась идея написать эту статью. Я постарался собрать советы и решения по некоторым самым основным вопросам, с которыми я столкнулся. По ходу дела я буду давать ссылки на документацию и другие источники. Не могу претендовать на полноту описания, но надеюсь, что статья будет полезной.
Читать дальше →

Прогрессивные технологии, как способ выжать из сервера максимум

Reading time5 min
Views12K

Вступление


Просто красивый rrdtool =)
Забавно, но когда программист разрабатывает какой-либо продукт, он редко задумывается над вопросом могут ли на одну кнопку в один момент времени нажать одновременно 2000 человек. А зря. Оказывается могут. Как ни странно но большинство движков, написанных такими программистами, очень плохо ведут себя под большими нагрузками. Кто бы подумал, а всего один лишний INSERT, не проставленный index, или кривая рекурсивная функция могут поднять load averages чуть ли не на порядок.

В этой статье я опишу как мы, разработчики проекта, сумели выжать из одного сервера с Pentium 4 HT / 512Mb RAM, максимум, держа одновременно 700+ пользователей на форуме и 120,000 на трекере. Да, проект этот — торрент трекер. Предлагаю сразу оставить в стороне разговоры о копирайтах и правах, мне это не интересно, что действительно интересно — это HighLoad.
читать дальше

Спам/вирус? Просят отправить СМС?

Reading time2 min
Views950
Привет, %username%
Сервису «СМС АнтиСпам» сегодня исполняется ровно год. Напомню, это сервис, который отправляет контент-провайдерам сообщения о мошенничестве с их короткими номерами.

Немножко статистики: за год получено почти 5000 сообщений от пользователей, около 2000 сообщений отправлено контент-провайдерам.

За год количество сообщений о розыгрышах, конкурсах и т.п. сократилось в несколько раз. Появились новые способы разводов:
Читать дальше →

Парсинг (разбор) XML документов с помощью CSS селекторов

Reading time3 min
Views6.4K
Привет. Заметил что постов посвященных Symfony 2.0 все еще не много. Постараюсь это исправить в ближайшее время топиками и переводами про компоненты фреймворка. Сейчас же представляю вашему вниманию перевод статьи с блога Фабьена (Fabien Potencier) который всегда интересно читать. Перевод, возможно не всегда дословный, но смысл я старался передавать четко. Итак начнем.

— HTML и XML документы это как хлеб и масло для веб-разработчиков. День за днем вы, скорее всего, создаете множество HTML документов. И наверняка вам приходится парсить некоторые из них время от времени: потому что вы используете веб службы и хотите извлечь некоторую информацию, или потому, что вы хотите получить данные с нужных веб страниц, или просто потому, что хотите написать функциональные тесты для веб сайта. Получить содержимое достаточно просто, но как его разобрать, чтобы выделить нужную информацию?
Читать дальше →

HTML 5 в Internet Explorer

Reading time3 min
Views58K
image

Вкратце: как заставить новые теги из HTML 5 работать в Internet Explorer.

Любой веб-разработчик смотря на HTML 5 плачет от счастья, которое наконец-то пришло в наш дом. Для большинства функций (такие как WebGL, многопоточность и веб-сокеты) придётся ждать поддержки от браузеров (а в самых правильных эти возможности уже есть), но новые удобные теги мы можем использовать уже сейчас.

Однако Internet Explorer (даже последней, 8-ой версии) и тут сумел споткнуться — новые теги вне HTML 4 он просто не замечает — на них нельзя повесить стили.

В IE проблем даже две — отдельно нужно включать поддержку HTML 5 тегов в обычном документе, и отдельно в содержимом, которое добавляется динамически (например, через AJAX).
Читать дальше →

Вирусы на сайте и позиции сайта в Яндексе

Reading time4 min
Views10K
Недавно мы столкнулись с весьма неожиданным и даже опасным явлением, о котором пойдет речь далее. Этот пост заинтересует всех, кого волнуют позиции собственного сайта в поисковой системе Яндекс. Возможно, наш опыт позволит кому-то не повторить чужих ошибок, а также оперативно исправить их. А также мы немного расскажем о нашем антивирусе для сайтов (а точнее, о целой системе защиты сайтов) — SiteGuard, который поможет максимально снизить риск заражения сайта. А значит — избежать потери клиентов, нервов, времени, денег.

&laquo;Site Guard&raquo;

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

elFinder — файловый менеджер для сайта. Новый вкус

Reading time3 min
Views4.1K
Некоторое время назад мы представляли уважаемой публике наши open source продукты для веб-разработчиков — редактор elRTE и файловый менеджер elFinder. После анонса мы получили немало отзывов и надо сказать были изрядно удивлены, что интерес к файловому менеджеру оказался заметно выше чем к редактору.

Мы почесали головы, свалили в одну кучу все безумные идеи о том, каким должен стать новый elFinder, просеяли их через сито основной концепции «минимально необходимый функционал», многократно пропустили через мясорубку кодинга, приправили новыми вкусными возможностями и долго томили в печи тестирования.

И сегодня с удовольствием от хорошо сделанной работы предлагаем попробовать наше фирменное блюдо elFinder!

elFinder

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

Когда картинка красноречивее 1024 слов – прототипирование с MockingBird

Reading time2 min
Views7.3K
image Для написания ТЗ я задался вопросом поиска простого и удобного средства создания прототипов веб-страниц. Хотелось чего-то бесплатного и в онлайне, некой альтернативы Axure. Такой сервис удалось найти, его я и предлагаю вашему вниманию. Итак, встречайте www.gomockingbird.com – сервис, позволяющий создавать очень красивые прототипы легко и удобно.
Помимо представления самого сервиса, этим постом хотелось также привлечь внимание общественности к полезной практике прототипирования.
Читать дальше →

JQuery FormNavigate — плагин для удобной работы с onbeforeunload

Reading time2 min
Views4.6K
Все, кто пользуется веб-интерфейсом gmail, наверняка замечали, как гугл заботится о нас и не даёт закрыть страницу, если мы начали составлять письмо и не сохранили его в черновики. И понадобилось мне для своего проекта сделать нечто похожее.

Сперва сделал это используя window.onbeforeunload, но злая опера не поддерживает это событие.
Призадумался, попутно нашёл плагин для jquery под названием FormNavigate.
Читать дальше →

«Прямой эфир» для общения c посетителями вашего сайта

Reading time3 min
Views5.4K
Недавно я анонсировал Realplexor — habrahabr.ru/blogs/hi/79189 — однопоточный событийно-ориентированный Comet-сервер, написанный на Perl и имеющий готовое API для JavaScript и PHP. С его помощью можно создавать сайты, пользователи на которых взаимодействуют друг с другом в реальном времени, не перезагружая страницу и без значительного расхода трафика.

Сегодня я хочу представить и, как водится, немного «покопаться в моторе» первой версии продукта Прямой эфир, работающей на платформе РуТвит с применением Realplexor-а. Это виджет, который вебмастер может за 1 минуту установить на свой сайт, чтобы устроить микроблоггинг-общение с аудиторией в режиме реального времени.

С помощью «Прямого эфира» аудитория сайта общается между собой в реальном времени — «прямо сейчас», находясь в отдельной «чат-комнате», привязанной к вашему сайту. Виджет можно использовать для «прямого диалога» сразу со многими пользователями: например, для приема багов или фич-реквестов. Если пользователь, с которым вы общались, всё еще на сайте, вы увидите его присутствие: около его имени будет зеленый кружочек.

Для начала общения посетителю сайта нет необходимости проходить процедуру регистрации. Авторизация производится по OpenID. Т.е. ему достаточно иметь аккаунт на Яндексе, Google, LiveJournal и т.д., чтобы начать писать сообщения; не требуется даже e-mail.
Читать, как это устроено внутри

Простой нагрузочный тест с Apache JMeter

Reading time7 min
Views288K
По моим наблюдениям, разработчики довольно редко делают нагрузочное тестирование сайтов и веб-приложений. И бывает так, что выставят проект в Интернет, а тут вдруг посетители начнут ходить (хабраэффект, к примеру, случился), и сайт в самый подходящий момент ложится или начинает не по-детски тормозить.

Почему бы не избежать этих неприятностей, прогнав нагрузочный тест?

Наверное, кого-то останавливает неверное представление о том, что нагрузочное тестирование — это очень сложное дело, требующее специальных знаний. Однако не боги горшки обжигают. Если выбор — тестировать не слишком профессионально, или не тестировать вовсе, я бы выбрал первое. Тем более, что организовать примитивный тест производительности очень даже просто. Можно воспользоваться онлайн-средствами (см., например, Нагрузочное тестирование по-быстренькому), а можно замутить все своими руками, это ненамного сложнее.

Под катом рассказываю, как с нуля организовать незамысловатый нагрузочный тест сайта при помощи Apache JMeter.
Читать дальше →

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity