Habr.com

Syndicate content Хабр
Updated: 1 hour 43 min ago

Почему всё ломается даже у хороших программистов? Часть 2/2

6 hours 56 min ago

После несерьёзной статьи на серьёзную тему Job Safety Driven Development стоит рассказать о том, почему даже опытные и добросовестные программисты волей случая могут попадать в схожие ситуации. Сначала захотелось написать, почему программисты ошибаются вообще, но оказалось, что это слишком разные темы. Потом оказалось, что и на эту тему получился очень длинный текст. Пришлось разбить его на части. В первой части мы рассмотрим обычные случаи, которые знакомы многим крупным компаниям. И дополним понятие «серебряная пуля» понятием «золотая шестерёнка».  Во второй части поймём, какую цену вам, скорее всего, придётся заплатить за «золотую шестерёнку», я приведу немного своего опыта. Как всегда, попробую писать простым языком, понятным широкой аудитории.

Читать далее

Антипаттерны в написании учебных пособий или откуда растут ноги плохого кода?

15 hours 55 min ago

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

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

Важно: пример из статьи не является вымыслом или шуткой!

Ещё важней: статья не является критикой математики, математику я люблю.

Мучаемся вместе

«Умные» теплицы и GPS-датчики для трактора: зачем нужен интернет вещей на ферме

Fri, 06/24/2022 - 22:38

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

Читать далее

Отрисовка в браузере большой анимации или как я ушел с mp4 к своему формату видео

Fri, 06/24/2022 - 19:31

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

Читать далее

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

Fri, 06/24/2022 - 19:02

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

Рождение идеи

Примерно за неделю до нового 2022 года, сидя в гостях у друга и покуривая кальян, мы сидели и думали “чоб такого придумать-замутить, чтобы было интересно”. Начали накидывать идеи, но все были так себе. Сначала приходили на ум всякие сложные идеи, типа убийцу %PopularService%, но было решено начать с чего-то попроще, например, какого-нибудь бота для Телеграм... начали обсуждать, чего не хватает конкретно нам и что могло бы быть удобно для большого числа людей.

Потом кто-то сказал: “Мы почему-то дома часто сидим, не ходим никуда. На ** (одном из многих сайтов-агрегаторов мероприятий) всякий шлак, а что-то интересного нет”. И возникла идея - а что если сделать бота в Телеграме, которому ты просто однажды поставил, о каких мероприятиях хочешь получать уведомления, и после этого про него забываешь? А он тебе рассказывает только о тех событиях, которые тебе действительно интересны. Да еще впереди и праздники новогодние - идея должна стрельнуть.

Мы быстро раскидали зоны ответственности за бота - кто собирает мероприятия, кто пишет бота, кто думает о том, как продвигать. И забили нафиг.

Читать далее

[Перевод] История интерфейса Firefox от самых первых версий

Fri, 06/24/2022 - 18:35
История UI Firefox важна для меня потому что мой личный проект компенсирует недостатки его UI Proton и наследует сильные стороны разных UI Firefox.

Кроме того, это один из способов избежать раскола сообщества, ведь каждый раз при серьёзных изменениях в UI возникало множество форков.

Первые версии (v1 ~ v3)

Phoenix (сентябрь 2002 года) возрождается из пепла Netscape [см. историю первых версий Firefox].

Выделяются крупные оранжевые кнопки. Историю Netscape см. в статье A Visual Browser History, from Netscape 4 to Mozilla Firefox.


Firefox v1 (ноябрь 2004 года), v2 (октябрь 2006 года), v3 (июнь 2008 года) [The Importance and Problems of Autoupdate].

Версии примерно с v1 по v3 имеют классический UI, который вы помните, если работали с ним в начале 2000-х. В значках есть цвета и не реализована абстракция.
Читать дальше →

Обратные простые числа сквозь призму систем счисления

Fri, 06/24/2022 - 18:21

В данной статье речь пойдёт о full reptend простых числах. Множество анимированных визуализаций и сонификации прилагаются. (Осторожно трафик)

Читать далее

[Перевод] Самодельная 40% клавиатура IBM Model F

Fri, 06/24/2022 - 18:00


В прошлом году у меня возникла идея собрать собственную емкостную клавиатуру на изгибных пружинах (buckling spring). После изучения всевозможных решений, реализованных разными энтузиастами с применением контроллеров CapSense, я решил, что вполне могу спроектировать кастомную плату и использовать XWhatsit с прошивкой QMK. Читать дальше →

5 отличных одноплатников лета 2022 года для работы и экспериментов

Fri, 06/24/2022 - 17:40

Кластер из Blade 3 SBC

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

[Карьера в IT] Собеседование в корпорацию: чего ждать и к чему готовиться на интервью в ЯFAANG

Fri, 06/24/2022 - 17:33

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

Читать далее

[Перевод] Изменения физики в Unity 2022.1: расширение робототехнического инструментария

Fri, 06/24/2022 - 17:09

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

Читать далее

Абстракции и наследование в Си — стреляем по ногам красиво

Fri, 06/24/2022 - 17:05

Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимое структуры несколько раз, пишешь везде, как дурак, printf("%s %d %f\n", foo->bar, foo->baz, foo->boom), и интуитивно кажется, что есть способ сделать foo->print(foo), и так вообще со всеми структурами, не только с foo.

Возьмем пример: есть некий чувак с именем и фамилией, и есть птица, у которой есть имя и владелец.

Читать далее

Релиз языка программрования NewLang

Fri, 06/24/2022 - 16:19


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


Основной особенностью языка является простой, логичный и не противоречивый синтаксис, который основан не на использовании зарезервированных ключевых слов, а на строгой системе грамматических правил с использованием знаков препинания (в список которых входят и операторы языка).


Новое по сравнению с прошлым выпуском:


  • Реализованы все основные алгоритмические конструкции: проверка условий, различные варианты циклов, сравнение по образцу, прерывание последовательности команд и возврат данных, обработка ошибок и т.д.
  • Переработан основной синтаксис для отдельных языковых конструкций.
  • Реализованы большинство операций с переменными, включая операторы раскрытие списков и тензоров.
  • Серьезно переработана система встроенных типов, реализованы функции для их преобразования и для определения данных (последнее можно назвать data comprehensions).
  • Добавлены новые тесты и пр.
Читать дальше →

«Основы Go» — новый бесплатный курс от Яндекс Практикума

Fri, 06/24/2022 - 16:13

Яндекс Практикум запустил бесплатный курс «Основы Go». Это курс для тех, кто хочет оценить Go и у кого есть опыт в программировании на других языках. 

Курс поможет освоить базу Go, научиться писать простые тесты, портировать код с другого языка, править мелкие баги. Учёба займёт примерно 30 часов.

Читать далее

Автоматизация тестирования при разработке прошивок радиоэлектронных устройств

Fri, 06/24/2022 - 16:00

Занимательный факт. Исходный код программы бортового управляющего компьютера лунного модуля Аполлон 11 содержит 64830 строк. Исходные коды прошивок навигационного приемника, которые мы в МЭИ разрабатываем последние десять лет, содержат 217510 строчек на C++ и 181236 строчек на SystemVerilog. И я всё жду, когда это количество перейдет в качество.

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

Читать далее

[Перевод] Раздувание кода стало астрономическим

Fri, 06/24/2022 - 15:48

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

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

… но по сути, речь идёт о том, что нужно зарегистрировать несколько файлов, считать их, загрузить, а затем закрыть соединение и записать в файл лога, всё ли прошло успешно, а если нет, то что именно случилось. В этом нет ничего сложного, и даже я писал с нуля подобный код при помощи Wininet API и PHP на сервере, общающемся с моей базой данных MySQL. Наверно, моя система была не такой надёжной, как системы уровня энтерпрайза, однако поддерживала сотни тысяч загруженных файлов, их верификацию, скачивание и логирование. Наверно, это работа для одного кодера на две-три недели?

Специальный инструмент загрузки на сервер, которым я пользуюсь сегодня, суммарно имеет 230 МБ клиентских файлов и задействует 2,7 тысяч файлов для управления этим процессом.
Читать дальше →

Как предсказать настроение женщины или зачем нам статистика. Часть 1

Fri, 06/24/2022 - 15:25

Как предсказать настроение своей девушки.

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

Я же решил пойти своим путём опираясь на логику и статистику.

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

Читать далее

Dashboard as code, или как мы создание дашбордов автоматизировали

Fri, 06/24/2022 - 15:11

Привет! Мы в QIWI довольно давно применяем микросервисную архитектуру, но ее понимание не всегда было одинаковым: оно менялось со временем и эволюционировало. Наши первые микросервисы были достаточно большие по объему, но сейчас мы создаем сервисы гораздо меньшего размера с более узкой и ограниченной зоной ответственности. 

Часто такой сервис отвечает за конкретную небольшую фичу в нашем продукте (или вообще за часть фичи), или же за часть какого-то большого процесса. Нам такой подход нравится, поскольку микросервисы имеют независимые жизненные и релизные циклы, мы можем релизить фичи независимо друг от друга. Кроме того, различные команды могут работать в рамках одного продукта параллельно над разными фичами, не мешая друг другу и не сталкиваясь лбами. Это даёт нам возможность независимо масштабировать микросервисы и гораздо быстрее проверять гипотезы. В общем, плюсов много. 

Сейчас будет «Но», правда?

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

Читать далее

Особенности применения LRU кэша в ASP NET Core приложениях

Fri, 06/24/2022 - 14:16

В современной веб разработке сложно переоценить значение такого инструмента как кэш. Мы сохраняем результаты выполнения длительных, дорогостоящих или часто выполняемых операций в некое хранилище, обратиться к которому будет быстрее и дешевле чем к первоисточнику или дешевле чем повторять операцию. В качестве такого хранилища обычно выступает оперативная память или же оптимизированные для быстрого доступа по ключу базы данных, такие как Redis. Кэш это незаменимый инструмент для уменьшения времени отклика и повышения масштабируемости приложения. Однако он имеет свои ограничения, которые связаны в основном с размером кэша. У нас не хватит оперативной памяти и пространства в Redis чтобы полностью закешировать таблицу базы данных с миллионами записей. Для решения проблемы использования кэша при большом объеме исходных данных и ограниченных ресурсах, мы должны применить некий алгоритм, который позволит нам кешировать только самое необходимое - часто запрашиваемые элементы. В этой статье мы детально рассмотрим применение одного из таких алгоритмов кэширования - LRU в контексте ASP NET Core приложения.

Эта статья может быть полезна разработчикам, которые ищут пути повышения производительности веб приложения, а также всем разработчикам, заинтересованным в расширении своего профессионального инструментария.

Читать далее

BPMN не в теории, а на практике

Fri, 06/24/2022 - 14:10

Или ментальные «ловушки», которые мешают аналитикам использовать нотации.

От системного аналитика требуют знание нотации BPMN (Business Process Model and Notation). Недавно среди своих коллег — системных аналитиков — я провела опрос о BPMN. Мне было интересно узнать используют ли мои коллеги нотацию, как именно и в чём сложности. В результате я нашла парадокс: большинство коллег считают, что нотации необходимы в работе, но на практике используют меньше половины. Почему возник такой парадокс и как его решить?

Попробую разобраться

Who's online

There are currently 1 user and 1 guest online.