Dron

Записи в журналах друзей на bezumnoe.ru

Last-Modified

Задача: на сайте используется набор javascript-библиотек, которые сливаются php-скриптом в один файл с названием вида 78472581267468236825748923.js (где цифры - имплод номеров версий каждой отдельной библиотеки), а контент оптимизирован и (может быть) как-то упакован. Планируется, что сий файл будет сидеть в кеше (а по размеру он довольно большой) и когда версия хоть одной из библиотек изменится - изменится имя файла и он будет заново запрошен с сервера. Все счастливы, траффик сэкономлен, дети смеются, Санта Клаус раздаёт подарки, мир во всём мире.

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

Начинаем копать глубже и при сравнении хедеров нашего файла и обычного статичного js обнаруживаем, что у последнего в хедере присутствует параметр "Last-Modified: Wed, 10 Sep 2008 07:01:14 GMT", определяющий дату обновления файла. В нашем же файле параметр сий отсутствует и сервер каждый раз шлёт ответ клиенту "200 ОК" с полным контентом.

Гуглим. Пишем принудительную отправку этого параметра в хедере. Не шлётся и всё - хоть убейся.

На различных форумах в сети есть много логичных объяснений. Например, "хренли слать дату обновления скрипта, если контент динамический?" (действительно, возразить сложно).

Грешил сначала на апач (думал, он отправляемые мной хедеры парсит и пропускает только то, что ему угодно).

Попробовал активировать для моего файла xBitHack. Появились первые подвижки - в хедере возник "Last-Modified", однако, ссылался он на текущую дату/время и изменениям не поддавался.

Потом думал, что пхп не хочет мои хедеры отдавать. 10 раз проверил все возможные варианты синтаксиса, генерацию даты, генерацию хеш-ключа ETag - ноль реакции.

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

И, о чудо, вдруг всё заработало! )))

 

 Механизм определения обновления через хеш ETag описывать не буду - он будет в первой 10 выдачи в гугле по запросу "etag".

at revision 100

Безумное 3 вчера отмечал 100 ревижн. Всего сотый, потому, что на работе в репозиторий сливать нет возможности (он на домашнем компе), и поэтому наработки с офисного компа раз в 2-3 дня сливаются на домашний, мержатся и закидываются в свн.

На сегодняшний день готово примерно 55% от запланированного объёма.

В принципе, это уже довольно работоспособный продукт, но запускать его ещё рано.

Пашка прислал ссылку

http://www.awd.ru/tip.htm - читал всё утро. Офигенно!

 

P.S. Узнал новое слово - impassable.

Коллекция потрясающих фоток из Пекина

http://stuff.thdesign.be/forum/varia/OS.html

Motivational Posters

ЛЕТУЧИЕ АКУЛЫ
Ну всё, нам (пи***ц).

3D макет Тойоты Короллы от Бенедикта Радклиффа

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

 

via

 

(Под катом) ещё несколько фоток.

Индиана Джонс и утренняя газета


Chuck Norris was here


"О, сколько нам открытий чудных..."

Несколько интересных "открытий" было совершено в борьбе за кроссбраузерность клиентской части нового чата. Два дня жесткого секса с кодом и гуглом выявили мои глубокие чувства к ослобраузерам ИЕ. В двух словах:

Задача: надо создать группу радиобатонов и поместить их в контейнер в документе.

Решение: тривиальное

 for (var i=0; i<5; i++){
var rb = document.createElement("input");
rb.type = "radio";
rb.name = "group1";
holder.appendChild(rb);
}

всё хорошо и красиво, все плачут от счастья... пока в голову не приходит мысль на наши радиобатоны покликать. В ИЕах не кликается. Ваще.
Перекапывается код на предмет неточностей, несоответствия стандартам - всё вроде правильно. Поиски в гугле выявляют, что наш ненаглядный осёл, оказывается, не может некоторым динамически создаваемым элементам задавать name. Многие даже советуют забивать хер на DOM и херачить всё в innerHTML. 

Более глубокие поиски дают (как обычно в нашем деле) некий грязный хак. Общая схема такова: ловим эксепшн вокруг кода с ИЕ-синтаксисом, в обработчике пишем код по стандартам для всех остальных браузеров:

 ...
try {
result = document.createElement("<input type='radio' name='group1'>");
} catch (e) {
result = document.createElement("input");
result.type = "radio";
result.name = "group1";
}
...

Ну из других мелких сюрпризов обнаружилось так же, что в Opera, оказывается, у document есть свойство all, что делает не логичным определение ослобраузеров по if (document.all) {/* some IE code */}.

Так же, хоть многие и утверждали, что в стандартах нет обработчиков события onload для img, обработчики всё-таки есть:

 var img = new Image();
img.onload = OnLoadHandler;
img.src = "/path/to/image.jpg";

function OnLoadHandler(e) {
/* Image loaded */
}

Тут тоже есть интересные особенности:

1. задавать обработчик события необходимо раньше свойства src, т.к. в противном случае он не сработает, если картинка найдена в кеше (не уверен, возможно только для нашего любимого ИЕ);

2. не-ИЕ-браузеры передают в обработчик события параметр e (собственно наше событие), в котором есть ссылка на объект, породивший событие - e.currentTarget. Для ослобраузера сие не верно и надо брать window.event. В случае с картинками - в ИЕ оба параметры, увы, пусты, поэтому, чтобы определить, какая именно из картинок догрузилась, можно использовать задание ссылки на обработчик вида:

 img.onload = function() {OnLoadHandler(this);}

Тогда в обработчик нам придёт сама картинка.

 

Ещё какие-то были интересности, но я уже не помню. Вспомню - напишу %) 

Секреты гидромета: предсказующий погоду камень Гарри

- Камень мокрый: дождь

- Камень сухой: дождя нет

- Отбрасывает тень: солнечно

- Белый сверху: снег

- Камень не видно: туман

- Раскачивается: ветренно

- Прыгает вверх-вниз: землетрясение

- Камень пропал: торнадо 

UAI

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

Взвесив романтику Питерских белых ночей в сравнении с поездкой в новую страну (понятно, вобщем, какую), подсчитав бабки и посоветовавшись с нашим любимым тур-оператором Наташей мы решили, что хотим в Турцию на ультра олл. Заранее мы не подсуетились, поэтому за 2 недели до начала отпуска начали рыскать по интернету в поисках удовлетворившего бы нас предложения и куда ещё остались путёвки. Оределяющими критериями были наличие бесплатных теннисных кортов и сауны. Судя по тому, что вы читаете этот пост, наши поиски увенчались успехом. Собрали пожитки, прыгнули в поезд и уже вечером следующего дня были в (Kaya Side 5*). Успели аккурат к окончанию ужина ;)

 

И снова совок

Был сегодня волею судеб в поликлинике 1, что на улице Московской. То ли за время длительного непосещения подобных заведений успел поотвыкнуть, то ли надежда на всеобщий культурный прогресс слишком сильно засела в мозгу... я оказался не готов к такому отношению. Наплевательство и хамство уже начиная от регистратуры, откуда добрая тётя просто выкинула конверт с моими документами, заорав, что не должна сама ничего открывать и чтобы я сам всё достал и подал. Достал, подал... Окна, как и во многих учреждениях того периода, почему-то сделаны очень низко и размером 40 на 40 см. с непрозрачной дверцей. Приходится сгибаться в 3 погибели и просовывать туда ухо, чтобы хоть что-то разобрать... Оттуда меня направили в некий кабинет некой заведующей, простояв в очереди в который, мне с недовольством дали понять, что нефиг мне было там делать и направили в другой, к другой заведующей. Тут вообще шоу. Ну то, что очередь ещё одну выстоял - даже не обсуждается. Зашёл. И дёрнул меня чёрт посетовать, что в регистратуре нахамили, направили не туда, куда надо... В ответ зав начала на меня наезжать, причём в довольно жёсткой форме. В регистратуре мне никто ничего не обязан говорить вообще. Я, оказывается, вообще не должен был туда обращаться, а должен был сам как-то догадаться про какие-то карточки и истории болезней. Я ничего не понимаю и вообще мне лучше помолчать. 

Может я правда не в праве требовать от людей уважительного отношения? Всё понятно, зарплата маленькая, народу каждый день толпы, но, нельзя же даже с учётом этого вот так в цвет хамить людям, которые вобщем их же труд и оплачивают?! По всем коридорам развешены плакаты с рекламой болезней и призывами сдавать кровь и  лечиться от всего и вся смолоду. Ну повесьте вы на входе один большой плакат для дебилов типа меня: 1. взять карточку в регистратуре, если нет карточки, завести новую у заведующей, каб. такой-то; 2. одеть бахилы. Нет бахил - купить в аптеке за углом; 3. по вопросам мед. страховки - кабинет такой-то; 4. льготники - каб. такой-то... И так далее. Люди сразу будут знать с порога, что если нет с собой страхового полиса, нет смысла высиживать часовую очередь, чтобы узнать об этом.

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

Повезло только с непосредственно с врачом, к которому я пришёл. Быстро, чётко, с ответами на вопросы и объяснением "для дебилов", что не так и что как должно быть.

Печатаем деньги

Если много свободного времени - заходим ;)

Here are 15 of the harshest things a woman can say to a naked man.

1. Ahhhh, it's cute.
2. Why don't we just cuddle?
3. Make it dance.
4. Wow, and your feet are so big.
5. It's okay, we'll work around it.
6. Will it squeak if I squeeze it?
7. This explains your car.
8. But it still works, right?
9. Maybe it looks better in natural light.
10. Why don't we skip right to the cigarettes?
11. Are you cold?
12. It's a good thing you have so many other talents.
13. Does it come with an air pump?
14. So this is why you're supposed to judge people on personality.
15. I guess this makes me the early bird.

 via

Заречный - 50

На выходные катались в гости к друзьям в г. Заречный (что под Пензой). Давно не виделись, да и к тому же, на выходные намечался праздник - 50-й юбилей города. Предыдущий опыт подсказывал, что действо готовится феерическое,  с советским размахом и всеобщим весельем. Собрались и поехали.

Автобан в Саратов-Пенза (в Саратовской его части) можно описать одним простым знаком (пояснительная табличка под ним - сущее излишество):

 

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