• Ричард Хэмминг: «Необъяснимо высокая эффективность математики»

    • Перевод
    «Это самое глубокое эссе, которое я видел относительно философии науки; на самом деле, оно важно для всего нашего понимания мысли, познания или реальности.»

    image

    Пролог


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

    Человек, насколько мы знаем, всегда задавался вопросом о себе, мире вокруг и смысле жизни. Во множестве мифов повествуется о том почему и как Бог или боги создали человека и вселенную. Это теологические объяснения. Их отличительная черта — нет смысла спрашивать почему вещи таковы, как они есть, если боги создали их такими.

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

    Из этих ранних попыток объяснить мир постепенно возникла философия, также как и современная наука. Не то чтобы наука объясняет «почему» вещи таковы, как они есть — гравитация не объясняет «почему» предметы падают, но наука дает нам столь детальное объяснение «каким образом» это происходит, что у нас появляется чувство, будто мы знаем «почему». Давайте проясним; море связанных между собой фактов позволяет науке сказать «почему» вселенная именно такая.
    Читать дальше →
  • Ричард Хэмминг: Глава 29. Вы получаете то, что вы измеряете

    • Перевод
    «Цель этого курса — подготовить вас к вашему техническому будущему.»

    imageПривет, Хабр. Помните офигенную статью «Вы и ваша работа» (+219, 2365 в закладки, 360k прочтений)?

    Так вот у Хэмминга (да, да, самоконтролирующиеся и самокорректирующиеся коды Хэмминга) есть целая книга, написанная по мотивам его лекций. Давайте ее переведем, ведь мужик дело говорит.

    Это книга не просто про ИТ, это книга про стиль мышления невероятно крутых людей. «Это не просто заряд положительного мышления; в ней описаны условия, которые увеличивают шансы сделать великую работу.»

    Мы уже перевели 12 (из 30) глав.
    За перевод спасибо Валерию Дмитрущенкову, который откликнулся на мой призыв в «предыдущей главе». Кто хочет помочь с переводом — пишите в личку или на почту magisterludi2016@yandex.ru (Кстати, мы еще запустили перевод еще одной крутейшей книги — «The Dream Machine: История компьютерной революции»)

    Глава 29. Вы получаете то, что вы измеряете


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

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

      Многие уже научились строить чистые интерфейсы и писать «undo-redo» в несколько строчек. Но как быть с анимациями? Часто их обходят стороной, и они не всегда вписываются в подход (state) ↦ DOM. Есть отличные решения вроде React Motion, но что если вам нужно делать сложные анимации или работать с Canvas, используя физический движок?

      В нашем тексте рассказывается, как работать с анимациям в React-приложениях, и сравнивается несколько подходов (D3, React-Motion, «грязные компоненты»). А также о том, как «запускать» анимации в Redux-приложениях. Материал основан на расшифровке доклада Алексея Тактарова с нашей декабрьской конференции HolyJS 2017 Moscow. Прилагаем заодно видеозапись этого доклада:


      Осторожно, трафик: под катом много картинок и гифок (сами понимаете, материал про анимации).
      Читать дальше →
      • +35
      • 7,7k
      • 1
    • Cжатие и улучшение рукописных конспектов

      • Перевод
      Я написал программу для очистки отсканированных конспектов с одновременным уменьшением размера файла.

      Исходное изображение и результат:


      Слева: исходный скан на 300 DPI, 7,2 МБ PNG / 790 КБ JPG. Справа: результат с тем же разрешением, 121 КБ PNG [1]

      Примечание: описанный здесь процесс более-менее совпадает с работой приложения Office Lens. Есть другие аналогичные программы. Я не утверждаю, что придумал нечто радикальное новое — это просто моя реализация полезного инструмента.

      Если торопитесь, просто посмотрите репозиторий GitHub или перейдите в раздел результатов, где можно поиграться с интерактивными 3D-диаграммами цветовых кластеров.
      Читать дальше →
    • Перевод книги «Социальная архитектура»: Торговые марки для open source проектов

      • Перевод
      imageТорговые марки. Что они такое, нужны ли они вам и сколько это стоит? Эти вопросы часто возникают при построении open source проекта. Торговые марки могут быть ключом, который защитит проект от недобросовестных людей. Хотя тут мало что советовать. Поэтому вот мой гид по использованию торговых марок в проекте open source. Это практический совет, не юридический, ведь я точно не ваш адвокат.

      Немного о торговых марках


      Сначала определение. Торговая марка — это имя, фраза, логотип или специфичный цвет («маркировать»), которые вы используете для бизнеса («торговли»). Простое использование знака некоторое количество времени создает торговую марку. Но, как и с любой другой собственностью, дьявол кроется в связанных с ней правах и обязанностях. Вопрос всегда один и тот же: если вы придете к судье с жалобой, какие требования к доказательствам он потребует или будет ожидать от вас?

      Не важно, какое это дело, криминальное или гражданское, всегда все сводится к убеждению одного или более людей. Если вы когда-нибудь пойдете в суд, имейте это в виду. Факты дела, а каждая из сторон их знает, не важны. Важно лишь то, как эти факты были задокументированы и будут представлены.
      Читать дальше →
    • Ричард Хэмминг: Глава 1. Ориентация

      • Перевод
      «Цель этого курса — подготовить вас к вашему техническому будущему.»

      imageПривет, Хабр. Помните офигенную статью «Вы и ваша работа» (+219, 2265 в закладки, 353k прочтений)?

      Так вот у Хэмминга (да, да, самоконтролирующиеся и самокорректирующиеся коды Хэмминга) есть целая книга, написанная по мотивам его лекций. Давайте ее переведем, ведь мужик дело говорит.

      Это книга не просто про ИТ, это книга про стиль мышления невероятно крутых людей. «Это не просто заряд положительного мышления; в ней описаны условия, которые увеличивают шансы сделать великую работу.»

      Мы уже перевели 10 (из 30) глав.

      Глава 1. Ориентация


      (За перевод спасибо Savva Sumin, который откликнулся на мой призыв в «предыдущей главе».) Кто хочет помочь с переводом — пишите в личку или на почту magisterludi2016@yandex.ru

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

      Я буду рассматривать, критиковать и демонстрировать различные стили мышления. Для иллюстрации стилевых особенностей я буду использовать технические знания, знакомые большинству из вас, что, опять же, надеюсь, станет для вас полезным повторением основ. Вам следует рассматривать этот курс в качестве дополнения к уже изученным вами техническим курсам. Многим вещам, о которых я буду говорить, не нашлось места в стандартных курсах, однако я глубоко убеждён, что вам необходимо о них знать. Этот курс существует потому, что Отдел Электрической и Компьютерной Разработки Аспирантуры Университета Морской Пехоты осознаёт необходимость общего, широкого образования, наряду со специализированным, технологическим обучением, которого потребует ваше будущее.
      Читать дальше →
      • +34
      • 14,9k
      • 5
    • Восход разработчикономики

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

        P.S. Так и не смог разобраться, как поставить в заголовке тег «перевод».

        Восход разработчикономики


        Статья Венкатеша Рао опубликована в декабре 2011 года в журнале «Форбс».

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

        В последнее время я размышлял над этой идейкой в контексте человеческого богатства. Если только вы не являетесь профессиональным инвестором (а даже если и являетесь), в настоящее время находить места для хранения избытка капитала, где он бы был в безопасности и не амортизировался слишком быстро (не говоря уже о принесении дохода) становится всё сложнее и сложнее. Фондовый рынок всё чаще навевает мысли о кровавом пиршестве “медведей”. Волатильность и неожиданные кратковременные ралли делают игру с короткими позициями небезопасной. Даже хранение активов в долларах, похоже, таит свои опасности — благодаря угрозе девальвации и всяким новомодным словечкам вроде «количественного смягчения», которые мы, среднестатистические инвесторы, слышим впервые. Евро сейчас тоже не смотрится как радужная альтернатива. Решение инвестировать в золото — и вообще в любое сырьё — кажется, требует несколько апокалиптического взгляда на мир, и размышлений о том, как вы планируете получить доступ к собственно предмету владения в случае, если всё и правда полетит в тартарары (хочется отметить, что в настоящий момент не могу назвать такой взгляд на мир так уж неоправданным).

        Но есть одна тихая гавань — если вы знаете, как в неё вложиться: разработчики ПО.

        Читать дальше →
      • Rayon: параллелизм данных в Rust

        • Перевод
        Последние пару недель я работал над обновление Rayon — моей экспериментальной библиотеки для параллелизма данных в Rust.

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

        let total_price = stores.iter()
                                .map(|store| store.compute_price(&list))
                                .sum()
        

        то вы можете сделать её работу параллельной просто поменяв обычный «последовательный итератор» на «параллельный итератор» из Rayon:

        let total_price = stores.par_iter()
                                .map(|store| store.compute_price(&list))
                                .sum()
        

        Читать дальше →
        • +48
        • 8,9k
        • 9
      • Фреймворк для процедурных макросов в Rust

        • Перевод

        От переводчика


        Процедурные макросы — одна из наиболее ожидаемых фич Rust. На данный момент процедурные макросы возможно писать только под нестабильную версию компилятора, хотя есть несколько контейнеров, вроде syntex, позволяющие делать ограниченную кодогенерацию в рамках стабильного компилятора. Однако ситуацию это особо не облегчает, поскольку интерфейс к AST остаётся нестабильным, и, хотя авторы syntex стараются идти в ногу с ночными сборками, иногда случаются фейлы из-за изменений в структуре AST.
        В этом блог посте один из участников core team — Nick Cameron — поделился своим видением будущего процедурных макросов. Хотя пост полон технических подробностей по внутренностям компилятора, мне показалось, что хабрасообществу может быть интересно заглянуть немного за кулисы разработки Rust.

        Фреймворк для процедурных макросов


        В этом посте я расскажу, как, по моему мнению, должны выглядеть процедурные макросы. Я уже рассказывал про синтаксис в другом посте, а когда мы опубликуем API для процедурных макросов, то напишу пост и про него. Я уже описывал целый ряд изменений в системе макросов, так что здесь я в чём-то повторюсь (отчасти противореча прошлому посту), но раскрою больше подробностей.
        Читать дальше →
      • Как сжать плоского кота

        Однажды в студеную зимнюю пору… ровно год назад, у нас появилась нетривиальная задача. Есть экран на электронных чернилах, есть процессор 16МГц (да-да, во встраиваемой электронике, особенно сверхнизкого энергопотребления, встречаются и такие) и совсем нет памяти. Ну, т.е. килобайтов 8 RAM и 256 Flash. Килобайтов, Карл. И в эти унылые килобайты необходимо запихнуть несколько изображений 800х600 в четырех оттенках серого. Быстро перемножив в уме 800 на 600 и на 2 бита на пиксель получаем 120 тысяч байтов. Несколько не влезает. Надо сжимать.

        Так перед нами появилась задача: «как сжать плоского кота»? Почему кота? Да потому, что на котиках тестировали, на чем же еще черно-белые картинки проверять. Не на долларовых банкнотах же.
        Читать дальше →