Дополнительные символы на mac-клавиатуре
16.09.2011
Есть такая штука — типографика. Почти все о ней слышали, а некоторые даже применяют. Надуманная сложность типографики — отсутствие нужных символов на клавиатуре.
Когда-то давно Илья Бирман сделал специальную «типографскую» раскладку для Windows и Mac OS. Пока я пользовался Windows — я пользовался этой раскладкой, когда пересел на Linux — нашёл, как настроить её аналог. Теперь у меня Mac OS и я снова поставил раскладку Бирмана. Но.
Но в Mac OS нельзя выключить системную раскладку En-Us и это ужасно разражает, поскольку при печати я фокусируюсь на тексте, а не на малюсенькой иконке в правом верхнем углу. В итоге, иногда переключатель залипает и я, нажимая нужный хоткей, не получаю ожидаемого результата. Бесит жутко
Я не нашёл способа отключить системную раскладку, но при этом я совсем перестал использовать Windows в повседневной жизни. А это значит, что мне не принципиальна совместимость и теперь я могу пользоваться теми же символами, но встроенными в системные раскладки Mac. Это потребует небольшого переучивания, но взамен я буду знать, где расположены нужные мне символы на любом компьютере под MacOS. Расположение символов будет вот такое:
Английская раскладка
С нажатым Opt (⌥)
С нажатыми Opt+Shift (⌥+⇧)
С нажатыми Opt+Cmd (⌥+⌘)
Русская раскладка
С нажатым Opt (⌥)
С нажатыми Opt+Shift (⌥+⇧)

С нажатыми Сtrl (⌃)
Потери
Как вы видите, при использовании стандартной раскладки с клавишами-модификаторами мы теряем возможность добавления стрелочек и символа ⌘. Если эти символы жизненно необходимы — придётся ставить раскладку Бирмана.
Получение номера недели на JS
13.09.2011
Учебный процесс в нашем институте (как и во многих других) завязан на недельные циклы. Поэтому жизненно необходимо иметь возможность определить номер недели по дате.
Оказывается, количество методов, предоставляемых объектом 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;}
А баба-яга против
18.07.2011
Давно прошли те времена, когда поиск ошибок на страничке в браузере означал долгое и утомительное копание в исходном коде. Сейчас даже самый начинающий верстальщик знает о специальных инструментах для разработчиков.
Все эти расширения можно поделить на две большие группы: те, что нужно устанавливать отдельно, и те, что сразу встроены в браузер. Поскольку человечество в большинстве своём лениво, то все дико счастливы от возможности получить сразу и браузер, и инструменты для него.
Но мне такой подход совсем не нравится. Не нравится по одной простой причине – браузеры делаются для пользователей, а не для разработчиков. Во всяком случае, должны делаться. А тут ещё какие-то штуки-дрюки нагрузили.
Представим простую ситуацию: блондинко увидела фоточку мимимишного котика и хочет её сохранить. Она нажимает PrintScreen (ну вот так её научили), но промахивается и со всего разбегу жамкает F12 в корпоративном IE. Вылетает страшное и непонятное отдельное окно. В попытке его закрыть блондинко жмёт всё подряд и случайно тыкается в Alt+Q. Всё, приехали. Теперь все сайты поломались, и никто не знает как это исправить.
Оптимальным мне представляется вариант, реализованный в Safari. По-умолчанию веб-инспектор установлен, но отключён. Включается одной галочкой в настройках. Таким образом, пользователи не наотключают лишнего, а разработчики легко могут включить нужные инструменты.
Обычная магия
07.07.2011
Признавайтесь, часто ли вам приходится сделать примитивную обработку множества фотографий? Поменять размер, обрезать до квадрата, что нибудь ещё… Если вы для этого используете 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;
Вот такая вот небольшая магия.
Ссылка на телефонный номер
22.03.2011
Недавно Слава Олиянчук спросил в твиттере, размечаем ли мы номера телефонов как ссылки. Всё правильно спросил, номер телефона стоит размечать как ссылку с псевдопротоколом tel. В этом случае браузеры, которые понимают этот псевдопротокол1, смогут сразу набрать нужный номер.
Вот только что делать с теми браузерами, которые не могут никуда позвонить? В принципе, при клике по такой ссылке ничего не произойдёт, раньше таким же образом делались javascript-ссылки2. При этом пользователь всё равно будет видеть такую ссылки и пытаться по ней кликнуть и расстраиваться из-за того, что ничего не работает.
Давайте спрячем такие ссылки от пользователя? Например вот так:
a[href^="tel:"] {
text-decoration:none;
color:inherit;
cursor:default;
}
Эта несложная запись сделает любую ссылку, начинающуюся с “tel:” абсолютно неотличимой от потока текста, работает во всех современных браузерах.
Примечания.
- Мобильные браузеры, десктопные с установленным скайп-плагином
- Сейчас все правильные мальчики и девочки используют ненавязчивый JS




