• Сборка PC AT-совместимого компьютера с процессором 80286

      Преамбула

      В детстве у меня не было велосипеда…

      Нет, не совсем так. В детстве я вволю наигрался кустарными «Спектрумами», в школе застал КУВТ (MSX-2), а в ВУЗе − ДВК (почти что легендарная PDP-11). Благодаря этому я не терял времени даром. И когда у меня появилась возможность обзавестись собственным серьёзным компьютером, я был уже тёртым калачом. Я был в курсе событий в мире IT. Я знал, что Intel и 32 бита победили. С трудом преодолев ограничения бюджета (голодные 90-е, студенческие подработки плюс займы у родни), я зашёл в мир PC с козыря − 386SX.

      Козырь, конечно, был мелковат: «четвёрки» тогда разлетались, как горячие пирожки, на горизонте маячил Pentium, а с другого краю Эппл спешно менял 68000 на PowerPC. Тем не менее, новым операционным системам, средам разработки и даже играм всё чаще требовались пресловутые 32 бита, и IA-32 + 4 мегабайта стали для меня своего рода пропуском в клуб, пусть и не VIP. Я научился клепать базы данных на Delphi, настраивать сеть на NetWare и FreeBSD, открыл для себя Интернет… В общем, я был рад тому, что не взял тогда «с рук», за полцены, изрядно подержанную «двойку».

      Однако сейчас, спустя почти 30 лет, меня заела то ли ностальгия, то ли любопытство, а может, это называется «гештальт»? Или я чего-то не договариваю… В общем, под занавес 2020 года я присоединился к ретро-компьютинговому сообществу, собрав свой первый велосипед двести восемьдесят шестой.

      Дисклеймер

      В статье я использовал несколько фотографий отвратительного качества собственного авторства. Что поделать, чукча − не фотограф, а в интернете подходящих изображений зачастую просто нет. Так что заранее прошу прощения за неудобства.

      Читать далее
    • Как бы я изучал Data Science, если бы начал пару лет назад, или Руководство по эффективному изучению науки о данных

      • Перевод
      Когда я только начал своё путешествие к науке о данных, я потратил много времени на то, чтобы понять, с чего начать, что я должен узнать в первую очередь и какие ресурсы должен использовать. За последние два года я узнал несколько вещей, о которых хотел знать раньше, например о том, стоит ли сначала сосредоточиться на программировании или статистике, какие ресурсы я должен использовать для изучения новых навыков, как я должен подходить к изучению этих навыков и так далее. Таким образом, эта статья написана, чтобы дать направления и идеи для тех, кто изучает Data Science.

      Приятного чтения!
      • +35
      • 16k
      • 3
    • Нейронные сети для начинающих. Часть 1

      image

      Привет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.

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

      image


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


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


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

      Читать дальше →
      • +32
      • 9,1k
      • 8
    • Основы нейросетей в 100 строках кода (часть 1)

      • Перевод

      В трёх частях этой статьи мы:


      • Напишем нейросеть с нуля на Python и обучим её алгоритмом градиентного спуска.
      • Применим её к датасету The Wisconsin Cancer Data-set и предскажем по 9 различным признакам, является ли опухоль доброкачественной или злокачественной.
      • Подробнее исследуем, как работает градиентный спуск и метод обратного распространения ошибки.
      • Рассмотрим основы и изучим более сложные идеи. В части 1 мы разберёмся с архитектурой нашей нейросети, в части 2 напишем её на Python и глубже посмотрим на обратное распространение и градиентный спуск, а в части 3 применим её к The Wisconsin Cancer Data-set.


      Читать дальше →
      • +7
      • 7,6k
      • 8
    • MVVM на основе Combine в UIKit и SwiftUI приложениях для UIKit разработчиков



        Мы знаем, что ObservableObject классы с его @Published свойствами созданы в Combine специально для View Model в SwiftUI. Но в точности ту же самую View Model можно использовать и в UIKit для реализации архитектуры MVVM, хотя  в этом случае нам придется вручную «привязать» (bind) UI элементы к @Published свойствам View Model. Вы удивитесь, но с помощью Combine это делается парой строк кода. Кроме того, придерживаясь этой идеологии при проектировании UIKit приложений, вы в дальнейшем безболезненно перейдете на SwiftUI.

        Цель этой статьи  состоит в том, чтобы на примитивно простом примере показать, как можно элегантно реализовать MVVM архитектуру в UIKit с помощью Combine. Для контраста покажем использование той же самой View Model в SwiftUI.

        В статье будут рассмотрены два простейших приложения, позволяющих выбирать с сайта OpenWeatherMap самую свежую информацию о погоде для определенного города. Но UI одного из них будет создан с применением SwiftUI,  а другого — с помощью UIKit. Для пользователя эти приложения будут выглядеть почти одинаковыми.



        Код находится на Github.
        Читать дальше →
      • Знакомимся с методом обратного распространения ошибки

        • Перевод
        Всем привет! Новогодние праздники подошли к концу, а это значит, что мы вновь готовы делиться с вами полезным материалом. Перевод данной статьи подготовлен в преддверии запуска нового потока по курсу «Алгоритмы для разработчиков».

        Поехали!






        Метод обратного распространения ошибки – вероятно самая фундаментальная составляющая нейронной сети. Впервые он был описан в 1960-е и почти 30 лет спустя его популяризировали Румельхарт, Хинтон и Уильямс в статье под названием «Learning representations by back-propagating errors».
        Читать дальше →
      • Письмо начинающему изучать Data Science

        Я бы хотел получить такое письмо три года назад, когда только начинал изучать Data Science (DS). Чтобы там были необходимые ссылки на полезные материалы. Статья не претендует на полноту охвата необъятной области DS. Однако для начинающего специалиста будет полезна.


        Нейронные сети – это...

        Читать дальше →
      • 52 датасета для тренировочных проектов

        • Перевод
        1. Mall Customers Dataset — данные посетителей магазина: id, пол, возраст, доход, рейтинг трат. (Вариант применения: Customer Segmentation Project with Machine Learning)
        2. Iris Dataset — датасет для новичков, содержащий размеры чашелистиков и лепестков для различных цветков.
        3. MNIST Dataset — датасет рукописных цифр. 60 000 тренировочных изображений и 10 000 тестовых изображений.
        4. The Boston Housing Dataset — популярный датасет для распознавания паттернов. Содержит информацию о домах в Бостоне: количество квартир, стоимость аренды, индекс преступлений.
        5. Fake News Detection Dataset — содержит 7796 записей с разметкой новостей: правда или ложь. (Вариант применения с исходником на Python: Fake News Detection Python Project )
        6. Wine quality dataset — содержит информацию о вине: 4898 записей с 14 параметрами.

        Читать дальше →
        • +30
        • 18,3k
        • 8
      • Работа с Facebook API из приложений UWP


          Люди, как правило, существа очень забывчивые. Для того чтобы не заставлять пользователей запоминать новый пароль при регистрации в вашем приложении UWP, можно использовать аккаунты сторонних платформ. При этом, можно не заставляя заполнять длиннющие анкеты получить доступ к какой-либо полезной информации и характеристикам пользователя. О том, что публикация контента в социальных сетях повышает конверсию даже и упоминать не буду, это и так понятно. Если хотите разобраться, как работать с самой пока что популярной сетью в мире из C#/XAML приложений UWP, не куря мануалы, то добро пожаловать под кат.
          Читать под cut-ом
        • Логика сознания. Часть 9. Искусственные нейронные сети и миниколонки реальной коры

            Приходит ветеринар к терапевту. Терапевт: — На что жалуетесь? Ветеринар: — Нет, ну так каждый может!

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

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

            • Перевод

            Рекуррентные нейронные сети


            Люди не начинают думать с чистого листа каждую секунду. Читая этот пост, вы понимаете каждое слово, основываясь на понимании предыдущего слова. Мы не выбрасываем из головы все и не начинаем думать с нуля. Наши мысли обладают постоянством.

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

            Решить эту проблемы помогают рекуррентые нейронные сети (Recurrent Neural Networks, RNN). Это сети, содержащие обратные связи и позволяющие сохранять информацию.
            Читать дальше →
            • +37
            • 98,5k
            • 2
          • 19 советов по повседневной работе с Git

            • Перевод
            • Tutorial


            Если вы регулярно используете Git, то вам могут быть полезны практические советы из этой статьи. Если вы в этом пока новичок, то для начала вам лучше ознакомиться с Git Cheat Sheet. Скажем так, данная статья предназначена для тех, у кого есть опыт использования Git от трёх месяцев. Осторожно: траффик, большие картинки!

            Содержание:
            1. Параметры для удобного просмотра лога
            2. Вывод актуальных изменений в файл
            3. Просмотр изменений в определённых строках файла
            4. Просмотр ещё не влитых в родительскую ветку изменений
            5. Извлечение файла из другой ветки
            6. Пара слов о ребейзе
            7. Сохранение структуры ветки после локального мержа
            8. Исправление последнего коммита вместо создания нового
            9. Три состояния в Git и переключение между ними
            10. Мягкая отмена коммитов
            11. Просмотр диффов для всего проекта (а не по одному файлу за раз) с помощью сторонних инструментов
            12. Игнорирование пробелов
            13. Добавление определённых изменений из файла
            14. Поиск и удаление старых веток
            15. Откладывание изменений определённых файлов
            16. Хорошие примечания к коммиту
            17. Автодополнения команд Git
            18. Создание алиасов для часто используемых команд
            19. Быстрый поиск плохого коммита

            Читать дальше →
          • Продвинутый Debug

            Debug Area — полезная функция в работе iOS разработчика в Xcode. Как только мы начинаем осваивать разработку под iOS, и пытаемся отойти от привычного и любимого print метода, и найти более быстрые и удобные методы понимания состояния системы в определенный период мы начинаем изучать область дебага (Debug Area).

            Скорее всего, в Debug панель ваш взгляд упадёт до того, как вы будете понимать, что именно там происходит. При первом падении приложения нижнее меню открывается автоматически, оно изначально может послужить помощью для понимания проблемы (Вспомним старую добрую “Fatal error: Index out of range”), в основном в самом начале вы не будете понимать, что от нас хочет Xcode и приметесь гуглить ошибки, но по ходу роста всё больше и больше информации станет понятной.

            С самого начала программист старается оптимизировать свою работу. Для этого мы стремимся понять в какой момент наша программа перешла в некорректное состояние. И тут в зависимости от точки в которой находится эволюция программиста, методы могут разниться. Сначала как правильно Debug осуществляется методом “print()”, потом идёт расстановка Breakpoints и вызов методов “po”, далее ознакомление с Debug Variable Input (области рядом с консолью в Xcode), а далее приходит понимание и способов компиляции кода в процессе остановки на Breakpoint методов — “expression” (По крайней мере, такая была эволюция у меня).

            Давайте попробуем разные способы которые нам помогут понять и изменить состояние нашего приложения. Самые простые вроде “print()”, и “po” рассматривать не будем, я думаю, вы и так понимаете их суть и умеете применять.

            Создадим простое приложение с одним экраном в котором будем всего один тип ячеек (TableViewcell) c двумя элементами внутри: UIImageView и UILabel. В ячейках будем писать её порядковый номер, а в картинку ставить либо image1, либо image2.

            Метод tableViewCellForRowAtIndexPath будет создавать для нас ячейки, проставлять данные и возвращать:

            image
            Читать дальше →
            • +19
            • 5,8k
            • 3
          • Звуки для UI: подборка тематических ресурсов

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

              Другие наши подборки:


              Читать дальше →
              • +24
              • 10,7k
              • 2
            • Современный валютный рынок

                Маринус ван Реймерсвале. Меняла и его жена. 1539 г. Музей Прадо, Мадрид.
                Маринус ван Реймерсвале. Меняла и его жена. 1539 г. Музей Прадо, Мадрид.

                Я начал работать в Deutsche Bank программистом на Java в 2009-м году (последствия кризиса, чудо на Гудзоне, «Миллионер из трущоб», свиной грипп, поражение сборной в Мариборе). На собеседовании мне сообщили, что я буду работать в проекте AutobahnFX.

                FX? Foreign eXchange? Мои знания о валютном рынке не отличались от знаний среднестатистического обывателя. На углу возле дома есть обменник, но от разницы курсов покупки и продажи дёргается глаз. В вагонах метро висит реклама форекс-контор «Чувствуешь разницу? На этом можно заработать!» Газеты описывают инвестиционные банки то как всезнающих спекулянтов, предсказывающих курсы валют на годы вперёд, то как сборище бездарных рвачей, обрушивших мировую экономику. «Ну ладно, — подумал я, — разберёмся в процессе».

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

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




                Решить, какую структуру данных использовать для представления заданного набора значений, часто бывает намного сложнее, чем кажется. Поскольку каждый тип структур данных оптимизирован для определенного числа вариантов использования, выбор правильного соответствия для каждого набора данных часто может оказать большое влияние на эффективность нашего кода.
                Читать дальше →
              • Язык программирования Swift на Raspberry Pi

                • Перевод

                Raspberry PI 3 Model B+

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

                Официальный язык программирования «малинки» — Python. Хотя Python достаточно прост в использовании, ему не хватает типобезопасности, плюс он потребляет много памяти. Swift, напротив, имеет ARC-управление памятью и почти в 8 раз быстрее Python. Ну а поскольку объем ОЗУ и вычислительные возможности процессора Raspberry Pi ограничены, использование языка вроде Swift позволяет максимально использовать потенциал железа этого мини-ПК.
                Читать дальше →
                • +26
                • 12,2k
                • 9
              • iOS Responder Chain или Что спрашивают на собеседовании

                  image


                  Какая разница между первым и вторым примером?

                  За что отвечает таргет?

                  В каком случае вызывается метод при нажатие кнопки?

                  TL;DR


                  При нажатии на кнопку наш метод вызывается в обоих случаях.


                  Только в первом примере UIKit попытается вызвать метод в назначенном таргете(у нас это ViewController). Будет краш, если этого метода не существует.


                  Во втором же примере используется iOS Responder Chain, UIKit будет искать самого ближнего UIResponder-a у которого есть данный метод. Краша не будет, если наш метод не найден.


                  UIViewController, UIView, UIApplication наследуют от UIResponder.

                  Читать дальше →
                • Структуры данных с примерами на языке Swift. Часть первая: связаный список

                  Предисловие


                  Кто из iOS разработчиков не мечтал о работе в престижном месте вроде Yandex или Avito. К сожалению, про мечты на собеседованиях спрашивает только hr, а вот интервьюеры из числа разработчиков задают вопросы немного другого характера. Чем отличается reference type от value type или bounds от frame? Вопросы, который каждый из нас слышал не раз на собеседованиях. Если ваше интервью начинается с вопроса про отличия значимого и ссылочного типов или в духе “расскажите ка нам про SOLID”, то вы явно на пути трудоустройства в ООО “Так себе перспективы“.
                  Читать дальше →