Pull to refresh
9
0
Send message

Грязный код

Level of difficultyMedium
Reading time10 min
Views30K
Эдсгер Дейкстра: «Грязно и быстро — мне это не понравится»

«Чтобы иметь право называть себя профессионалом, вы должны писать чистый код. Нет никаких разумных оправданий тому, чтобы не стремиться к лучшему». Clean Code

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

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

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

Я программирую уже довольно давно и видел разнообразные подходы к обеспечению работоспособности ПО. Кто-то любит объектно-ориентированное программирование (я тоже), другие умные люди его ненавидят. Кому-то нравится выразительность динамических языков, кого-то она бесит. Кто-то успешно выпускает программы, строго следуя концепции Test Driven Development, другие добавляют в конце проекта несколько сквозных тестов, а многие остаются где-то посередине этих крайних точек.

Я был свидетелем проектов, выпускавших и поддерживавших успешное ПО на основе всех этих разнообразных подходов.

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

Автоматизация задач и резервное копирование на сервере

Level of difficultyEasy
Reading time6 min
Views4.9K


Ispmanager — одна из популярных коммерческих панелей управления веб-сервером. Это альтернатива или дополнение для командной строки. Простой и понятный GUI, который пригодится начинающим системным администраторам. По функциональности она, конечно, не сравнится с консолью, но в GUI-панелях крайне низкий порог входа, что очень полезно для виртуального хостинга, да и в принципе личных серверов как полезной услуги для каждого человека.

Посмотрим, как решаются в ispmanager некоторые типичные задачи.
Читать дальше →

Пол Лайнбарджер. Научная фантастика и психологическая война

Level of difficultyEasy
Reading time8 min
Views8.5K


Несколько лет назад на Хабре поднималась тема приёмов психологической войны. Там же приводились примеры военной пропаганды времён Второй мировой.

В обсуждении мельком упомянули легендарного Пола Лайнбарджера, который заложил фундаментальную теоретическую основу для этой дисциплины. Работы американского специалиста внимательно изучались в СССР (см. книгу Лайнбарджер. Психологическая война. Перевод с английского, Издательство министерства обороны СССР, 1962 год). Эти методы применяются на практике до сих пор — как по прямому назначению в военных конфликтах, так и в бизнесе: пиар, маркетинг, реклама, массовые коммуникации. В 2013 и 2023 годах американскую классику переиздавали в РФ, причём у книги высокий рейтинг 8.62 и отзывы читателей. Тема опять стала актуальной.

Сам Лайнбарджер — весьма неординарная личность. Любопытно, что параллельно с основной работой в минобороны США он приобрёл известность как автор научно-фантастических произведений, и очень интересных.
Читать дальше →

Неизвестно полезный CSS. Часть 5

Level of difficultyMedium
Reading time6 min
Views13K


Привет, Хабр. Я продолжаю рассказывать про неизвестные широкому кругу разработчиков CSS-фишки. Я отбираю их так, чтобы они были полезны в разного рода проектах. Неважно, верстаете ли вы сайт для малого бизнеса или создаёте супермодное React-приложение. Они поддерживаются большинством браузеров. Отдельно отмечу, что я не считаю IE11 современным браузером. По этой причине я не учитывал его.

Читать дальше →

Физика датчиков электрогитары на примере конструктора из Поднебесной

Level of difficultyEasy
Reading time10 min
Views13K


Привет, Хабр! Сегодня мы увидим и услышим достоинства и недостатки недорогого набора для самостоятельной сборки электрогитары от фирмы IRIN. Этот конструктор можно заказать в любую страну СНГ через Aliexpress или Temu без каких-либо ограничений и заморочек. Зато имеются серьёзные проблемы с качеством компонентов и трудностями в их подгонке, но всё это можно преодолеть.

Гитару я буду собирать не простую, а кастомную. Установка третьего звукоснимателя и особая схема коммутации превратит её в Nashville Telecaster — инструмент «два в одном», сочетающий звучания и телекастера, и стратокастера.

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

Советская электрогитара со встроенными эффектами: восстановление

Level of difficultyEasy
Reading time8 min
Views13K


Привет, Хабр! Когда 26 лет назад мне удалось приобрести подержанную Jolana Diamant, Тоники и Уралы захотелось забыть как страшный сон. Потом были ещё более качественные электрогитары, а с годами проснулась ностальгия и появилось желание восстановить какой-нибудь инструмент из времён детства.

Форманта 241-БЛ представляет интерес не только достойным, особенно в сравнении с современниками, качеством исполнения, но и наличием встроенного эффекта фузз.

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

Эй, компьютер, создай-ка мне шрифт

Level of difficultyMedium
Reading time6 min
Views7.4K

Это история о том, как я с нуля осваивал создание генеративных моделей МО, попутно обучая компьютер создавать шрифты. Да, настоящие типографские шрифты, состоящие из набора заглавных глифов. Созданная мной модель получает на входе описание шрифта и создаёт на выходе файл с их готовым набором. Назвал я свой проект FontoGen.

Выше вы видите несколько примеров шрифтов, сгенерированных моделью FontoGen.

Ну а дальше я подробно опишу всю историю.
Читать дальше →

Краше прежнего: «улучшайзеры» в эмуляторах видеоигр

Level of difficultyEasy
Reading time17 min
Views11K

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

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

Doom практически на всём

Level of difficultyEasy
Reading time21 min
Views15K

Многие годы на ресурсах около-компьютерной тематики регулярно всплывают сенсационные новости про «невозможные» порты легендарной игры Doom — как очередной энтузиаст и Кулибин запустил её и на этом, и на том, и каждый раз на всё более странных и неподходящих предметах. По разнообразию версий и безумию некоторых из них этот культурный феномен вполне может потягаться с Bad Apple.

Главное в этом, конечно, вау-фактор: «а что, так можно было?», подивиться и пойти дальше. Мало кто интересуется деталями, можно ли в это играть, действительно ли это Doom, действительно ли есть, чему удивляться, а если есть, то чему именно. И в целом — как и что именно на самом деле было сделано. Но мало кто — это не про нас. Мы — поинтересуемся!
Читать дальше →

Неизвестно полезный CSS. Часть 3

Level of difficultyMedium
Reading time7 min
Views14K


Привет, Хабр. Я продолжаю рассказывать про неизвестные широкому кругу разработчиков CSS-фишки. Я отбираю их так, чтобы они были полезны в разного рода проектах. Неважно, верстаете ли вы сайт для малого бизнеса или создаёте супермодное React-приложение. Они поддерживаются большинством браузеров. Отдельно отмечу, что я не считаю IE11 современным браузером. По этой причине я не учитывал его.


Сегодня мы рассмотрим:

  • возможность задать несколько фонов с помощью свойства background;
  • свойство display, которое позволяет сделать так, что свойства элемента будут влиять через потомка;
  • как заставить псевдоэлемент nth-child выбрать элементы без привязки к позиции;
  • где будет находиться элемент с position: absolute, если для него заданы свойства grid-column и grid-row.

Больше не буду затягивать. Давайте посмотрим, что я вам подготовил.

Читать дальше →

Как компании зарабатывают на опенсорсе, а потом выкидывают его

Level of difficultyEasy
Reading time6 min
Views29K
Финансирование разработки Kubernetes крупнейшими спонсорами на GitHub за последние десять лет, источник

Эти компании сначала при помощи сообщества разрабатывают опенсорсный софт или берут готовый, строят на нём прибыльный бизнес, зарабатывают миллионы. А потом меняют лицензию, оставляя контрибуторов, пользователей и партнёров в недоумении, что им делать. Такова бизнес-модель некоторых современных компаний вроде Redis Labs.

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

И весь этот террариум кормится опенсорсом.
Читать дальше →

50 лет первой операционной системе для персональных компьютеров

Level of difficultyEasy
Reading time9 min
Views15K

В 1974 году первопроходец ПО для PC Гэри Килдалл продемонстрировал в Пасифик-Гроув, Калифорния, первую коммерчески успешную операционную систему для персонального компьютера — CP/M. В этой статье мы расскажем историю о том, как его компания Digital Research Inc. превратила CP/M в отраслевой стандарт, а позже проиграла версии ОС от Microsoft, скопировавшей внешний вид и стиль ПО DRI.
Читать дальше →

Секретная китайская плата многоканальной охранной сигнализации

Level of difficultyEasy
Reading time8 min
Views7.5K


Привет, Хабр! Сегодня мы познакомимся с интересной и полезной микросхемой приоритетного шифратора 8:3 CD4532, способной, в частности, расширить порт микроконтроллера, когда количество его выводов оказывается недостаточным для решения поставленной задачи.

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

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

Неадекватная стоимость исходящего трафика у некоторых облачных хостеров

Level of difficultyMedium
Reading time6 min
Views8.9K


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

Если обычные хостеры не тарифицируют этот трафик, то некоторые другие сервисы устанавливают специальные тарифы. Как показывает практика, это может стать неприятным сюрпризом для клиентов.
Читать дальше →

Как я делал сеть на 10 гигабит с минимальным бюджетом

Level of difficultyMedium
Reading time11 min
Views84K


Решил я ускорить тривиальную задачу в виде передачи файлов с одного компьютера на маленький домашний NAS. Раньше 10 гигабит были для меня чем-то заоблачным (с учётом цены на свичи, а также сетевые карты). Но благодаря апгрейду дата-центров, а также свежим чипам для свичей от Realtek, апгрейд оказался недорогим и безболезненным.

О выборе железа и тестах — под катом.
Читать дальше →

Эффект Монреаля: почему языкам программирования нужен Царь стилей

Level of difficultyMedium
Reading time7 min
Views10K

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

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

Какое подмножество C++ или Kotlin вы используете? Что вы предпочтёте: project.toml или requirements.txt? Теперь у вашего языка есть возможность поэтапной типизации с помощью аннотаций типов. Хотите ей воспользоваться? Как вы реализуете конкурентность: с помощью многопоточности, Tokio или std::async?

Чем более экспрессивный язык, тем сложнее всё становится. И здесь на сцену выходит Go. И речь не только о gofmt, но и о его стандартной библиотеке и согласованности. В Kotlin вам приходится гадать, что лучше использовать для ошибок: исключения или объекты Result? В случае же Go вам всё ясно – ищем err. Да, это многословно, но зато предсказуемо.

Экспрессивные языки прекрасны, но часто создают путаницу. Вы можете использовать богатый и комплексный язык, поддерживающий миллион способов реализации одного и того же. Именно это я хочу вам показать. Как же сохранить всю эту мощь, но уменьшить беспорядок? Как избежать возникновения 500 поддиалектов? Но прежде, чем переходить к решениям, обсудим Scala.
Читать дальше →

Обнаружение SSH-туннелей по размеру пакетов

Level of difficultyMedium
Reading time8 min
Views23K

Иллюстрация из книги «Справочник киберсантехника»

Протокол SSH — очень мощный инструмент, который используется для удалённой консоли или передачи файлов (scp, sftp). Есть менее известная функция перенаправления портов. Такие SSH-туннели используются для пробития файрволов и хорошо скрываются от обнаружения стандартными средствами мониторинга типа Trisul, Zeek (ранее был известен как Bro), Suricata и Snort. Поэтому для их обнаружения в корпоративной сети используются другие методы.
Читать дальше →

Множество масок Persona 5

Level of difficultyEasy
Reading time12 min
Views4.5K
image

С выходом Persona 3 Reload, ремейка игры, которая коренным образом изменила облик серии и сделала её одной из самых важных японских RPG-франшиз в истории, шумиха вокруг пятой части поутихла. Появившись на западе в 2017 году, следом за родной Японией, игра захватила умы геймеров по всему миру, имея нестандартные для жанра сеттинг, темы и художественное оформление.

Японские разработчики всегда тяготели к более абстрактному повествованию, чем их западные собратья, делая упор на геймплейные механики, образность сюжетов и не особо стремясь разжёвывать для игрока каждую деталь. И сегодня мы поговорим об одном из самых ярких представителей жанра JRPG последних лет, который сочетает в себе уникальные нарративные и геймплейные приёмы с желанием авторов честно высказаться о своей родной культуре.
Читать дальше →

Взлом космоса — теперь и на STANDOFF 12

Level of difficultyMedium
Reading time3 min
Views2.1K


В ноябре в рамках конференции Moscow Hacking Week прошла ещё одна кибербитва STANDOFF — мероприятие проводится уже 12-й раз. Однако STANDOFF 12 запомнился не только присвоением звания пятикратного чемпиона команде Codeby, но и новыми отраслями — в разработке одной из них мы приняли непосредственное участие. И если вы следите за нашими новостями, то сможете без проблем ответить, что это была за отрасль… Правильно, космос!

Соревнование было поистине масштабным: 15 команд 4 дня нон-стопом взламывали все из представленных областей (не досталось только сборочной инфраструктуре Positive Technologies, за взлом наивысшего уровня которой организаторы пообещали 5 миллионов рублей). Мы также проводили собственные отборочные испытания, давшие возможность победителям отправиться покорять Государство F в составе команды bRedTeam.
Читать дальше →

Гибкие магниты: что это и с чем их готовят?

Level of difficultyMedium
Reading time8 min
Views8.6K
Картинка Aliexpress, Freepik

Все мы хорошо знакомы с гибкими магнитами — кто-то клеит их на холодильник по поводу и без, кто-то (как автор статьи) закрывает с их помощью герметичную камеру 3D-принтера, а кто-то использует в иных технических целях. Что же это такое? Будем препарировать…
Читать дальше →

Information

Rating
Does not participate
Works in
Registered
Activity