Обновить
146.03

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Период
Уровень сложности

АнтиBIMing

Время на прочтение16 мин
Охват и читатели5.5K
image

Сама по себе автоматизация лишь инструмент и как каждый инструмент у нее есть своя область применения, своя техника безопасности внедрения и применения, а так же свои преимущества и негатив. Традиционно бизнес стремится внедряться IT-разработки там, где существуют достаточно высокая маржа, а значит проще получить прибыль и уменьшать издержки, однако существуют области в которых давно назрела необходимость что-нибудь внедрить с тем что бы упростить и тогда все сформируется. Речь о личном опыте решения таких задач при составлении исполнительной документации в строительстве.
Читать дальше →

“Связность” кода на примере генератора ASCII графиков, утилита для операций с интервалами и demo на Blazor WebAssembly

Время на прочтение13 мин
Охват и читатели2.9K

Работа с периодами может быть запутанной. Представьте, что у вас бухгалтерское приложение. И вам нужно получить периоды, когда сотрудник работал по графику “2 через 2” до индексации зарплаты. При этом нужно учитывать отпуска, смены графиков работы, увольнения/восстановления, переходы в другие отделы и прочие кадровые мероприятия. Эта информация хранится в виде приказов, у которых есть “Дата начала действия” и “Дата конца”, т.е. у вас есть периоды времени, с которыми нужно производить операции.

Например найти пересечение всех интервалов:

Читать далее

Как я создаю приложения для браузера прямо в браузере

Время на прочтение3 мин
Охват и читатели5K

GitJS


В 2013 году компания Canonical пыталась собрать средства на выпуск смартфона Ubuntu Edge. Особенностью продукта должна была стать возможность преобразовывать смартфон в полноценный ПК. Увы, необходимую сумму собрать не удалось, поэтому мечта создать универсальное устройство так и осталась мечтой.


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


Ранее я уже описывал как преимущества браузерных приложений на примере генератора статических сайтов nCKOB, так и преимущества замены очередного сервера с АПИ на Git для общения с внешним миром на примере приложения учёта трат ГитБюджет. После выпуска ГитБюджета оставшуюся часть 2020 года я потратил на систему, позволяющую создавать браузерные приложения прямо в браузере. Эту систему я назвал GitJS.

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

Интернациональное программирование на естественных языках

Время на прочтение7 мин
Охват и читатели5.9K
В последнее время часто попадаются на глаза статьи о новых языках программирования, а так же различные рейтинги и прогнозы, связанные с популярностью компьютерных языков.

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

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

Язык J становится ближе к людям

Время на прочтение2 мин
Охват и читатели2.7K
Отличительная черта языка J — это возможность написания итеративных алгоритмов без явного использования циклов и рекурсии. К примеру, сумма всех элементов массива решается так "+/", а среднее всех элементов массива так "+/%#".

Различные обзоры J уже не раз публиковались на Хабре. Например в этой статье и в этой.

J — язык с 30-летней историей и он все еще развивается и совершенствуется. Однако оставалось в J одно «белое пятно» — итеративные алгоритмы с остановкой по условию. Для этого предлагалось использовать конструкцию while. в паре c break. и continue.

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

И вот в 9й версии языка добавили новый союз F (названый так по первой букве слова «fold»).


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

Пишем видеочат для локальной сети, или осваиваем WebRTC в 2020 году

Время на прочтение6 мин
Охват и читатели9.6K
На фоне известных событий делать было нечего в рамках профессионального роста пытаюсь освоить WebRTC. Как известно, лучший способ освоения – сделать что-нибудь хотя бы потенциально полезное. А заодно и поделиться-обменяться опытом создания и набивания шишек.

В качестве задачи было решено сделать простое приложение, позволяющее проводить аудиовидеозвонки между двумя (пока что) стационарными или мобильными устройствами в локальной сети без необходимости подключаться к Интернету. Установка и первоначальная настройка такого приложения должны быть простыми настолько, чтобы сколь-нибудь продвинутый эникей без проблем с этим справился и показал пользователям, как делать звонки, а при наличии соответствующих навыков мог бы сделать небольшие доработки в части дизайна и возможностей. Клиентом должно выступать любое устройство, оснащённое устройствами ввода-вывода мультимедиа и позволяющее запустить подходящий браузер (Firefox или Chrome – тестил на майских, кажется, версиях).
Читать дальше →

Сложное поведение без нейросетей и обучения. Философский базис

Время на прочтение6 мин
Охват и читатели3.4K


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


Роботы Boston Dynamics, весьма вдохновенны. Вещи которые они делают поразительны. Как что-то похожее получить в домашних условиях? Как вообще подойти к этой задаче и насколько она посильна?

[кейс Locomizer] Как за два с половиной года ускорить расчёт тепловой карты в 20 000 раз

Время на прочтение31 мин
Охват и читатели4.1K
Данная статья является продолжением серии «Кейс Locomizer», см. также


Здравствуйте.

КПДВ: TC, EMR, IDEA

Знаете, что такое «постмортем»? Это повествование о том, как мы дошли до жизни такой.

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

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

Данная статья — историческая вводная по One Ring. Кода в ней нет, и рассказ скорее популярный, чем научный. Зато только про разработку, и ни о чём другом, кроме двух с половиной лет разработки.
Погнали в Нуменор?

Сортировка выбором минимумов (максимумов)

Время на прочтение14 мин
Охват и читатели26K

imageМногие программисты думают, что Quick Sort — самый быстрый алгоритм из всех существующих. Отчасти это так. Но работает она действительно хорошо только если правильно выбран опорный элемент (тогда сложность составляет O (n log n)). В противном же случае асимптотика будет примерно такой же как и у пузырика (то-есть O (n2)).
При этом, если массив уже отсортирован, то алгоритм всё-равно будет работать не быстрее, чем O (n log n)


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

«Дело было вечером, делать было нечего», — Сергей Михалков.

Требования:


  1. Лучший случай O (n)
  2. Средний случай O (n log n)
  3. Худший случай O (n log n)
  4. В среднем быстрее быстрой сортировки


А теперь давайте обо всём по порядку


Чтобы наш алгоритм всегда работал быстро, нужно чтобы в среднем случае асимптотика была хотя бы O (n log n), а в лучшем — O (n). Все мы прекрасно знаем, что в лучшем случае сортировка вставками работает за один проход. Но в худшем ей придётся гонять по массиву столько раз, сколько в нём элементов.


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

Первый русский программист

Время на прочтение4 мин
Охват и читатели9.4K
13 декабря — день памяти русского ученого и изобретателя, чьим желанием было подарить человечеству программирование и сделать это бескорыстно, без прибыли и славы. Его желание сбылось — мир получил программирование, а его имя оказалось в тени. Однако негоже держать светильник под кроватью, и нет ничего тайного, что не стало бы явным.
Читать дальше →

Возвращаем Thread.Abort() в .NET Core. Поставка приложения со своей версией CoreCLR и CoreFX

Время на прочтение5 мин
Охват и читатели7.6K
В процессе миграции с .NET Framework на .NET Core могут всплыть некоторые неприятные моменты. Например, если ваше приложение использует домены — логику придется переписывать. Аналогичная ситуация с Thread.Abort(): Microsoft настолько не любит эту практику (и справедливо), что сначала они объявили этот метод deprecated, а затем полностью выпилили его из фреймворка и теперь он вероломно выбрасывает PlatformNotSupportedException.

Но что делать, если ваше приложение использует Thread.Abort(), а вы очень хотите перевести его на .NET Core, ничего не переписывая? Ну, мы-то прекрасно знаем, что платформа очень даже поддерживает этот функционал, так что могу вас обрадовать: выход есть, нужно всего лишь собрать свою собственную версию CLR.

Disclaimer: Это сугубо практическая статья с минимумом теории, призванная только продемонстрировать новые варианты взаимодействия разработчика и .NET среды. Никогда не делайте так в продакшене. Но если очень хочется...


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

YOLO и другие отвязные методологии

Время на прочтение3 мин
Охват и читатели8.5K

YOLO


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


Вообразите наше восхищение, когда манифест этой новаторской новой методологии попал в наши новостные ленты. Пророк YDD, она же YOLO Driven Development Todor Grudev высек в камне (на GitHub) 17 заповедей YDD. YOLO буквально означает — You Only Live Once, или по-русски: ВЖОРВы Живете Один Раз.


Because #YOLO

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

[Пятничное] Как мы пилили 3D Web

Время на прочтение5 мин
Охват и читатели6.1K
Мы с братом, пара 3D художников, этакие парни с крутыми прическами и в прикольных очках. Практически близнецы с абсолютно одинаковыми лицами, но диаметрально разными характерами. Однако, увлечение у нас одно на двоих — воплощать в виртуале то, что есть в реале. И надо сказать, это вполне удается, ибо один неплохой моделлер, а второй аниматор от Бога.

Вот только инструментарий у нас различается и ого-го как! Я страстно и нежно люблю Blender, а мой братело обожает Макса. Холивар не утихает никогда, но нам удается создавать прикольные вещи, используя свои столь разные 3D редакторы. Однако, тема не об этом.

Все началось с портфолио… Со создания чёртового портфолио, после которого мы с братом разругались вдрызг, синхронно навесив друг-другу «фонари». Вы задумывались когда-нибудь о переносе 3D работ куда-нибудь в интернет, хоть в свой блог?

Окей, читатель, ты попал по адресу, ибо таких неудачников еще поискать нужно, хотя финал все-же получился обнадеживающий.
Читать дальше →

Ближайшие события

Идеальный каталог, вариант реализации

Время на прочтение13 мин
Охват и читатели9.8K
В продолжении статьи "Идеальный каталог, набросок архитектуры", я покажу на примерах как можно использовать предложенную структуру БД для хранения произвольных данных и выполнения произвольных поисков по этим данным. Скрипты лежат в репозитории — universal_data_catalog_idea.

Приглашаю под кат, тех кому интересно посмотреть на эти скрипты с авторскими комментариями.
Читать дальше →

Простая реализация Stream из Java 8 в С++

Время на прочтение12 мин
Охват и читатели8.8K

Всем привет! В статье будет представлена упрощенная реализацию Stream из Java 8 на С++. Скажу сразу, что:


  • в отличии от Java не используются отложенные вычисления;
  • нет параллельных версий;
  • местами совмещает Stream и Collectors;
  • используются простые и готовые решения от STL, здесь нету чистого ФП, где только рекурсия;
  • не используются техники оптимизации.

В этой версии основной упор сделан на то, чтобы быстро и просто сделать велосипед). Про ФП упомянуто по-минимуму (комбинаторам внимание не уделено :)).


Интерфейс


template <typename Type>
class Stream : private StreamImpl<Type>
{
private:
    typedef StreamImpl<Type> Parent;
public:
    using Parent::Parent; // конструкторы унаследованы
    using Parent::data;
    using Parent::isEmpty;
    using Parent::count;
    using Parent::flatMap;
    using Parent::map;
    using Parent::reduce;
    using Parent::filter;
    using Parent::allMatch;
    using Parent::noneMatch;
    using Parent::groupingBy;
    using Parent::partitionBy;
    using Parent::minElement;
    using Parent::maxElement;
    ~Stream() = default;
};
Читать дальше →

Иммутабельные данные в С++. Часть 2

Время на прочтение3 мин
Охват и читатели9.4K

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


Чем полезны иммутабельные данные в С++?

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

msvcore – c++, кроссплатформенная библиотека, велосипед и 12 лет разработки

Время на прочтение11 мин
Охват и читатели13K
Привет Хабр, я хочу рассказать о творении, на которое потратил свою молодость, уж лучше бы пил и курил.

Msvcore – это кроссплатформенная библиотека для c++, написанная с нуля по принципам оптимальности, открытости и простоты. По крайней мере, это закладывалось как базовая идея. Что получилось в итоге…
Читать дальше →

Структурная модель СКУД предприятия с арендаторами и их клиентами

Время на прочтение6 мин
Охват и читатели6K
На одном предприятии, основным видом деятельности которого является предоставление офисов и складских услуг, возникла необходимость установить СКУД. Клиентами предприятия являются организации и индивидуальные предприниматели, занимающиеся торгово-закупочной и производственной деятельностью. В свою очередь, они имеют большое количество собственных клиентов.

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

Особенности структурной модели


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


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

Борьба с мельницами — 1: интерполяционные сплайны

Время на прочтение8 мин
Охват и читатели12K
В данной статье лирический герой бросает вызов оптимальной реализации классического полиномиального интерполятора Лагранжа (Фарроу), в процессе битвы случайно открывает и доказывает тривиальное никому не нужное математгическое заклинание, с помощью которого пытается потеснить противника, но по результатам всех раундов боя решением судей фиксируется ничья.

— Где вы видите великанов? — спросил Санчо Панса.
— Да вон они, с громадными руками, — отвечал его господин. — У некоторых из них длина рук достигает почти двух миль.
— Помилуйте, сеньор, — возразил Санчо, — то, что там виднеется, вовсе не великаны, а ветряные мельницы; то же, что вы принимаете за их руки, — это крылья: они кружатся от ветра и приводят в движение мельничные жернова.
— Сейчас видно неопытного искателя приключений, — заметил Дон Кихот, — это великаны. И если ты боишься, то отъезжай в сторону и помолись, а я тем временем вступлю с ними в жестокий и неравный бой…

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

Архитектура игрового клиента многопользовательской Tower Defence. Новогодняя история

Время на прочтение3 мин
Охват и читатели8.9K
Привет, Хабр!

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

Краткое содержание предыдущих серий


Как-то в конце декабря 2014 года команда из четверых человек решила создать клон одного из самых популярных модов к WarCraft 3 — Legion TD.
Читать дальше →

Вклад авторов