Рубрика «Программирование» - 895

Внесу и свой вклад в тренд темного программирования.
Многим из вас знакома дилемма: использовать ли DI в своем проекте или нет.
Поводы перехода на DI:

  • создание развитой системы авто-тестов
  • повторное использование кода в различном окружении, в том числе в различных проектах
  • использование 3rd-party библиотек, построенных на DI
  • изучение DI

Доводы не использовать DI:

  • усложнение понимания кода (поначалу)
  • необходимость конфигурирования контекста
  • изучение DI

Допустим, у нас есть большой рабочий проект, принято решение: переводить на DI. Разработчики чувствуют свой потенциал, уровень мидихлориан в крови зашкаливает.
Перевод legacy проекта на Dependency Injection. Путь Ситха
Путь тебя ждет тернистый и долгий, мой юный падаван.

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

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

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

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

В прошлый раз в обзорной статье про Intel INDE мы упомянули о Media Pack и его ключевых возможностях. В этой статье мы остановимся на нем более подробно.

INDE Media Pack — это библиотека, включающая в себя различные компоненты для работы с аудио и видео. С точки зрения реализации — это надстройка над медиа компонентами Android, использующая аппаратное ускорение для кодирования и декодирования видео. По сравнению с использованием классов для работы с мультимедиа в Android, она гораздо более проста в использовании, разработчику нет нужды разбираться во всех тонкостях работы медиа кодеков, экстрактора, муксера, только для того, чтобы встроить в свое приложение возможность работы с видео.
Читать полностью »

Несколько дней назад мной была написана статья о реализации автоматического обновления программного обеспечения на языке C#.

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

  • Автоматическая проверка, скачивание и установка обновлений;
  • Предоставление пользователю возможности выбора момента обновления (новое);
  • Улучшен механизм проверки версии файла;
  • Проверка целостности файла обновления (новое)

Дабы не перепечатывать текст прошлой статьи, в этой акцентирую внимание лишь на переработанных частях кода.
Читать полностью »

Свой http сервер менее чем в 40 строк кода на libevent и C++11 Просматривая временами Хабр, я периодически встречаю посты на тему создания собственного веб-сервера на C++ или на ином языке. Так как больший интерес для меня представляет C++ из языков программирования, то этот блог я больше всего и читаю. Если его полистать, то можно с легкостью найти как написать свой веб-сервер «на сокетах», с применением boost.asio или чего-то еще. Некоторое время назад я так же публиковал свой пост о создании подобного http-сервера как пример решения тестового задания. Но не ограничившись полученным оным и интереса ради я сделал сравнения с libevent и boost.asio разработками. А тестовое задание как-таковое отказался выполнять.

Для себя как-то по работе я рассматривал libevent и libev. У каждой есть свои преимущества. Если же есть желание или потребность в скорой разработке небольшого http-сервера, то для меня большой интерес представляет libevent, а с учетом некоторых новшеств C++11 код становится намного компактнее и позволяет создать базовый http-сервер менее, чем в 40 строк.
Читать полностью »

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

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

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

Сразу скажу, что успеха я достиг, а вот тем, кому интересен процесс – прошу под кат.

main
Читать полностью »

Несколько лет назад, программируя еще на Delphi, лично для себя соорудил некий код автоматического обновления, который в последствии стал незаменимым при разработке любой программы, где есть обновление. В настоящий момент этот код полностью переписан на c# и я хочу с Вами им поделиться.

image

Вначале определим цели этой реализации:

  1. При обнаружении новой версии обновление должно происходить автоматически;
  2. После обновления программа должна автоматически перезапускаться;
  3. После обновления имя программы должно остаться прежним.

Проблема состоит в том, что программа не может саму себя удалить, заменить и вновь запустить. И, казалось бы, как решить этот вопрос? Здесь нам поможет второй файл, отвечающий за переименование и перезапуск программы, так как мы не гонимся за целью хранить все коды в 1 файле.
Читать полностью »

Логика мышления. Промежуточный итог

Итак, на сегодня в сеть выложены 17 статей из цикла «Логика мышления». Сам цикл – это попытка построить достаточно полную модель работы мозга. То есть, не просто описать отдельные механизмы, но и показать, как из их взаимодействия может рождаться человеческое мышление. То, что уже опубликовано – это фундамент излагаемой концепции. В нем показывается, как на уровне нейронов реализуются основные информационные механизмы. Этот фундамент определенным образом задает правила всей дальнейшей игры. Он определяет, каким инструментарием мы располагаем для реализации более сложных процессов. Я постарался показать, что, оставаясь в рамках биологически достоверных идей, можно создать модель, обладающую высокими вычислительными возможностями. Как пример было показано соответствие между свойствами коры и возможностями реляционной алгебры.
Читать полностью »

Не так давно зарелизилась новая версия Python 3.4 в changelog которой вошло много «вкусностей». Одна из таких — модуль asyncio, содержащий инфраструктуру пригодную для написания асинхронных сетевых приложений. Благодаря концепции сопрограмм (coroutines), код асинхронного приложения прост для понимания и поддержки.

В статье на примере простого TCP (Echo) сервера я постараюсь показать с чем едят asyncio, и рискну устранить «фатальный недостаток» этого модуля, а именно отсутствие реализации асинхронного HTTP сервера.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js