2011-05-20

Leverage browser caching

Для того чтобы проверить есть ли у сайта узкие места можно воспользоваться мега полезной штукой Page Speed Plugin. Работает в chrome и firefox. Оказывается на большинстве сайтов по умолчанию не выводятся заголовки которые говорят браузеру как правильно кешировать ресурсы

На linode.com для решение проблемы добавил в httpd.conf следующее:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/x-icon "access plus 2 weeks"
    ExpiresByType image/png "access plus 2 weeks"
    ExpiresByType image/jpeg "access plus 2 weeks"
    ExpiresByType image/gif "access plus 2 weeks"
    ExpiresByType text/javascript "access plus 1 week"
    ExpiresByType text/css "access plus 1 week"
</IfModule>

На другом сервере указанное действо оказалось недостаточным пришлось добавить:

Header unset Pragma
FileETag None
Header unset ETag

И еще включил сжатие для некоторых файлов:
AddOutputFilterByType DEFLATE text/css application/x-javascript application/javascript

 

 

Оставить комментарий

 
  2011-05-05

Покупка Motorola Milestone 2 на Amazon

Сегодня великий день! Наконец пришёл мой Motorolla Milestone 2, который я заказал на Amazon. Вообще, я давно облизывался на этот телефон, и даже чуть не купил его в во время короткой экскурсии по Мюнхену.

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

HTC для меня пройденный этап, iPhone — интересно, но не сейчас, Android же, напротив, мне показался интересной альтернативой всем остальным платформам, благо, моделей под эту платформу создается все больше и больше.

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

Аппарат тяжёлый, гораздо тяжелее Nokia 5800, по сравнению с ним Nokia выглядит совершенно несерьезно. Уровень звука в Milestone пониже чем у Nokia - правда, у жены SonyErricson i500 играет даже лучше нокии - поэтому любителям слушать шансон в подъезде этот телефон тоже не подойдет. Камера мне понравилась больше чем у Nokia 5800, качество снимков для телефона довольно неплохое. Понравилось, что наушники включаются обычным джеком а заряжать можно через разъем microUSB. Время работы от аккумулятора я еще не прочувствовал - телефон пришел полузаряженым, но через несколько часов он абсолютно разрядился, как только аккумулятор подраскачается можно будет сделать какие либо выводы.

Кратко по доставке с Amazon - телефон шёл безумно долго - сделал заказ 24 марта. Оплатил пластиковой картой за $524 плюс $45 доставка. Продавец — FGS Traging. Специально выбрал самую крутую доставку ибо обещали доставить за четыре дня. Действительно через четыре дня получил от продавца уведомление что заказ послан службой USPS. Еще через день при помощи трекинга я узнал что телефон благополучно отбыл из США и отправился ко мне самолетом из Майами. На этом следы телефона благополучно потерялись. Не через день, не через два никакие доблестные работники почты с толстой сумкой не ремне, разумеется в дверь не стучали. Через две недели через Amazon я поинтересовался у продавца — "where is my stuff"? Но что продавец мне очень вежливо написал, что мол, извините, но, это такая головная боль — посылать товары в Россию, и что они просят Amazon убрать опцию посылки в Россию - ибо, товары идут иногда по несколько месяцев, и злые русские пишут гневные письма продавцу и ставят негативные отзывы, что плохо сказывается на бизнесе в нормальных странах. Я написал продавцу что все нормально - продолжайте слать в Россию — все надежда только на вас, будем ждать.

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

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

Все равно — то, что теперь можно покупать электронику на Amazon — это большущий шаг вперед. Хочется верить, что со временем и мы станем нормальной страной и я сменю метку гондурас в своем блоге на географическое название родной страны.

Upd. Опубликовал пост примерно такого же содержания у Вильянова на helpix.ru

 

Коментариев: 6

 
  2011-05-05

Как синхронизировать контакты Nokia c Google

Долгое время пользовался Zyb чтобы бекапить контакты с телефона, однако Zyb приказал долго жить а Vodafone, на который теперь ссылается старый сайт zyb совершенно не предназначен для этих целей.

К счастью, гугл заботливо может приютить ваши сокровенные контакты себе на сервер через протокол SyncML — вот здесь нашел настройки ZyncML для аккаунта Google:

  • remote db > 'conacts'
  • synchronoisation > both ways
  • server version > 1.1
  • data bearer > internet
  • access point > whatever you like
  • host address > https://m.google.com/syncml
  • port > 443
  • username > example@gmail.com
  • password > example
  • allow sync requests > yes
  • accept all sync requests > no
  • network authentication > no

 

 

Оставить комментарий

 
  2011-04-25

Выступление Рошаля

Это вам не какой то там Юра Шевчук, музыкант, это Рошаль Леонид Михайлович — длинно и по делу. Молодец. Всем смотреть.

 

Оставить комментарий

 
  2011-04-11

Настоящее Айкидо

Сейчас уже нет Настоящего Айкидо. В наше время айкидо называется, когда два мудака лупят друг друга пятками в челюсть или ломают друг другу суставы, или не знаю, чем они там еще занимаются, не видел никогда.
А Настоящее Айкидо — оно было совсем другое. Оно заключалось в том, чтобы победить Неприятеля так, чтобы самому не сильно напрягаться. Для этого даже не обязательно с этим Неприятелем встречаться.
Ну вот, например, идет к вам Неприятель с топором, чтобы вас зарубить нахуй. А вы живете в таком месте, что пока Неприятель к вам шел, он два раза на говнище поскользнулся и в это же говнище еще и мордой въехал. И отрубил себе от злости палец. Кто победил? Вы, конечно, победили и даже, может быть, про это и не узнали. Это самая правильная победа.
Или еще, допустим, Неприятель решил послать вас по-всякому нахуй. А у вас мобила отключена за неуплату и телефон тоже дома отключен за неуплату, а дверь вы никому не открываете, потому что заебали уже — ходят и ходят. Неприятель в вашу дверь звонил-звонил, барабанил-барабанил, ну и прокусил себе от злости руку. А вы опять его победили.
Ну или ладно, пришлось вам все-таки выйти на это татами, или как оно там у них называется. И Неприятель тоже вышел, рычит. А вы стоите такой, знаете, босенький, руки в цыпках, носом шмыгаете. Неприятель как на вас посмотрел, так сразу и вспомнил детство свое босоногое, речушку, карасика, мормышку, поплавок из пробки, маму старенькую, которой уж лет пять не звонил, да и заплакал. Махнул на вас рукой и пошел домой. А по дороге объелся, как в детстве, мороженым, захворал да и окочурился.
А вы опять, как всегда, победили.
Другое дело, что нет уже больше таких Мастеров Настоящего Айкидо, пропали все куда-то. На иного посмотришь — вроде бы и Мастер, но все равно однажды не уследил, расслабился, задумался — ну вот уже и валяется на татами с топором в спине и три раза нахуй посланный.

 

Оставить комментарий

 
  2011-04-08

Семеро одного ждут, или как работают сессии в PHP

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

В качестве примера, создадим две странички:

slow.php

<?php
print 'START....';

sleep(10);

print 'DONE';

fast.php:

<?php

print 'START....';
print 'DONE';
 

как видим обе странички работают вместе просто прекрасно, пока одна страничка генерируется десять секунд вторая загружается почти мгновенно, теперь добавим в обе страницы работу с сессиям:

slow.php

<?php
session_start();
print 'START....';

if (!isset($_SESSION['counter'])){
    $_SESSION['counter'] = 0;
}
else {
    $_SESSION['counter']++;
}
sleep(10);

print 'DONE';

fast.php:

<?php
session_start();
print 'START....';

print isset($_SESSION['counter'])?$_SESSION['counter']:'none';

print 'DONE';
 

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

Одним из вариантов для решения подобной проблемы можно вызвать session_write_close(); перед заведомо медленной процедурой. В этом случае сессия будет закрыта досрочно и блокировка с файла будет снята, правда изменять какие либо значения в сессионных переменных уже не получится.

Финальный вариант slow.php:

<?php
session_start();
print 'START....';

if (!isset($_SESSION['counter'])){
    $_SESSION['counter'] = 0;
}
else {
    $_SESSION['counter']++;
}

session_write_close();
sleep(10);

print 'DONE';

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

Upd: Кроме этого, если после долгой операции нужно еще что нибудь поменять можно перед долгой операцией сначала закрыть сессию при помощи session_write_close() а потом её снова открыть при помощи session_start(). Однако, делать это можно только если вы ничего ещё не начали выводить в поток, иначе будет известный Warning: Headers already sent....

 

Коментариев: 1

 
  2011-03-26

Как изменить внешний вид кнопки FB Connect

Есть несколько способов:

Способ 1 (правильный). Зайти на сайт разработчиков и прочитать инструкцию.

Способ 2 (ленивый). Поискать в Интернет как это делают другие.

Способ 3 (сверхленивый). Взять стандартную кнопку и допилить её CSS модификаторами:

.fb_button_medium {
	float:left;
	width:234px !important;
	height:42px !important;
	background:url(../image/layout/homepage-facebook-main.png) no-repeat 0 0 !important;	
}

.fb_button_text {
	display:none !important;	
}
 

Оставить комментарий

 
  2011-03-25

New York Times in HTML5

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

 

Коментариев: 3

 
  2011-03-23

Как добавить/удалить несколько файлов в/из svn

добавляем:
svn status | grep "^?" | awk '{print $2}' | xargs svn add

теперь удаляем из svn те файлы что были удалены из файловой системы:
svn status | grep "^\!" | awk '{print $2}' | xargs svn remove

 

Коментариев: 2

 
  2011-03-18

Как изменить UserAgent у Firefox

В адресной строке набираем about:config и после предупреждения попадаем в настроеки Firefox. Набираем в фильтре (сверху) слово general.useragent и видим, что разработчики Firefox особо не балуют трудящихся широтой выбора, и полностью изменить UserAgent с помощью появившихся полей не получится. К счастью, для этого предусмотрена одна хитрая настройка, которая по дефолту в Firefox отсутствует, называется она general.useragent.override, и если создать настройку с таким названием (правой кнопкой мыши > создать > строка) и запихнуть в неё, например, строку «MyFakeUserAgent v. 1.0″ то этот новый UserAgent и будет выдаваться в заголовках запроса.

Eсли понадобится настоящий UserAgent, то для этого достаточно очистить строку в general.useragent.override.

Нашел здесь

 

Оставить комментарий