Как стать автором
Обновить
518
233.8

Пользователь

Отправить сообщение

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

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров8.6K

Если вы когда-нибудь заглядывали за кулисы пользовательских веб-интерфейсов, то знаете для чего нужно свойство class. Оно ведь нужно для связи HTML с CSS, правда? Сейчас я расскажу о том, почему настало время отказаться от него. Имена классов — это архаичная система, используемая как неудачный посредник для примитивов UI; ещё хуже то, что они создают ужасные сочетания, приводящие к комбинаторному взрыву странных пограничных случаев. Давайте изучим этот вопрос, начав со скучного урока истории, который вы уже слышали миллион раз.
Читать дальше →
Всего голосов 48: ↑42 и ↓6+50
Комментарии51

Побеждаем компилятор в скорости при помощи ассемблера

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров7.3K

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

Тем не менее, иногда до нас доносятся слухи.

Написанные в древних томах, подслушанные в тайных покоях, начертанные на стенах разрушенных храмов, упоминаемые в загадочных текстах, они рисуют чёткую картину:

Компиляторы плохо справляются с генерацией кода для интерпретаторов, и можно превзойти их, написав интерпретатор на языке ассемблера.
Читать дальше →
Всего голосов 40: ↑38 и ↓2+52
Комментарии41

Как правильно тестировать конкурентные структуры данных

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров4.9K

Есть потрясающая библиотека Rust под названием loom, которую можно использовать для тщательного тестирования неблокируемых (lock-free) структур данных. Я давно хотел разобраться, как она работает. И сейчас хочу! Но недавно я случайно реализовал небольшой эксперимент, который, как мне кажется, содержит часть идей loom, поэтому о нём стоит написать. Моя цель — не научить вас тому, что нужно использовать на практике (если вы хотите этого, то почитайте документацию loom), а, скорее, вывести пару идей из фундаментальных принципов.
Читать дальше →
Всего голосов 32: ↑32 и ↓0+43
Комментарии3

Профайлер памяти. Зачем он нужен и как использовать

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров4.7K


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

Профайлер можно использовать не только в разработке, но и в системном администрировании, чтобы отслеживать рабочие процессы конкретных приложений, скриптов и задач.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+28
Комментарии2

Как я запустил Linux с Google Drive

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров19K

Я грешен: во мне есть дух соперничества. Когда я услышал, что мой друг заставил Linux загружаться с NFS, мне обязательно нужно было его превзойти. Я обязан был доказать, что могу сделать что-то сложнее, лучше, быстрее, сильнее [прим. пер.: в оригинале отсылка к композиции Daft Punk «Harder, Better, Faster, Stronger»].

Как и все хорошие проекты, этот начался с идеи.

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

На грани безумия мой утомлённый мозг придумал мой magnum opus: запуск Linux с рута Google Drive.

▍ Но как?


Я хотел обеспечить автономность системы, поэтому не мог использовать в качестве «помощника» вторую машину. Мой разум сразу же вспомнил FUSE — программу, работающую драйвером файловой системы в пользовательском пространстве (с поддержкой со стороны ядра).

Мне достаточно было установить программы FUSE в initramfs ядра Linux и сконфигурировать сеть. В этом ведь не должно быть ничего сложного, так?
Читать дальше →
Всего голосов 50: ↑49 и ↓1+66
Комментарии6

Как я добавлял USB-разъём в ThinkPad X1 Nano

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров19K

Мне захотелось добавить в свой ноутбук ThinkPad X1 Nano внутренний USB-разъём, что должно было стать довольно простой задачей, но не стало.

Разумеется, если бы я всё ещё работал на Framework Laptop, то для этого было бы достаточно подключить модуль, но я уже довольно долгое время использую в качестве основного ноутбука X1 Nano.
Читать дальше →
Всего голосов 48: ↑48 и ↓0+62
Комментарии44

Программист никому не должен доверять, и даже самому себе

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.2K

Программисты должны быть параноиками.

  • «Я дважды проверил код»
  • «Код проходит все тесты»
  • «Ревьюер одобрил мой код»

«Так ли корректен мой код?»

Писать код корректно трудно, а подтвердить корректность кода невозможно.
Вот некоторые из причин этого:

  • Всеобщность: даже если код правильно вёл себя один раз, будет ли он вести себя так во всех случаях на всех машинах и всегда?
  • Ложное прохождение теста: непрохождение тестов указывает на наличие багов, но прохождение тестов не гарантирует их отсутствия.
  • Отсутствие определённости: можно написать формальное доказательство корректности кода, но теперь нужно задаться вопросом, корректно ли доказательство. Потребуется доказать доказательство. Эта цепочка проверки проверок никогда не закончится.

Безумно было бы стремиться к определённости корректности кода. Баг может скрываться в зависимости, которую вы никогда не найдёте. Однако отчаиваться не стоит, всё равно можно снизить вероятность багов, расширяя своё понимание и внимательность.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+34
Комментарии4

Всё ещё нерешённая загадка замерзания воды

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров10K

В школе нас учат, что вода замерзает при нуле градусов Цельсия, но так бывает редко. Учёные обнаружили в облаках переохлаждённые капли воды до температуры -40 °C, а в 2014 году в лабораторных условиях они охладили воду до целых -46 °C без замерзания. Вы можете переохладить воду и дома: засуньте бутылку дистиллированной воды в морозилку, и она вряд ли кристаллизуется, пока вы её не встряхнёте.

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

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

Несмотря на свою кажущуюся обычность, процесс льдообразования остаётся на удивление загадочным. Химики не могут точно прогнозировать влияние конкретной примеси или поверхности, не говоря уже об их создании для замедления или ускорения формирования льда. Но они постепенно работают над этой задачей. Они создают компьютерные модели, которые могут точно симулировать поведение воды, и ищут подсказки в природе — лучшими из известных учёным центров льдообразования становятся белки, производимые бактериями и грибками.
Читать дальше →
Всего голосов 31: ↑30 и ↓1+38
Комментарии34

О неотъемлемой сложности систем

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.4K

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

  • написание кода;
  • создание и поддержка качественного ПО;
  • создание и поддержка достаточно хорошего ПО экономически выгодным образом;
  • управление сложностью;
  • удовлетворение потребностей пользователей;
  • решение задач;
  • удовлетворение потребностей заказчиков;
  • зарабатывание денег для организации-работодателя или для её заказчиков;
  • зарабатывание денег (для себя).

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

Каждая цель проистекает из определённого способа моделирования мира и наших действий. Как и в случае с любой абстракцией, они выполняют свою задачу в подходящем контексте и становятся ложными вне этого контекста; многие проблемы в разработке ПО могут быть объяснены такой искажённой перспективой, о чём я говорил в своём предыдущем посте. В этой статье мы будем считать, что основная задача разработчика ПО — это управление сложностью.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+28
Комментарии4

Как я нашёл 55-летний баг в первой игре о приземлении на Луну

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров18K

Спустя всего несколько месяцев после исторической прогулки по Луне Нила Армстронга, ученик массачусетской школы Lexington High School Джим Сторер написал первую версию игры Lunar Landing. К 1973 году она стала самой популярной компьютерной игрой с большим отрывом от остальных. В этой простой текстовой игре вы управляете аппаратом для посадки на Луну, стремясь максимально плавно приземлиться. Всё движение происходит вертикально, каждые десять симулируемых секунд игрок решает, сколько топлива нужно сжечь.

Недавно я исследовал график оптимального сжигания топлива для наиболее мягкого приземления с максимумом оставшегося топлива. К моему удивлению, теоретически наилучшая стратегия не сработала. Игра ошибочно думает, что аппарат не коснулся поверхности, хотя на самом деле это так. Углубившись в анализ, я был потрясён сложной физикой и вычислениями в игре. В конечном итоге я обнаружил баг: отсутствующее деление пополам; похоже, почти за 55 лет никто не заметил этого.
Читать дальше →
Всего голосов 79: ↑79 и ↓0+106
Комментарии27

Дата-центр ЦЕРН на 1 эксабайт: как хранят данные

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров7.7K


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

Например, в Европейском центре ядерных исследований (ЦЕРН) работает один из крупнейших дата-центров в мире. Без этого вычислительного кластера мы бы искали бозон Хиггса ещё очень долго, а Стандартная модель так бы и осталась незавершённой.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+53
Комментарии6

Как я пытался создать электрохимические датчики на тканой основе

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.5K

В 2016 году я решил проверить, смогу ли создать электрохимические датчики, которые бы были гибкими и изготавливались как ткань (или печатались на ней). Это исследование продолжалось вплоть до эпидемии COVID, но за все эти годы я так и не задокументировал свои достижения.

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

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

Перечислю различные исследованные мной подходы:

  • вытравливаемый на тканях лазерно-индуцированный графен (laser-inscribed graphene, LIG);
  • вплетаемые в ткань металлические нити;
  • вышивание металлическими нитями;
  • трафаретная печать по ткани чернилами на основе металла и графена.

В статье представлено более подробное описание каждого из этих исследований.
Читать дальше →
Всего голосов 33: ↑33 и ↓0+53
Комментарии4

Эвристики морских просторов: математическая оптимизация океанских контейнеровозов

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.2K
Такие контейнеровозы называют «post-Panamax», потому что они слишком велики, чтобы поместиться в Панамском канале

Посмотрите вокруг. Есть высокая вероятность того, что какие-то из окружающих вас предметов прибыли к вам по морю. 90% товаров в мире перемещается по океану, зачастую на ужасно огромных грузовых судах: длина четыреста метров, масса 250 тысяч тонн, вмещают в себя 12 тысяч контейнеров суммарной стоимостью в миллиард долларов. В отличие от самолётов, поездов и грузовых автомобилей, грузовые суда работают практически непрерывно, двигаясь по цикличным маршрутам в океанах.

Но какими же будут наилучшие, наиболее оптимальные маршруты таких судов? Для специалиста по computer science это задача из теории графов; для бизнес-аналитика — это задача цепочки поставок. Если её решить плохо, то контейнеры будут простаивать в портах, суда впустую тратить время в открытом море, неспособные причалить, а в конечном итоге подорожают товары из-за того, что поток физических ценностей замедлится и станет менее предсказуемым. Каждой занимающейся контейнерными перевозками компании приходится справляться с этими задачами, но обычно они решаются по отдельности. При их комбинировании сложность умножается; насколько нам известно, эту задачу так пока и не удалось решить для самых крупных контейнерных операций (500 судов и 1500 портов).

Команда Operations Research с гордостью представляет Shipping Network Design API, реализующий новое решение этой задачи. Наша методика лучше масштабируется, позволяя находить решения задач цепочек поставок общемирового уровня, будучи при этом быстрее, чем все остальные известные решения. Она способна удвоить прибыль компании-перевозчика, доставлять на 13% больше контейнеров, задействуя при этом на 15% меньше судов. В этой статье мы расскажем, как нам это удалось.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+26
Комментарии7

Выживание самых богатых: пузырь ядерных убежищ времён Холодной войны

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров12K

Угроза ядерного нападения во времена Холодной войны заставила американцев делать потребительский выбор, доведённый до крайней степени: покупай или умри. Сегодня ситуация не сильно изменилась.

Брошюры и полностраничные газетные объявления Лео Хоега распространялись по США осенью 1961 года, разя всех с силой ударной волны ядерного взрыва. «ПРОТИВОРАДИАЦИОННЫЕ УБЕЖИЩА МОГУТ СПАСТИ ЖИЗНИ 70 МИЛЛИОНОВ АМЕРИКАНЦЕВ».

За пару месяцев до этого, 25 июля, президент Джон Ф. Кеннеди ввёл американцев в курс Берлинского кризиса. Он предупредил о возможности ядерных ударов по территории США и впервые указал на важность противорадиационных убежищ (fallout shelter). Но он не донёс в подробностях, каким образом они появятся в стране, поэтому бизнесмены наподобие Хоега сами начали заполнять пробелы.

В рекламе Хоега говорилось: «вывод заключается в том, что убежища необходимы повсюду».

В качестве решения проблемы предлагалось убежище работодателя Хоега, Wonder Building Corporation. Он рекомендовал американцам немедленно купить его для установки в подвале или на заднем дворе: «мистер Хрущёв… может совершить ошибку уже завтра», поэтому не стоит рисковать, пока правительство США предложит налоговые льготы или финансирование программы производства убежищ.

Семейное убежище было мудрым вложением средств. «Страховкой для выживания», как говорил Хоег.
Читать дальше →
Всего голосов 57: ↑51 и ↓6+67
Комментарии56

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

Время на прочтение5 мин
Количество просмотров13K

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

Но есть случаи, когда виртуальный сервер удобнее домашнего. Например, он удобнее для раздачи файлов в интернете и обслуживания личного веб-сайта, а также для мониторинга и тестирования сервисов (программа должна быть постоянно в онлайне). Для создания дополнительной резервной копии файлового архива, которая будет физически удалена от основного домашнего хранилища. Даже ультрадешёвый сервер за 130 рублей в месяц способен одновременно поддерживать несколько процессов.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+28
Комментарии10

Как я постепенно избавляюсь от контроля Google

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров58K

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

Мне кажется, прежде, чем приступать, нужно дать важное предисловие. Во-первых, эти заметки сделаны по личному опыту, это не подробный обзор альтернатив сервисам Google, сравнения альтернативных решений можете поискать где-нибудь ещё. Во-вторых, для использования некоторых из упомянутых в статье альтернатив требуется настройка своего сервера, что для многих людей станет ограничивающим требованием.
Читать дальше →
Всего голосов 68: ↑58 и ↓10+69
Комментарии201

Делаем кондиционер умным с помощью Elixir и Nerves

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.8K

С каждым днём всё ближе обжигающее японское лето, поэтому я всё больше думал о своей давней идее: дистанционном управлении кондиционером воздуха в моей спальне через Интернет. Простым нажатием кнопки за десять минут до отправления ко сну я мог бы включить кондиционер, который бы превращал спальню в прохладный комфортный оазис к тому моменту, как я почищу зубы и поднимусь на второй этаж. В прошлом году это так и осталось идеей; в этом году я довёл её до реализации.
Читать дальше →
Всего голосов 28: ↑28 и ↓0+41
Комментарии28

Загадочное дело о пропавшей точке

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров19K

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

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

В компании на тот момент было множество шаблонов с устаревшими версиями. В некоторых шаблонах использовались устаревшие условия договоров, в других — старый логотип компании или неправильный шрифт и так далее. Системой стало невозможно управлять, и клиент попросил нас найти решение.
Читать дальше →
Всего голосов 85: ↑83 и ↓2+105
Комментарии32

Сравнение алгоритмов ограничения частоты запросов

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров6.4K

▍ Зачем ограничивать частоту?


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

Видео


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

Конечные точки API тоже часто ограничивают по частоте запросов, чтобы их ресурсы не монополизировал единственный пользователь. Представьте, что вам нужно, чтобы пользователи могли обращаться к затратной конечной точке не чаще ста раз в минуту. Это можно отслеживать при помощи счётчика, обнуляющегося каждую минуту. Все запросы после сотого в пределах этой минуты будут блокироваться. Это один из простейших алгоритмов ограничения частоты, называющийся fixed window limiter (ограничитель с фиксированным окном). Это распространённый способ управления трафиком к сервису.

Но не всегда всё так просто.

Когда начинается и заканчивается каждое одноминутное окно? Если я запущу поток запросов ближе к концу окна, смогу ли превысить лимит? Ёмкость окна восстанавливается по одному запросу за раз, или сразу на всё количество?

В этом посте мы рассмотрим три самых популярных алгоритма, чтобы ответить на каждый из этих вопросов.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+53
Комментарии4

Чипы на киловатт изменили теплоотвод

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров11K

Производительность чипов растёт экспоненциально по закону Мура и не думает останавливаться. Но вместе с ней растёт и энергопотребление, и тепловыделение микросхем. В 2023 году с появлением суперчипов GH200 (на КДПВ) ускорители перешли киловаттный диапазон. И это очень большая проблема. Инженерам приходится принимать неординарные решения по теплоотводу.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+36
Комментарии64
1
23 ...

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность