вторник, 20 октября 2009 г.

SQL, задача. Найти минимальное натуральное число, которого нет в таблице

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

CREATE TABLE t (i int);
INSERT INTO t VALUES (1), (2), (3), (5), (8), (10), (13), (19);
Вывести минимальное натуральное число, которого нет в таблице t, т.е. 4.

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

Чем менее экзотические средства будут применены - тем лучше.
Варианты решения постим в комменты.

четверг, 15 октября 2009 г.

Robert Muraine, или Mr. Fantastic

Robert Muraine, или Mr. Fantastic - победитель американской танцевальной телепередачи So You Think You Can Dance в 2008 году. Парень, действительно, невероятно двигается, нереальная пластика, оригинальные движения и постановка. В общем, это завораживающее действо, обязательно досмотрите до конца!

вторник, 13 октября 2009 г.

Три кота и один кусок мяса

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

На каком-то из форумов читал комментарии пользователей к этому ролику. Там видео три кота и один кусок мяса было названо «Ющенко, Тимошенко и Янукович». А ведь и вправду, та «кошка», что посередине, ещё и пожёвывать успевает на позиции премьер-министра.

четверг, 24 сентября 2009 г.

Как браузер определяет next page на странице для быстрой постраничной навигации?

Как браузер определяет ссылку «next page» на странице? – Задался я сегодня таким вопросом, в процессе навигации по поисковику при помощи комбинаций клавиш, без использования мыши. Общеизвестный факт, что для постраничной навигации в браузере можно использовать комбинации клавиш вида ctrl+курсорные клавиши. По крайней мере, это работает без проблем на многих популярных сайтах в браузерах Opera и Firefox.

Но как же браузер определяет, какая ссылка является следующей логической страницей в цепочке html-документов? Начал рассматривать варианты реализации. Самое первое, что пришло на ум, это использование отношений ссылок в документе при помощи атрибута rel у элементов <a>. Догадка оказалась неверна, её в основном используют поисковики для индексации, но никак не браузеры. Ещё вариант в <head> html-страницы указать

<LINK rel="prev" href="page2.html">
<LINK rel="next" href="page4.html">

но назначние такое же, суть вопроса не меняется.

Второй вариант, как это можно реализовать, это повесить события JavaScript на нажатия клавиш, для быстрого перехода по пейджерам. Собственно, поисследовав код на поисковике Яндекс, я нашёл следующее. Они вешают вызов функции на событие document.onkeydown. Сама функция выглядит следующим образом:

function keyboard_navigation(D) {
  D = D || window.event;
  var A = D.keyCode;
  if (D.ctrlKey) {
    var B = $id("b-head-search");
    if (A == 13) {
      B.submit();
    }
    var E = (D.target || D.srcElement).tagName;
    if (E != "INPUT" && E != "TEXTAREA") {
      var C;
      if (A == 37) {
        C = $id("previous_page");
      }
      if (A == 39) {
        C = $id("next_page");
      }
      if (C) {
        location.href = C.href;
      }
      if (A == 38 && B.text) {
        B.text.focus();
        B.text.select();
      }
    }
  }
}

После этого, полез смотреть на Google, как реализована у них постраничная навигация при помощи комбинации клавиш ctrl+cursor left или ctrl+cursor right. Но, оказалось, что никаких обработчиков событий с клавиатуры у них не висит, и в Firefox подобный финт не работает. Такая комбинация клавиш отрабатывала только в Opera.

Получается, что браузер Opera имеет собственный детектор пейджингов на странице. Поиски в просторах Интернета не сразу дали ответ на мой вопрос. Моё упорство и сильный интерес всё-таки победили после получасовых поисков. Оказывается, браузер Opera использует собственную технологию для определения ссылок перехода на следующую страницу, для многостраничных документов или блогов. Имя этой технологии FastForward.

Opera FastForward – технология, введенная ещё со времён Opera 7. Она автоматически «угадывает» следующую страницу, и обеспечивает быструю навигацию по цепочке страниц. Это очень удобно, например, при чтении блогов, можно осуществлять постраничное чтение, всего лишь нажимая пробел для пролистывания. Как это работает? Opera загружает содержимое страницы и в нём ищет определённые ссылки, которые часто используются для навигации по многостраничным документам, содержащие текст вида "next" или ">>". Я сразу же полез в папку, где лежит исполняемый файл Оперы, и начал искать в конфигах. Нашёл файл fastforward.ini, в нём и находились настройки для этого заветного FFwd. Оказывается, в нём прописаны самые распространенные сигнатуры для большинства языков, по которым в тексте ссылок ищется адрес перехода на следующую страницу. Опытным путём, я выяснил, если на странице находится несколько подобных ссылок, то во внимание будет взято лишь последнее вхождение на странице. Так что, такую вот хитрую технологию использовали разработчики браузера Opera.

Именно за такие мелкие навороты, удобство и скорость работы я и люблю браузер Opera, постоянно использую для серфинга по internet.

вторник, 22 сентября 2009 г.

Липовый email для регистраций на сайтах

Очень часто приходится регистрироваться на сайтах, которые требуют ввода email адреса, чтобы послать активирующее письмо. Но что делать, если я не хочу давать свой реальный email, дабы не получать тонны спама, я всего лишь хочу выполнить действие на сайте, и больше там не появляться. Сегодня вот нашёл удобный и бесплатный мультиязычный сервис 10minutemail.

http://10minutemail.com/

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

Кстати, вы даже можете ответить на входящие письма, но учтите, ваш э-майл адрес самоуничтожиться через 10 минут.

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

Наслаждайтесь!

четверг, 17 сентября 2009 г.

Эх, работа..

Работа – последнее прибежище для тех, кто больше ничего не умеет.
О. Уайльд (англ.писатель)

среда, 16 сентября 2009 г.

MySQL - Проблемы c русской кодировкой

Только что писал небольшой скрипт, парсер для сайтов, и натолкнулся на проблему, что русские символы не записывались в таблицу MySQL. При update или insert в таблицу все символы записываются нормально, но как только встречается русский текст – он просто обрезается и всё.

Проверил в какой кодировке работает скрипт, в базе данных, в таблице атрибут character set стоял utf8, и collation был задан utf8_general_ci. Всё правильно. Значит проблема не в этом. Тогда попробовал при установке соединения с MySQL задавать «SET NAMES utf8», проверил – тоже нихрена, не помогло. Спросил у сотрудников – сразу сходу мне никто не ответил, в чём собственно проблема.

В итоге, после получаса копаний, всё-таки вставил заветную строчку

$query = iconv("cp1251", "UTF-8", $query);

и выполнил её непосредственно перед запросом к базе данных, и только тогда заработало. Чёт я не помню, чтобы у меня были такие проблемы с кодировками при запихивании в базу данных, но повозиться в этот раз пришлось.

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting