Обновить

Бэкенд

Сначала показывать
Порог рейтинга

Coding Game. Mad Pod Racing. Игра для программистов.

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

Mad Pod Racing

Mad Pod Racing - это многопользовательская игра (соревнование) для программистов.

Ваша задача запрограммировать бота для победы в гонке на космическом корабле.

Вы можете использовать методы оптимизации, нейронные сети и многое другое для решения поставленной задачи.

Теги:
Всего голосов 1: ↑1 и ↓0+2
Комментарии1

Что такое чистая архитектура: основные особенности

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

Как, по сути, работает чистая архитектура
Как, по сути, работает чистая архитектура

Какие еще свойства чистой архитектуры важны:

  1. Тестируемость. Это значит, что бизнес-правила могут быть протестированы без UI, без баз данных, без веб-сервера и без любого другого внешнего компонента. Например, у нас может быть фронтенд на React и мобилка на Flutter — и мы при этом всё равно можем менять контракты, не меняя бизнес-правила.

  2. Чистая архитектура независима от информационных хранилищ. Можно поменять PostgreSQL на MongoDB или на любую другую СУБД. При этом работа бизнес-правил не изменится. 

  3. Чистая архитектура — это независимость от внешнего сервиса. По факту слой use-кейсов изолирован от внешнего мира, ничего о нем не знает. А знает только о том, как работать в рамках бизнес-системы.

Большой материал о том, на каком проекте была внедрен этот подход и почему выбрали именно его, читайте в блоге.

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии2

Когда нельзя доверять даже себе

Экосистема JavaScript — обширная, гибкая и насыщенная готовыми решениями. Она позволяет без особых усилий подключать сторонние пакеты — как в браузере, так и на сервере. Но у этой открытости есть и обратная сторона: сторонний код может вмешиваться в ваш собственный. Хорошо, если это происходит явно. Но бывает иначе: кто-то оборачивает ваши функции, переопределяет методы, расширяет прототипы — и тихо выполняет свою «чёрную работу».

В такой среде доверие к собственному коду становится условным. Разработчик ещё способен более-менее контролировать точку входа — HTML-страницу или Node.js-скрипт. Он может доверять тому, что написал сам и вызывает сам. До тех пор, пока не подключит стороннюю библиотеку. А дальше — возможны любые сценарии.

Чтобы можно было доверять своему коду хоть немного больше, я пошёл на эксперимент и по умолчанию встроил "заморозку" всех объектов, создаваемых моим DI-контейнером:

let res = await _composer.create(key, module, stack, this);
if (canBeFrozen(res)) Object.freeze(res);

При запуске node-приложения (или при загрузке кода на веб-страницу) я создаю контейнер и через него получаю нужный объект со всеми зависимостями:

import Container from '@teqfw/di';

const container = new Container();
const resolver = container.getResolver();
resolver.addNamespaceRoot('App_', '/home/user/project/src');
const app = await container.get('App_Main');
app.run();

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

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

Эта идея родилась после прений с коллегой @nin-jin — так что спасибо ему за подброшенную мысль ;) Я реализовал её в коде, опробовал на своих приложениях и вот теперь делюсь результатом.

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии7

Хотите разобраться, как работает Docker и зачем он нужен?

Тогда новый бесплатный курс — для вас!

Docker — это open source-платформа для создания контейнеров — окружений, где приложения работают независимо от ОС или среды. Технология упрощает перенос приложений между окружениями и ускоряет разработку.

В новом бесплатном курсе мы расскажем, с чего начать: как установить Docker, собрать образ, создать и запустить контейнер. Также познакомимся с Docker Compose и обсудим, чем Kubernetes отличается от Docker Swarm.

Несколько материалов для начала

Приступить к изучению курса →

Теги:
Всего голосов 5: ↑4 и ↓1+4
Комментарии0

Поздравляем с 0x8 марта девушек в IT!

В этом году мы решили не просто на словах поздравить девушек с праздником. Мы сделали видео с девушками и о девушках в IT. На то есть несколько причин:

  • Мы хотим сказать: коллеги, мы вам благодарны за ваш труд! Мы гордимся вами!

  • Мы хотим показать вам реальных людей из разных сфер IT, а не просто цифры в статистике.

  • Надеемся, примеры участниц покажут, что IT — это не для избранных. Здесь есть место каждой, если ей интересно и она этого захочет.

Смотрите видео по ссылкам:

Вдохновляйтесь, делитесь своими историями и отправляйте своим друзьям, коллегам, знакомым и всем, кто имеет отношение к IT!

А мы желаем всем айтишницам счастливого праздника, безопасности и простого человеческого счастья!

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии1

Ещё раз о количестве способов набрать сдачу в n рублей из заданного набора монет/купюр

 Вот известная задача: «Имеется неограниченное количество монет достоинством 1, 2, 5 и 10 рублей. Определить, сколькими способами можно ими выдать сдачу в n рублей».

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

Возможно, эта идея будет полезна в других задачах.

Итак.

При n = 7 все варианты следующие:

1 + 1 + 1 + 1 + 1 + 1 + 1

1 + 1 + 1 + 1 + 1 + 2

1 + 1 + 1 + 2 + 2

1 + 2 + 2 + 2

1 + 1 + 5

2 + 5

 Среди них можно выделить те, в которых минимальным слагаемым является 1. Их – 5. В оставшемся шестом варианте минимальным слагаемым является 2. Вариантов, в которых минимальным слагаемым является 5 и 10, в данном случае нет.

При n = 10 все варианты следующие (без знака +):

1111111111, 111111112, 11111122, 1111222, 112222, 111115, 11125, 1225, 22222, 55, 10,

то есть

количество вариантов с минимальным слагаемым 1 равно 8;

количество вариантов с минимальным слагаемым 2 равно 1;

количество вариантов с минимальным слагаемым 5 равно 1;

количество вариантов с минимальным слагаемым 10 равно 1.

 Подумав (😊), можем сказать, что при n = 11:

· количество вариантов с минимальным слагаемым 1 будет таким же, как общее число всех вариантов для n = 10 (так как разность 11 – 10 не превышает 1);

· количество вариантов с минимальным слагаемым 2 будет равно сумме количеств с минимальными слагаемыми 2, 5 и 10 для n = 9 (так как разность 11 – 9 не превышает 2);

· количество вариантов с минимальным слагаемым 5 будет равно сумме количеств с минимальными слагаемыми 5 и 10 для n = 6  (так как разность 11 – 6 не превышает 5);

· количество вариантов с минимальным слагаемым 10 будет равно такому же количеству для n = 1 (так как разность 11 – 1 не превышает 10).

 Приведённые рекуррентные зависимости применимы для всех значений n, но с некоторыми исключениями – при n = 1 количество вариантов с минимальным слагаемым 1, при n = 2 количество вариантов с минимальным слагаемым 2, при n = 5 количество вариантов с минимальным слагаемым 5 и при n = 10 количество вариантов с минимальным слагаемым 10 будет равно 1 (в перечисленных случаях соответствующие слагаемые появляются впервые).

Допустим, что максимальное значение n равно 99.

В программе, реализующей описанную идею для такого случая, можно использовать двумерный массив из 109 строк и пяти столбцов (10 начальных строк массива являются условными для рекуррентного расчёта значений при n = 1..99).

Вся программа на так называемом «школьном алгоритмическом языке» (система программирования КуМир):

алг
нач цел таб м[-9:99, 1:5], цел n, j
  | Нули, в том числе в фиктивных строках   

нц для n от -9 до 99
    нц для j от 1 до 5
      м[n, j] := 0
    кц
  кц

  | Расчёты
  нц для n от 1 до 99
    если n = 1
      то
        м[n, 1] := 1
      иначе | Рекуррентная зависимость
        м[n, 1] := м[n - 1, 5]
    все
    если n = 2
      то
        м[n, 2] := 1       иначе
        м[n, 2] := м[n - 2, 2] + м[n - 2, 3] + м[n - 2, 4]
    все
    если n = 5
      то
        м[n, 3] := 1
      иначе
        м[n, 3] := м[n - 5, 3] + м[n - 5, 4]
    все
    если n = 10
      то
        м[n, 4] := 1
      иначе
        м[n, 4] := м[n - 10, 4]
    все
    | Последний столбец
    м[n, 5] := м[n, 1] + м[n, 2] + м[n, 3] + м[n, 4]    
  кц
  | Вывод всех значений
  нц для n от 1 до 99
    вывод нс, n, " | ", м[n, 5]
  кц
кон

 Конечно, вместо массива из 109 строк можно использовать 10-строковый массив и после расчёта значений для очередной строки переписать массив, отбросив «хвостовую» строку.

 Спасибо.

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии2

Вклад инженеров Axiom JDK в развитие OpenIDE

На текущий момент среди разработчиков Java в качестве основной среды разработки применяется IntelliJ IDEA. Однако, коммерческая версия этого и других продуктов JetBrains, включая IDE, Code With Me, Upsource, TeamCity и Space, а также техническая поддержка теперь не доступны в России. Это побудило нас на создание продукта OpenIDE с открытым исходным кодом и всей инфраструктурой, размещенной на территории РФ.

Как было анонсировано ранее, OpenIDE создается на базе исходного кода IntelliJ IDEA CE и будет развиваться в рамках некоммерческого партнерства Axiom JDK, «Группы Астра» и Haulmont. В этом посте мы расскажем о вкладе команды Axiom JDK в проект.

Рантайм Axiom JDK будет предоставляться в качестве выбора по умолчанию для разработки на Java/Kotlin в OpenIDE. Дополнительно будет возможна установка Axiom JDK из интерфейса OpenIDE. При этом релизный цикл Axiom JDK синхронизирован с OpenJDK и регулярными обновлениями.

Команда Axiom JDK будет выпускать и поддерживать рантайм, используемый для запуска OpenIDE, с набором улучшений. Это, например, расширенное переопределение классов c помощью DCEVM и поддержка JCEF фреймворка для встраивания браузера на базе Chromium. Также планируется ряд улучшений для рендеринга шрифтов, поддержка режимов HiDPI, что обеспечит лучшее масштабирование интерфейса пользователя. А еще это позволит исправлять специфичные для работы IDE ошибки, исправлений для которых еще нет в OpenJDK.

Несмотря на то, что исходный код IntelliJ IDEA CE открыт, в процессе работы IDEA обращается к серверам JetBrains для обновлений, поддержки маркетплейса плагинов, а также других нужд. Этот функционал сейчас перерабатывается с участием инженеров Axiom JDK, что позволит создать локальную российскую библиотеку плагинов, локализованный (и отключаемый) сбор статистики и механизм обновления OpenIDE.

Наконец, команда Axiom JDK занимается настройкой сборочного конвейера OpenIDE, и со временем произведет анализ всех OSS зависимостей OpenIDE и будет обеспечивать оперативное исправлений уязвимостей в ОSS зависимостях в рамках релизного цикла OpenIDE.

Релиз продукта намечен на март 2025 года.

Axiom JDK — единственный российский разработчик JDK. Инженеры команды стояли у истоков Java в России и развивают платформу более 25 лет.

OpenIDE можно использовать взамен IntelliJ IDEA CE. По данным нашего исследования, 78% Java разработчиков используют IntelliJ IDEA Ultimate, а 47% - работают на Community Edition. Мы хотим предоставить сотням тысяч разработчиков открытый инструмент, не уступающий по удобству привычным IDE, чтобы они могли быстро и эффективно работать.

Читайте также у нас на сайте и у партнеров на хабре.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Готов пример приложения для https://pypi.org/project/targeting-platform/ (библиотека с общим интерфейсом к разным DSP (те которые "A demand-side platform")).

Это в продолжение https://habr.com/ru/posts/829114/

Пример тут: https://gitlab.com/dsp6802915/targeting_platform_example_simple (https://github.com/iSINUS/targeting_platform_example_simple) - в реадми описано все что есть сказать - не буду здесь повторяться.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Готова реализация для The Trade Desk (TDD) — как и обещал. Актуальная версия. (https://github.com/iSINUS/targeting_platform)

Пока это «классическая» реализация (с новым подходом что‑то у TTD не задалось). Когда и если они сделают рабочим новый подход (задание локации и времени в парах через BidLists) я обновлю код.

Теперь библиотека умеет вычитывать, устанавливать, очищать и валидировать таргетинг для трех платформ (DV360, Meta, TTD) с единым интерфейсом. При установке опций будут создаваться дубликаты в системах DV360 и Meta — это необходимо когда вы задаете много географических точек (лимиты платформ на объем информации). Внутри методов реализовано кэширование для операций чтения (get_...) и установка блокировок для операций изменения (set_..., clear_... и т. д.). Кэширование актуально для Meta — чтобы не словить Rate Limit на частых операциях получение информации. Блокировки более актуальны для DV360 и TTD — там операции по созданию дубликатов и установке таргетинг опций относительно длительные (но блокировка только внутри библиотеки работает — внешние системы все еще могут изменить тот же элемент системы — для этого у вас есть интерфейс валидации, который поможет проверить что в системе сохранено то, что вы хотели установить).

Базовый набор операций — как вызывать и что возвращает можно посмотреть в интегрейшен тестах — ссылка.

Пользуйтесь, задавайте вопросы.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Возможно кому-то пригодится библиотека с общим интерфейсом к разным DSP (те которые "A demand-side platform"). PyPi - https://pypi.org/project/targeting-platform/ (https://github.com/iSINUS/targeting_platform)

Пока реализовано только для Google DV360, Meta и The Trade Desk (TTD) получение каталогов плейсментов. В ближайшее время будет и непосредственно управление targeting на основе геоинформации (Uber H3 и lat/lng). Библиотека не решает проблемы выбора аудитории, она только поможет универсально выставлять таргетирование по локации и времени.

Библиотека это переосмысление более чем года работы на коммерческом проекте (код для всех операций уже есть - вопрос переноса в Open Source только вопрос времени). Будет дополнена документации и возможно пример приложения, но на данном этапе как это использовать можно увидеть в интеграционных тестах.

Область применения достаточно специфическая и требует наличия доступов к платформам. Получить самим (индивидуально) такие доступы можно только к Meta; DV360 и TTD только через Technical Account Manager платформ (только если вы уже такие имеете - сможете их использовать).

Пока комментарии и пожелания не принимаются :), но будут учитываться. (Сейчас это полностью синхронная библиотека, реализация максимально ориентировано на работоспособность, а не показать "как я пишу идеальный код". Если будет кем-либо использоваться библиотека, то реализация получит развитие и улучшения, и возможно новые DSP.)

Продолжение: https://habr.com/ru/posts/827828/ https://habr.com/ru/posts/829114/

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Возвращение в будущее.

И если в таком случае полететь по маршруту вперёд и вернуться обратно снимая всё на камеру, то получится здравый мультик с крутой графикой))

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии0

Geeknote: консольный клиент для Evernote - заброшен, но вы можете стать его мантейнером.

Репозиторий: https://github.com/jeffkowalski/geeknote (уже не оригинальный, а форк, который тащили несколько лет)

Проект состоит в https://github.com/agarrharr/awesome-cli-apps#note-taking-and-lists

Оригинальный сайт http://web.archive.org/web/20180423130602/http://geeknote.me/

Оригинальное видео от первых авторов https://vimeo.com/45066341

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

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

Я бы и сам, но нет на это времени :(

Только что добавил в Guru - это пользовательский репозиторий пакетов для Gentoo, как apt для Ubuntu или aur для Arch.

UPDATE я таки его форкнул https://github.com/vitaly-zdanevich/geeknote

Теги:
Рейтинг0
Комментарии1

Заметка для самого себя - как подключиться к ChatGPT или другим сайтам с компьютера, когда Psiphon или Lantern не хотят запускаться прямо сейчас.
Решение - использовать защищённый прокси вместо чего-то другого:

chrome --ignore-certificate-errors --ignore-ssl-errorsrs --proxy-server=167.172.173.210:42775 --user-data-dir="%TEMP%\chrprofile1" "https://chat.openai.com/auth/login" "https://www.whatismyip.com/"

А списки прокси-серверов вместо 167.172.173.210:42775 смотреть здесь:

Теги:
Всего голосов 16: ↑16 и ↓0+16
Комментарии1

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

12 ...
20