• Асинхронность в программировании

      В области разработки высоконагруженных многопоточных или распределенных приложений часто возникают дискуссии об асинхронном программировании. Сегодня мы подробно погрузимся в асинхронность и изучим, что это такое, когда она возникает, как влияет на код и язык программирования, которым мы пользуемся. Разберемся, зачем нужны Futures и Promises и затронем корутины и операционные системы. Это сделает компромиссы, возникающие во время разработки ПО, более явными.


      В основе материала — расшифровка доклада Ивана Пузыревского, преподавателя школы анализа данных Яндекса.


      Читать дальше →
    • Этот ваш хаскель (не) только для факториалов и годен

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


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


        Ну и вдобавок можно легонько выпендриться более эффективным алгоритмом, чем лобовой поиск делителей для каждого числа от $1$ до $n$.

        Читать дальше →
      • Записки Биоробота

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

          Чтобы это понять, я постоянно, каждый день ставлю эксперименты. Над собой, над коллегами, над вами. А потом делаю выводы.

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

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

            «Найди всему причину и ты многое поймешь»


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

            Итак, мы начинаем.
            Читать дальше →
          • Мне не страшен ваш NDA

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

              Это так же как вы неизбежно получите требование вместе с учредительными документами предоставить выписку из ЕГРЮЛ не старше 30 дней. Хотя всё доступно в онлайне, все распечатывают эту выписку из интернета, заверяют её и передают контрагенту, который даже не смотрит её, потому что всё есть в интернете. Ну, вы поняли, короче, отечественную любовь к таинствам.

              image
              Читать дальше →
            • Обработка ошибок в Go 2

                title


                Буквально пару дней назад в Денвере закончилась очередная, уже 5-я по счёту, крупнейшая конференция по Go – GopherCon. На ней команда Go сделала важное заявление – черновики предварительного дизайна новой обработки ошибок и дженериков в Go 2 опубликованы, и все приглашаются к обсуждению.


                Я постараюсь подробно пересказать суть этих черновиков в трёх статьях.


                Как многим, наверняка, известно, в прошлом году (также на GopherCon) команда Go объявила, что собирает отчёты (experience reports) и предложения для решения главных проблем Go – тех моментов, которые по опросам собирали больше всего критики. В течении года все предложения и репорты изучались и рассматривались, и помогли в создании черновиков дизайна, о которых и будет идти речь.


                Итак, начнём с черновиков нового механизма обработки ошибок.

                Читать дальше →
              • Освоение Vuex — с нуля до героя

                Привет, Хабр! представляю вашему вниманию перевод статьи «Mastering Vuex — Zero to Hero» автора Sanath Kumar.


                Официальная документация Vuex определяет его как паттерн управления состоянием + библиотека для приложений Vue.js. Но что это значит? Что такое паттерн управления состоянием?


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


                Читать дальше →
              • Почему не стоит выкидывать Radeon, если ты увлекся машинным обучением?

                  image


                  Свою рабочую станцию мне выдалось собирать, будучи студентом. Достаточно логично, что я отдавал предпочтение вычислительным решениям AMD. потому что это дешево выгодно по соотношению цена/качество. Я долго подбирал компоненты, в итоге уложился в 40к с комплектом из FX-8320 и RX-460 2GB. Сначала этот комплект казался идеальным! Мы с соседом по комнате слегка майнили Monero и мой набор показывал 650h/s против 550h/s на наборе из i5-85xx и Nvidia 1050Ti. Правда, от моего набора в комнате бывало слегка жарковато по ночам, но это решилось, когда я приобрел башенный кулер к CPU.

                  Читать дальше →
                • Шифрование ключа по умолчанию в OpenSSH хуже его отсутствия

                  • Translation
                  Авторы этого материала приводят аргументы против стандартных механизмов шифрования ключа в OpenSSH.


                  Недавно злоумышленники использовали npm-пакет eslint-scope для кражи npm-токенов из домашних каталогов пользователей. В свете этого события мы занялись проверкой других подобных уязвимостей и задумались над тем, как снизить риски и последствия таких инцидентов.

                  У большинства из нас под рукой есть RSA SSH-ключ. Такой ключ наделяет владельца самыми разными привилегиями: как правило, он используется для доступа к production среде или в GitHub. В отличие от nmp-токенов SSH-ключи зашифрованы, и поэтому принято считать, что ничего страшного не произойдет, даже если они попадут не в те руки. Но так ли это на самом деле? Давайте узнаем.
                  Читать дальше →
                • Указатели C как лингвистический парадокс

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

                    void do_something(MyObj *input[], int count)
                    {
                        MyObj **copy = new MyObj*[count];
                        for (int i = 0; i < count; ++i)
                            *copy[i] = *input[i];
                        ...
                    }

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

                    Лет десять назад на одном форуме была загадана детская, вроде, загадка:
                    Для чего еду обеда
                    Людоедоедоеда
                    Пригласила на обед
                    Людоедоедовед?
                    Я хочу показать, что эта загадка имеет самое прямое отношение к C/C++, поскольку тема указателей легко может быть разобрана по аналогии.
                    Читать дальше →
                  • Алгоритм генерирования цветовых палитр

                    • Translation
                    • Tutorial


                    Ищете красивую цветовую палитру для сайта? Недавно установили дома RGB-подсветку, или хотите покрасить комнату в новые цвета? Или купили клавиатуру с цветной подсветкой и хотите использовать её по полной? В какой бы ситуации вы ни оказались, наверняка постоянно настраиваете цветовые схемы.

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

                    Я ошибался. Генерирование палитр из случайных цветов — отстой. Время от времени красивый цвет соседствует с уродливым, грязным оттенком коричневого или жёлтого. Подборки цветов получаются всегда либо слишком тёмные, либо слишком светлые и малоконтрастные, либо наборы состоят из очень похожих цветов. Нужно было придумать другое решение.
                    Читать дальше →
                  • Выключаем Intel ME 11, используя недокументированный режим



                      В ходе исследования внутренней архитектуры Intel Management Engine (ME) 11-й версии был обнаружен механизм, отключающий эту технологию после инициализации оборудования и запуска основного процессора. О том, как мы нашли этот недокументированный режим, и о его связи с государственной программой построения доверительной платформы High Assurance Platform (HAP) мы расскажем в этой статье.

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


                        Только подумайте, какова совокупная вычислительная мощность всех смартфонов в мире? Это огромнейший вычислительный ресурс, который вполне может эмулировать даже работу человеческого мозга. Нельзя, чтобы такой ресурс простаивал без дела, тупо прожигая киловатты энергии на чатики и ленты социальных сетей. Если отдать эти вычислительные ресурсы единому распределённому мировому ИИ, да ещё снабдить его данными с пользовательских смартфонов — для обучения — то такая система может осуществить качественный скачок в данной области.
                        Читать дальше →
                      • Операторам увеличили срок?

                          image

                          Почти полгода минуло с подписания президентом, так называемых, “поправок Яровой”, вызвавших истерику в отрасли телекоммуникаций. Минкомсвязи наконец доработало условия хранения трафика. Собственно все стало только хуже.
                          Читать дальше →
                        • Создайте свои собственные “Нейронные Картины” с помощью Глубокого Обучения

                          • Translation
                          • Tutorial


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

                          Сегодня я собираюсь познакомить вас с тем как это делается. Прежде всего, убедитесь, что у вас обновленная копия Ubuntu (14.04 — та, что использовал я). Вам необходимо иметь несколько гигов свободного пространства на жестком диске и в оперативной памяти, хотя бы не менее 6 GB (больше оперативки для больших выводимых разрешений). Для запуска Ubuntu как виртуальной машины, вы можете использовать Vagrant вместе с VirtualBox.
                          Читать дальше →
                        • Что такое свёрточная нейронная сеть

                          • Translation


                          Введение


                          Свёрточные нейронные сети (СНС). Звучит как странное сочетание биологии и математики с примесью информатики, но как бы оно не звучало, эти сети — одни из самых влиятельных инноваций в области компьютерного зрения. Впервые нейронные сети привлекли всеобщее внимание в 2012 году, когда Алекс Крижевски благодаря им выиграл конкурс ImageNet (грубо говоря, это ежегодная олимпиада по машинному зрению), снизив рекорд ошибок классификации с 26% до 15%, что тогда стало прорывом. Сегодня глубинное обучения лежит в основе услуг многих компаний: Facebook использует нейронные сети для алгоритмов автоматического проставления тегов, Google — для поиска среди фотографий пользователя, Amazon — для генерации рекомендаций товаров, Pinterest — для персонализации домашней страницы пользователя, а Instagram — для поисковой инфраструктуры.


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


                          Задача


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


                          Читать дальше →
                        • Состоялся запуск OpenStreetView



                            После почти года планирования, разработки и тестирования, представители сообщества OSM в компании Telenav представили свободную и открытую платформу OpenStreetView для съёмки и публикации окружающих видов со смартфона. Это замечательная новость для всего сообщества OSM: на свободных картах теперь появятся фотографии окружающей местности, привязанные к картам. Сделано не так красиво, как на проприетарных картах от Google, но это вполне естественно: корпорация Google ежегодно тратит около 1 миллиарда долларов, поддерживая свои карты в актуальном состоянии, чтобы стать эталонным источником карт для всего мира.
                            Читать дальше →
                          • Приглашаем на Go Meetup 6 августа



                              Приглашаем разработчиков, тимлидов и всех, кто так или иначе связан с разработкой на Go, принять участие в Go Meetup, который состоится 6 августа, в субботу, в московском офисе Mail.Ru Group. В программе встречи четыре доклада, подробности о них читайте под катом.
                              Читать дальше →