Я в интернете

РСС    Джейсон-фид

Есть автоматические трансляции в Тумблер и Же-же. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

Позднее Ctrl + ↑

Любому танцору тренинг форева

 4 мин

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

Это рекламная заметка

Компания «Бизнес-релейшенс» проводит всякие тренинги, в результате которых одни люди просто получают фан (потому что тренеры клёвые и рассказывают интересно), а другие вдобавок ещё и становятся суперуспешными. В эту среду, 27 мая, можно как минимум получить фан, потому, что один из суперуспешных выпускников БР Дмитрий Соколов расскажет об истории своего успеха (это нахаляву!). Вот что говорит про Дмитрия бизнес-тренер «Бизнес-релейшенса» Максим Журило:

Соколов в 17 лет обнаружил, что в Екатеринбурге совсем нет танцевальных школ и решил исправить эту ситуацию, открыв школу «Драйв-дэнс», позвав туда преподавать крутых хореографов из Москвы и Питера. А через три года он уже владел десятком школ по всей стране. Потом Соколов продал все свои школы и мог 10 лет вообще не работать, но вместо этого он прилетел в Москву и открыл тут новую супершколу и пригласил преподавать уже крутейших западных хореографов, которые работают с мировыми суперзвёздами. А сейчас он думает тут снова всё продать и открыть школу в Нью-Йорке.

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

План мероприятия такой, что сначала Дмитрий Соколов рассказывает про себя — и это, напомню, халява, — а потом Владимир Герасичев (президент «Бизнес-релейшенса») будет рассказывать про их тренинги и разные программы — это уже будет стоить 500 р., но там, понятное дело, можно не оставаться, а уйти домой. Фокус, однако, в том, что если вы всё-таки не пожалеете 500 р. и останетесь, то эти 500 р. войдут в зачёт оплаты бизнес-тренингов, если вы решите потом пойти и на них. Максим, кстати, ещё вот что говорит:

Так-то он не танцор, а чел, который умеет делать клёвый маркетинг. А то я бы ещё подумал идти на танцора или нет :-)

Короче:

27 мая, 19:00
Дмитрий Соколов
1-й Зачатьевский пер., д. 4 (м. Кропоткинская)

Регистрация по телефонам: +7 (495) 933-10-18 и +7 (925) 506-77-70. Но! Читатели моего блога считаются зарегистрированными изначально, поэтому можно никуда не звонить, а просто туда прийти (ну, и сказать, что вы с моего блога пришли).

Вообще, «истории успеха» обычно подаются в виде смонтированных телепередач, где зритель лишён возможности задать вопросы о чём-нибудь важном, о чём забыли сказать. А здесь можно будет хоть завалить Дмитрия (ну и Владимира) вопросами. Я бы по-любому пошёл если бы был в Москве.

Танцуй пока молодой, юзернейм!

Реклама на сайте выходит по средам и попадает на экраны 2-3 тысяч человек. Пишите: ilyabirman@ilyabirman.ru.

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

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

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

Библия в американской библиотеке

В 2003 году летом я был в Америке. А сейчас, разбирая завалы своего хлама, я нашёл блокнотик, куда я записывал всякие наблюдения. Поскольку я это никогда не публиковал (зато публиковал что-то другое), опубликую.

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

Словом Hardware называются магазины, в которых продаются газонокосилки, а вовсе не видеокарты. Словом Casino может легко называться зал с игровыми автоматами.

Моё любимое: библия стоит в библиотеке в разделе Non-fiction.

Ещё у меня в блокнотике почему-то написано «Пустота есть субстанция, не наделённая материальной сущностью». Я не знаю, почему и зачем я это написал, но мне нравится.

А вы были в Америке? Расскажите чего-нибудь.

Дорогие ветераны

Площадь Революции на день Победы была осквернена муниципальным креативом:

День Победы

Кретинская, бессмысленная симметрия. Отдельные обращения к «челябинцам» и «ветеранам», написанным прописными. Унылый «День Победы» посередине.

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

Сначала кто-то это всё нарисовал, а потом кто-то утвердил. Обоим наплевать. Одному потому, что деньги и так заплатят, другому — потому что деньги не его.

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

 4 мин

Некоторые видели, что происходит, если на Маке ввести неправильный пароль для входа в систему. Вместо того, чтобы показывать модальное окно с кнопкой 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 понадобилось, чтобы слегка выгнуть гиперболу, которая затухает слишком стремительно (можно было просто сдвинуть её ещё левее, но так мне больше понравилось).

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

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

Яблометр

Это рекламная заметка

Йоу, читатель с Айфоном или Айподтачем! Теперь ты можешь не только мериться крутостью, но и разные штуки мерить прямо телефоном вдоль и поперёк. Купи Яблометр!

Appl-o-meter

Настоящий усатый чувак прямо на твоих глазах пройдёт из пункта А в пункт Б и измерит расстояние в америкосовских дюймах, русских сантиметрах или яблоках (спелая антоновка!). Кино:

Не, ну серьёзно, вот так телефон поворачиваешь, и оно мерит. Можно открутить назад, если лишнего намерил.

Выкинь офицерскую линейку в мусор! Закопай штангенциркуль в землю! Удави рулеткой попугая вместе с крылышками! Купи яблометр в Апсторе, насладись непередаваемым ощущением яблоизмерения!

appl-o-meter.com и cтраница в Апсторе

applometer@gmail.com

Бонус: измеряй длину и ширину Ленина, умножай друг на друга — получишь площадь Ленина!

Реклама на сайте выходит по средам и попадает на экраны 2-3 тысяч человек. Пишите: ilyabirman@ilyabirman.ru

Новые работы бюро

Кто в последнюю неделю не заходил на сайт бюро, там появилась целая куча новых работ: новый Топфотоп, вторая Веборама с Рабовемой, интранет для Ренессанса, презентация для Бизнес-рилейшенса, Регуляр, ещё кое-что для МГИМО и Самсунга. Смотрите, какое всё клёвое!

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

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

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

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

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

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

Окно на Маке

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

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

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

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

Аргаяшский креатив

На железнодорожном переезде ведётся виде наблюдение:

Аргаяшский креатив

Добавлено в 11:32: Читатели подсказывают, что это всероссийский госкреатив.

Ранее Ctrl + ↓