• Рефакторинг программы на Go: ускорение в 23 раза

    • Перевод


    Привет! Меня зовут Марко, я работаю в Badoo в отделе «Платформы». У нас довольно много всего написано на Go, и зачастую это критичные к производительности системы. Именно поэтому сегодня я предлагаю вашему вниманию перевод статьи, которая мне очень понравилась и, я уверен, будет вам очень полезна. Автор пошагово показывает, как он подходил к проблемам производительности и как их решал. В том числе вы познакомитесь с богатым инструментарием, доступным в Go для такой работы. Приятного чтения!

    Несколько недель назад я прочитал статью «Хороший код против плохого кода в Go», где автор шаг за шагом демонстрирует рефакторинг реального приложения, решающего реальные бизнес-задачи. Она сфокусирована на превращении «плохого кода» в «хороший код»: более идиоматичный, более понятный, полноценно использующий специфику языка Go. Но автор также заявлял о важности производительности рассматриваемого приложения. Во мне взыграло любопытство: давайте попробуем её ускорить!
    Читать дальше →
  • Транс-ФРК: один из эталонов коррекции зрения

      image

      Сегодня опять буду рассказывать вам про лазеры, роговицу и коррекцию зрения. Но на этот раз будем говорить не о разных вариантах LASIK и ReLEx SMILE, а о последних модификациях ТрансФРК. Метод все незаслуженно пинают, называя устаревшим и уступающим во всем другим технологиям. Плюс, его постоянно путают с обычным ФРК, при том, что между ними реально лежит технологическая пропасть. Я попробую показать почему это не так, а заодно расскажу, почему к нам выстраиваются очереди перед началом набора в летные училища и учебные заведения МВД.
      Читать дальше →
    • Быстрый тест производительности Python для вычислительных задач

        Мотивация


        Совсем недавно вышла новая версия 0.34 библиотеки оптимизирующего JIT компилятора Numba для Python. И там ура! появилась долгожданная семантика аннотаций и набор методов для организации параллельных вычислений. За основу была взята технология Intel Parallel Accelerator.

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

          Я около 5 лет занимаюсь биополимерами для лечения глаз. В конце расскажу немного, что такого удивительного есть в России в этом направлении.

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

          Она работает барьером от пыли, защищает глаз от царапин как смазка, убивает экзогенные бактерии своими иммунными реакциями. При движении век жидкость размазывается по поверхности роговицы и образует перикорнеальную плёнку, которая выравнивает переднюю линзу глаза. Это важно, потому что неровности от 0,3 мкм² по площади уже хорошо заметны и искажают зрение. Кроме того, влажность важна для слоя неороговевающего эпителия глаза — благодаря этому слою наши глаза в конечном итоге могут получать достаточно кислорода.

          Вопреки распространённому мнению, слёзная железа делает довольно мало для постоянной защиты глаза. Это своего рода резервный накопитель для жидкости, необходимой для промывания глаза, либо для повышения иммунитета глаза (к примеру, в результате эмоционального потрясения). Основная же слёзная жидкость, которая делает глаз влажным постоянно, поступает из относительно небольших желез Краузе и Вольфринга.
          Читать дальше →
        • Большой FAQ про разные виды коррекции зрения: все вопросы гиков в одном месте

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

            – Что лучше: очки, линзы или лазерная коррекция?

            Если вас полностью устраивают очки – сохраняйте спокойствие, коррекцию делать не нужно. Однако, если вы никогда не пробовали линзы, то стоит попробовать поносить их пару недель, чтобы понять, как мир будет выглядеть после коррекции. В 10-летней перспективе контактные линзы (даже однодневные) существенно опаснее коррекции по обратимым и необратимым побочным эффектам и осложнениям. Поэтому я рекомендую их только для ознакомления с дивным новым миром.

            – Я решил остановиться на очках, но боюсь, что мне в лицо откроется подушка автомобиля и они станут контактными линзами. Что делать?

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

            Если вы видите плохо и не надеваете очки, то вы теряете часть информации об окружающем мире и при этом создаёте дополнительную нагрузку на зрительный аппарат. Есть проблема – нужна оптическая коррекция. А испортить глаза очками можно, как один из наших коллег из клиники в г. Марбурге – он уснул в стеклянных очках за компьютером дома, упал лицом на клавиатуру, и осколок стекла вошёл в хрусталик. Мой партнёр Вальтер Секундо его оперировал: сначала заменили хрусталик, потом через год понадобилась трансплантация.
            Читать дальше →
          • Генерируем произвольные последовательности на выводах платы Raspberry Pi

            • Tutorial


            Автор: Николай Хабаров, Embedded Expert DataArt, евангелист технологий умного дома.

            В этой статье я расскажу, как написать обычное user space-приложение на Python для современного ARM-процессора с ОС Linux для генерирования сложных последовательностей импульсов на выводах платы. Суть идеи — использовать DMA-модуль процессора для копирования из предварительно подготовленного буфера в памяти в GPIO с высокой точностью по времени.

            Когда речь заходит о необходимости сгенерировать сложную последовательность импульсов, например, для шаговых двигателей, обычно используют старые добрые простенькие микроконтроллеры с установленной специальной операционной системой реального времени или вообще без операционной системы. Реализация при этом, в лучшем случае, написана на C++. Сейчас процессоры шагнули далеко вперед и имеют массу преимуществ: производительность, возможность использования операционной системы Linux со всей инфраструктурой и ПО, а также высокоуровневых языков программирования, таких как Python. И все же современные микроконтроллеры для генерирования сложных последовательностей на выводах GPIO, как правило, не используют.

            Я реализовал генерацию импульсов для управления шаговыми двигателями проекта PyCNC — проекта контроллера машин с ЧПУ, станков, 3D-принтеров, полностью написанного на Python и запускаемого на современном ARM-процессоре на плате Raspberry Pi.

            Статья может быть полезна желающим реализовать генерацию сложных последовательностей установки уровней на выводах одного или нескольких GPIO на других высокоуровневых языках программирования, используя DMA-модули других процессоров.
            Читать дальше →
          • Что намазать на зубы, чтобы они не выпали


              Хорошо зафиксированный пациент в анестезии не нуждается

              По многочисленным просьбам трудящихся сегодня мы будем заниматься очень важными вопросами:


              • Как правильно мазать зубы пальцем?
              • Хорошо ли растворяются пломбы в кислоте?
              • Почему больно, когда сверлят зубы дрелью без анестезии?
              • Зачем мазать зубы зеленкой?
              • Лечение кариеса на дому
              • Глубокое микрофторирование эмали

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

              Читать дальше →
            • Библиотеки для глубокого обучения Theano/Lasagne

              • Tutorial

              Привет, Хабр!


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


              Я открою этот цикл статьёй о Theano — библиотеке, которая используется для разработки систем машинного обучения как сама по себе, так и в качестве вычислительного бекэнда для более высокоуровневых библиотек, например, Lasagne, Keras или Blocks.


              Theano разрабатывается с 2007 года главным образом группой MILA из Университета Монреаля и названа в честь древнегреческой женщины-философа и математика Феано (предположительно изображена на картинке). Основными принципами являются: интеграция с numpy, прозрачное использование различных вычислительных устройств (главным образом GPU), динамическая генерация оптимизированного С-кода.

              Читать дальше →
            • PyMC3 — MCMC и не только

                PyMC3 — МСМС и не только



                Привет, Хабрахабр!


                В этом посте уже упоминался PyMC3. Там можно почитать про основы MCMC-сэмплирования. Здесь я расскажу про вариационный вывод (ADVI), про то, зачем все это нужно и покажу на довольно простых примерах из галереи PyMC3, чем это может быть полезно. Одним из таких примеров будет байесовская нейронная сеть для задачи классификации, но это в самом конце. Кому интересно — добро пожаловать!


                Читать дальше →
                • +36
                • 12,2k
                • 3
              • DIY порошок для посудомойки: как не растворить посуду и не повторить моих ошибок. Год экспериментов



                  Предыдущие публикации:

                  Пудра для мозга или как сделать порошок для посудомойки в 9,7 раз дешевле
                  DIY порошок для посудомойки: разбираем промышленные средства и улучшаем рецепт

                  Прошло уже больше года с момента последней публикации из серии домашней алхимии, посвященной издевательствам над бытовой техникой производству порошка для посудомойки в домашних условиях. Я все еще жив. Большинство тестировавших жуткие смеси, насколько мне известно, живы. В этом посте я хотел рассказать как правильно мыть ржавые гвозди в посудомойке, не растворяется ли картошка с укропом и подвести итог экспериментов за год.
                  Читать дальше →
                • Linux-контейнеры дома: зачем и как




                    Рассуждения


                    При упоминании словосочетания «контейнерная виртуализация», многим на ум сразу же приходят Virtuozzo и OpenVZ, а также Docker. Ассоциируется же это все, в первую очередь, с хостингом, VPS и другими подобными вещами.

                    Дома, на личных компьютерах многие используют виртуальные машины: в основном, пожалуй, Virtualbox. Как правило, для того, чтобы работая под Linux, иметь под рукой Windows или наоборот. Однако, при наличии множества родственных Linux-операционок, я стал замечать, что использование виртуальных машин — это, мягко говоря, нерационально.
                    Читать дальше →
                  • Что за болезнь: сахарный диабет

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

                      Сегодня «Атлас» рассказывает о том, каким бывает сахарный диабет, почему он возникает, и как управлять рисками развития заболевания.



                      Читать дальше →
                    • Python на Хабре

                        Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…
                        Читать дальше →
                      • Квантовые шахматы

                        Intro


                        Этот пост написан под впечатлением от вот этого отличного поста с Хабра, в котором автор наглядно, при помощи двумерных моделек, которые рисует его программа, объясняет как работает Специальная Теория Относительности.


                        Я работаю в IT, а по образованию – физик-теоретик. Уже долгое время увлекаюсь популяризацией науки, и теоретической физики в частности. Постараюсь аналогично вышеупомянутому посту о специальной теории относительности объяснить на специально подготовленном примере как работает квантовая механика.


                        Модель, которую я рассматриваю – отнюдь не нова. Более полугода назад Chris Cantwell разместил на YouTube анонс новой настольной игры: квантовых шахмат (многим, возможно, известно об этом из вот этого вирусного ролика).


                        Недавно игра вышла в Steam, она стоит 249 руб. Есть ещё другая реализация – бесплатное приложение для iOS (не знаю, есть ли оно в Google Play). Однако в процессе игр с друзьями я экспериментально выяснил, что она неправильная с точки зрения квантовой механики. Такую реализацию скорее можно назвать статистическими шахматами, а не квантовыми.


                        Поэтому я решил написать свою реализацию, с запутанностью и суперпозициями. В своей реализации я постарался исправить те недостатки, которые на мой взгляд присутствуют в версии на Steam (например, у меня пешки тоже могут ходить квантовыми ходами, как и все остальные фигуры). Про приложение для iOS и так всё понятно: любая реализация квантовых шахмат должна быть по-настоящему квантовой, т.е. не только быть вероятностной, но поддерживать такие эффекты квантовой механики как интерференция, запутанность, etc.


                        Читать дальше →
                      • Открытый курс машинного обучения. Тема 4. Линейные модели классификации и регрессии


                          Всем привет!


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


                          Пример такой задачи – это соревнование Kaggle Inclass по идентификации пользователя в Интернете по его последовательности переходов по сайтам.


                          UPD: теперь курс — на английском языке под брендом mlcourse.ai со статьями на Medium, а материалами — на Kaggle (Dataset) и на GitHub.


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

                          Читать дальше →
                        • Открытый курс машинного обучения. Тема 2: Визуализация данных c Python


                            Второе занятие посвящено визуализации данных в Python. Сначала мы посмотрим на основные методы библиотек Seaborn и Plotly, затем поанализируем знакомый нам по первой статье набор данных по оттоку клиентов телеком-оператора и подглядим в n-мерное пространство с помощью алгоритма t-SNE. Есть и видеозапись лекции по мотивам этой статьи в рамках второго запуска открытого курса (сентябрь-ноябрь 2017).


                            UPD: теперь курс — на английском языке под брендом mlcourse.ai со статьями на Medium, а материалами — на Kaggle (Dataset) и на GitHub.


                            Сейчас статья уже будет существенно длиннее. Готовы? Поехали!

                            Читать дальше →
                          • Не доверяйте SUDO, она может вас подвести


                              Всем доброго времени суток, в этой статье постараюсь описать некоторые способы обхода ограничений на исполнение команд в ОС Linux, советы по использованию которых можно часто встретить на различных форумах. Демонстрация будет проведена на примере задания Restricted shells с сайта Root-Me. Итак, начнём.
                              Читать дальше →
                              • +89
                              • 38,9k
                              • 8
                            • Как «пробить» человека в Интернет: используем операторы Google и логику

                              • Tutorial

                              В очередной статье нашего цикла публикаций, посвященного интернет-разведке, рассмотрим, как операторы продвинутого поиска Google (advanced search operators) позволяют быстро находить необходимую информацию о конкретном человеке.


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


                              Читать дальше →
                            • 10 подкастов для изучения/продолжения изучения английского языка

                                image

                                Шесть месяцев назад, я сделала для себя очень приятное открытие — подкасты на английском языке для изучающих английский язык. На тот момент у меня были проблемы с аудированием и открытие подкастов очень помогло мне развить аудирование до уровня понимания фильмов и аудиокниг без каких-либо субтитров.

                                Подкасты – это звуковые аудиофайлы в стиле радиопередач в интернете Как правило, подкасты имеют определенную тематику и периодичность издания. Каждый человек, у которого есть смартфон, может прослушивать подкасты. Для прослушивания подкастов у владельцев Apple есть родное приложение, называется «podcasts». Android пользователи могут использовать приложение «Podcast Addict».
                                Читать дальше →
                              • Малоизвестные Git-команды

                                • Перевод


                                У Git есть строгие обязательства по обратной совместимости: многие продвинутые возможности скрыты за разнообразными опциями, а не применяются как поведение по умолчанию. К счастью, Git также поддерживает и алиасы, так что вы можете создавать свои собственные команды, которые делают всю характерную для Git магию. Под катом — подборка полезных (или как минимум забавных) алиасов, определённых в моём .gitconfig.
                                Читать дальше →