Про парсер ссылок на Facebook

В Facebook‘е, когда вставляешь ссылку в форму написания поста, срабатывает парсер, который анализирует эту ссылку. Если, допустим, ссылка ведет на картинку, то в посте появляется эскиз этого изображения, а если ссылка указывает на сайт — то показывается описание сайта и список изображений на нем (владелец сайта может настроить информацию, которую должен забирать парсер).

А вот что получится, если ссылка ведет, скажем, на бинарный файл 🙂 :

Про парсер ссылок на Facebook

Предполагаю, что это баг. Ну, по крайней мере, выглядит такое поведение весьма странно.

К слову, парсер на Facebook’е очень старательный — он не только показывает содержимое JS-файлов и других подобных, но и даже пытается для аудио-файлов выводить содержимое метаданных ^_^

Тень от съемочной машины на Google Street View

Просматривая панорамы Google Street View, обнаружил тень, которая исходит от съемочной машины, которая, собственно, и производит саму фотосъемку панорам:

google_street_view

В прошлом году, кстати, на Большом проспекте П.С. видел эту самую машину, правда идентифицировать, какой компании она принадлежит, так и не получилось.

google-street-view-car

О поведении «Refresh» в браузере

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

Для начала нужно знать, что веб-браузер умеет создавать два типа HTTP-запросов — условный и безусловный.

Безусловный запрос делается в том случае, если браузер клиента не имеет сохраненной (локальной) копии ресурса. В этом случае сервер должен вернуть ресурс с ответом HTTP/200 OK. Клиент может кэшировать полученный ресурс, если заголовки ответа позволяют это делать.

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

Условный запрос содержит заголовок If-Modified-Since и/или If-None-Match, который указывает серверу, какая версия кэша уже содержится в браузере. Если текущая версия не изменилась, то сервер выдаст ответ с заголовком HTTP/304 Not Modified без тела, в противном случае он может вернуть ответ HTTP/200 OK с новой версией ресурса.

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

Кстати, я заметил, что при Ctrl + F5 в Chrome к запросам добавляются заголовки Cache-Control: no-cache и Pragma: no cache. Это весьма любопытная вещь и я решил на своей тестовой странице провести исследование поведения браузера (и поведение кэша) при разном виде обновления страницы.

Моя тестовая страница содержит три JS-файла, один из которых при ответе имеет заголовок Cache-Control: no-cache, другой — Cache-Control: private, max-age=15, а последний не имеет контроля кэша.

И вот какие результаты я смог получить:

browser_cache

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

Источник

[PostgreSQL] Первую букву сделать заглавной

Задача: в полях ‘name’ таблицы ‘comment’ первый символ перевести в верхний регистр.

Решение:

UPDATE comment
   SET name = UPPER(SUBSTRING(name FROM 1 FOR 1)) || SUBSTRING(name FROM 2 FOR LENGTH(name))

Про техническую поддержку продукта

Техническая поддержка продукта, считаю, является не менее важным критерием его качества. Без хорошего саппорта впечатление о продукте портится. Поэтому я всегда стараюсь оперативно отвечать на вопросы наших пользователей. И хотя говорят, что нормальным промежутком при ответе на пришедший запрос является 4 рабочих дня, я, обычно, отвечаю уже в этот же день. У нас не так много запросов от пользователей, поэтому я не вижу смысла оттягивать ответ, скажем, на те же четыре дня.

А вот какой временной промежуток дает себе тех.поддержка Electronic Arts:

ea_help

Целых две недели! По-моему, это ни в какие рамки не лезет. И ведь никто не гарантирует, что они ответят, а не проигнорируют (как это делает Google, Facebook и пр.). А что будет происходить, когда они все же ответят, а вы в свою очередь захотите уточнить / прокомментировать ответ? Ха, ждите еще две недели! Таким образом диалог с саппортом может затянуться на месяцы.

Вот вам и качество…

[SQL] Запрос на объединение нескольких таблиц

Возникла задача просмотреть в БД личные сообщения пользователей с форума IPB. При этом хочется вывести их в удобном для понимания виде: ID сообщения, автор, тема, тело сообщения.

Т.к. эти данные хранятся в трех разных таблицах, то на помощь приходит оператор JOIN:

SELECT db_name.message_posts.msg_id, db_name.message_posts.msg_author_id, db_name.members.name, db_name.message_topics.mt_to_member_id, db_name.message_topics.mt_title, db_name.message_posts.msg_post
FROM db_name.message_topics
INNER JOIN db_name.message_posts ON db_name.message_posts.msg_topic_id = db_name.message_topics.mt_id
INNER JOIN db_name.members ON db_name.members.member_id = db_name.message_topics.mt_starter_id
ORDER BY msg_id DESC;

Результаты выборки упорядочены в обратном порядке для того, чтобы видеть самые последние сообщения.

Ответ Чемберлену

Вчера в СМИ появилась информация, что группа «Тату» выступит на церемонии открытия сочинской Олимпиады. На фоне западного бурления об ущемлении прав геев в России, выступление Юли и Кати в данном случае кажется чуть ли не идеальным вариантом, чтобы потроллить протестные массы, призывающие, к примеру, во время церемонии открытия зажечь фонарики в поддержку российского ЛГБТ-общества.

«Тату» — это не только наша самая успешная поп-группа, добившееся международного признания, но и устоявшийся сценический образ «школьниц-лесбиянок». Пока зарубежные сторонники все еще придумывают, как еще можно поддержать гомосексуалистов на «путинской Олимпиаде», наши уже придумали — поддержать выступлением российского дуэта группы «Тату». И кто теперь скажет, что правительство притесняет геев?

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

Про первые $15 на uTest.com

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

Между заказчиком и конечными тестировщиками выступают, как и в обычных практиках, посредники в виде PM’а (Project Manager) и TM’а (Test Manager). PM набирает команду и потом отдает работу TTL (Test Team Lead), который занимается консультацией по вопросам тестировщиков, общается с PM о продукте и пр. Если у ТТL’а имеется статут Premier, то он также может еще апрувить или реджектить  найденные ошибки.

Большая часть людей, которые выступают в качестве исполнителей, не являются профессиональными тестировщиками. Таким образом, uTest.com — это хорошая площадка для фрилансеров (в основном —  любителей), которые готовы помочь проверить продукт и при этом заработать.

Я зарегистрирован на uTest еще с конца 2012 года, но активности там никакой не проявлял в виду сложной системы отбора исполнителей. И вот недавно меня включили в один из циклов. Задание было не сложное — пройтись по тест-кейсам и проверить правильность работы приложения. Т.к. в ходе верификации ошибок не было найдено, то я смог получить только 15 долларов. Ну что ж, на первый раз неплохо. Выводить деньги можно через систему PayPal или Payoneer. В будущем постараюсь более активно искать проекты ^_^