• LLVM: компилятор своими руками. Введение

      Представим себе, что в один прекрасный день вам пришла в голову идея процессора собственной, ни на что не похожей архитектуры, и вам очень захотелось эту идею реализовать «в железе». К счастью, в этом нет ничего невозможного. Немного верилога, и вот ваша идея реализована. Вам уже снятся прекрасные сны про то, как Intel разорилась, Microsoft спешно переписывает Windows под вашу архитектуру, а Linux-сообщество уже написало под ваш микропроцессор свежую версию системы с весьма нескучными обоями.
      Однако, для всего этого не хватает одной мелочи: компилятора!
      Да, я знаю, что многие не считают наличие компилятора чем-то важным, считая, что все должны программировать строго на ассемблере. Если вы тоже так считаете, я не буду с вами спорить, просто не читайте дальше.
      Если вы хотите, чтобы для вашей оригинальной архитектуры был доступен хотя бы язык С, прошу под кат.
      В статье будет рассматриваться применение инфраструктуры компиляторов LLVM для построения собственных решений на её основе.
      Область применения LLVM не ограничивается разработкой компиляторов для новых процессоров, инфраструктура компиляторов LLVM также может применяться для разработки компиляторов новых языков программирования, новых алгоритмов оптимизации и специфических инструментов статического анализа программного кода (поиск ошибок, сбор статистики и т.п.).
      Например, вы можете использовать какой-то стандартный процессор (например, ARM) в сочетании с специализированным сопроцессором (например, матричный FPU), в этом случае вам может понадобиться модифицировать существующий компилятор для ARM так, чтобы он мог генерировать код для вашего FPU.
      Также интересным применением LLVM может быть генерация исходных текстов на языке высокого уровня («перевод» с одного языка на другой). Например, можно написать генератор кода на Verilog по исходному коду на С.



      КДПВ

      Читать дальше →
    • Постановка задачи компьютерного зрения


        Последние лет восемь я активно занимаюсь задачами, связанными с распознаванием образов, компьютерным зрением, машинным обучением. Получилось накопить достаточно большой багаж опыта и проектов (что-то своё, что-то в ранге штатного программиста, что-то под заказ). К тому же, с тех пор, как я написал пару статей на Хабре, со мной часто связываются читатели, просят помочь с их задачей, посоветовать что-то. Так что достаточно часто натыкаюсь на совершенно непредсказуемые применения CV алгоритмов.
        Но, чёрт подери, в 90% случаев я вижу одну и ту же системную ошибку. Раз за разом. За последние лет 5 я её объяснял уже десяткам людей. Да что там, периодически и сам её совершаю…

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

        Тривиальная мысль. Но все ошибаются. Абсолютно все. В статье я приведу несколько примеров таких ситуаций. Когда задача поставлена плохо, когда хорошо. И какие подводные камни вас ждут в формировании ТЗ для систем компьютерного зрения.
        Читать дальше →
      • Слон и Моська, или подключение LCD к Attiny13A

          Вновь приветствую читателей «Хабра»!

          Присказка.
          Честно сказать, хотел написать статью несколько другого содержания, которая затрагивала бы тему применения и использования сдвиговых регистров, когда сам, даже не думал, что в моих проектах это станет необходимым.
          Но так однажды случилось, что я решил втянуть в область программирования микроконтроллеров своего друга, который во многих вопросах с легкостью разберется сам, а в других....
          Читать дальше →
        • Съёмка показаний счетчика на телефон с последующим распознаванием

          Вступление


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

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

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

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

          Конечно, после простого выкладывания показаний в Интернет я решил не останавливаться на достигнутом и замутил ещё распознавание показаний и графическое представление, об этом читайте в части 2 данного топика.
          Читать дальше →
        • Как заработать очки, даже не запуская игру

            image

            Как-то вечером, сидя за компьютером, я наткнулся на одну инди-игру под названием «Shoot First» (игру можно скачать абсолютно бесплатно с сайта автора, а за донат любого размера вы получите специальную версию с двумя новыми видами оружия и ещё одним видом уровней). Геймплей её довольно незамысловат — игроку необходимо бегать по этажам в поисках прохода на следующий уровень, при необходимости собирая различные предметы (карты, ключи, etc) и попутно убивая встретившихся на его пути врагов. В общем, этакий action roguelike. Несмотря на кажущуюся простоту, игра меня довольно сильно зацепила, и я потратил не один час, пытаясь добраться как можно дальше и заработать как можно больше очков.

            Кстати, об очках. После смерти персонажа и ввода имени игра отображает онлайн-таблицу рекордов:

            image

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

            Как протекал процесс, и что из этого вышло, читайте под катом (осторожно, много скриншотов).
            Читать дальше →
          • Детальный анализ Хабрахабра с помощью языка Wolfram Language (Mathematica)


              Скачать пост в виде документа Mathematica, который содержит весь код использованный в статье, вместе с дополнительными файлами, можно здесь.

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

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

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

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

                Посмотрите на это фото.



                Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

                Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

                Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:
                Осторожно, тяжелые гифки
              • Лучшие компьютерные игры всех времен и народов по версии хабрасообщества 2013 года



                  Данный пост − попытка определить лучшие компьютерные игры всех времен и народов. Конечно, по версии нашего хабрасообщества. Ну и, разумеется, с годами предпочтения меняются, поэтому версия 2013 года.

                  Правила простые: в комментариях первого уровня хабраюзер пишет название любимой игры. Разрешается добавить небольшую картинку (высотой до 100 пикселей). Разрешается сделать небольшое описание, строчки на две, лучше со ссылкой на ресурс, где игра хорошо описана. В комментарий второго уровня к играм просьба добавлять интересные факты об игре, что должно прибавить плюсов.

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

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

                  Мы построим свой музей компьютерных игр, Юзернейм!
                  Читать дальше →
                • Красивая консоль для работы с git под Windows

                  Возможно кого-то, также как и меня, некоторые обстоятельства принуждают использовать Windows. И, возможно, также хочется несмотря на это видеть красивую, изящную консоль, например как в Ubuntu. Правда, на скорости работы, к сожалению, это не отобразится.

                  В итоге терминал для git у нас будет выглядеть примерно вот так:


                  Читать дальше →
                • Мир IT — это склеп


                    Как велик и прекрасен мир информационных технологий! Каждые пару недель я читаю новости в духе «Уже существует 1 миллиард веб-страниц!», «У каждой группы детского сада „Алёнушка“ теперь есть свой сайт!», «IP адреса заканчиваются по третьему кругу!». Кругом школьникам раздают айпады, все африканские дети давно сидят на 100-долларовых ноутбуках, в продвинутой Европе в твиттер пишут голуби и мосты. В общем, информатизация захлестывает всё и вся, до самых тайных секретов сегодня буквально гуглом подать! Благодаря википедии можно не выглядеть дураком на форумах, социальные сети удачно замаскировали социопатов под экстравертов, для других задач тоже «есть своё приложение».
                    В интернете нынче можно и работать, и развлекаться. Интернет позволил пареньку из сибирской деревни работать над прошивкой адронного коллайдера, тысячи литературных талантов раскрылись благодаря ЖЖ, мир увидел своих героев на ютюбе. Неправда ли, прекрасно? Неправда.
                    Читать дальше →
                  • Готовимся к ядерной войне

                      image

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

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


                        Приятно баг исправить поутру,
                        И целый день убить на развлеченья,
                        Почитывая фишки-точка-ру
                        И потребляя кофе и печенье.

                        Приятно баг исправить и в обед
                        в прикуску к супу, чипсам и котлете!
                        И думая, что даже в сорок лет
                        не так уж плохо жить на этом свете!

                        Приятно баг исправить перед сном,
                        и больше ничего уже не править.
                        Короче, ясно все, как божьим днем —
                        ПРИЯТНО, БЛЯ, ПРИЯТНО БАГ ИСПРАВИТЬ!

                        © Михаил Черняховский
                      • Жизнь с планшетом или список приложений для Android

                        Привет!

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

                        Пост написан для устройств на базе операционной системы Android, но думаю и в других системах есть аналоги.
                        Читать дальше →
                      • Игру Portal 2 используют для тестирования кандидатов на вакансию

                          image

                          Довольно молодая компания WibiData, специализирующаяся на системах управления данными, придумала очень интересный способ тестирования кандидатов на собеседованиях. Они предлагают проходить специальные уровни в игре Portal 2. Как пишет игромания, глава компании Кристоф Бисцилия признался, что на идею его навел случай, когда юноша с помощью мода Portal 2 сделал девушке предложение. «Многослойные головоломки Portal 2, по моим ощущениям, тренируют те же отделы мозга, которые работают у программистов и тестеров», — объяснил Кристоф.
                          Читать дальше →
                        • 2 Floppy дисковода научили играть «Имперский Марш» из «Звездных Воин»

                          • Translation


                          Нет ничего нового и все очень просто.
                          Звук получается из-за движений магнитной головки, приводимой в действие шаговым моторчиком. Для достижения нужного звука, магнитная головка должна передвигаться с определенной частотой.
                          У FDD достаточно простое устройство — инструкции можно найти здесь (eng).
                        • Фильмы IT-тематики

                            imageВ свое время, в 1995-ом году, на меня произвел впечатление фильм «Хакеры». Можно
                            сказать, он стал мотиватором моей дальнейшей ИТ-карьеры. Далеко не эталон киноискусства, однако
                            стремление стать похожим на героев фильма, продолжилось в самообразовании. Далее первый выклянченный компьютер, первые строчки кода, начало проб и ошибок. Когда уже были написаны эти самые «хэлоу-ворды», «калькуляторы», затем испробованы несколько *nix'ов — на руки попалась болванка с «Antitrust». В одноголосном переводе и гиблом качестве. К слову, это не помешало, пересмотреть фильм пару десятков раз. Что послужило более зрелому стремлению, чем быть всемогущим кул-хакером. Под катом, перечислю увиденные мной фильмы IT-тематики, с кратким описанием. В основном из двухтысячных. Неувиденное или забытое, будем добавлять.

                            Читать дальше →
                          • Сверхбыстрое распознавание речи без серверов на реальном примере

                            • Tutorial

                            В этой статье я подробно расскажу и покажу, как правильно и быстро прикрутить распознавание русской речи на движке Pocketsphinx (для iOS порт OpenEars) на реальном Hello World примере управления домашней техникой.
                            Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность, которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit.
                            К статье я также прилагаю все исходники программы и саму сборку под Android.

                            Прикручиваем Pocketsphinx к своему Андроиду
                          • Про котиков, собак, машинное обучение и deep learning

                            image
                            «В 1997 году Deep Blue обыграл в шахматы Каспарова.
                            В 2011 Watson обставил чемпионов Jeopardy.
                            Сможет ли ваш алгоритм в 2013 году отличить Бобика от Пушистика?»


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

                            И все-таки — откуда вообще берется такая постановка вопроса? Почему задачи на классификацию, которые легко решает четырехлетний ребенок, долгое время были (и до сих пор остаются) не по зубам программам? Почему распознавать предметы окружающего мира сложнее, чем играть в шахматы? Что такое deep learning и почему в публикациях о нем с пугающим постоянством фигурируют котики? Давайте поговорим об этом.
                            По заветам издателей Стивена Хокинга - без формул