Как стать автором
Обновить
0
0
Олегыч @clockworkbird

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

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

Все о 960gs — отличном css-фреймворке для построения модульных сеток

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


Я хочу дать исчерпывающее описание замечательному фреймворку для построения модульных сеток 960gs. Недавно где-то в комментариях сказали, что 960gs сложнее в понимании, чем blueprint, что меня удивило. Я не хочу заниматься сравнением этих фреймворком, хотя бы потому, что они выступают в разных весовых категориях, однако, для построения модульной сетки ничего легче и проще в понимании, чем 960gs я не видела.


Читать дальше →
Всего голосов 127: ↑112 и ↓15+97
Комментарии83

Файловый AIO в nginx

Время на прочтение2 мин
Количество просмотров17K
В последних версиях nginx (начиная с 0.8.11) появилась поддержка асинхронного файлового ввода-вывода. Потенциально, эта фича способна устранить одно из узких мест веб-сервера — полную блокировку процесса при файловом IO.

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

Раньше, эта проблема решалась увеличением количества процессов-воркеров. Теперь есть альтернативное решение. :) Однако, перед тем, как включать файловый AIO, стоит учесть ряд нюансов.

Во-первых, хочу обратить ваше внимание, что не стоит ожидать от новых версий значительного увеличения производительности. Это возможно только при очень специфической нагрузке — когда один и тот же сервер одновременно отдаёт несколько небольших статических файлов, и очень большое количество больших файлов.

Во-вторых, файловый AIO работает только на FreeBSD 4.3 и выше, либо в Linux, с версии ядра 2.6.22 и выше.

В-третьих, AIO во FreeBSD имеет смысл включать только в версиях FreeBSD-6.4 STABLE, FreeBSD 7, или новее. В более ранних версиях, при включении AIO, сетевая подсистема начинает использовать Giant Lock, что означает невозможность одновременного выполнения какого-то другого системного вызова. Другими словами, почти никаких выгод от асинхронности мы не получим.

Ну и наконец, при использовании AIO под Linux надо также включать directio. Также, если я всё понял правильно, в линукс пока невозможно использовать AIO для подгрузки данных для sendfile, поскольку включение directio отключит использование sendfile автоматически.

Если вы по-прежнему считаете, что оно вам нужно, AIO включается очень просто. Для Linux, фрагмент конфига будет выглядеть примерно так:

aio on; # включаем AIO
directio 512; # включаем O_DIRECT для файлов, размером 512 байт или больше
output_buffers 128 512k; # зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения


Ссылки:
Описание AIO в документации на Nginx
Changelog
Всего голосов 37: ↑34 и ↓3+31
Комментарии63

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

Время на прочтение16 мин
Количество просмотров40K
Нравится мне эта картинка, у меня, вот никогда такие красивые графики в какти не получались =(

Введение


С момента написания мной предыдущей статьи по оптимизации этой связки прошло довольно много времени. Тот многострадальный 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. Минусы оптимизации

Кому что-нибудь из этого списка интересно, жмём сюда...
Всего голосов 375: ↑368 и ↓7+361
Комментарии105

Подсчет количества найденных записей в PostgreSQL

Время на прочтение3 мин
Количество просмотров43K
На работе в новом проекте используется СУБД PostgreSQL. Так как до сих пор я работал с MySQL, сейчас приходится изучать и открывать для себя Постгри. Первая проблема, которая меня заинтересовала — замена мускулевского SQL_CALC_FOUND_ROWS. При использовании этой константы в MySQL можно получить количество всех найденных по запросу записей, даже если запрос с limit'ом — это незаменимо при постраничном выводе поисковых результатов, когда используются «тяжелые» запросы.
Сходу готового решения найти не удалось. На форумах просто констатировали, что SQL_CALC_FOUND_ROWS в Постгри нет. Некоторые писали, что надо юзать count(*). И больше никакой информации. Но еще из MySQL мне было известно, что поиск с count()-запросом работает почти в 2 раза медленнее, чем с SQL_CALC_FOUND_ROWS. Я консультировался у тех, кто пользуется PostgreSQL, день мучал google и в результате получил 4 варианта замены SQL_CALC_FOUND_ROWS в PostgreSQL, один из которых вполне приемлимый по скорости.
Читать дальше: какие запросы и какая разница в скорости
Всего голосов 37: ↑35 и ↓2+33
Комментарии43

Nested Sets + PostgreSQL TRIGGER

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

Задача

Как удобно делать выборки из деревьев типа Nested Sets, и как не удобно им управлять. Как удобноуправлять деревьями типа id->parent_id, но как не удобно и накладно использовать рекурсии при выборках. Понятно, что прииспользовании модулей для управления деревьями часть проблемы снимается, но при этом процесс работы с базой данных несовсем прозрачен т.е. для изменения данных мы используем одни методы, для изменения расположения узла в дереве — другие,плюс еще транзакции не помешали бы. Эту нестыковку можно решить двумя способами:
  • Использовать для работы с таблицей хранимые процедуры, в которой объединить оба метода обновления (вставки, удаления);
  • Использовать триггеры, для исключения вообще каких-либо нестандартных методов работы;
Первый способ неудобен тем, что при изменении структуры таблицы, нам потребуется еще изменять процедуру, а так же бытьмаксимально внимательным, при работе с таблицей, что бы все изменения данных проходили через наши процедуры, а не прямымизапросами. Второй способ несколько утяжеляет тяблицу введением дополнительных булевых полей, а так же приходится делатьнекоторые «финты ушами», хотя позволяет добиться максимальной прозрачности работы.Первый способ — в топку, тем более где-то интернетах уже есть подобное решение.База данных — PostgreSQL, как актуальная мне на данный момент, дополнения для MySQL напишу позже.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии13

Мелочи, облегчающие жизнь

Время на прочтение3 мин
Количество просмотров19K
Postgresql, без сомнения, великолепная СУБД. Она обладает обширнейшими возможностями, отличной документации, и при всем при этом является бесплатной. Однако, всегда найдется что-то, чего пользователю не будет хватать. И в postgresql это легко исправляется, ведь он позволяет создавать функции на языках на любой вкус, будь то Plpgsql, Perl или даже Java.

Приведу пример. Мне всегда не хватало функции, получающей DDL выбранной таблицы. В oracle, например, вы можете воспользоваться для этого средствами пакета dbms_metadata. А вот в postgresql аналога почему-то нет. То есть можно конечно использовать pgdump, но это уже немного не то, мне хотелось бы иметь функцию бд. И так далее, думаю у каждого найдется несколько таких небольших «хотелок».

В любой моей базе я создаю в схеме «public» определенный набор вот таких облегчающих мне жизнь функций. В этом топике я хочу поделиться ими. Приглашаю всех также поделиться в комментариях своими наработками.
Читать дальше →
Всего голосов 42: ↑37 и ↓5+32
Комментарии23

Быстрое определение местоположения по ip в postgresql

Время на прочтение3 мин
Количество просмотров14K
В этом топике я хочу рассказать о задаче, очень часто встречающейся в веб-проектах — определение местоположения по ip-адресу. Начну с того, что для того, чтобы определить местоположение пользователя — нужна некая geoip база. Приведу здесь два популярных бесплатных варианта:
IpGeoBase — очень хорошая бесплатная база, но, к сожалению, только по российским ip-адресам.
MaxMind — огромная база по ip-адресам всех стран. Предоставляют бесплатную lite-версию базы. Точность базы по российским ip-адресам не настолько хороша, как у IpGeoBase. Также предоставляют некое API для работы со своей базой, которое позволяет производить выборки очень быстро.

Допустим вы скачали эти базы и залили их в таблицы вашей БД Postgresql (сама закачка — несколько out of scope, если у кого-то возникнет желание — я могу в будущем рассказать о том, что такое команда COPY и с чем ее едят). В общем случае вы получите таблицу такой структуры:

startip endip location_id
2130706433 2130706433 1

Здесь:
startip — это начало блока ip-адресов в формате long
endip — конец блока ip-адресов в формате long
location_id — идентификатор локации (город, регион, страна и т.д., maxmind даже координаты содержит).

Задачу поставили. Теперь рассмотрим как ее решать.
Всего голосов 47: ↑41 и ↓6+35
Комментарии29

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

Время на прочтение2 мин
Количество просмотров7.3K
image Для написания ТЗ я задался вопросом поиска простого и удобного средства создания прототипов веб-страниц. Хотелось чего-то бесплатного и в онлайне, некой альтернативы Axure. Такой сервис удалось найти, его я и предлагаю вашему вниманию. Итак, встречайте www.gomockingbird.com – сервис, позволяющий создавать очень красивые прототипы легко и удобно.
Помимо представления самого сервиса, этим постом хотелось также привлечь внимание общественности к полезной практике прототипирования.
Читать дальше →
Всего голосов 137: ↑129 и ↓8+121
Комментарии54

Юридическое или физическое лицо? (часть первая)

Время на прочтение5 мин
Количество просмотров26K
Как показали результаты опроса, больше всего люди-х хотели бы раскрыть секрет НЛО. Заранее хочу извиниться за то, что открыть его я не смогу, иначе мой логин просто самоуничтожится :(

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

Благодаря добрым людям-х, эта запись появилась именно здесь. Надеюсь, так будет и дальше :)

Читать дальше →
Всего голосов 52: ↑50 и ↓2+48
Комментарии94

Нынешние способы обмена Webmoney на ЯД и наоборот

Время на прочтение3 мин
Количество просмотров7.9K
Вероятно, практически все хабраюзеры некоторое время назад столкнулись с неожиданным запретом Webmoney на осуществление обменных операций с большим кол-вом обменников, в том числе и ЯД.

Обменным WM-пунктам запрещается… системы учета которых не обеспечивают должной идентификации личности владельца для целей борьбы с незаконной торговлей, финансовыми махинациями, отмыванием и легализацией денежных средств, полученных незаконным путем.

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

Немного погуглив, можно найти много способов, все-таки обменять вебмани на яд и наоборот, некоторые из которых и публикую в этом посте. Считаю, что данная информация может пригодится :)
image

Читать дальше →
Всего голосов 76: ↑69 и ↓7+62
Комментарии48

51 Веб Приложение для Дизайнеров и Разработчиков

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

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

Данная статья представляет 51 веб приложений для дизайнеров и разработчиков.
Идем дальше...
Всего голосов 101: ↑86 и ↓15+71
Комментарии26

Удаленное обучение на основе Open Source — BigBlueButton

Время на прочтение1 мин
Количество просмотров21K
Какое-то время работал с организацией системы обучения на основе ВКС Tandberg. Когда была поставлена задача организации удаленного обучения, Open Source решения были просты и унылы. Конторе пришлось изрядно потратится. Но Open Source не стоит на месте, все больше и больше компаний выходят на рынок с новыми идеями и большинство из них бесплатны для простого обывателя.


Читать дальше →
Всего голосов 85: ↑77 и ↓8+69
Комментарии33

Процесс создания процессов

Время на прочтение3 мин
Количество просмотров1.1K
После вашей успешной интеграции как менеджера проектов на новом месте работы имеет смысл ознакомится с существующими процессами в организации и если вы считаете, что они могут быть улучшены, проактивно предложить их поменять. Документ, описыващий процесс, должен содержать следующие элементы: цель, описание ролей, последовательность шагов (когда-кто-что, ожидаемые результаты, метрики, путь эскалации проблем), checklist (дополнительно)
Читать дальше →
Всего голосов 8: ↑2 и ↓6-4
Комментарии9

Фокус с HeadScript (сборка в один файл)

Время на прочтение8 мин
Количество просмотров3.2K
Если сделать так:
<?php $this->headScript()->appendFile('/js/my1.js');?>
<?php $this->headScript()->appendFile('/js/my2.js');?>
<?php $this->headScript()->captureStart() ?>
  var action = '<?php echo $this->baseUrl ?>';
<?php $this->headScript()->captureEnd() ?>

<?php echo $this->headScript(); ?>
<?php echo $this->magicHeadScript(); ?>


то вместо чего-то типа такого:
<script type="text/javascript" src="/js/my1.js"></script>
<script type="text/javascript" src="/js/my2.js"></script>
<script type="text/javascript">
  var action = '/123';
</script>

получим на выходе:
<script type="text/javascript" src="/cache/js/1b1004a203..._compressed.js"></script>

Читать дальше →
Всего голосов 74: ↑60 и ↓14+46
Комментарии129

Что такое стартап? Основы от Стива Бланка

Время на прочтение3 мин
Количество просмотров4.2K
Успех состоит из пути от одной ошибки к другой без потери энтузиазма.
Уинстон Черчиль


Каждый знает, что такое стартап. Разве нет?
Я бы предложим новое объяснение тому, почему появляются стартапы: стартап – это организация, созданная для поиска повторяемой (в англ.оригинале «repeatable» – в значении «не одноразовая модель», а НЕ «бизнес-модель, которую можно повторить») и масштабируемой бизнес-модели.

Бизнес-модель


Хорошо, а что такое бизнес-модель?
Бизнес-модель описывает, каким образом ваша компания создает, достигает и завоевывает ресурсы.
Простым языком, бизнес-модель описывает, как ваша компания зарабатывает деньги (в вашей системе координат это могут быть успех, новые пользователи, прирост трафика и т.п.)
Представьте, что бизнес-модель – это диаграмма, на которой показаны все связи между различными частями вашей организации. Эта диаграмма показывает и то, как ваша продукция попадает к покупателям и как оплата за эти продукты попадает к вам. Также она демонстрирует структуру затрат, как каждый отдел компании взаимодействует с другими, как ваша компания интегрирована в рынок и взаимодействует с партнерами. Слова словами – проще отобразить на схеме.

Схема бизнес-модели


Много людей пытались понять, как лучше отобразить диаграмму или схему бизнес-модели. Мои студенты занимались этим годами, но работа Александра Остерволдера (Alexander Osterwalder) это лучшее, что я увидел за последние десять лет. Его диаграмма – это универсальный образец бизнес-модели. Ваша собственная бизнес-модель будет иметь свойственные только ей нюансы.
Читать дальше →
Всего голосов 66: ↑49 и ↓17+32
Комментарии19

Качества успешного предпринимателя – Упорство (1/11)

Время на прочтение5 мин
Количество просмотров2K
Этим постом я начинаю перевод цикла постов Марка Састера про качества успешных предпринимателей.

_________
Это первая часть моей новой серии постов о том, что делает предпринимателя успешным. Исходно я публиковал их на сайте VentureHacks, одном из моих любимых сайтов для предпринимателей. Если вы там не были, то стоит зайти.

Я хотел также опубликовать эту серию здесь, чтобы она стала ресурсом для будущих предпринимателей, которые посещают мой блог. Мне хотелось, чтобы в комментариях завязалась дискуссия по каждой теме, ибо я считаю, что комментарии имеют такую же ценность, как и сам пост (я уже отмечал это в посте Comments are the New Black). Поэтому я распишу некоторые темы поподробнее, чем на VentureHacks, чтобы тем, кто уже читал мой пост там, также было интересно.

Один из вопросов, на который мне постоянно приходится отвечать как венчурному капиталисту, это «на что Вы обращаете внимание, делая инвестицию?» Я уже публично заявлял, что 70% инвестиционного решения основывается на команде, и особенно это касается основателей. Мне доводилось видеть, как люди, которые посещали самые лучшие учебные заведения, получали лучшие отметки и работали в самых что ни на есть правильных компаниях, терпят неудачу.

Какие же навыки нужны для того, чтобы стать успешным предпринимателем? На какие качества я обращаю внимание в процессе? Побывав в шкуре предпринимателя дважды, я составил список необходимых по моему мнению навыков. Этот пост посвящен первому из десяти, о которых я собираюсь написать.
Читать дальше →
Всего голосов 58: ↑47 и ↓11+36
Комментарии32

Качества успешного предпринимателя – Практическая хватка (2/11)

Время на прочтение6 мин
Количество просмотров1.3K
Перевод второго поста Марка Састера из серии про качества успешного предпринимателя (здесь перевод первого поста).
_________

Это часть моей новой серии постов о том, что делает предпринимателя успешным. Исходно я публиковал их на сайте VentureHacks, одном из моих любимых сайтов для предпринимателей. Если вы там не были, то стоит зайти.

Серия была начата с разговора о том, что я считаю самым важным качеством: об упорстве.



2. Практическая хватка. Итак, вы упорный человек и никогда не сдаетесь. Очевидно, с этого мало толку, если ваша стартап-идея никуда не годится. Не думаю, что для создания хороших компаний требуются начитанные люди — часто это только мешает делу. Но вам нужно быть умным, и я предпочитаю тех, кто обладает житейской, практической мудростью. Есть люди, которые просто «рубят фишку» — их-то я ищу. Они на инстиктивном уровне понимают, как покупают их клиенты, и знают, как их вдохновить. Слабости конкурентов они чуют шестым чувством. Они выявляют благоприятные возможности, на которые никто еще не обратил внимание, и создают продукты, которые удовлетворяют соответствующие потребности.
Читать дальше →
Всего голосов 81: ↑70 и ↓11+59
Комментарии17

Качества успешного предпринимателя – Способность менять курс (3/11)

Время на прочтение6 мин
Количество просмотров1K
Перевод третьего поста Марка Састера из серии про качества успешного предпринимателя (предыдущие посты: 1, 2).
_________

Это часть моей новой серии постов о том, что делает предпринимателя успешным. Исходно я публиковал их на сайте VentureHacks, одном из моих любимых сайтов для предпринимателей. Если вы там не были, то стоит зайти.

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

3. Способность менять курс. Я не люблю инвестировать в людей, мне до этого не знакомых, которые приходят в мой офис и хотят иметь предварительное соглашение через 30 дней. Не думаю, что многие венчурные капиталисты любят это делать. Да, конечно, существует мифическая компания — о ней все слышали, — которая пришла в Sequoia Capital, и соглашение было готово через 24 часа. Я уверен, что такое случается. Но в большинстве ситуаций венчурный капиталист захочет оценить вашу производительность во времени. Это побудило меня написать пост о том, как выстраивать отношения с венчурными капиталистами. Вызывает удивление и предприниматель, который собирается подписать соглашение, предложенное кем-то, кого он совсем не знает. Так же можно поехать в Лас Вегас и жениться или выйти замуж за первого приглянувшегося встречного, не разобравшись, чем этот человек живет. Хорошесть по бумагам (хороший бренд) не обязательно означает, что человек будет хорошим супругом.

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

Качества успешного предпринимателя – Устойчивость (4/11)

Время на прочтение5 мин
Количество просмотров769
Перевод четвертого поста Марка Састера из серии про качества успешного предпринимателя (предыдущие посты: 1, 2, 3).
__________



Это часть моей новой серии постов о том, что делает предпринимателя успешным. Исходно я публиковал их на сайте VentureHacks, одном из моих любимых сайтов для предпринимателей. Если вы там не были, то стоит зайти.

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

4. Устойчивость. Я люблю говорить: «быть предпринимателем реально клево… для тех, кто этого никогда не пробовал». Реальность такова, что предпринимательство — это одиночество, тяжелый труд, прессинг извне и множество рутины. Чтобы выжить, приходится все это терпеть. Вещи устроены так, что, как бы тяжело вы ни впахивали, и пусть даже вы попали на сцену TechCrunch50, на самом деле всем всё равно. Следующий раунд инвестиций будет непростым. Добиться от клиентов заключения договоров труднее, чем хотелось бы. Журналисты только что написали критически настроенную статью. Конкуренты анонсировали свой успех. У вас осталось денег на 8 недель, а одна из сотрудниц только что попросила вас заполнить нужные бумаги, чтобы они смогла оформить ипотеку на дом.
Читать дальше →
Всего голосов 65: ↑47 и ↓18+29
Комментарии14

Качества успешного предпринимателя – Вдохновение (5/11)

Время на прочтение4 мин
Количество просмотров880
Перевод пятого поста Марка Састера из серии про качества успешного предпринимателя (предыдущие посты: 1, 2, 3, 4).
__________



Это часть моей новой серии постов о том, что делает предпринимателя успешным. Исходно я публиковал их на сайте VentureHacks, одном из моих любимых сайтов для предпринимателей. Если вы там не были, то стоит зайти.

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

Многие спрашивали о разнице между упорством и устойчивостью. Для меня упорство — это «нажим вперед». Это те вещи, которые вы продавливаете, где вы никогда не воспринимаете «нет» как ответ. Устойчивость, с другой стороны — это способность выдерживать удары, продолжая сражение. Хотите понять, что такое устойчивость? Посмотрите великолепное 46-секундное видео с Роки. Каждый, кто уже был предпринимателем, скажет вам, что в самом начале успех по сути сводится к чистому выживанию. Многое также зависит от удачи и правильного выбора момента.
Читать дальше →
Всего голосов 51: ↑37 и ↓14+23
Комментарии9

Информация

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