Заметки за 2009 год (страница 3)

Поиск сайтов по IP-адресу

Новый поисковик от Microsoft Bing может показать вам какие сайты хостятся на сервере с заданным IP-адресом, разумеется, если они были проиндексированы им. Например, чтобы узнать какие сайты расположены на хосте 78.108.81.40 пишем в строке поиска:

ip:78.108.81.40
Оставте свой комментарий

Верстаем формы

Красивые и ровные формы очень легко сверстать без использования таблиц.

Тестовая форма

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

Структура HTML, например, может быть такой:


<fieldset>
    <legend>Личные данные</legend>
    <div>
        <label for="lastname">Фамилия</label>
        <input type="text" value="" id="lastname" name="lastname"/>
    </div>
    <div>
        <label for="firstname">Имя</label>
        <input type="text" value="" id="firstname" name="firstname"/>
    </div>
    <div>
        <label for="middlename">Отчество</label>
        <input type="text" value="" id="middlename" name="middlename"/>
    </div>
    <div>
        <label for="birthday">Дата рождения</label>
        <input type="text" value="" id="birthday" name="birthday" class="date short"/>
        <p>день / месяц / год</p>
    </div>
    <div class="singleline">
        <label for="phone">Телефон</label>
        <span>+</span>
        <input type="text" value="" id="phone" name="phonecountry" class="compact"/>
        <span>(</span>
        <input type="text" value="" name="phonecity" class="compact"/>
        <span>)</span>
        <input type="text" value="" name="phonenumber" class="short"/>
        <p>код страны ( код города ) номер</p>
    </div>
</fieldset>

Не важно где будут находиться надписи в коде — до или после поля, так как они будут абсолютно позиционироваться с левой стороны. Задать отступ, где расположиться надпись можно либо с помощью свойства margin-left у элемента input, либо с помощью свойства padding-left у элемента div . Второй способ, на мой взгляд, предпочтительнее, так как комментарии к полю (элемент p ) будут естественным образом выравниваться относительно него и не потребуется дополнительного оформления.


div.singleline {
    white-space: nowrap;
}

label {
    line-height: 1em;
    text-align: right;
    width: 160px;
    left: 0;
    top: 2px;
    position: absolute;
}

input, textarea {
    width: 200px;
}

input.short {
    width: 6em;
}

input.compact {
    width: 3em;
}

input.checkbox {
    width: auto;
    margin: 0;
    border: 0 none;
}

label.checkbox {
    width: 260px;
    top: 0;
    left: 190px;
    text-align: left;
}

div {
    padding-bottom: 0.3em;
    padding-left: 170px;
    position: relative;
}

p {
    margin: 0;
    font-size: 10px;
    width: 200px;
}

Для таких элементов как checkbox или radio естественно будет расположение надписи справа от него. По этому для таких случаев элементу label нужно добавить класс checkbox . В качестве альтернативного варианта, можно назначить ему стиль position: relative. В этом случае будет важно, чтобы в коде надпись следовала после поля.

Напоминаю, что форма отправляет только поля, у которых указан атрибут name. А элементы label ссылаются на поля по id.

Комментарии к заметке: 4

Перехват изменения полей checkbox и radio

Для корректной обработки изменения состояния элемента checkbox стоит использовать комбинацию из событий change и click . Это необходимо, чтобы компенсировать ошибку в IE, из-за которой событие change не приходит вовремя. Вместо того чтобы генерировать это событие во время активации поля, IE генерирует его только после смены фокуса. Безусловно, это не приемлемо в случае, когда пользователь «кликает» по нему (фокус остается в поле, но его состояние меняется).

Благодаря системе подписки на несколько событий одновременно в jQuery это очень просто реализовать без лишнего кода:


$("input:checkbox").bind("change click", function () {
    // do something
});

Этот же способ нужно применять, для обработки событий radio кнопок.

Только в этом случае нужно внимательно проверять статус checkbox из-за того, что события будут происходить несколько раз подряд. Другими словами, категорически не стоит использовать toggle или что-либо в этом роде, а реализовать нужную логику в зависимости от состояния checked контролируемого поля.

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

Ускоряем кодеки для просмотра FullHD

Мой старенький Mac mini (1.66ГГц Intel Core Duo) всегда тормозил при воспроизведении FullHD фильмов. Максимум на что его хватало — это фильмы с разрешением 720p. Из-за особенностей большинства плееров и кодеков, используемых в них, для декодирования задействовалось только одно ядро процессора.

У проекта FFmpeg есть многопоточная версия FFmpeg-mt, которую можно и нужно использовать, например, в MPlayer для того, чтобы загрузить процессор работой по максимуму.

Итак, прежде чем приступить к сборке, нам понадобятся несколько инструментов:

  • Apple Developer Tools (так же есть на любом DVD с Mac OS X)
  • Subversion (консольная версия есть в комплекте Apple Developer Tools)
  • Git

Всю сборку я буду проводить на рабочем столе.

cd ~/Desktop/

Загружаем исходники MPlayer из репозитория.

svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

Загружаем исходники FFmpeg-mt.

git clone http://git.gitorious.org/ffmpeg/ffmpeg-mt.git

Теперь, чтобы использовать библиотеки FFmpeg-mt, заменим три папки libavcodec, libavformat и libavutil в исходниках MPlayer.


cd mplayer
rm -rf libavcodec libavformat libavutil
cp -R ../ffmpeg-mt/libavcodec .
cp -R ../ffmpeg-mt/libavformat .
cp -R ../ffmpeg-mt/libavutil .

Можно приступать к конфигурации и сборке проекта.

./configure --enable-menu --enable-apple-remote
make
sudo make install

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


ln -s /Library/Fonts/Arial\ Unicode.ttf ~/.mplayer/subfont.ttf

Так же нужно немного отредактировать конфигурационный файл.


nano ~/.mplayer/config

В файле набираем:

lavdopts=threads=2:skiploopfilter=all
vf=yuy2
fs=yes

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

В целом обновленная версия показала прирост в производительности на 60% в сравнении с однопоточным декодером.

Обновление : отличный GUI MPlayer OSX Extended уже содержит сборку mplayer с многопоточным декодированием.

Комментарии к заметке: 1

Навигация внутри страницы по якорям

Перечитывал спецификацию HTML 4.01 и открыл для себя удивительное свойство ссылок. Чтобы обеспечить навигацию по якорям внутри страниц не обязательно объявлять эти их через <a name="#section"></a> . Достаточно назначить этот идентификатор любому подходящему элементу.


<h1>Table of Contents</h1>
<p><a href="#section1">Introduction</a><br />
<a href="#section2">Some background</a><br />
<a href="#section2.1">On a more personal note</a><br />
…the rest of the table of contents…
…the document body…
<h2><a name="section1">Introduction</a></h2>
…section 1…
<h2><a name="section2">Some background</a></h2>
…section 2…
<h3><a name="section2.1">On a more personal note</a></h3>
…section 2.1…

Аналогичного эффекта можно достичь с помощью более простого кода:


<h1>Table of Contents</h1>
<p><a href="#section1">Introduction</a><br />
<a href="#section2">Some background</a><br />
<a href="#section2.1">On a more personal note</a><br />
…the rest of the table of contents…
…the document body…
<h2 id="section1">Introduction</h2>
…section 1…
<h2 id="section2">Some background</h2>
…section 2…
<h3 id="section2.1">On a more personal note</h3>
…section 2.1…

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