• Кроссплатформенная новогодняя демка на .NET Core и Avalonia

      "ААА! Пришло время переписывать на .NET Coreǃ", говорили они, WPF в комментариях обсуждали. Так давайте же проверим, можно ли написать кросс-платформенное GUI приложение на .NET / C#.



      Новогоднее настроение навеяло идею сделать анимацию падающего снега. Были такие демки под DOS, горящий огонь, фракталы, снежок, падающий на ёлочку, и так далее.


      Как увидим ниже, это не только весело, но и позволит испытать ключевой функционал UI фреймворка. Поехали!

      Читать дальше →
    • Habr, iXBT.Live, Pikabu и Яндекс.Дзен: сравнение четырех площадок и их ППА через один пост

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


        Кому эта статья может быть интересна? Тем, кто связан с контентом, IT, ведет блог на одной из них и присматривается к другим.
        Читать дальше →
      • HP Nanoprocessor, часть II: реверс-инжиниринг цепей на основе фотошаблонов

        • Translation
        Первая часть

        В 1974 году Hewlett-Packard разработала микропроцессор для управления различными функциями в собственных продуктах – от дисководов для гибких магнитных дисков до вольтметров. Этот простой процессор не дотягивал до обычных микропроцессоров – он даже не поддерживал сложение или вычитание – поэтому его назвали «нанопроцессор». Ключевыми особенностями Nanoprocessor были низкая стоимость и высокая скорость работы: по сравнению с современным ему Motorola 6800 стоимостью $360, Nanoprocessor стоил $15, а операции управления выполнял на порядок быстрее.

        Хоть у него и не было операции сложения, Nanoprocessor мог (медленно) складывать числа путём повторного инкремента или декремента (операций, которые он поддерживал). В иных случаях, например, с вольтметром от Hewlett-Packard, к продукту добавляли чипы АЛУ (74LS181), которые занимались быстрым сложением – доступ к ним осуществлялся, как к устройствам ввода/вывода. Естественно, будучи полным по Тьюрингу, Nanoprocessor теоретически мог делать всё – от вычисления функций с плавающей запятой до запуска игры Crysis; это просто было бы очень медленно.

        Фотошаблон процессора можно скачать по ссылке (122 МБ PSD).



        HP Nanoprocessor, номер части 1820-1691. Напряжение смещения, -2,5 В, написано от руки – оно меняется от экземпляра к экземпляру. Последняя цифра номера детали тоже написана от руки, и обозначает скорость работы чипа.
        Читать дальше →
        • +13
        • 2.7k
        • 3
      • Операционные усилители: 10 схем на (почти) все случаи жизни

          Всем привет!

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


          Читать дальше →
        • Интеграция в проект LVGL графической библиотеки для микроконтроллеров

            LVGL — Light and Versatile Graphics Library также известная как LittleVGL.


            Библиотека поддерживает большое количество микроконтроллеров, таких как STM32, ESP32 и другие. Мне пока удалось запустить полноценную демо программу на ESP32 и STM32f429 Discovery. Библиотека открытая, поддерживает большое количество графических элементов с Dark and Light темами. Распространяется под MIT license. Можно свободно использовать даже в коммерческих продуктах. Можно посмотреть интерактивное Online Demo без установки на устройство
            Читать дальше →
          • Google бесплатно изготовит любой опенсорсный чип на техпроцессе 130 нм

              Если вы разработали собственную микросхему и думаете, как её физически изготовить, Google предлагает сделать её бесплатно.

              Есть несколько оговорок.

              Во-первых, дизайн микросхемы должен быть общедоступным и открытым: вы отправляете свою работу на производство, прислав URL соответствующего репозитория Git.

              Во-вторых, микросхема изготавливается по техпроцессу 130 нм двадцатилетней давности (на нём делались Pentium III и 4, например). Впрочем, примерно по таким нормам до сих пор работают многие производства электроники, так что нельзя назвать техпроцесс полностью устаревшим.
              Читать дальше →
            • Основные linux-команды для новичка

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

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

                Я дам кратенькое описание основных команд с примерами (примеры я все проверяла на cent os, red hat based системе) + ссылки на статьи, где можно почитать подробнее. Если же хочется копнуть еще глубже, то см раздел «Книги и видео по теме». А еще комментарии к статье, там много полезного написали)
                Читать дальше →
              • Введение в систему модулей Go

                • Translation

                Грядущий релиз версии 1.11 языка программирования Go принесет экспериментальную поддержку модулей — новую систему управления зависимостями для Go. (прим.перев.: релиз состоялся)


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


                Итак, вот, что мы будем делать: создадим новый пакет и потом сделаем несколько релизов, чтобы посмотреть, как это работает.

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

                  В 1984-ом году вышла культовая книга Стивена Леви “Хакеры: герои компьютерной революции”. Существует любительский русский перевод, но он далёк от идеала. Я было взялся исправлять неточности в нём, положив рядом английский оригинал (кстати, и он не без греха), да забросил после второй главы. Так или иначе, хочу обратить ваше внимание на фрагмент (можно прочитать его в виде отдельной статьи), посвящённый подпрограмме печати числа в десятичной системе. Насколько можно уменьшить такую программу? Каков предел?
                  Читать дальше →
                • 13 инструментов для обработки текста в командной оболочке

                  • Translation
                  • Tutorial
                  Здесь представлен фрагмент будущей книги «Основные инструменты и практики для начинающего разработчика программного обеспечения» Бальтазара Рубероля и Этьена Броду. Книга должна помочь образованию подрастающего поколения разработчиков. Она охватит такие темы, как освоение консоли, настройка и эффективная работа в командной оболочке, управление версиями кода с помощью git, основы SQL, инструменты вроде Make, jq и регулярные выражения, основы сетевого взаимодействия, а также лучшие практики разработки программного обеспечения и совместной работы. В настоящее время авторы упорно работают над этим проектом и приглашают всех поучаствовать в списке рассылки.

                  Содержание


                  Читать дальше →
                • Как работает тайловый растеризатор

                  • Translation
                  Если вы следили за моей серией постов «Растеризация за одни выходные», но не компилировали и не запускали демо, то для вас станет большим сюрпризом, если я скажу, насколько медленными они оказались. В конце серии постов я упомянул существующие техники, позволяющие ускорить мучительно тормозной растеризатор. Теперь настало время двигаться дальше и посмотреть, как они применяются на практике.

                  Как часть этого проекта я реализовал Tyler — тайловый растеризатор, который мы проанализируем в данной статье. Моей целью при разработке этого проекта были масштабируемость. настраиваемость и понятность растеризатора для людей, которые хотят немного больше понять в этой теме и поэкспериментировать с ней. Эта статья достаточно сильно связана с тем, что объяснено в серии «Растеризация за одни выходные», поэтому лучше будет прочитать и её. Я не буду предполагать, что вы её изучили, но в статье будет больше высокоуровневых объяснений — я не хочу повторять уже сказанное и то, что можно найти в других источниках.

                  Краткий обзор


                  Тайловый рендеринг (tile-based rendering или tiled rendering) — это улучшенный по сравнению с традиционным immediate-mode-рендерингом; в нём render target (RT) разделяется на тайлы (т.е. субрегионы кадрового буфера), каждый из которых содержит примитивы, которые можно рендерить в тайлы по отдельности.


                  Обратите внимание на выражение «по отдельности», потому что оно подчёркивает одно из самых больших преимуществ этой техники по сравнению с immediate-mode: ограничение всех операций доступа внутри тайла буферами цветов/глубин, которые остаются в «медленной» DRAM благодаря использованию отдельного тайлового кэша на чипе.
                  Читать дальше →
                  • +13
                  • 5.1k
                  • 2
                • Отложенный Alpha blending

                    В этой статье я хочу поговорить о методах смешивания растеризуемой геометрии. Классические модели смешивания полупрозрачных объектов — Alpha, Additive, Multiplicative — объединяет один и тот же принцип отрисовки: последовательно рисуем один примитив за другим, смешивая получаемые на выходе фрагментного шейдера пиксели с тем, что находится в текущем буфере. Каждый новый примитив обновляет область буфера, в которую рисуется; в случае с альфа-смешиванием объекты, которые находятся выше, заслоняют ранее отрисованные. Но что если хочется что-то сделать с группой объектов, рисуемых поверх сцены, — например, обрезать их по маске или подсветить? Тут сразу в голову приходят два решения: или внести изменения в их материал (т.е. изменить шейдер, расширить набор текстур), к примеру, добавив проекцию еще одной текстуры, которая будет отвечать за маску прозрачности. Однако если у нас много разношерстных объектов, менять каждый уникальный материал неудобно и чревато ошибками. Второй вариант — нарисовать все интересующие нас объекты в отдельный полноэкранный таргет и рисовать уже его на финальную сцену. Тут мы можем сделать с его содержимым все, что захотим, но это требует выделения лишней памяти и, что самое неприятное, — переключения рендер таргетов. Это не самая «дешевая» операция на мобильных устройствах, которую будет необходимо выполнить дважды. А если захочется вот так работать с несколькими слоями?


                    Читать дальше →
                  • Временные ограничения и статический временной анализ FPGA на примере Microsemi SmartTime

                    Ещё во время обучения в ВУЗе, проектируя различные тестовые безделушки и выполняя лабораторные работы по цифровой схемотехнике, я попадал в ситуации, когда вроде бы корректный несколько раз перепроверенный проект отказывается работать «в железе». В то время, на заре изучения программируемой логики, мне как-то очень редко доводилось добираться до последних пунктов Design Flow, в чем, вероятно, и крылась беда. Если я нечаянным щелчком мыши открывал Timing Analyzer, то после нескольких секунд беглого просмотра становилось скучно, и я возвращался к издевательствам над отладочной платой и сочинял новые безумства на VHDL.

                    Когда подошло время более-менее адекватных и серьёзных проектов, проблем стало больше, соответственно, я начал интенсивнее использовать гугл и искать ответы на свои вопросы. Тут мне всё чаще стали попадаться такие страшные словосочетания, как “timing analysis” и “design constraints”, когда я почитал и немного вникнул, пришло осознание того, что я упустил что-то очень важное. Сначала я панически боялся этих неведомых констрейнов, и ведь без них успешно работали первые проекты, благо частота там была не больше пары десятков МГц. Но когда речь зашла о более высоких частотах и более сложных проектах, здесь уже не обойтись без тщательного временного анализа и оптимизации.
                    Читать дальше →
                    • +22
                    • 27.6k
                    • 7
                  • Сложные отображения коллекций в iOS: проблемы и решения на примере ленты ВКонтакте

                      Привет! Меня зовут Саша, я iOS-разработчик в команде, которая делает ленту ВКонтакте. Сейчас расскажу, как мы оптимизируем отображение интерфейса и обходим связанные с этим проблемы.
                      Думаю, вы представляете, что такое лента VK. Это экран, где можно просматривать разнообразный контент: тексты, статичные картинки, анимированные гифки, встраиваемые элементы (видео и музыку). Всё это должно отображаться плавно, отсюда высокие требования к производительности решений.


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


                      Если вы больше любите слушать, чем читать, видеозапись доклада есть вот тут.


                      Читать дальше →
                    • Пишем «калькулятор» на C#. Часть I. Вычисление значения, производная, упрощение, и другие гуси

                        Привет!

                        Калькулятор у нас почему-то ассоциируется с чем-то, что должен написать каждый новичок. Возможно потому, что исторически компьютеры с той целью и создавались, чтобы считать. Но мы будем писать непростой калькулятор, не sympy конечно, но чтобы умел базовые алгебраические операции, типа дифференциирования, симплификации, а также фичи типа компиляции для ускорения вычислений.

                        Меньше воды! О чем статья?
                        Здесь будет поверхностно о построении выражения, парсинге из строки, подстановки переменной, аналитической производной, численным решении уравнения и определенного интеграла, рендеринг в формат LaTeX, комплексных числах, компиляцией функций, упрощении, раскрытии скобок, и бла бла бла. Вероятно, не в одной статье.
                        Для тех, кому нужно срочно что-нибудь склонировать, ссылка на репозиторий.

                        Берем оставшиеся с нового года печеньки, и погнали!
                        Читать дальше →
                      • Пиксель-арт для начинающих: инструкция по применению

                        • Translation


                        Инди-разработчикам нередко приходится совмещать сразу несколько ролей: геймдизайнера, программиста, композитора, художника. И, когда дело доходит до визуала, многие выбирают пиксель-арт — на первый взгляд он кажется простым. Но чтобы сделать красиво, нужно много опыта и определенные навыки. Нашел туториал для тех, кто только начал постигать основы этого стиля: с описанием специального софта и техник рисования на примере двух спрайтов.
                        Читать дальше →
                        • +63
                        • 37.9k
                        • 6
                      • Правда ли, что GOPATH и GOROOT больше не нужны?

                          Так повелось, что разработчики, еще только начинающие знакомиться с Go, часто сталкиваются с проблемой выбора рабочей директории для Go-проектов. Вот и в чате конференции GolangConf тоже задавался этот вопрос. Новые гоферы часто пугают друг друга словами GOPATH и GOROOT. Однако, в руководствах по быстрому старту с текущей версией Go (1.13) упоминания эти двух «страшных» слов вообще нет.

                          Читать дальше →
                        • Вызов функций Go из других языков

                          • Translation

                          image


                          С версии 1.5 компилятор Go поддерживает несколько режимов сборки, определяемых флагом buildmode. Их ещё называют режимами исполнения Go (Go Execution Modes). С их помощью go tool может компилировать пакеты Go в нескольких форматах, включая архивы и библиотеки общего пользования Go (shared libraries), архивы и библиотеки общего пользования Си, а с версии 1.8 — и динамические плагины Go.


                          В статье мы рассмотрим компилирование пакетов Go в библиотеки Си. В этом режиме сборки компилятор генерирует стандартный бинарный файл объекта (shared object) (.so), передавая функции Go в качестве API в стиле Си. Мы поговорим о том, как создавать библиотеки Go, которые можно вызывать из C, Python, Ruby, Node и Java.


                          Весь код доступен на GitHub.

                          Читать дальше →
                        • Как писать Go-пакеты

                          • Translation
                          Пакет Go состоит из Go-файлов, расположенных в одной и той же директории, в начале которых имеется одинаковое выражение package. Пакеты, подключаемые к программам, позволяют расширять их возможности. Некоторые пакеты входят в состав стандартной библиотеки Go. А это значит, что они, если вы пользуетесь Go, уже у вас установлены. Другие пакеты устанавливают с помощью команды go get. Можно, кроме того, писать собственные Go-пакеты, создавая файлы в особых директориях, и придерживаясь правил оформления пакетов.



                          Материал, перевод которого мы сегодня публикуем, представляет собой руководство по разработке Go-пакетов, которые можно подключать к другим файлам.
                          Читать дальше →
                          • +35
                          • 9.9k
                          • 7
                        • 4 способа импортировать пакет в Go

                            Декларативная часть импорта пакетов в Go достаточно скучная и обыденная. Всего лишь нужно указать директиву import и перечислить импортируемые пакеты. Современные IDE делают эту работу за Вас — сами подставляют пакеты в этот раздел, что очень удобно. Кроме того, они сворачивают этот блок, чтобы он не мешал обозревать код. Я же советую развернуть этот блок, и изучить его внимательно — возможно Вы найдете там нечто необычное:


                                package main
                            
                                import (
                                    "github.com/vigo5190/goimports-example/a"
                                    foo "github.com/vigo5190/goimports-example/a"
                                    . "github.com/vigo5190/goimports-example/b"
                                    _ "github.com/vigo5190/goimports-example/c"
                                )

                            Если стандартный импорт, импорт с синонимом и _ я встречал, то импорт с . я до этого не видел.

                            Читать дальше →
                            • +26
                            • 17.6k
                            • 7