Избранное

Позднее Ctrl + ↑

Об открывании дверей

Пожалуйста на себя

Для меня совершенно бесполезны надписи «от себя» и «на себя» на дверях. У меня не получается воспринимать их не задумываясь над смыслом, а задумываться над инструкцией по использованию двери — слишком большая роскошь, есть более интересные задачи для мозга. Поэтому обычно я сначала пытаюсь открыть дверь как придётся, а уже если она не поддаётся, то начинаю думать над надписью и одновременно дёргать дверь в противоположную сторону.

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

ВВДЦ-2009

До ВВДЦ-2009 остаётся всего несколько дней.

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

Многое указывает на то, что больше внимания будет уделено Айфону, а не Маку, что меня лично не радует. Во-первых, у Айфона уже почти стал традиционным собственный девелоперский эвент в марте, а во-вторых меньше всего хочется, чтобы из полуторачасового выступления час заняли демонстрации разработчиками всяких программ из Апстора. Мы и так верим, что Апстор крут, и там есть хорошие программы. На вероятное доминирование Айфона указывают как минимум две вещи: слоган ВВДЦ «Год спустя. На световые годы впереди» (намёк на запуск Апстора в прошлом году); обещание выпустить ОС 3.0 в июне.

В принципе про ОС 3.0 известно практически всё, даже то, о чём Форстол не говорил в марте — разработчики нарушают NDA налево и направо. Вероятно, она будет выпущена непосредственно 8 июня — недаром тут на днях вышел Айтюнс 8.2, главной фичей которого является поддержка Айфонов с ОС 3.0.

Исходя из необъявленных, но найденных разработчиками функций, нас ждёт и новый аппарат (это тоже не сюрприз, время для обновления пришло), в котором будет камера получше и с возможностью съёмки видео, а также магнитометр. Скриншоты приложения «Компас», гуляющие по сети, демонстрируют весьма красивый интерфейс, что добавляет шанса тому, что это правда. Про видео я думаю, что было бы логично это сделать ещё в ОС 1.0. Но учитывая, что это чисто софтверная вещь, если бы это было, это бы уже нашли и стопроцентно подтвердили разработчики, участвующие в бета-программе. А пока кроме не очень красивого переключателя фото/видео ничего никто не показал.

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

Так или иначе, новый Айфон вряд ли выйдет во время ВВДЦ — раньше всегда его лишь анонсировали, а продавать начинали только в конце июня — начале июля. Когда он появится в России — трудно даже загадывать, учитывая то непонятное положение, в котором сейчас находятся наши опсосы с 3Г-трубками (у них не получается их продавать в том количестве, в котором они обязались).

Маковского железа за последнее время вышло или обновилось достаточно, чтобы практически исключать эту тему как хоть сколько-то заметную. Впрочем, есть гипотезы, что будет представлен новый Эйр со встроенным 3Г-модемом — в это я легко верю.

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

Я буду считать ВВДЦ удавшимся, если на нём нам расскажут, что Джобс обманул нас в прошлом году, когда сказал, что в Снежном барсе не будет новых фич, а будут лишь закулисные оптимизации, и покажут какие-нибудь новые крутые штуки. Как минимум, новую тему пользовательского интерфейса. Я думаю, что дальнейшее его «успокоение» — весьма вероятный (и правильный) шаг: пока Микрософты напофиг включают тени, градиенты, блики и полупрозрачности одновременно у всех элементов подряд, Эплы весь этот детский сад убирают. В Леопарде был сделан большой шаг в этом направлении, и будет логично продолжить в том же духе.

Что касается другого софта, то будет хорошо, если Сафари 4 окончательно выйдет, но нельзя исключать, что оно ждёт Барса.

На их профессиональные приложения мне наплевать, как и на Эпл-тиви и весь их серверный бизнес. Время айподов — сентябрь, на ВВДЦ про них ничего не будет (кроме, возможно, какой-нибудь статистики о том, как круто они продаются, в самом начале). Я совершенно не верю в то, что будет выпущен или даже анонсирован планшетник или нетбук.

На случай скучной повестки дня у Эплов есть запасной вариант: если на сцену в какой-нибудь момент выйдет Джобс, то станет уже совершенно неважно, что они покажут, все будут в полном восторге. Но я всё же думаю, что развлекать нас будут всё утро 8 июня Шиллер и Форстол.

По сути своей

Среди многочисленных выражений-паразитов нас с отцом особенно радуют выражения «по сути своей» и «как таковой». Они позволяют разрядить напряжённый спор, перевести в шутку всякое высказывание; закончить фразу, начало которой забыл. Но некоторые люди в телевизоре и радиоприёмнике используют эту чушь всерьёз, например, руководитель пожарной бригады докладывает:

— Пожар как таковой удалось локализовать.

Это же песня. Как каковой, хочется спросить, удалось его локализовать? Но этого вопроса никто не задаёт. Если бы он просто сказал «Пожар удалось локализовать», всем бы показалось, что он чего-то недоговаривает, а так — все довольны. Поскольку смысла приведённые выражения не имеют, можно их свободно заменять друг на друга:

— Пожар по сути своей удалось локализовать.

Есть ещё просто «по сути», но это выражение не такое кайфовое, оно недостаточно идиотично. Слово «своей» добавляет смака, обращает внимание на принадлежность сути тому, о сути чего идёт речь; позволяет задуматься над возможностью существования сути чего-то другого (т. е. не своей).

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

Точка и запятая между цифрами

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

Номера версий программных продуктов и ай-пи-адреса не являются дробями.

Пищащие светофоры

Есть объяснения каким-то явлениям, которые люди слышат и съедают, не вникая. То есть, многим достаточно, чтобы объяснение просто было; оно не должно объяснять. Например, запредельное количество людей, услышав, что номера линий на схеме московского метро введены для дальтоников, спокойно принимают такое объяснене; у них не возникает следующего вопроса: «А каким хреном нумерация линий должна помочь дальтоникам?» (правильный ответ: никаким; нумерация не нужна).

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

Существуют пищащие сфетофоры. Когда пешеходу горит зелёный, они пищат. «Это для слепых». Я никогда не мог понять, как слепой должен сориентироваться на перекрёстке, ведь там светофор по идее должен всё время пищать (переходить-то можно всегда, просто разные дороги). Но на этот мой вопрос ни у кого, кому я его задавал, нет ответа — оказывается, никому это даже в голову не приходит.

Но наверняка те, кто это придумали, задавались этим вопросом. Каков же правильный ответ? Неужели слепой должен прислушиваться, с противоположной стороны какой из дорог пищит другой светофор? Может быть, сфетофор должен пищать только когда разрешён переход с севера на юг, но не с запада на восток? Или, может, в зависимости от направления, светофоры пищат по-разному?

Почему указатели трудны и что с этим делать

Указатели сложны не потому, что это объективно что-то сложное, а потому, что авторы языка Си — козлы, которые позаботились об экономии числа нажатий при печатании, а о том, удобство чтения кода куда важнее, чем удобство его написания, они не подумали. Чего только стоят все эти название функций типа strcspn () и feof ().

Человек должен быть парсером, а это не то, что человеку хорошо удаётся. В случае с указателями, кроме того, что используются плохо читаемые символы, ещё и нет их однозначного «перевода» на человеческий. Например, звёздочка рядом с именем переменной в выражении означает обратное тому, что она означает в описании переменной. Си:

int n[10]; // здесь n хранит адрес, но нет ни звёздочки, ни амперсанда
n[5] = 77; // незаметно поиграли в указатели
*(n + 5) = 77; // здесь звёдочка означает «значение по адресу» (уже заметно)

char *s; // здесь звёздочка уже означает «переменная хранит не значение, а адрес»

unsigned int m = 2131;
*((char *) &m + 1) = 'A'; // теперь, если у меня правильно взорвался мозг, m ""=="" 2113

Если бы вместо звёздочки и амперсанда использовались конструкции addressof () и valueat (), для объявления типов был бы модификатор address, а для кастинга использовался бы оператор as указатели бы понимало в 10 раз больше человек. Назовём такой язык Ди (хоть такой уже и есть).

Квадратные скобки в выражениях в Ди пусть означают «значение по адресу с указанным сдвигом», тогда есть для любого x будет справедливо:

x == x[0] == valueat (addressof (x) + 0).

Наличие квадратных скобок в объявлении переменной пусть само по себе не превращает переменную в указатель, то есть, если мы захотим указатель, нам придётся дописать слово address. Тогда запишем первые три строчки нашего кода на Ди:

int address n[10];
valueat (n)[5] = 77; // пока получается некрасиво
valueat (n + 5) = 77; // а тут — нормально

Так обращение к элементам массива, как видно, получается слишком громоздким. Но кто нас заставляет вообще играть в указатели там, где это не нужно? Квадратные скобки в объявлении переменной у нас просто резервируют памяти на несколько таких переменных, но в указатель её не превращают. Так не будем этого делать и мы, выкинем слово address:

int n[10]; // так само n будет хранить значение нулевого инта (n == n[0], напомню)
n[5] = 77; // значение со сдвигом — как раз то, что нам нужно
valueat (addressof (n) + 5) = 77; // длинная запись того же самого

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

char address s;

unsigned int m = 2131;
valueat ((addressof (m) as char address) + 1) = 'A'

Теперь, если мы что-нибудь перепутаем, это сразу будет видно:

valueat ((m as char address) + 1) = 'A' // пытаемся представить значение в качестве адреса

valueat (m) = 'A' // пытаемся взять значение по адресу m, в то время как m не является адресом

Такой язык не требует ни больших вычислительных ресурсов, чем Си, ни каких-либо ещё достижений современности, зато читать его легче. Чтобы его придумать, нужно было просто отнестись к задаче чуть внимательнее, чем к ней отнёсся тот, кто нажимал Шифт+цифры в поисках ещё незадействованных символов.

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

Древовидность и урлы

Продолжим тему нормальных урлов. Некоторые ребята думают, что хороший урл получается, если бездумно заменить в адресе всю служебную хрень на прямые слеши. Эти идиотские урлы видны невооружённым глазом. Например, вместо site.ru/?article=4972304 делают site.ru/article/4972304/.

Такой «красивый» урл ничем не лучше исходного. Он даже хуже: он показывает нам древовидность там, где её нет. Кажется, будто текущая страница — дочерняя для страницы site.ru/article/, на которой 404 или вообще какая-нибудь ошибка ПХП отображается.

Вместо article должно быть написано articles, а по адресу site.ru/acticles/ должен быть список статей. А если он и так показывается на главной, то страница отдельной статьи должна быть дочерней по отношению к главной: site.ru/4972304/. Если уж очень хочется запихать слово article в адрес, то нужно писать: site.ru/article-4972304/.

Урлы с бессмысленным набором слов и чисел, разделённых слешами, являются следствием бездумной конвертации внутренней логики веб-приложения в формат, «похожий на урл». Есть какой-нибудь класс Article, или файл article.php, или функция article (), и в урл его название и попадает.

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

Математика в дизайне

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

Задача: сделать такую же штуку в E2 (проверить пароль, не перезагружая страницу, не проблема; мы займёмся только анимацией).

Многие дизайнеры и даже программисты настолько плохо дружат с физикой и математикой, что когда нужно добавить элементу массы (т. е. инерции) или реализовать правдоподобное подёргивание окна, они не в состоянии ничего придумать. Это печально. Мне понадобилась минута, чтобы придумать формулу, ещё 5 — чтобы сделать рабочий скрипт, а потом ещё 5, чтобы подобрать удачные коэффициенты.

Для начала пойдём в Гугль и спросим у него, где можно в онлайне построить график функции. Интернет — великая вещь: первая же ссылка приведёт нас на подходящий сайт. Отличное место, чтобы придумать формулу зависимости горизонтальной координаты окна от времени.

Колебания естественно ассоциируются с синусом, но нам нужно, чтобы они постепенно затухали. Первое, что пришло мне в голову — домножить синусоиду на гиперболу: (1 / x) × sin x.

Синусоида, умноженная на гиперболу

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

Предел sin x / x в нуле равен единице, что, конечно, лучше, чем бесконечность но всё-таки хочется, чтобы в точке 0 значение было нулевым, иначе в начале окно вдруг окажется на сто (например) пикселей правее, чем было до начала анимации. Нам нужно, чтобы гипербола в нуле получила конечное значение, тогда домножение на sin 0, равный нулю, даст ноль. Сдвинем гиперболу чуть левее, чтобы её точка разрыва уехала в неинтересующую нас отрицательную область: [1 / (x + 1)] × sin x.

Поскольку гипербола при увеличении x стремится к нулю, но никогда не достигает его, наши колебания, несмотря на затухание, будут продолжаться бесконечно. Можно, конечно, остановить их, когда они станут меньше пикселя, но намного проще чуть-чуть опустить гиперболу, чтобы она всё же достигла нуля через некоторое время: [1 / (x + 1) − 0,01] × sin x.

Чтобы было понятнее, взглянем на саму гиперболу, без синуса (1 / (x + 1) − 0,01):

Гипербола, сдвинутая так, чтобы пересекать оси

Сдвиги на 1 левее и на 0,01 ниже взяты от балды; после того, как скрипт уже написан, можно заниматься повышением реалистичности путём изменения этих чисел и примешивания всяческих коэффициентов.

Итоговая формула, с учётом перерисовки каждую 0,01 с, у меня получилась вот такая: [1 / (x1,25 / 20 + 0,5) − 0,05] × sin (x / 2) × 25.

Возведение в степень 1,25 понадобилось, чтобы слегка выгнуть гиперболу, которая затухает слишком стремительно (можно было просто сдвинуть её ещё левее, но так мне больше понравилось).

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

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

Шаблон Сафари для рисования эскизов

Скриншот сайта просто на белом фоне трудно воспринимать как сайт, поэтому в почти в любом портфолио веб-дизайнера сайты показывают в браузере. Многие дизайнеры предпочитают и эскизы рисовать «как бы в браузере».

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

Дело в том, что на Маке у окон обычно нет «рамки»: сверху заголовок (возможно, с тулбаром), а под ним идёт от первого до последнего пикселя по горизонтали — внутренности окна. Если у окна нет строки состояния, то «контентная область» и снизу продолжается до конца.

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

Окно на Маке

В общем, если в Фотошопе сверху влепить «шапку» от Сафари, забив на полупиксельный рамку (фотошоп всё равно рисует рамку вокруг канвы), то а) координата X любого элемента продолжит отсчитываться с нуля, а не с трёх, допустим, пикселей; б) можно будет легко изменять canvas size по вертикали, если страницу нужно сделать длинее, без необходимости сдвигать или перерисовывать какие-то нижние элементы.

Но смысл рисования сайта внутри браузера не только в повышении реалистичности. Главное (собственно, то, ради чего я перешёл на такой формат) — это доступность строки заголовка и адресной строки. Теперь на эскизах страниц я пишу их тайтлы, вставляю фавыконку и придумываю им нормальные урлы, что позволяет заметно упростить взаимодействие с верстальщиками и технологами. И не забудешь, что это тоже надо делать. Опять же, если я имею в виду, что на какой-то странице должен быть РСС, я могу дополнительно намекнуть на это, прицепив иконку РССа в конец адресной строки.

Короче, дарю всем желающим ПСД-шаблон (68 КБ), в котором все значимые элементы браузера сделаны отдельными слоями, в т. ч. заголовок окна (с правильной рельефностью) и урл в виде текста. Ширина картинки — 1000 пикселей. В названиях слоёв используется нехитрая нотация: точкой заканчиваются слои, которые по любому должны быть, а вопросиком — те, которые можно включать/выключать по вкусу. Ещё можно вместо обычного заголовка выбрать 5 табов, чтобы реально оценивать влезабельность своего тайтла.

Добавлено в 14:32: Сергей Чикуёнок оставил полезнейший комментарий.

Ранее Ctrl + ↓