Pull to refresh
7
2

JavaScript-разработчик

Send message

Задача трёх тел (не китайская нефантастика)

Level of difficultyMedium
Reading time21 min
Views29K

Однажды, выполнив в Гугле запрос "Three body problem" ("Задача трёх тел"), я был просто поражен - первая страница результатов состояла только из ссылок на роман китайского писателя-фантаста Лю Цысиня с соответствующим названием, а также на телесериал, снятый по этому роману, т.е. ссылок на собственно задачу трёх тел не было вообще! Мне это показалось удивительным и несправедливым, поскольку сама по себе задача трёх тел тоже может выглядеть увлекательной в популярном изложении. В этой публикации я постарался привести некоторые доказательства этого утверждения.

Читать далее
Total votes 145: ↑143 and ↓2+187
Comments98

Пробуем Typst, альтернативу LaTeX

Level of difficultyEasy
Reading time20 min
Views9.2K

Вы могли слышать об Typst, современной альтернативе LaTeX, написанный на Rust, или не могли, ведь на Хабре я нашёл лишь несколько статей о нём. Некоторые до меня подчёркивали, что есть некоторые недостатки у первого по сравнению с последним.

Те статьи, что уже имеются на Хабре во время написания данной статьи, были, скорее, новостными, чем полноценными обзорами. Мы же попробуем рассмотреть Typst, начиная с установки и заканчивая возможностями и компиляцией, а также разберёмся, какие проблемы могут возникнуть.

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

CSS-классы вредны

Level of difficultyMedium
Reading time13 min
Views18K

Если вы когда-нибудь заглядывали за кулисы пользовательских веб-интерфейсов, то знаете для чего нужно свойство class. Оно ведь нужно для связи HTML с CSS, правда? Сейчас я расскажу о том, почему настало время отказаться от него. Имена классов — это архаичная система, используемая как неудачный посредник для примитивов UI; ещё хуже то, что они создают ужасные сочетания, приводящие к комбинаторному взрыву странных пограничных случаев. Давайте изучим этот вопрос, начав со скучного урока истории, который вы уже слышали миллион раз.
Читать дальше →
Total votes 68: ↑60 and ↓8+72
Comments99

Процессор на костях: как изобретатели XIX века пытались превратить счеты в компьютер

Reading time13 min
Views2.4K

Счеты имеют долгую и интересную историю. Их прототип, абак, появился за несколько веков до нашей эры, а конец эпохи счетов пришелся уже на наше время — они массово использовались вплоть до 1970-х годов. Несмотря на такую живучесть, счеты не были лишены недостатков, поэтому многие изобретатели пытались их усовершенствовать. На результаты их попыток посмотрим вместе с Антоном Басовым, исследователем истории науки и техники, автором Центра непрерывного образования факультета компьютерных наук ВШЭ.

Читать далее
Total votes 4: ↑4 and ↓0+5
Comments6

Отсутствие в .NET важных тригонометрических функций: заполняем пробелы

Level of difficultyEasy
Reading time4 min
Views4.8K

.NET включает базовые тригонометрические функции (sin, cos, tan, asin, acos, atan) и их гиперболические аналоги (sinh, cosh, tanh, asinh, acosh, atanh) в классе Math. Однако в .NET отсутствуют важные тригонометрические функции, я решил заполнить этот пробел, при реализации этих функций необходимо учитывать особенности вычислений с плавающей запятой, диапазон входных и выходных значений и их свойства симметрии.

Читать далее
Total votes 17: ↑13 and ↓4+12
Comments19

Древняя и новая история цистерцианских цифр

Reading time5 min
Views11K

Арабские цифры являются одной из наиболее долгоживущих и универсальных знаковых систем, распространённых во всём современном мире. Они до сих пор сосуществуют с римскими, конкуренцию у которых окончательно выиграли в Европе к XIV веку, поскольку римские цифры исключительно неудобны для арифметики и алгебры. Принципиально арифметика на римских цифрах возможна, она даже была однажды рассмотрена в статье из журнала «Наука и жизнь» за 1970 год. Именно в XIII-XIV веках римские цифры перестали удовлетворять потребностям бурно растущей европейской цивилизации (в римских цифрах даже отсутствовал феномен «0»). Им на смену пришли заимствованные индо-арабские цифры. Также как раз в период XIII-XIV века в Европе пытались изобрести систему цифр, которая либо устраняла бы недостатки римской, либо сочетала достоинства арабской и римской. Один из наиболее причудливых опытов такого рода — это цистерцианские цифры, о которых будет рассказано под катом   

Читать далее
Total votes 63: ↑61 and ↓2+83
Comments49

Почём синтаксический сахар в графических языках программирования?

Level of difficultyEasy
Reading time14 min
Views8.3K

Графические языки программирования

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

Забавно, но это наглядное подтверждение, что развитие идет по кругу или, точнее, по спирали. Первобытный человек сначала рисовал истории на стенах, потом люди придумала алфавит, потом другие умные люди придумали формулы для математических расчетов, потом другие не менее умные придумали для них счетные машины, потом для счетных машин придумали алфавит – ассемблер, потом язык FORTRAN, и, наконец, появился графический язык диаграмм. Круг замкнулся! Люди вернулись к рисованию, но на другом уровне развития, а все потому, что это удобнее и экономит время на понимание. Очевидно, что рисунок понять легче чем текст, особенно когда текста многие килобайты, как в современных библиотеках и фреймворках, в которых сам черт ногу сломит. 

Что говорят стандарты?

Обратимся к  МЭК 61131-3. Там описано два чисто графических языка программирования:

 FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3. Предназначен для программирования программируемых логических контроллеров (ПЛК)

LD (Ladder diagram) — язык релейно-контактной логики.

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

Читать далее
Total votes 18: ↑10 and ↓8+4
Comments130

Хранение данных на ДНК/РНК: возможности и перспективы

Level of difficultyMedium
Reading time14 min
Views3.3K

Приветствую всех айтишников и технарей. Выпустив очередную часть саги про ЯМР, я словил катарсис и почувствовал за собой моральное право опять пографоманить на отвлеченные темы. И сегодня мы с двух ног ворвемся в тему хранения данных на ДНК/РНК. Тема интересная, и намного ближе к айтишечке, чем все предыдущие опусы, поэтому погнали!

Добро пожаловать под кат
Total votes 11: ↑10 and ↓1+14
Comments21

Как я искал (и нашел) разницу в двух побайтово идентичных файлах

Reading time4 min
Views72K
Есть у нас одно .NET-приложение, которое умеет загружать и использовать плагины. Плагины — дело хорошее. Можно функционал расширять, можно оперативненько обновлять их со своего сайта, можно даже юзерам дать SDK и позволить писать свои плагины. Мы всё это и делали. Наши плагины представляли собой обычные .NET-сборки, которые нужно было подкинуть в определённую папку, откуда основное приложения их загружало и использовало. Ну, вы, наверное представляете как — Assembly.Load(), дальше ищем класс, реализующий необходимый интерфейс, создаём объект этого класса и т.д. Всё это работало давно, стабильно и ничто не предвещало беды. Но вдруг в какой-то момент появилась необходимость создать плагин, состоящий из нескольких файлов. В связи с этим было решено считать плагином не просто .NET-сборку (1 файл), а zip-архив, в котором может быть как одна сборка, так и несколько файлов. В связи с этим пришлось научить билд-сервер паковать плагины в архивы, а основное приложение — разархивировать их в нужное место. В общем-то задача на 10 строк кода. Ничто не предвещало беды. И вот скачиваю я с билд-сервера собранный архив с плагином, разархивирую его в нужную папку, запускаю приложение, и… не работает! Стоп, как не работает? Это ведь тот же плагин!

Дальше — больше. Прошу проделать ту же самую процедуру моего коллегу, на его компьютере. Он пробует — и у него всё работает! Но как же так? Одна версия приложения, один и тот же файл с билд-сервера. Какая-то разница в окружении? Сажусь за компьютер коллеги, пробую ещё раз — не работает! Он в этом время пробует на моём — работает! То есть получается, что файл «помнит», кто его разархивировал! Зовём третьего коллегу понаблюдать этот цирк. Последовательно, на одном и том же компьютере, по очереди делаем одни и те же действия: скачиваем архив с плагином, разархивируем в нужную папку, запускаем приложение. Когда это делаю я — программа не видит плагин, когда это делает коллега — всё работает. На третьем круге этих интересных экспериментов вдруг замечаем разницу в действиях: я разархивировал плагин стандартными средствами Windows, а мой коллега — с помощью 7-Zip. И то и другое вызывалось нами из контекстного меню архива, так что разницу в клик по не тому пункту вначале никто не замечал. Ну ок. Получается, файл, извлечённый из zip-архива с помощью 7-zip, отличается от того же файла из того же архива, извлечённого с помощью стандартного архиватора Windows?

Кстати, пока вы не открыли статью под катом, ответьте-ка сами для себя на вопрос, может ли такое быть, что содержимое файлов валидного zip-архива при разархивации 7-zip и через проводник Windows будет разным?
Читать дальше →
Total votes 189: ↑176 and ↓13+163
Comments88

Управление напряжением PWM сигналом (PWM+RC=DAC)

Level of difficultyEasy
Reading time8 min
Views9.5K

В очередной тестировочной электронной плате появилась нужда выставлять напряжения на клеммах.

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

В этом тексте я написал как мне это удалось.

Читать далее
Total votes 15: ↑13 and ↓2+18
Comments181

Самолёт принял решение приземлиться

Reading time5 min
Views44K

Представьте: вот вы пилот, летите, никого не трогаете, примус починяете, и решаете набрать высоту. Для этого надо немного ускориться и параллельно чуть увеличить тангаж, что вы, собственно, и делаете. Увеличивая тягу РУДом, вы параллельно немного тянете рычаг управления на себя. Все идёт хорошо первые несколько минут, но тут рычаг полностью самостоятельно и с огромной силой уходит в положение "на себя" до упора и там замирает. Поздравляю вас, вы познакомились с явлением, именуемым "перекомпенсация руля высоты". Пока вы лихорадочно пытаетесь оттолкнуть рычаг в нормальное положение, а ваш самолёт переходит в устойчивый штопор, у как раз вас есть несколько минут падения до земли, так что давайте познакомимся с этим явлением поближе.

Читать далее
Total votes 110: ↑101 and ↓9+121
Comments75

Вертикальные солнечные часы

Level of difficultyEasy
Reading time4 min
Views2.7K

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

Читать далее
Total votes 17: ↑16 and ↓1+18
Comments5

Геометры разрабатывают новые инструменты для управления орбитами космических аппаратов

Level of difficultyMedium
Reading time8 min
Views3.8K

В октябре с мыса Канаверал во Флориде должна стартовать тяжёлая ракета Falcon Heavy с миссией НАСА Europa Clipper. Миссия стоимостью 5 миллиардов долларов призвана выяснить, может ли Европа, четвёртый по величине спутник Юпитера, поддерживать жизнь. Но поскольку Европу постоянно бомбардирует интенсивное излучение, создаваемое магнитным полем Юпитера, космический аппарат «Клипер» не сможет выйти на орбиту самого спутника. Вместо этого он будет двигаться по эксцентрической орбите вокруг Юпитера и собирать данные, неоднократно пролетая мимо Европы — в общей сложности 53 раза, — а затем удаляясь от места наибольшего излучения. Каждый раз, когда космический аппарат будет огибать Юпитер, его траектория будет немного отличаться, что позволит ему делать снимки и собирать данные от полюсов Европы до её экватора.

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

Читать далее
Total votes 16: ↑15 and ↓1+19
Comments7

Сложно ли генерировать 1024-битные простые числа?

Level of difficultyEasy
Reading time28 min
Views12K

Простые числа удивительны!

С одной стороны, их легко объяснить: это просто числа, которые делятся только на единицу и на себя; с другой стороны, они содержат в себе бесконечную сложность. Они встречаются во множестве разных сфер, от математических концепций и гипотез до любопытных визуализаций и криптографии, лежат в основе многих Интернет-стандартов и протоколов безопасности, которые мы используем ежедневно.

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

Вызов

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

Генерировать простые числа, способные генерировать ключи для алгоритма RSA

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

Читать далее
Total votes 56: ↑56 and ↓0+74
Comments24

Как я разработал квадрокоптер на ESP32 с нуля (ушло 4 года)

Level of difficultyMedium
Reading time12 min
Views49K

При сборке квадрокоптеров и других БПЛА обычно используют готовую плату полетного контроллера, содержащую все необходимые датчики и периферию, и готовую полетную прошивку, например, Betaflight, ArduPilot или PX4. Полетный контроллер управляет моторами квадрокоптера и обеспечивает стабильный полет.

Занимаясь БПЛА с 2016 года, я решил разобраться в устройстве полетных контроллеров максимально глубоко и создать квадрокоптер с нуля, не используя готовый полетный контроллер и готовый софт. Спустя долгое время разработки мне удалось это сделать. Я написал прошивку с максимально простым исходным кодом и выложил ее на GitHub. В этой статье я расскажу о теории и практике разработки полетного софта для квадрокоптера и проиллюстрирую это на примере своего дрона на базе микроконтроллера ESP32, который можно увидеть на картинке выше.

Читать далее
Total votes 312: ↑312 and ↓0+371
Comments132

Old-Hard коммуникации, или “передача файлов через COM и LPT-порты”

Reading time4 min
Views37K
Давненько не кидали на старые компьютеры данные через дискеты, COM или LPT порты? А вот мне недавно пришлось этим заняться, и подробности этого опыта – под катом. Там же несколько графиков, табличка сравнения и пара десятков фото под вторым катом.
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments65

Я программист, и я тупой

Reading time2 min
Views75K
Я пишу код за деньги уже пятнадцать лет. Пробовал себя и в других ролях – управление продуктом, аналитика, тестирование, – но как-то не пошло. И с течением лет пришел к осознанию, что я не очень умный. К сожалению.

Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит мозг. У меня плохо получается отслеживать сложные зависимости в кодовой базе. Я не способен освоить модные языки вроде Rust (пытался, но по правде сказать, для меня это чересчур). Я терпеть не могу микросервисы и современный фронтенд: там слишком много движущихся частей, и уследить за всеми я не в состоянии.

Как же я выхожу из положения?
Читать дальше →
Total votes 298: ↑284 and ↓14+325
Comments333

Как студенты Практикума перепроектировали сайт Alfa Digital

Level of difficultyEasy
Reading time8 min
Views1.9K

Привет! Меня зовут Максим, я продакт и студент курса «Продакт-менеджер». . В этой статье я расскажу о проекте по редизайну карьерного сайта Альфа-Банка — с ним наша команда победила на хакатоне Практикума.

Читать далее
Total votes 19: ↑17 and ↓2+16
Comments3

Двоичный код Вселенной и симметричные языки

Reading time12 min
Views2.9K

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

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

Читать далее
Total votes 12: ↑5 and ↓70
Comments8

iOmega ZIP. Уже не дискеты, но ещё не HDD

Level of difficultyEasy
Reading time7 min
Views11K
Приветствую всех!

Казалось бы, о накопителях iOmega ZIP не писал только ленивый. Даже здесь, на Хабре было несколько статей, посвящённых этому во всех смыслах неоднозначному формату. Но вот в мои руки тоже попал такой привод, и я подумал: а что бы не затронуть и эту технологию? Тем более, что мне есть, что добавить к предыдущим обзорам.



Итак, в сегодняшней статье поговорим об iOmega ZIP — носителе информации, совмещавшем в себе недостатки как дискет, так и жёстких дисков. Узнаем, как устроены и работают такие устройства и посмотрим, что они могут. Традиционно будет много интересного.
Читать дальше →
Total votes 53: ↑53 and ↓0+53
Comments87
1
23 ...

Information

Rating
1,154-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity