Pull to refresh
117
0
Вадим Лопатин @Buggins

User

Send message

Удивительная история развития сортировки в JDK

Level of difficultyMedium
Reading time11 min
Views5.5K

Как вы считаете, если выполнить java.util.Arrays.sort(), то какая сортировка будет вызвана? Quicksort? Timsort? И та, и другая, потому что для объектов вызывается Timsort, а для примитивов (чисел int, long, float и так далее) — Dual-Pivot Quicksort. В JDK 6 для объектов использовался стандартный Merge sort, а для чисел классическая реализация Quicksort с одним опорным элементом, предложенная Джоном Бентли и Дугласом МакИлрой. В JDK 7 оба алгоритма поменялись: теперь объекты сортируются с помощью Timsort, автор Тим Петерс, а для простых типов данных используется Dual-Pivot Quicksort, предложенный мною вместе с Джоном Бентли и Джошем Блоком в 2009 году. Эта сортировка используется более 15 лет не только в JDK, но и в Android (хотя и немного устаревшая версия).

А зачем нам вообще второй алгоритм сортировки, если есть Timsort? Почему не использовать один и для объектов, и для примитивов? Сегодня я, как автор, расскажу историю Dual-Pivot Quicksort: как он начинался, как развивался и как продолжает развиваться сейчас.

Читать далее
Total votes 22: ↑22 and ↓0+28
Comments13

20 игр, чтобы видеть детали, чувствовать нюансы и уловить смысл дизайна

Reading time7 min
Views39K


Я собрала 20 игр, чтобы поиграть в дизайнера. Точнее игры, в которые играешь и прокачиваешь какой-то навык, полезный для дизайна: цветовым кругом пользоваться, пером работать, шрифты не вырвиглазные подбирать, UI по-человечески рисовать. Во все игры можно играть в браузере и бесплатно. Впервые от «поиграйте со шрифтами» можно получить удовольствие.

Еще я веду канал в Telegram GameDEVils и блог на Substack , делюсь там клевыми материалами (про геймдизайн, разработку и историю игр).

1. Can’t Unsee


Update: используйте прокси, к примеру croxyproxy, или просто закройте попап, чтобы попасть на сайт игры.



Игра для начинающего UI дизайнера, чтобы тренировать внимательность. Иными словами, не для тренировки конкретного навыка, а на умение «разобраться в деталях, почувствовать нюансы, и уловить смысл».
Читать дальше →
Total votes 41: ↑41 and ↓0+41
Comments19

Разглядывая JTAG: что внутри?

Reading time27 min
Views14K

Ознакомившись с работой JTAG в общих чертах и написав файл BSDL для воображаемой микросхемы в предыдущей статье, можно рассмотреть работу модуля JTAG внутри микросхем более детально. Для этого мы напишем прошивку для микроконтроллера и для ПЛИС (на «Си» и на «SystemVerilog»), которые позволят считывать/устанавливать логические уровни на отдельных выводах микросхемы через данный интерфейс.

Реализовать интерфейс JTAG
Total votes 31: ↑31 and ↓0+31
Comments8

Делаем свой SMD challenge, уровень mad skills

Reading time12 min
Views12K

Про существование smd challenge я узнал только в этом году из стрима @sadkotheguest. Так уж получилось, что ранее я о таком не слышал, а поинтересоваться сам как-то не догадался. Скучно на удалёнке долгими зимними вечерами, надо себя как-то развлечь, заодно доказать себе, что я действительно обладаю хорошими навыками пайки и не только. Значит, решено: надо или купить-попробовать, или сделать своё (кого я обманываю? зачем покупать, когда сделать своё в сто раз интереснее и дороже. Так что расчехляем инструменты, завариваем чай с бергамотом и погнали!

Много объемных картинок внутри!
Total votes 43: ↑42 and ↓1+58
Comments104

Новые муз. инструменты в духе DIY

Reading time3 min
Views8.4K

Бывает, что энтузиасты воссоздают старые музыкальные инструменты по описаниям в книгах, изображениям на фресках, найденным во время раскопок деталям. Но некоторые собирают уникальные муз. девайсы с нуля и передают наработки в open source. Сегодня расскажем о таких проектах — девайсе, объединившем черты траутониума и континуума, «карманном» органе и кастомном launchpad’е.

Читать далее
Total votes 10: ↑7 and ↓3+7
Comments23

АЛУ на логических микросхемах

Reading time4 min
Views18K

Всем привет! Продолжаю серию постов про мой компьютер на логических микросхемах. Единственный модуль процессора, оставшийся до сих пор без внимания, – это АЛУ, про него и пойдет сегодня речь.

Читать далее
Total votes 77: ↑77 and ↓0+77
Comments39

Щуп осциллографа. Устройство и принцип работы

Reading time9 min
Views47K

Эта статья для тех кто всегда хотел знать как устроен щуп осциллографа, но боялся спросить. Для тех кто начинает работать с осциллографом, а также для тех кто много лет работает, но никогда не хватало времени и сил для того, чтобы разобрать как устроен щуп(пробник) осциллографа на самом деле. Этот материал основан на статье Doug Ford «The secret world of oscilloscope probes» с некоторыми изменениями и дополнениями. В статье будут рассматриваться только пассивные щупы. Исследование работы будем проводить в популярном симуляторе электронных схем LTSpice. Разберем последовательно назначение и особенности каждого элемента, моделируя эквивалентные схемы начиная от простых вариантов и переходя к более реалистичным. Узнаем кто изобрёл и запатентовал первый прототип этого устройства в том виде в котором он используется сейчас. А также в конце рассмотрим как устроен реальный щуп фирмы Keysight(бывший Agilent) 10073C, вышедший из строя и давший согласие предоставить свои останки на благо научного прогресса.

Все кто работает в области электроники хоть раз сталкивался с измерением с помощью осциллографа. Существует много разновидностей пробников, в основном они делятся на активные и пассивные. Активные пробники могут быть самого разного устройства и назначения, и в этой статье не рассматриваются. Мы обратим внимание на наверное самый распространенный вариант пассивного пробника с коэффициентом деления равным 10 (либо с переключателем режимов 1 или 10) и входным сопротивлением 10 МОм с учетом входного сопротивления осциллографа 1 МОм. В комплекте осциллографа как правило имеется два таких щупа.

Читать далее
Total votes 83: ↑83 and ↓0+83
Comments33

OpenSCAD для пионеров и пенсионеров: целый день для знакомства

Reading time5 min
Views16K
image

Постоянно видел на Thingiverse модели с исходниками на OpenSCAD. Даже пытался загружать этот код — но, похоже, тормозная жидкость залита в OpenSCAD при разработке в изобилии, при отображении более-менее сложной модели компьютер подвисает на десятки минут. В итоге — не вдохновило.

Обычно я пользуюсь древним Sketchup — еще гугловским, той античной версией, когда гугл врал, что Sketchup — это навсегда, и его бесплатная версия в усеченном варианте будет всегда доступна даже для коммерческого использования. Я, будучи по натуре легковерным, даже с Ruby слегка разобрался, автоматически прорисовывал профиля крыльев игрушечных самолетиков в Sketchup и генерировал код для пенорезки, чтобы их вырезать. Почти вчера было — но Ruby я уже абсолютно не помню.
Нарисовать в Sketchup что-то очень сложное и мелкое, чтобы можно было распечатать — это головная боль. Нарисовать-то можно, но он потеряет маленькие кусочки изображения, если их и удастся преобразовать в STL, то сгенерировать код для печати ни один слайсер не сможет.
Читать дальше →
Total votes 60: ↑58 and ↓2+68
Comments51

Как разработать микросхему, от идеи до результата. Часть 3. Схемотехническое представление и Layout

Reading time14 min
Views8.8K
В прошлой статье мы установили все программы, а в этой части, мы наконец приступим к практической части. Готовьтесь, эта часть будет очень большой. Для тех кто пропустил прошлые части — ссылки ниже.



Как разработать микросхему, от идеи до результата. Ссылки на все статьи։

В этой части мы:

  1. Будем рисовать схему, используя XSCHEM
  2. Произведём симуляцию нашей схемы, используя NGSPICE
  3. Поймём цикл производства микросхемы
  4. Нарисуем Layout, используя KLayout

Предполагается, что вы уже прочитали предыдущие материалы. Если мне удалось вас заинтересовать, прошу под кат!
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments18

Нижний Новгород: новая роль технологического хаба для нестоличного города

Reading time9 min
Views11K

Нижний Новгород на протяжении своей восьмисотлетней истории всегда занимал свое уникальное место, играл свою роль. Основанный в 1221 году, город являлся опорным пунктом при распространении русского влияния на новые земли. Его военное значение росло, нижегородский кремль, построенный в XVI веке, ни разу не был взят. Со временем роль города поменялась: Нижний Новгород стал центром российской и международной торговли. Нижегородская ярмарка была крупнейшей в стране, Всероссийская промышленная и художественная выставка 1896 года по значимости сопоставима и даже превосходит такие современные события, как Зимние олимпийские игры в Сочи и Чемпионат мира по футболу. С историей этой выставки связаны первый в России трамвай, первый российский серийный автомобиль, первый в России фуникулер, первая в мире гиперболоидная конструкция - башня Шухова. В советское время Нижний Новгород, ставший Горьким, занял роль крупнейшего индустриального центра. Лучшие инженерные кадры создавали автомобили ГАЗ и крылатые суда “Метеор”. 

В конце советской эпохи ВУЗы города - классическая связка из государственного университета и технического института - вместе с исследовательскими институтами стали местом создания первых компаний, специализирующихся на разработке программного обеспечения.

Читать далее
Total votes 41: ↑41 and ↓0+41
Comments18

Предельная скорость USB на STM32F103, чем она обусловлена?

Reading time18 min
Views19K
У данной статьи тяжёлая история. Мне надо было сделать USB-устройства, не выполняющие никакой функции, но работающие на максимальной скорости. Это были бы эталоны для проверки некоторых вещей. HS-устройство я сделал на базе ПЛИС и ULPI, загрузив туда «прошивку» на базе проекта Daisho. Для FS-устройства, разумеется, была взята «голубая пилюля». Скорость получалась смешная. Прямо скажем, черепашья скорость.



Но я же крутой, у меня теперь есть USB-анализатор (его разработка была описана в блоке из нескольких предыдущих статей). Посмотрев логи, я понял, что похоже, знаю, почему скорость невозможно поднять, даже если STM32F103 обслуживает исключительно USB и ничего больше. Даже начал писать о результатах… Но потом решил, что кому-то это будет не интересно, а кто-то скажет, что и так это знал.

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

Итак, давайте выясним, почему именно STM32F103C8T6 не может прокачать по шине USB данные на скорости 12 мегабит, заняв всю ширину предоставленного канала, и можно ли с этим что-то сделать.
Читать дальше →
Total votes 43: ↑41 and ↓2+57
Comments73

Adafruit QT Py RP2040: крохотный одноплатник для самых разных проектов

Reading time2 min
Views14K

Не так давно мы рассказывали об одноплатнике Adafruit Feather RP2040. Всем он хорош, в особенности тем, что в его основе — чип от Raspberry. Получается, что это вроде и «малинка», но возможностей больше.

У Adafruit есть и другие сюрпризы. Компания выпустила еще две платы на базе RP2040, включая самую миниатюрную из них — Adafruit QT Py RP2040. Все подробности о новинке — под катом.
Читать дальше →
Total votes 45: ↑45 and ↓0+45
Comments24

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

Reading time28 min
Views102K

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

Читать далее
Total votes 62: ↑62 and ↓0+62
Comments73

Общее введение в I2P

Reading time22 min
Views93K

В этой статье пойдет речь про I2P — некоммерческую сингулярность сетевой приватности и анонимности, где никто кроме вас не знает куда и кто передает вашу информацию. Сеть I2P (расшифровывается как «Invisible Internet Project», Проект невидимого интернета) — это оверлейная децентрализованная одноранговая сеть. Оверлейная — значит работает поверх других сетей, например, обычного интернета; децентрализованная — распределенная, не имеющая единой точки отказа: упадет один узел, полсети, или во всей сети останется 3 пользователя — I2P все равно будет функционировать. I2P является одноранговой сетью, так как все участники имеют равные права и возможности: каждый пользователь скрытой сети строит свои туннели через других участников и сам является потенциальным звеном в цепочке другого пользователя. При этом естественная сетевая активность никак не компрометирует абонента перед домашним провайдером или участниками скрытой сети.

Читать!
Total votes 31: ↑30 and ↓1+40
Comments9

Точные и быстрые вычисления для чисел с плавающей точкой на примере функции синуса. Введение и часть 1

Reading time6 min
Views27K
Внимательно прочитал очень хорошие статьи от ArtemKaravaev по сложению чисел с плавающей точкой. Тема очень интересная и хочется её продолжить и показать на примерах, как работать с числами с плавающей точкой на практике. В качестве эталона возьмём библиотеку GNU glibc (libm). А чтобы статья не была уж скучной, добавим соревновательную составляющую: попробуем не только повторить, но и улучшить код библиотеки, сделав его более быстрым/точным.

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

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

Статьи будут написаны методом погружения. Будут обсуждаться подзадачи, которые потом соберутся вместе в единое решение проблемы.
Читать дальше →
Total votes 40: ↑39 and ↓1+59
Comments58

Сложение двух чисел с плавающей запятой без потери точности

Reading time9 min
Views80K
Здравствуйте, друзья, как вы думаете, если мы напишем такой код:

s = a+b;
z = s-a;
t = b-z;

то не кажется ли вам, что в результате его выполнения получится, что t=0? С точки зрения привычной математики действительных чисел это и правда так, а вот с точки зрения двоичной арифметики с плавающей запятой в переменной t будет кое-что другое. Там будет то, что спасает нас от потери точности при сложении чисел $a$ и $b$. Кого интересует данная тема, прошу под кат.

Total votes 99: ↑97 and ↓2+135
Comments172

Факторизация чисел и методы решета. Часть I

Reading time12 min
Views20K



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

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

Простая идея факторизации целого нечетного числа N исторически — состоит в поиске пары квадратов чисел разной четности, разность которых кратна kN, при k =1 разложение успешно реализуется так как в этом случае сразу получаем произведение двух скобок $N = x^2 -y^2 =(x - y)(x + y)$ c сомножителями N. При k>1 случаются тривиальные разложения.

Таким образом, проблема факторизации преобразуется в проблему поиска подходящих квадратов чисел. Понимали эти факты многие математики, но П. Ферма первым в 1643 году реализовал идею поиска таких квадратов в алгоритме, названном его именем. Перепишем иначе приведенное соотношение $ x^2-N =y^2 $.

Если разность слева от равенства не равна квадрату, то изменяя х, можно подобрать другой квадрат, чтобы и справа получался квадрат. Практически все нынешние алгоритмы используют эту идею (поиска пары квадратов), но судя по результатам, похоже, что идея себя исчерпала.
Читать дальше →
Total votes 15: ↑14 and ↓1+19
Comments3

Операционные усилители: 10 схем на (почти) все случаи жизни

Reading time15 min
Views483K
Всем привет!

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


Читать дальше →
Total votes 102: ↑100 and ↓2+135
Comments54

Портируем make.c на D

Reading time7 min
Views3.1K

Уолтер Брайт — «великодушный пожизненный диктатор» языка программирования D и основатель Digital Mars. За его плечами не один десяток лет опыта в разработке компиляторов и интерпретаторов для нескольких языков, в числе которых Zortech C++ — первый нативный компилятор C++. Он также создатель игры Empire, послужившей основным источником вдохновения для Sid Meier’s Civilization.


Цикл статей о Better C

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


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


Мне пришла на ум старая make-программа, которую я написал для компилятора C Datalight в начале 1980-х. Это реальная имплементация классической программы make, которая постоянно использовалась с начала 80-х. Она была написана на C ещё до его стандартизации, портировалась из одной системы в другую и укладывается всего в 1961 строчку кода, включая комментарии. Она до сих пор регулярно используется.

Читать дальше →
Total votes 13: ↑12 and ↓1+20
Comments9

Разработка и производство троичных микросхем на обычном техпроцессе CMOS

Reading time6 min
Views20K


Многие утверждали, что строят троичный компьютер из дискретных компонентов, однако некоторые разрабатывают и заказывают троичные микросхемы уже прямо сейчас :)
Читать дальше →
Total votes 119: ↑119 and ↓0+119
Comments120

Information

Rating
Does not participate
Location
Нижний Новгород, Нижегородская обл., Россия
Date of birth
Registered
Activity