Category: фантастика

Category was added automatically. Read all entries about "фантастика".

усы2

Панель Шрёдингера

Классическое нытье: куча мобильных приложений и сайтов делает заголовки, которые прячутся по скроллу. Идея, как и все современные тренды, максимально дебильная: типа, пока скроллишь вниз, весь экран занят контентом: текстом там, картинками, не знаю. Но стоит руке дрогнуть и скрольнуть на один-единственный пиксель вверх, как тут же со всех сторон вылетают панели, кнопки, статусы и прибамбасы. Вот они вылезают, скажите мне, что бы что? Просто пораздражать своей анимацией? Или люди что, вверх не листают? Все с первого раза понимают? Штука еще и в том, что если (если!) эти гребаные панели действительно нужны и на них хочется посмотреть, ничто не подскажет, как их достать. Худший вариант интерфейса: вызывается случайно all the time, а когда нужно, то фиг поймешь как достать.

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

А как-же, как-же? Ведь мы хотим создать иллюзию легкого и воздушного интерфейса, в котором много места, в котором content first, зачем человеку пялиться на наши кнопки, пока он читает? Работает это так: мобильник — это уже маленькое окошко, вырезанное в нашей реальности. Ваш сайт/приложение — окошко, зона внутри мобильника. Контент — зона внутри сайта. И тем не менее человек может прекрасно сосредоточиться на любом куске реальности и смотреть только в него. Вокруг меня могут бегать кошки, я могу менять руку, которой держу телефон, и я всё равно буду видеть только то, на чем я сосредоточился: контент.

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

А как делать-то тогда?

Первое: не надо этих ваших анимаций. Хотите чё-то на экране показать — показывайте всегда, не надо случайно вызываемых жестов к нему приделывать. Чего нам точно всем не хватало [сарказм] — еще одного аспекта управления и так уже перегруженными многофасеточными контрольными центрами (мобильниками то есть). Если вы хотите чтобы гребаный хэдер с вашим гребаным лого мазолил мне глаза, ну будьте мужиками, примите решение, показывайте его всегда. Только не надо уменьшать его по скроллу, это их двух зол обе: вы и глаза мозолите, и анимациями заколебете.

И тут мы подходим ко второму решению, совсем старперскому радикальному: показывать хэдер один раз вверху страницы. Никуда его не скроллить и не прибивать гвоздями. Поскроллил вниз — хэдер остался наверху. Нужен хэдер — промотал в начало. Радикально? Может, по сегодняшним меркам и да. Но знаете, что я вам скажу? Ни один человек еще не умер от того, что не смог в середине чтения статьи очень быстро и без потери скролла вспомнить, какой же это сайт он сейчас читает. Ну нет такой задачи у людей. У брендов, может, есть. Всем остальным на меню вашего сайта, «доступное в любой момент» — глубоко и совершенно искренне пофиг.

усы2

Гости из будущего

Какое-то время назад в комменты на HN пришел Алан Кей и отвечал на вопросы. Одна из тем дискуссии, естественно, куда computer science двигаться дальше.

Думать и разговаривать об этом трудно, потому что ответа никто не знает, а заглядывать в будущее никто не умеет. Кроме того, участники разговора часто по-разному оценивают уровень рассуждений — такое даже в этом ЖЖ происходит постоянно. Есть несколько способов смотреть на программистскую действительность:

  1. Я это использую или могу использовать.
  2. Я знаю, как это сделать
  3. Никто не знает, как это сделать
  4. Никто не знает, что делать

Подавляющее большинство дискуссий происходят на уровне 1. Это уровень How-to и Experience reports. Здесь речь идет о готовых, уже существующих инструментах, которые можно взять с полки. Не подумайте, что тут не о чем говорить — применимость инструментов, эксплутационные качества, взаимные сравнения. Но здесь речь всегда о том, что уже есть, готово, состоялось, сделано кем-то другим, известно как факт, дано нам свыше.

Статьи, написанные на уровне 2, уже вызывают сложности с восприятием, когда их пытаются интерпретировать на уровне 1. Здесь речь идет о том, что предлагается сделать. Новая идея, новый подход, новая библиотека, новый язык — их еще не существует, но конкретика, как это должно выглядеть, уже есть. Естественно, возникает огромное сопротивление — просто потому, что доступ к уровню 1 гораздо проще, чем к уровню 2. Люди очень хорошо видят препятствия (они есть уже сейчас), но с плохо оценивают выигрыш (его никто пока не видел). Я говорю на собственном опыте в том числе — многие вещи я очень легко пропускаю в первый раз, но начинаю ценить, когда они уже состоялись и все вокруг с ними носятся.

Кое-как я, впрочем, научился с этим работать:

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

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

А дальше начинается совсем интересное. Третий уровень — никто не знает как это сделать. Но здесь хотя бы понятно, что именно сделать — т.е. понятны проблемы. Ситуация похожа на второй уровень, только конкретных предложений пока нет. Тут проходят интересные дискуссии о возможных решениях и их недостатках. Аналогично со вторым уровнем, где мы оценивали пользу, тут можно прикидывать реализуемость тех или иных подходов. Схема очень похожа, и ложноотрицательных результатов тоже надо бояться. Интересная особенность этого уровня — решения пока нет ни у кого — означает, что искать его нужно за пределами текущего комплекса знаний, out of the box. Совет:

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

И наконец четвертый уровень — никто не знает, что делать. Ничего не понятно, ничего не известно. Кое-что, впрочем, и тут можно сказать:

  • Глобально хочется программы быстрее, больше, надежнее, самостоятельнее, доступнее.
  • Почти наверняка можно сделать лучше, чем сейчас.
  • В целом понятны способности человека и что надо ориентироваться на них (см. предыдущий пост).

Это совсем космический уровень и у меня не хватает эрудиции описать, что тут происходит. Именно этот уровень отвественен за качественные скачки в computer science, и он почти недостижим последовательным решением сегодняшних проблем из уровней 2–3. Один из предложенных Аланом способов, как можно работать на этом уровне:

Главное, на что я хочу обратить внимание — всегда важно понимать контекст, в котором идет обсуждение. Скажем, спор «почему C++ программистам не нужен Go» идет в контексте первого уровня — две вполне конкретные технологии, данные нам свыше. Заявление «Go был бы лучше, если бы в нем...» это уже второй уровень. Комментарии в духе «это уже есть в Хаскелле» — с первого уровня. Ответ «там не такое же потому-то и потому-то» — опять второй. Третий уровень — это что-то из серии «чисто декларативная система могла бы кардинально снизить сложность», никто такого не видел, но в принципе цель благородная. Ну или попроще — «нужна какая-то модель для программирования в распределенной конкурентной среде» :)

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

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

усы2

30 советов 30-летним от тех, кому за 40

  1. Определись. 30 лет — возраст, когда пора сказать себе: определись!
  2. Не дай провести себя на мякине. Вообще по возможности обходи стороной мякину.
  3. Старайся уделять больше внимания. Внимание — твой самый ценный ресурс. Уделяй его.
  4. Составь план. Хороший план очень сложно выполнить, но составить — легко.
  5. Ходи на работу. Многие люди потеряли свою работу после того, как перестали ходить на нее.
  6. Спорт — это важно. Старайся чаще думать о нем.
  7. Сфокусируйся. Расфокусируйся. Вообще, потренируй глаза. Ты можешь добиться в жизни большего, если потренируешь глаза.
  8. Старайся рисковать, но в меру. Будь безрассудным, но рассудительным. Ты еще не молод, но уже не стар.
  9. Привыкай к тому, что многие привычки привычно входят в привычку.
  10. Помни, что то, что тебе сейчас кажется важным, может оказаться на самом деле важным, и может не оказаться. Попробуй угадывать, хоть это и бесполезно.
  11. Старайся жить так, будто каждый день твоей жизни — 10957-ой.
  12. Не откладывай развитие. Если кто-то предложит тебе заняться развитием — не отказывай ему сразу. Подумай.
  13. По возможности не разговаривай на улице с незнакомцами.
  14. Используй ноги при ходьбе. Постоянно дыши. Ешь ртом. Это простые вещи, но они могут кардинально изменить твою жизнь.
  15. Найди время и научись пользоваться интернетом. В 21-м веке без интернета никуда, даже если тебе уже 30 лет. Особенно если тебе 30 лет. На 30 лет у многих приходится пик использования интернета. Будет обидно пропустить его.
  16. С возрастом все труднее вспоминать прошлое. Так что расслабься, больше фантазируй.
  17. Старайся меньше полагаться на свою память. Не надейся запомнить вещи, лучше запиши их на бумажке и запомни, куда положил бумажку.
  18. Начни планировать бороду. К 80-ти годам пышная седая борода не вырастет сама, если ты не начнешь закладывать фундамент уже сейчас. Многие 40-летние жалеют о том, что не начали думать об этом в 30 лет.
  19. Помогай людям стать лучше. Совершённое добро всегда возвращается с лихвой. Говори «я преподал вам урок» вместо «извините».
  20. Научись ценить свое время. Научись ценить время близких тебе людей. Чаще напоминай друзьям, сколько времени ты потратил на них впустую.
  21. Почаще спрашивай себя. Если не услышишь ответа — задумайся.
  22. Купи барабан. В 30 лет это звучит глупо, но поверь мне, через 10 лет ты скажешь мне спасибо за этот совет. К сельдерею тоже присмотрись.
  23. Жизнь это ручей. Чем старше ты становишься, тем яснее видишь аналогию. Ее можно перейти на коне, в ней можно помыть ноги или увидеть свое отражение. После дождя в ней лучше клюет, а посторонний мужчина может в нее помочиться.
  24. Избегай идиотских советов. Тебе не нужна чужая мудрость, чтобы заниматься своими глупостями.
  25. Больше внимания уделяй здоровью. Ешь здоровую еду, пей здоровую воду, носи здоровую одежду, общайся со здоровыми людьми.
  26. Перед началом любого дела подумай, будешь ли ты считать его таким же важным через 10 лет? Если да, то можешь не торопиться.
  27. Оптимизируй свое время. Ложись пораньше, вставай попозже. Ты успеешь сделать больше, если будешь спешить.
  28. Обязательно выдели 30 минут в день, чтобы смотреть на ковер. Если ковра нет, стена тоже подойдет. В это время тебя не должны беспокоить.
  29. Главное в жизни — это баланс. Обязательно научись ходить по канату, стоять на руках и сидеть на табурете с одной ножкой.
  30. Не трать время на споры с дураками. Ты можешь узнать неприятную правду о себе.

усы2

(no subject)

Такой вопрос:

если мне нужно побыстрее и по-безболезнее сделать сайт,

чтобы его могли «вести» некомпьютерные люди (т.е. нужна админка, возможность создавать страницы, заливать фоточки в какие-то альбомы),

и при этом я хочу всю верстку запилить сам,

и это будет не блог (т.е. периодической ленты постов не будет, и возможности, связанные с ней, не нужны)

Что лучше всего для этого взять?

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

P.S. спонсор этого поста — vagrantpress.org, без него я бы повесился.
усы2

На смерть почты

Осуждая смерть Google Reader, я обмолвился, что GMail хоть и хороший сервис, но вредный. Объяснюсь: он достаточно неплох, чтобы всем остальным думать об инновациях не было большого смысла. А почта в них ох как нуждается.

Я, к сожалению, почтой пользуюсь довольно активно. Общаюсь с коллегами по работе и еще получаю на нее письма о регистрации/активации.

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

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

Перейдем к общению. Почта не для общения. Серьезно, я вел персональную переписку в ней пару раз за последние лет пять, очень странное чувство. Вот на работе она эксплуатируется в хвост и в гриву, и я очень страдаю.

Проблема в том, что все держатся за стареющий imap. Удивительно, насколько почта про формат синхронизации, а не про сами письма. У письма нет ссылки. Нет оригинала. Оно физически расположено «нигде», существует, только пока движется. Письмо, которое получил я, и то же самое письмо, которое получил мой коллега — это два разных письма. Это как если бы веб был не про html, а про http. Оффлайновый. В почте немного смысла без интернета, однако именно идея «скачать себе всё» не дает ей развиваться.

И отсюда очевидные сложности:

Качество обработки почты зависит от качества и возможностей клиентов всех сторон, что участвуют в переписке (да, в середине длинной дискуссии обязательно встретится любитель plain text, принудительных переносов строк и цитирования с помощью > > > >)

Письма отлиты в камне. Если ты отправил что-то кому-то — всё, как ушло, так и останется. Письмо нельзя удалить. В Скайпе, к примеру, есть такая функция, у нас ей постоянно пользуются.

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

Нельзя подцепить кого-то в середине дискуссии (можно, конечно, но ему придется знакомиться с историей вопроса в ужасном перевернутом > > > > RE RE RE RE блоке).



Нельзя убрать себя из переписки. На старых форумах, чтобы подписаться/отписаться, нужно было оставить комментарий. В почте хуже — если все жмут Reply All, надо кого-то просить, чтобы тебя убрали из CC.


И не то чтобы это было как-то особенно сложно реализовать. В ЖЖ довольно удобно что-то обсуждать. В Фейсбуке. Из-за простого факта: все участники всегда смотрят на одно и то же. Мне иногда хочется, чтобы завязавшаяся в почте дискуссия велась в чем-то навроде ЖЖ. А это тот еще динозавр — представляете, что с современными технологиями было бы? В общем-то, ясно, что это должен быть сайт, сервис, а не протокол.

Иногда возникают мысли: а может, социальную сеть под рабочее общение припахать? Фейсбук, к сожалению, слишком много лишнего хлама с собой предлагает. В Гугл+ общение как-то вообще не выглядит первостепенной задачей.

Рядом с современным вебом ясно, что почта слишком тяжеловестна и довольно уныла. Я бы хотел, банально, ставить аватарки. Хочется какого-то ощущения, что это я пишу, это мои слова, а не просто холодные буквы.

И за почту надо садиться. Как раньше, разжигаешь лампаду, точишь перо, запускаешь ГМейл, придумываешь тему, обдумываешь адресатов. Подпись выбираешь. Многовато церемоний для средства общения XXI века. Даже сам интерфейс говорит нам, что каждое письмо — это серьезный, важный кусок информации. Даже если я просто напишу в письме «Да.», посмотрите, как церемонно оно будет обвешано:



Если все прелюдии убрать (тему, подписи, цитаты), получится, пожалуй, как раз instant messaging. Только с нормальной сервер-сайд историей, нормальными групповыми чатами, поиском…

Меня этот вывод и радует, и пугает. Мне не очень хочется думать, что именно я знаю, как объединить почту с инстант мессаджингом. В конце концов, человечство до сегодняшнего дня только и делало, что делило сервисы не по смыслу, а по размеру сообщения. Люди любой степени знакомства с ПК и интернетом прекрасно чуствуют ту тонкую невербализуемую границу, которая отделяет твит от фейсбук статуса, ЖЖ-пост от поста в персональном блоге, статью на Хабре от эпизода подкаста. Однако чем больше я думаю о недостатках ИМ и недостатках почты, тем похожее и общее у меня получается решение — легковестность первого, персистентность и гибкость второго.

Вспомним Google Wave. Это очень похоже на то, о чем я говорю; его проблема в тяжелых наркотиках. Совместное редактирование? Это вообще письмо или документ? Команда Гугл-докс всерьез недоумевала. Публичные письма? Мне кажется, очень трудная для восприятия концепция.



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

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

Я не помню сейчас, но была ли там двухсторонняя интеграция со старым добрым imap? Это обязательно для завоевания будущего, конечно. Люди с обычной почтой должны иметь возможность участвовать в этих современных, высокотехнологичных дискуссиях через sendmail и mutt. В общем-то я с этим проблем особых не вижу. Разве что результаты редактирования писем не будем доставлять.

Всем, кто считает, что я не прав, предлагаю в тело комментария вставлять цитатой мой пост, начинать ответ строкой «RE: На смерть почты» и ставить трехстрочную подпись с телефонами и должностью в конце.

(no subject)

Несколько фактов про компанию Эхо:

  • Я до сих пор не знаю, что значит название юрлица JackNyfe (Echo это торговая марка).
  • Зато знаю, почему раньше продукт назывался js-kit, а теперь не называется.
  • Наш CTO считает, что люди, которых прет чем-то заниматься, важнее технологий, на которых они это делают. Поэтому у нас, при большой уже кодебазе на Erlang/OCaml/JS возникают проекты и на Perl, и на Ruby, и на Clojure, когда это удобно.
  • Нас немного (~20 программистов), поэтому многие формальные процедуры у нас не отработаны, хотя мы стараемся какие-то правила устанавливать. Например, филиал в Нск будет первым, там очень много неясных вопросов. С другой стороны, в маленькой компании подход всегда более человечный, чем в большой.
  • Мы никогда не искали людей, знакомых с конкретным языком, однако мы требуем, чтобы кандидат глубоко разбирался в какой-то одной области (не важно какой).
  • Во время тестового задания (2 недели) мы просим кандидатов выучить Эрленг. Это неплохо фильтрует по многим причинам — может ли человек быстро обучаться новому, самостоятельно разбираться в материале, какие универсальные принципы IT он понимает, а не просто запомнил в знакомой среде, где «все так делают».
  • Есть вероятность быть уволенным на испытательном сроке и даже после, если есть какие-то проблемы. Я считаю, что это круто, потому что остаются только очень сильные и адекватные люди, но штат растет не так быстро, как нам хотелось бы.
  • Наш флагманский продукт — многофункицональная real-time платформа для разных крупных бизнесов (комментарии, форумы, галереи с большой посещаемостью и real-time нотификациями).
  • [Писькомерки] Пиковая нагрузка в день сейчас порядка 40k-45k req/s (суммарно по всем endpoints).
  • Написано и используется 500кб клиентского js-кода (говорят, очень качественного).
  • По данным мониторинга, в продакшне сейчас поднятно ~450 серверов.
  • Мы все еще американский стартап (со всеми плюсами и минусами) и вышли на самоокупаемость.
  • Мы явно выделяем время не только на бизнес-, но и на инфраструктурные задачи.
  • Иногда чинить аварии будят ночью (американским днем), если проблема требует вмешательства кого-нибудь из разработчиков.
  • В случае аварии ищется не виновный, а проблема (круто, да? в других компаниях бывает и по-другому, к сожалению).
  • Это первая компания, про которую я заметил, что начал говорить «мы». Потому что это всегда конкретные люди и я вижу, кто конкретно и что делает. Во всех предыдущих местах находился повод говорить «они» или «компания N».
  • Впечатления после первых трех месяцев я описывал тут, еще можно почитать по тегу или еще вот тут.
  • За все время по собственной желанию от нас ушел только один человек.

Я может быть кого-то сильно напугаю такой подборкой, но я вот такой, все равно я не смог бы лукавить (может быть, не все Нские программисты увидят этот пост). Многое здесь КО и «разве бывает иначе?», но это всё у меня болело, когда я искал работу. Большинство пунктов вытекает из факта, что будучи маленькими и инновационными, мы многое не можем себе позволить — неэффективных людей, не-разделения ответственности, бюрократизма, слабосвязанной команды, несоблюдения ТК РФ, маленьких зарплат, и т.д.

Если в двух словах: это не идеальная работа из мокрого сна, где тебя обмазывают медом и носят на руках, а ты лениво поглаживаешь трекпад (да, макбуки пока не раздаем), требуется больше инициативы и самоорганизации, чтобы вообще включиться; но по з/п, людям и задачам идеальная.

К чему это я? Раньше вся разработка проходила строго в Ульяновске, сейчас же мы хотим открыть филиал в Новосибирске и ищем двух разработчиков. Чтобы обеспечить связность команд, передачу культуры и т.п. первые 2-3 месяца работы будут проходить в Ульяновске, плюс в будущем возможны командировки (как ульяновцев в Новосибирск, так и новосибирцев в Ульяновск).

См. также текст вакансии. Откликнуться и получить ТЗ можно там же, можно по jobs@aboutecho.com, а я доступен для комментариев обычно по джабберу/почте prokopov@gmail.com и здесь.

Java. Write once. Run. Anywhere.

Так, теперь чтобы скачать Джаву, надо зарегистрироваться. Выбрать, как ко мне будут обращаться, Г-н или Г-жа.

Проклинаю их всех. И Джаву, и Мейвен, и Дженкинс неработающий, и Оракл, всех их, тварей. Особенно проклинаю программистов, которые запускают внешнюю систему, получают от нее невразумительный ответ и проглатывают это исключение вместе с текстом даже в логах.
    try
    {
        validateRevision("HEAD");
    }
    catch(Exception ex)
    {
        listener.getLogger().println("Workspace has a .git repository, but it appears to be corrupt.");
        return false;
    }
    return true;
Это не то чтобы вон из профессии. Это я уже пакую свои острые ножи и выезжаю по адресу.

Потом идешь это всё пересобирать, а там давно неработающие репозитории вшиты (да, в каждом pom-е каждой бл..ской1 зависимости), часть зависимостей надо ходить и руками скачивать, и мейвен не видит плагина в файле, который буквально у него под носом лежит. Нет, я люблю квесты, но не вечером же пятницы!

А у Дженкинса, хоть в репозитории блокеры и висят с декабря, релизы все равно выходят, добрые люди проблемы фиксят, да только пулл реквесты им закрывают молчком.

Короче, вся эта хваленая инфраструктура, с мейвен-репозиториями, URI каждому артефакту, network ready, оно не работает, просто рассыпается в реальной жизни. Это все слишком мелко нарезали, произошел комбинаторный взрыв и стало видно самые мелочные проблемы на стыках и местах притирки.

Нет, Никита, нельзя было просто сделать папку src с java-файлами, и чтобы вызовом javac оно собралось в готовый продукт. На мейвене так не делают. Мейвен корраптит мозг. На нем начинают программировать. Давайте вместо приложения сделаем уродский, ни с чем не совместимый мейвен-плагин. Ведь можно же сделать десяток стадий — Отличная идея, Джо! На тебе премию — ты выглядишь таким занятым!

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

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

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

1 Блядской.

(no subject)

Дорогие друзья!

Есть такой язык — Питон (Пайтон, Python короче). Я знаю, что есть также мнение, что его стиль выделения структурных блоков отступами, скажем так, не всем нравится. Найти сходу носителей мнения я не смогу, поэтому если среди моих читателей есть те, кто его разделяют, не могли бы вы вкратце обрисовать, что именно вам в нем не нравится? Мне абсолютно серьезно интересны причины, само мнение я слышал (и разделяю право людей его иметь), а вот причин возникновения придумать сам не могу.

Спасибо!

Семь смертных грехов программных систем, которых в 2011-м году стыдно не замечать

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

Семь грехов:
  1. Медлительность
  2. Блокирующее взаимодействие
  3. Неуместные ограничения
  4. Ненастроенность
  5. Несамостоятельность
  6. Забывчивость
  7. Гордыня

1. Медлительность

  • Вы просите Эклисп установить мейвен-плагин и он выполняет вашу просьбу в течение получаса.
  • Вы запускаете Фотошоп и успеваете прочитать пару записей в блоге.
Программы должны работать быстро. Сейчас уже понятно, насколько скорость — это фича. Пользователи уходят даже с медленных веб-страниц. А когда программа занимается ерудой на ровном месте — это гарантированное расставание на всю жизнь. И самое главное — интерфейс всегда, что бы ни случилось, должен отзываться на действия пользователя. Иначе программа признается мертвой.

2. Блокирующее взаимодействие

  • Вы нажимаете в svn кнопку «коммит», и пока он не уйдет целиком и полностью, вас никто никуда не отпустит.
  • Вы применяете к изображению сложный фильтр и должны дождаться, пока он полностью обсчитается, прежде чем сможете на что-нибудь нажать.
В общем случае пока программа что-то делает (даже по пустякам), она заставляет вас ждать «на всякий случай», мало ли что вы там испортите. Апофеозом этого греха являются модальные окна — программа ничего не делает, но никуда уйти не дает. Рецепт простой — работать в фоне, вот применять сложнее.

Положительный пример: Final Cut Pro X, к десятой версии обзаведшийся фоновым рендерингом материалов. Видели бы вы овацию на презентации этой фичи.

3. Неуместные ограничения

  • Описание не может быть длиннее 1000 символов.
  • Название категории не может содержать пробелов.
  • Вы должны вступить в блог, чтобы прочитать запись из него (хабрахабр).
В общем случае один человек ткнул пальцем в небо и родил ограничения. Еще и называет это «подумал о вариантах использования». Лучшие ограничения — это те, которых нет. Мы же не байтики на дискетах экономим в 21-м веке. Пора уже привыкнуть, что вместо «vasya_poopkin» я могу логиниться по гораздо более красивому «Василий Пупкин». Если ты можешь сделать, скажем, описание продукту любой длины (а он может) — делай, не надо гадать, что скорее всего никому больше 1000 не понадобится. Никогда не угадаешь.

4. Ненастроенность

  • Первым делом в текстовом редакторе вы меняете шрифт и включаете автосохранение.
  • Первым делом в браузере вы убираете ненужные панели и включаете сохранение паролей.
В общем случае программа в изначальной конфигурации неудобна/неприятна/непригодна для использования. Люди привыкли, что в первую очередь нужно залезть в настройки. Но это не значит, что это хорошо. В магазинах не продают лопат, которые сперва нужно перековать. Вы не меняете ручку у молотка сразу после покупки. Программа — такой же инструмент, и обязанность продавца (читай разработчика) сделать так, чтобы ей можно было сразу пользоваться. Кстати, если об этом подумать, то 50..90% настроек можно будет выкинуть за ненадобностью.

Положительный пример: iA Writer, текстовый редактор без панели настроек.

5. Несамостоятельность

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

Положительный пример: браузер Сафари сам распаковывает архивы и монтирует образы сразу после загрузки. Гугл Хром сам скачивает и устанавливает обновления без единого окошка.

6. Забывчивость

  • Вы не указали адрес, пожалуйста, заполните эту форму заново.
  • Сохранить документ? — Нет. — Ок, удалил. — Хотя подожди...
  • Вы говорите файндеру показывать файлы списком, а он в следующий раз опять показывает их превьюшками.
  • Вы выбираете один слой, но через какое-то время объекты опять создаются на другом.
  • Вы настраиваете размер окна, а при следующем запуске программа его забывает.
В общем случае я не должен предпринимать никаких дополнительных действий, чтобы то, что я ввожу (в любом виде — информацию, настройки, конфигурацию окон, яркость экрана), сохранилось. Господам программистам надо поднять жопу со стула и пойти и сделать, чтобы так и было. Это поведение по умолчанию, блин!

Положительный пример: ИнДизайн ЦС5 даже после падения поднимается ровно в том месте, где вы закончили, независимо от того, сохранялись вы или нет.

7. Гордыня

  • Обновление прошло успешно! (Аваст, голосом!)
  • Я еще не запустилась, но вот тебе мой сплешскрин поперек всего и крадущий фокус.
  • Здравствуй, дорогой друг! Я знаю, ты запустил меня, чтобы что-то сделать, но у меня тут обновление, пойди лучше скачай его.
  • А я маленькая программка управления фотоаппаратом, и я боюсь что ты меня никогда не увидишь, поэтому вот тебе мой тулбар в браузер, иконка в трей, автозапуск со сплешскрином, стартовая страница и поиск по умолчанию.
  • Вы не чистили свой рабочий стол 60 дней...
В общем случае программа считает себя центром вселенной и о любом событии беспокоит пользователя, чтобы он ей почесал за ушком, скачал обновление, даже информирует его о том, что все идет хорошо (!). Программы мигают в панели задач, прыгают в доке, суют свои иконки (я смотрю на тебя, adobe reader), чего-то постоянно от тебя требуют (нагло, не правда ли?). В результате, если ты не загружался в систему полгода, то тебе преградит путь десяток каких-то тупых окон, а тебе всего-то нужно было файл забрать, например. Все-таки, компьютер для человека или человек для компьютера? Иногда мне кажется, что мой ответ отличается от мнения большинства разработчиков.

Бонус.

Семь примеров феерической тупости из коллекции автора.
  1. Медлительность. Вы просите Виндоус зайти на самбу и ждете сначала полчаса чтобы она спросила у вас пароль, потом еще полчаса она будет «пытаться присоединиться» к соседнему компьютеру. Ощущения как будто пограничник забрал у вас паспорт и тайно пошел на обед.
  2. Блокирующее взаимодействие. Модальные целиком для браузера alert/http basic auth form — такие, что нельзя переключиться в другую вкладку, чтобы скопировать пароль.
  3. Неуместные ограничения. Что делать, если данное мне при рождении имя не удовлетворит критериям этого безымянного аналитика?
  4. Ненастроенность. Все сайты погоды, которые даже не пытаются определить по айпи город.
  5. Несамостоятельность. Введите номер телефона без пробелов и специальных символов.
  6. Забывчивость. Сохранить документ, который вы писали 7 часов? Да-нет? Упс.
  7. Гордыня. Виндоус Виста: установлено обновление, вы здесь? Ок, 10 минут никого нет, прибиваю всё и перезагружаюсь. — Эй, чувак, а что, электричество отключали?

Если кому-то показались хоть немного интересными высказанные здесь мысли, то рекомендую продолжить чтение здесь:
  • Дональд Норман. Дизайн промышленных товаров / The Design of Everyday Things. Про то, что вообще за проблемы с вещами, кто в ней виноват и кто должен ее решать.
  • Джеф Раскин. Интерфейс (выложен полный текст). Про то, как уже вполне могли бы работать компьютеры, если бы в Майкрософте тоже слушали умных людей. Знакомым с этой книгой забавно смотреть, как идеи и принципы из нее потихоньку протаскиваются в современный мир Эпплом, а затем и всеми остальными.
  • Алан Купер. Об интерфейсе / About Face 3. Очень большой и очень обстоятельный труд, по косточкам разбирающий современные интерфейсы и предлагающий адекватные решения многих проблем. Например, половина релиза OS X Lion как минимум была здесь предсказана :)

(no subject)

Хорошая поначалу статья о том, чего нормальные люди не понимают в этих ваших дебильных компьютерах.
Many users are used to web applications and don’t understand that they need to download and install new versions of desktop software to get access to the features in a new version.
Действительно, в точку! И будь проклят ДубльГИС с его автоотключением после полугода использования. Будь трижды проклят!
Many users don’t understand how or where data is stored or even that it is separate from the application. They don’t understand that some data is stored on their local harddisk and some is stored ‘in the cloud’.
И опять в точку! Только многие почему-то начинают думать, что раз пользователи не понимают, надо им объяснить. Внезапно, это не так. Это нужно наоборот, исправить. Раз проблема существует, надо ее решать, а не перекладывать ответственность на ни в чем не повинных людей.
Given that users don’t understand the basics of data storage it should come as no surprise that they also don’t understand the concept of file formats either.
Это, кстати, намекает нам, что людям важнее их данные, чем программа, которой они их смотрят. Что должно бы привести нас к идее документов универсальных форматов, или хотя бы совместимости форматов на каком-то базовом уровне, но это несбыточная, пожалуй, мечта.

Насторожился я на пункте 9, где написано, что дескать они не понимают, that they should read the documentation. Пользователи, действительно, не читают, но это не они не понимают, они как раз правы в этом своем нежелании. Делать нужно так, чтобы ничего читать не надо было.

И финал (10. Problem exists between keyboard and chair) жутко некорректен: опять же, это не пользователи недостаточно способные, это все-таки программа излишне сложная. Не хватало еще, чтобы разработчики начали пользователей на способных и неспособных делить.

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