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