14 сентября 2012, 12:39

Эксперимент про питьё воды. Первая часть.

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

Цель эксперимента: удовлетворить любопытство. Понято, что такое изменение рациона обязательно вызовет перемены в поведении и в организме. За этими-то изменениями и интересно понаблюдать. Ещё хочется проверить свою зависимость от напитков: мол, будет ли это меня напрягать или нет.

Ну и кроме того после этого эксперимента сразу начнётся другой: когда я снова начну пить чай и остальное в тех количествах, в которых пил до этого. Ещё один источник интересных наблюдений ;-)


Начать оказалось непросто. Возможно, я даже стал понимать бросающих курильщиков. У меня оказалось слишком много привычек, связанных с чаем: утром после завтрака, перерывы на чай на работе, после возвращения домой, вечером с друзьями. Ещё нужно было съездить к бабушке с дедушкой, а этот эксперимент обязательно бы их взволновал, и потом было бы странных разговоров на много дней. Ни к чему это. Но в какой-то момент я всё-таки решился и установил себе срок в две недели. И на всякий случай во всеуслышание объявил (а мы с друзьями как раз сидели за столом и пили чай).

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


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

Ещё я привык пить чай, пока работаю. Это позволяет каждый час отвлекаться от работы, что, конечно же, нужно делать. Когда чайный ритуал сводится к десяти секундам, отвлекаться приходится как-нибудь по-другому. Пока я для себя не решил, чем сублимировать. Иногда получается, что я прихожу на кухню (привычка-то осталась!), пошатаюсь там пару минут (раньше бы ждал, пока вскипает чайник), попотягиваюсь, поподтягиваюсь, и иду обратно работать.


Продолжение в следующем номере.

7 сентября 2012, 10:36

Два принципа

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


Первый принцип: начинать что-либо делать сразу, не откладывая на начало недели, месяца, столетия или на следующее утро. Сразу, как пришло в голову. Так будет и эффективнее, и сразу ближе к цели. Пьём чай без сахара, читаем минимум X страниц в день, ведём учёт финансов — с этого момента, или хотя бы с сегодня.

Стремление начинать что-то с какого-то особого первого дня возникает, по-моему, из-за склонности к перфекционизму. Хочется стройности. Но если эту стройность нарушить — а с непривычки наверняка нарушишь почти сразу — то ничего, кроме досады не испытываешь.


Второй принцип — не заводить штрафы. Принцип я подглядел у Анатолия Воробья в заметке о том, как он читает. Этот принцип можно применить к чему угодно. Накосячил сейчас — и фиг с ним, зато дальше не будешь косячить. Сложно изменить привычку в одно мгновение, менять постепенно — и проще и веселее.


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

11 мая 2012, 10:32

Повторение вопроса из зала

Стенфордские преподаватели курса CS 193P про программирование для iOS (я смотрел зимний 2010), перед тем, как отвечать на вопрос из зала, сначала повторяют его. Это решает минимум две задачи.

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

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

Кстати, после ответа преподаватель всегда спрашивает: «Я ответил на ваш вопрос?»

23 апреля 2012, 11:26

Медленнодействие

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

Подобное замедление появилось в Django 1.4.

Ещё один пример — проверка кода аутентичности сообщения. Алиса посылает Бобу сообщение (например, «Переведи 100 долларов на счёт 42») и специальный код (например «56789»), с помощью которого Боб убеждается, что сообщение пришло именно от Алисы и что сообщение по дороге не изменилось. Этот код зависит от ключа, который есть только у Алисы и Боба, поэтому враг не может просто так создать сообщение и код, которым Боб поверит. Обычно проверка происходит так: Боб берёт ключ и полученное сообщение, вычисляет код и сравнивает с присланным кодом.

Вот собственно сравнение кодов и может стать дырой в безопасности, если Боб сравнивает их побайтово и, находя различие, сразу сообщает об ошибке. Враг создаёт своё сообщение «Переведи все доллары на счёт 88», а потом начинает перебирать коды, меняя первую цифру и замеряя время проверки. Самая долгая проверка указывает на правильно угаданную первую цифру. И так далее.

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

2 апреля 2012, 14:02

Про кириллицу в языке программирования 1С

В платформу 1С:Предприятие встроен язык программирования, похожий на переведённый на русский Visual Basic с кириллическими ключевыми словами, идентификаторами и т. п. Для многих программистов подобный код выглядит дико.

Однако, если разобраться, этот феномен вполне объясним. Дело в том, что эта платформа имеет довольно определённую предметную область — бухгалтерский и прочий учёт для российских компаний. В этой области есть понятия, которые сложно переводить на английский язык просто потому, что в зарубежной практике может не существовать полностью соответствующих эквивалентов. Например, словари предлагают переводить и «счёт» и «счёт-фактура» одним словом «invoice», хотя на самом деле это совершенно разные объекты. Вариант использовать транслитерацию для обозначения объектов — «SchetFaktura» — страшен.

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

(Кстати, многие языки языки позволяют использовать в идентификаторах не только латиницу: Python, C#, JavaScript, CSS, C в стандарте C99 — см. боярский диалект и заметку о коде Go и т. п.)

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

11 февраля 2012, 17:05

Питон и производительность

Лучше один час писать программу, которая будет работать восемь часов, чем восемь часов писать программу, которая проработает час.

(Речь не идёт о взаимодействии с пользователем, интерфейс в любом случае должен работать быстро.)

9 января 2012, 20:31

main() в программах на питоне

Почти все мои скрипты пишутся по этому шаблону:

# coding=utf-8

def main():
    pass # do main stuff
  

# here be functions and classes


if __name__ == '__main__':
    main()

Есть две причины. Во-первых, из-за if __name__ == '__main__': можно использовать скрипт и как самостоятельную программу (__name__ будет содержать '__main__' только когда скрипт запущен сам по себе, см. весьма краткий раздел документации ), и как модуль, при подключении которого определённый код исполнять не нужно. А во-вторых, лучше, когда главная часть программы идёт в начале файла. Благодаря правильно названным классам и функциям сразу становится ясно, что скрипт делает.

Сделать проще:

# coding=utf-8

if __name__ == '__main__':
    pass # do main stuff


# here be functions and classes

не получится по простой причине: в момент исполнения # do main stuff объекты, объявляемые в # functions and classes ещё не определены и интерпретатор не может их использовать.

30 декабря 2011, 18:59

Готовятся к публикации

  • Как я сделал вступительное задание в летнюю школу iOS-разработчиков
  • Полезные советы про Питон, Джанго и Вим
  • Как устроен наш интернет-магазин изнутри
  • Про виньетки в нашей админке
  • Как мы рисовали карты для игры «Кухандель»
  • Интересные логические задачи
и ещё шесть черновиков.