• Как наблюдать Луну и планеты

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

      image

      Юпитер, Сатурн и Марс являются, пожалуй, самыми доступными планетами, для астрономических наблюдений. Я до сих пор помню трепет и удивление от первого взгляда на Сатурн, который я увидел более 20 лет назад, в 80мм «Большом Школьном Рефракторе». Однако часто поступают сообщения от начинающих любителей, о первых наблюдениях, в частности Юпитера и Марса, в которых присутствует доля разочарования. «Я просто вижу шар света без деталей», или «Я вижу маленький диск, на котором не могу полностью сфокусироваться». «Мой телескоп неисправен?» Именно дня начинающих любителей астрономии может быть полезной данная статья. В ней подробно описываются тонкости и особенности визуальных наблюдений планет Солнечной системы.
      Читать дальше →
    • Цикл уроков по SDL 2.0: урок 5 — Нарезка листа спрайтов

      image

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

      Это продолжение серии переводов туториалов от Twinklebear, в оригинале доступных тут. Перевод отчасти вольный и может содержать незначительные поправки или дополнения от переводчика. Перевод первых двух уроков — за авторством InvalidPointer, а третьего и четвертого — за k1-801.


      Список уроков:


      Читать дальше →
    • Android Camera2 API от чайника

      • Tutorial


      Не так давно я возился со своей роботележкой, пытаясь водрузить на нее ANDROID смартфон. Моей, то есть его задачей, было сделать тележку эволюционно продвинутой. Чтобы она, так сказать, чувствовала мир его сенсорами, смотрела его глазом (камерой), слышала микрофоном и ругалась по громкой связи. Ресурсов AVR, понятное дело, на это уже не хватало и поэтому бывший на телеге микроконтроллер переехал на уровень ниже, куда-то в район спинного мозга управлять моторчиками и разными безусловными рефлексами.

      Но странное дело, когда я начал писать приложение для смартфона, нехорошая IDE ANDROID STUDIO стала постоянно зачеркивать мой код и называть его устаревшим.

      camera = Camera.open();

      Особенно, как вы видите, в тех частях, где я пытался работать с камерой. Это было очень обидно, потому что я прочитал в интернете и усвоил множество уроков работы с андроидом и камерой здесь, здесь, здесь и даже здесь. Там ничего не зачеркивалось. И называлось заурядно Camera API. Все там было просто и логично. Но Google упрямо толкал меня к какому-то Сamera2 API.

      Я туда посмотрел и просто опупел от количества разных коллбэков, билдеров, хэндлеров и луперов на каждую строчку демонстрационного кода. Было совершенно непонятно с какой стороны к этому подступиться, если ты обычный любитель, а не android developer. Причем в сети даже на сегодня статей на тему Сamera2 API чуть, хотя вышло это обновление вроде как, аж четыре года назад. Но всё что я нашел, это статью в Хакере в 2016, пост в трех частях от украинских братьев того же года, двойной пост на Хабре в 2017 и статью Understanding Camera2 от японского мегагика Томоаки Имаи. И это я ещё имею в виду какую-то структурированную и оформленную информацию, а не раскиданные в интернете обрывки кода типа, «смотрите, как я могу» и простыни в стиле, «посмотрите код плиз, у меня ничего не работает».

      А теперь, если вам всё ещё интересно зачем мне потребовалось пилить свой пост на эту тему
      уже в 2019, то добро пожаловать под кат.
      Читать дальше →
    • Установка sdl2 на основные дистрибутивы

      Здравствуй, Хабр. Недавно наткнулся на новый цикл статей по sdl2, но без процедуры установки. Вроде ничего сложного, но если интересно, то давайте вместе пройдемся по граблям, которые могут нас ожидать. Я проведу установку для xcode10 на macOS 10.14.5, code::blocks на Ubuntu 18.04 и Visual Studio 2019 Windows 10. Можно, конечно, было бы использовать clion. Одна ide на всех системах, но мне по какой-то причине не нравится их продукт. Ничего личного, просто кодинг.
      Читать дальше →
      • +13
      • 5.3k
      • 5
    • Уроки по SDL 2: Урок 1 — привет, SDL 2

      Всем привет! Решил вот посмотреть на SDL 2, но на русском ничего толкового не нашел. Решил написать свое, питаясь вдохновением отсюда.

      Установку SDL 2 я пропущу, а начну сразу с написания программ, итак:

      Ваше первое окно



      Читать дальше →
    • OS1: примитивное ядро на Rust для x86. Часть 2. VGA, GDT, IDT

        Первая часть


        Первая статья еще не успела остыть, а я решил не держать вас в интриге и написать продолжение.


        Итак, в предыдущей статье мы поговорили о линковке, загрузке файла ядра и первичной инициализации. Я дал несколько полезных ссылок, рассказал, как размещается загруженное ядро в памяти, как соотносятся виртуальные и физические адреса при загрузке, а так же как включить поддержку механизма страниц. В последнюю очередь управление перешло в функцию kmain моего ядра, написанного на Rust. Пришло время двигаться дальше и узнать, насколько глубока кроличья нора!


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

        Читать дальше →
      • Пишем операционную систему на Rust. Реализация страничной памяти (новый вариант)

        • Translation
        В этой статье разберёмся, как реализовать поддержку страничной памяти в нашем ядре. Сначала изучим различные методы, чтобы фреймы физической таблицы страниц стали доступны ядру, и обсудим их преимущества и недостатки. Затем реализуем функцию преобразования адресов и функцию создания нового сопоставления.

        Этот цикл статей опубликован выложен на GitHub. Если у вас какие-то вопросы или проблемы, открывайте там соответствующий тикет. Все исходники для статьи лежат в этой ветке.

        Ещё одна статья о страничной организации памяти?
        Если вы следите за этим циклом, то видели статью «Страничная память: продвинутый уровень» в конце января. Но меня раскритиковали за рекурсивные таблицы страниц. Поэтому решил переписать статью, применив иной подход для доступа к фреймам.

        Читать дальше →
        • +39
        • 5.2k
        • 1
      • Цикл уроков по SDL 2.0: урок 3 — Библиотеки-расширения SDL

        SDL2

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

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

        Читать дальше →
        • +29
        • 5.7k
        • 3
      • Йода из Кремниевой долины

        • Translation

        Дональд Кнут, мастер алгоритмов, размышляет над 50 годами работы над своим главным творением, книгой «Искусство программирования», которую не прекращает дополнять



        Дональд Кнут в своём доме в Стэнфорде, Калифорния. Жуткий перфекционист, назначил награду за нахождение ошибки в своих книгах.

        Уже полвека стэнфордский специалист по информатике Дональд Кнут, немного напоминающий Йоду – хотя ростом он 193 см и носит очки – занимает доминирующее положение духовного учителя в области алгоритмов.
        Читать дальше →
      • Эксперименты с нейроинтерфейсами на JavaScript

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


        Читать дальше →
        • +24
        • 9.6k
        • 4
      • tig — улучшаем продуктивность работы с git

          Всем привет! Хочу рассказать о консольной утилите, которая значительно увеличила мою продуктивность работы с Git, и, надеюсь, ускорит и вашу также. Называется она tig и была написана канадским программистом Джонасом Фонсека (Jonas Fonseca) ещё в далёком 2006-м году, но по настоящий день она активно развивается и поддерживается в великолепном состоянии. Я хочу показать её функционал (внимание, есть относительно тяжелые gif-ки внутри) и поделиться самыми удобными способами использования.


          Читать дальше →
        • Брет Виктор: Несколько слов о Дугласе Энгельбарте

          • Translation
          image
          Люди часто сравнивают работу Энгельбарта с современными технологиями, но это неправильно. Забудьте про сегодня, просто подумайте о том, что он делал, с точки зрения его целей.

          Дуглас Энгельбарт умер сегодня (July 3, 2013). Его труды всегда было очень сложно интерпретировать и объяснять.

          Многие эксперты, к сожалению, часто упускают суть его работы, потому что они рассматривают всё как техническую задачу. Энгельбарт посвятил свою жизнь проблемам человечества, технологии были лишь частью их решения. Когда я читаю интервью экспертов с Энгельбартом, я представляю, как они брали бы интервью у Джорджа Оруэлла, задавая глубокие вопросы про его пишущую машинку.
          Читать дальше →
        • Муравейник или крепость? Строю дом по цене квартиры. 3 часть. Электроснабжение

            Часть 1. Строительство
            Часть 2. Отопление
            Часть 4. Комфорт дома и гаджеты.

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

            Читать дальше →
          • File management done wrong — Часть 1: Родом из 90х

            • Translation

            Привет, я Григорий, пользуюсь файловыми менеджерами почти 25 лет, и у меня есть что сказать про них — сегодняшний файловый менеджмент сделан плохо. Я попробую показать проблемы в наиболее распространённых прогах и сервисах, и если хотите, считайте эту статью whitepaper.


            Посмотрите на этот скриншот и подумайте что изменилось за последние 20 лет.


            image


            Основные вводные утверждения:


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

            Мейнстримные файловые менеджеры не могут этого, вообще они сосут по всем 3 пунктам. Вот почему:


            1. Дизайнерам нет дела до того что они дизайнят, они не пользуются продуктом. Они просто делают свою работу.
            2. Их боссам нет дела до дизайна. А должно быть?
            3. Обычные пользователи не замечают "мелкие" недостатки. Они просто пользуются.
            Читать дальше →
          • Как писать на Objective-C в 2018 году. Часть 1

              Большинство iOS-проектов частично или полностью переходят на Swift. Swift — замечательный язык, и за ним будущее разработки под iOS. Но язык нераздельно связан с инструментарием, а в инструментарии Swift есть недостатки.


              В компиляторе Swift по-прежнему находятся баги, которые приводят к его падению или генерации неправильного кода. У Swift нет стабильного ABI. И, что очень важно, проекты на Swift собираются слишком долго.


              В связи с этим существующим проектам может быть выгоднее продолжать разработку на Objective-C. А Objective-C уже не тот, что был раньше!


              В этом цикле статей мы покажем полезные возможности и улучшения Objective-C, с которыми писать код становится намного приятнее. Каждый, кто пишет на Objective-C, найдет для себя что-нибудь интересное.


              Читать дальше →
            • Создаём простую нейросеть

              • Translation
              • Tutorial


              Перевод Making a Simple Neural Network

              Что мы будем делать? Мы попробуем создать простую и совсем маленькую нейронную сеть, которую мы объясним и научим что-нибудь различать. При этом не будем вдаваться в историю и математические дебри (такую информацию найти очень легко) — вместо этого постараемся объяснить задачу (не факт, что удастся) вам и самим себе рисунками и кодом.
              Начнем.
            • Пишем простой транслятор на Лиспе — I

                Давайте попробуем написать на Лиспе… транслятор простого императивного языка. Нет-нет, я не ошибся – именно транслятор. Транслировать он будет в Лисп-код. А дальше этот код может быть выполнен Лисп-системой.


                Здесь бесценную услугу нам окажет то обстоятельство, что в Лиспе нет барьера между кодом и данными (это редкое свойство некоторых языков программирования называется “гомоиконность”). Но и изобразительные возможности Лиспа тоже сыграют не последнюю роль.


                В качестве реализации я буду использовать HomeLisp. Желающие смогут адаптировать этот проект под Common Lisp. Скажу сразу – применительно к рассматриваемой задаче существенная разница между Common Lisp и HomeLisp состоит только в обработке строк и файлов.


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


                Предлагаемая вашему вниманию тема послужила основой для моей мастерской на знаменитой Новосибирской ЛШЮП-2018. С результатами мастерской можно ознакомиться здесь. А далее я излагаю свой подход. Предполагаю, что читатель знаком с языком Лисп.


                Приступаем


                Начнем с “простого императивного языка”, который мы будем транслировать в Лисп.
                Язык будет обрабатывать только числовые данные. Код на этом языке состоит из функций (процедур, возвращающих значения). Среди этих функций одна должна называться main. Именно с этой функции начинается выполнение кода. Хотя зачем так себя связывать? Пишем функции на императивном языке, они транслируются в Лисп и могут использоваться вместе с лисповскими функциями. Но не будем забегать вперед...

                Читать дальше →
              • Пишем простой транслятор на Лиспе — II

                  Предыдущая статья

                  Реализуем оператор присвоения


                  А теперь научим транслятор обрабатывать оператор присвоения. И здесь перед нами встает классическая задача – обеспечить вычисление алгебраической формулы, заданной в привычной для нас со школьных лет записи. Если бы мы делали интерпретатор, то нам бы понадобилось вычислять значение формулы. В нашем же случае вычислять (во время выполнения) будет ядро Лиспа. А нам нужно всего лишь преобразовать формулу из привычной нам записи в лисповскую.
                  Привычная нам запись называется “инфиксной нотацией” (знак операции располагается между операндами). В Лиспе знак операции располагается перед операндами (такая запись называется “префиксной нотацией”). Таким образом, наша задача состоит в преобразовании инфиксной формы в префиксную.

                  Решать эту задачу можно разными путями…
                  Читать дальше →
                  • +18
                  • 2.2k
                  • 4
                • Пишем простой транслятор на Лиспе — III

                    Предыдущая статья

                    Ошибки, Ошибки, Ошибки…


                    Хорошая программа должна быть защищена от ошибок пользователя. Это совершенно бесспорно. Ошибки нужно обрабатывать, а еще лучше – предупреждать (профилактика всегда лучше лечения!). Высший пилотаж – так выстроить диалог с пользователем, чтобы последний просто не мог совершить ошибку.
                    Читать дальше →
                    • +18
                    • 2.4k
                    • 5