Есть такая штука — типографика. Почти все о ней слышали, а некоторые даже применяют. Надуманная сложность типографики — отсутствие нужных символов на клавиатуре.

Когда-то давно Илья Бирман сделал специальную «типографскую» раскладку для Windows и Mac OS. Пока я пользовался Windows — я пользовался этой раскладкой, когда пересел на Linux — нашёл, как настроить её аналог. Теперь у меня Mac OS и я снова поставил раскладку Бирмана. Но.

Но в Mac OS нельзя выключить системную раскладку En-Us и это ужасно разражает, поскольку при печати я фокусируюсь на тексте, а не на малюсенькой иконке в правом верхнем углу. В итоге, иногда переключатель залипает и я, нажимая нужный хоткей, не получаю ожидаемого результата. Бесит жутко

Я не нашёл способа отключить системную раскладку, но при этом я совсем перестал использовать Windows в повседневной жизни. А это значит, что мне не принципиальна совместимость и теперь я могу пользоваться теми же символами, но встроенными в системные раскладки Mac. Это потребует небольшого переучивания, но взамен я буду знать, где расположены нужные мне символы на любом компьютере под MacOS. Расположение символов будет вот такое:

Английская раскладка

С нажатым Opt (⌥)

С нажатыми Opt+Shift (⌥+⇧)

С нажатыми Opt+Cmd (⌥+⌘)

Русская раскладка

С нажатым Opt (⌥)

С нажатыми Opt+Shift (⌥+⇧)

С нажатыми Сtrl (⌃)

Потери

Как вы видите, при использовании стандартной раскладки с клавишами-модификаторами мы теряем возможность добавления стрелочек и символа ⌘. Если эти символы жизненно необходимы — придётся ставить раскладку Бирмана.

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

Оказывается, количество методов, предоставляемых объектом Date в JavaScript довольно скуден, и определять номер недели он не умеет. Ну, делать нечего — изобретём свой велосипед. Собственно нам нужно выяснить, сколько дней прошло с начала года (этого от Date мы тоже узнать не можем), дополнить его до целого числа недель и поделить на семь.

Определим сегодняшнюю дату:

var ts =  new Date();

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

var Y = ts.getFullYear();
var newYear = new Date(ts.getFullYear(), 0, 1);
var newYearDay = newYear.getDay();

Гуд, теперь можем узнать число дней, прошедших с нового года. Да, кому-то придётся перевести дикое число миллисекунд в дни.

var delta = Math.floor((ts.getTime() - newYear.getTime())/1000/60/60/24);

И последняя деталь нашего велосипеда — получение числа недель:

var wNum = Math.floor((delta + newYearDay)/7);

Ставим на конвеер

Теперь объединим всё это в одну функцию, что бы потом использовать столько раз, сколько нужно. В идеале можно расширить прототип объекта Date новым методом, но кошерно ли это?

var getWeekNum = function(dt) {
    var ts,
       newYear,
       newYearDay,
       wNum;

    ts = (dt) ? new Date(dt) : new Date();
    newYear = new Date(ts.getFullYear(), 0, 1);
    newYearDay = newYear.getDay();

    wNum = Math.floor(((ts.getTime() - newYear.getTime())/1000/60/60/24 + newYearDay)/7);

    return wNum;
}

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

Все эти расширения можно поделить на две большие группы: те, что нужно устанавливать отдельно, и те, что сразу встроены в браузер. Поскольку человечество в большинстве своём лениво, то все дико счастливы от возможности получить сразу и браузер, и инструменты для него.

Но мне такой подход совсем не нравится. Не нравится по одной простой причине – браузеры делаются для пользователей, а не для разработчиков. Во всяком случае, должны делаться. А тут ещё какие-то штуки-дрюки нагрузили.

Представим простую ситуацию: блондинко увидела фоточку мимимишного котика и хочет её сохранить. Она нажимает PrintScreen (ну вот так её научили), но промахивается и со всего разбегу жамкает F12 в корпоративном IE. Вылетает страшное и непонятное отдельное окно. В попытке его закрыть блондинко жмёт всё подряд и случайно тыкается в Alt+Q. Всё, приехали. Теперь все сайты поломались, и никто не знает как это исправить.

Оптимальным мне представляется вариант, реализованный в Safari. По-умолчанию веб-инспектор установлен, но отключён. Включается одной галочкой в настройках. Таким образом, пользователи не наотключают лишнего, а разработчики легко могут включить нужные инструменты.

Признавайтесь, часто ли вам приходится сделать примитивную обработку множества фотографий? Поменять размер, обрезать до квадрата, что нибудь ещё… Если вы для этого используете Photoshop – вы тратите кучу лишнего времени и мы идём к вам.

Добро пожаловать к консольной утилите ImageMagick. Нет, вру, это набор утилит, каждая из которых выполняет свою собственную работу.

Convert — колбасит файл и сохраняет под новым именем

Mogrify — тоже, что и convert, но сохраняет в том же файле. То есть, convert — это Save As…, а mogrify — Save, без as.

Identify выводит всю информацию о файле: разрешение, цветовая модель и т.д.

Предположим, что нам нужно обработать 100500 фоток: уменьшить до 800×600, а потом ещё сделать превью размером 100×100. И конечно фото разной ориентации (портретной и ландшафтной, а не то, что вы подумали).

Уменьшить фото до нужного размера:

convert -quality 80 -resize 800×600 -strip $name “med/$name”;

  • quality — степень компрессии
  • strip — выкинуть лишнюю информацию

Сделать превью для горизонтальных фото:

convert -quality 80 -resize 180×120 -crop 120×120+30+0 -strip $name “sml/$name”;

  • crop — обрезка ширина×высота×отступ_слева×отступ_сверху

Сделать превью для вертикальных фото:

convert -quality 80 -resize 120×180 -crop 120×120+0+30 -strip $name “sml/$name”;

Узнать ширину картинки:

identify -format %w $name

А теперь соберём всё это в небольшой bash-скрипт:

#!/bin/bash
mkdir med;
mkdir sml;
for name in *.jpg; do
    convert -quality 80 -resize 180x120 -crop 120x120+30+0 -strip $name "med/$name";
    IMG_WIDTH=`identify -format %w $name`;
    IMG_HEIGHT=`identify -format %h $name`;
    if [ $IMG_WIDTH -gt $IMG_HEIGHT ]; then
        convert -quality 80 -resize 180x120 -crop 120x120+30+0 -strip $name "sml/$name";
    else
        convert -quality 80 -resize 120x180 -crop 120x120+0+30 -strip $name "sml/$name";
    fi;
done;

Вот такая вот небольшая магия.

Недавно Слава Олиянчук спросил в твиттере, размечаем ли мы номера телефонов как ссылки. Всё правильно спросил, номер телефона стоит размечать как ссылку с псевдопротоколом tel. В этом случае браузеры, которые понимают этот псевдопротокол1, смогут сразу набрать нужный номер.

Вот только что делать с теми браузерами, которые не могут никуда позвонить? В принципе, при клике по такой ссылке ничего не произойдёт, раньше таким же образом делались javascript-ссылки2. При этом пользователь всё равно будет видеть такую ссылки и пытаться по ней кликнуть и расстраиваться из-за того, что ничего не работает.

Давайте спрячем такие ссылки от пользователя? Например вот так:

a[href^="tel:"] {
    text-decoration:none;
    color:inherit;
    cursor:default;
    }

Эта несложная запись сделает любую ссылку, начинающуюся с “tel:” абсолютно неотличимой от потока текста, работает во всех современных браузерах.

Примечания.

  1. Мобильные браузеры, десктопные с установленным скайп-плагином
  2. Сейчас все правильные мальчики и девочки используют ненавязчивый JS