Search
Write a publication
Pull to refresh
18
2
Сергей @rukhi7

software developer, радиоинженер

Send message

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

Level of difficultyMedium
Reading time8 min
Views2.4K

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

На идею этой статьи меня натолкнула следующее цитата брошенная в запале дискуссии:

Вы часто видели, чтобы в тредах об ООП на «инкапсуляция помогает скрывать данные и реализацию» кто-то всерьёз отвечал «нет! компилятор можно пропатчить, чтобы он игнорировал private

Вы тоже думаете что инкапсуляция это всегда про использование модификаторов private, public, protected ? Или каких-то других модификаторов? А чистый Си поддерживает инкапсуляцию? Но это все более менее известные вопросы, я предлагаю вам познакомиться (или вспомнить?) концепцию абсолютной инкапсуляции, которая не обходится только модификаторами, а обеспечивается чуть ли не инфраструктурой операционной системы. Естественно начнем с формулировки практической задачи в которой нам пригодится эта абсолютная инкапсуляция.

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

Читать далее

Практические вопросы архитектуры ПО, из чего строить будем?

Level of difficultyEasy
Reading time13 min
Views3.4K

Вы знаете из чего и как строятся программы? Странно что ни в одной из статей о программной архитектуре вы не найдете упоминаний о том из чего эти программы строятся.

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

Теперь есть продолжение про абсолютную инкапсуляцию-изоляцию.

Читать далее

Что такое CI/CD, и почему непрерывная? Темная сторона силы настоящего и воспоминания о прошлом

Level of difficultyEasy
Reading time4 min
Views2.6K

Мне тут попалась статья по теме, которая начинается с такого определения:

Непрерывная интеграция (Continuous Integration, CI) и непрерывная поставка (Continuous Delivery, CD) представляют собой культуру, набор принципов и практик, которые позволяют разработчикам чаще и надежнее развертывать изменения программного обеспечения. 

Как по мне, то с самого начала нас пытаются если не подло обмануть, но ввести в заблуждение. Как вы думаете почему разработчикам нужно чаще вносить-развертывать изменения программного обеспечения? Насколько я знаю, для этого есть только две очевидных причины.

По-моему, это определение очень отличается от того, что понимали под подобными терминами лет, скажем, 20 назад.

Читать далее

Предел Шеннона. Математика компромиссов. Пушкин и Толстой это конечно наша гордость, но считать-то тоже надо учиться

Level of difficultyMedium
Reading time13 min
Views4.4K

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

Удивительно что на Хабре нет статьи посвященной анализу теоремы Шенннона-Хартли и тому какой смысл она несет.

Сатья подготовлена по материалам из книги Бернарда Скляра "Цифровая связь", 2003 г.

Содержание:

1. Задачи и проблемы построения эффективных-экономных систем связи

2. Что можно определить как математику компромиссов

3. Несерьезная интерпретация теоремы Шеннона-Хартли из учебных материалов отечественных ВУЗов.

4. Теорема Шеннона из проверенного источника

5.  Энтропия как мера информативности

6. Отличие дискритизации по Найквисту от дескритизации по Шеннону

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

Читать далее

Откуда взялась хвостовая рекурсия и когда ожидается ее реализация в новом стандарте языка Си. Рекурсия VS Iteration

Level of difficultyEasy
Reading time7 min
Views3K

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

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

Читать далее

Недостатки искусственного интеллекта: взгляд изнутри и что мы можем увидеть снаружи. Кому нужен божественный ИИ

Level of difficultyEasy
Reading time7 min
Views2.6K

Я спросил какой-то чат не-GPT про недостатки искусственного интеллекта (далее ИИ) и он мне выдал бодрый ответ за который в старших классах обычной школы наверняка бы поставили пятерку.

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

Как вы думаете что спорного или даже плохого можно найти в такой формулировке от машины:

Искусственный интеллект (ИИ) стал одной из самых обсуждаемых тем в мире технологий. Его потенциал для улучшения различных сфер жизни, от медицины до автоматизации производства, огромен.

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

А было ли в истории такое что профессионалов определенной области заменили на профессионалов в другой, как эта гипотетическая замена врачей на операторов машины с искусственным интеллектом?

Я использовал ответ не-GPT как план для своей статьи

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

Читать далее

Сложность концепции компоновки на примере для Qt (шпаргалка)

Level of difficultyMedium
Reading time4 min
Views3.2K

Описания компоновки (управления автоматическим размещением визуальных элементов) которые мне попадались на родном языке мне кажутся не достаточно погружают читателя в реальную проблематику которая стоит за этим процессом. Мне хочется акцентировать внимание на том откуда берется сложность в этом вопросе. Хотелось бы чтобы кто-то покритиковал мои формулировки.

Читать далее

Анализ реального исходного кода OpenSource проекта. Заметки на полях

Level of difficultyMedium
Reading time9 min
Views2.4K

Недавно мне пришлось разбираться с достаточно известным опен-сорсным проектом ЛибрОфис. Мне показали как его скомпилировать под windows и под (разные) Линукс и, к моему восхищению, и там и там он работает почти одинаково если в качестве движка визуализации используется QT. Давайте посмотрим в каком смысле это идеальный проект, а в каком почти негативный паттерн.

Не рекомендуется для чтения лицам испытывающим нежные чувства к ОпенСоурсным проектам, такой контент может шокировать ваши чувства.

Читать далее

Можно ли собрать в одном большом гайде всё, что полезно знать о языке C и его применениях

Level of difficultyMedium
Reading time11 min
Views4.9K

Мне показалась очень интересной тема открытая в недавней статье

Собрал в одном большом гайде всё, что хотел бы знать, когда изучал язык C

 Во вступлении там написано:

"Очевидный факт: язык C — это основа большого количества современных экосистем программирования. Он обеспечивает фундамент многих операционных систем, базовых библиотек и системных инструментов."

Мне кажется полезно все таки обозначить в каком смысле язык C — это основа, и чем он обеспечивает фундамент. Я рад что имею возможность сформулировать что-то в данном направлении не со слов иностранного авторитета, а не базе собственного опыта который, тем не менее, формировался на основе анализа-применения действующих решений-теорий сформулированных во многом иностранными специалистами, но надеюсь с примесью собственной креативности в какой-то степени. Ну и хочется озвучить свой ответ на вопрос: "Когда C — идеальный выбор?", может в интерпретации: "А бывает ли язык Си идеальным выбором?"

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

Читать далее

Почему микросервисы лучше компонент или как деградируют идеи в IT

Reading time7 min
Views16K

Попробуем начать с цитаты:

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

...

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

Если интересно откуда эта цитата и что с ней не так прошу под кат.

Читать далее

Вот здесь точно нужен рефакторинг, есть идеи?

Reading time7 min
Views9.6K

Бывают пет-проекты, а у нас получился проект с наработками, которые вроде бы могут быть полезны например студентам технических специальностей и просто всем кому интересно поразбираться с возможностями визуализации на C# + WPF, например, или с системой избыточного кодирования.

Мы со студентами сделали приложение для анализа характеристик LDPC кодов изначально на Java (Java код тоже присутствует в репозитории) потом я переписал его в виде проекта C# + WPF, чтобы добавить возможность конфигурации статистических экспериментов через визуальный интерфейс, а главное чтобы иметь возможность визуализации результатов экспериментов в виде графиков (обычных, в X, Y осях). Я как раз для работы сделал библиотеку для рисования обычных математических графиков по массивам значений с возможностью масштабирования области просмотра мышкой.

Думаю студентам любых технических направлений может пригодиться такая библиотека при том, что весь ее достаточно компактный исходный код (5-7 файлов) локализован в проекте и доступен как для изучения так и для любых изменений и доработок.

Под катом ссылка на Гит-репозиторий с исходным кодом и обзор реализованной функциональности со скриншотами.

Читать далее

Винтик и Шпунтик возвращаются из сказочной страны и решают задачу в мире самой обычной математики

Level of difficultyEasy
Reading time5 min
Views5.3K

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

Читать далее

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

Reading time5 min
Views3.1K

Не так давно меня очень впечатлила статья Man, death & ethics и мне очень хотелось увидеть продолжение этой темы.

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

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

Читать далее

Could async/await magic create thread, or it is always: “There is no thread”?

Level of difficultyMedium
Reading time4 min
Views1.2K

When we are told “There is no thread” we can easily come to an opinion that it is impossible at ALL that asynchronous operation could create thread, but it would be wrong opinion. Simple code example proves the opposite.

Those who are easy to treat the sentence as the universal rule are easy to understand. They would like to simplify the subject and to cut amount of theory they should study and remember. Besides to many it is new level of knowledge to discover there is other layer of classes to manage async-operations behavior beside the Tasks and and SynchronizationContext is only one among them.

Read more

Async/await. Куда делся thread.  Инверсия асинхронности. Разоблачение мистификации

Level of difficultyMedium
Reading time8 min
Views15K

В прошлый раз мы разобрали пример, когда асинхронная операция использует дополнительный поток. Этот пример многим показался провокационным и даже вредным, что для меня выглядит достаточно странным. Насколько я понял основной претензией является то, что этот пример для многих как бы отрицает «экономное использование потоков», как это сформулировано например здесь-«metanit: Асинхронное программирование» .

Конечно, многие обиделись на меня за то, что я посмел возражать признанному авторитету, который вынес в заголовок своей очень известной работы фразу There is no thread (Там нет потока) ведь хорошо известно, что: «нет пророка в своем отечестве», и, видимо, быть не должно, но это все эмоции.

Давайте я покажу, как преобразовать мой пример, чтобы он продемонстрировал не только то самое «экономное использование потоков», но и откуда оно берется.

Читать далее

Async/await, There is no thread – легко обмануть тех, кто сам обманываться рад

Level of difficultyMedium
Reading time3 min
Views15K

Когда нам показывают на некотором примере, что асинхронная операция не создает потока, нам пытаются внушить, что асинхронная операция НИКОГДА не создает потока и в принципе не может его создать, но это не правда! Простой пример с работающим кодом доказывает обратное. Давайте разберем этот пример.

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

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

Читать далее

Можно ли запустить ембедед С-проект на базе РТОС в режиме симуляции под Windows?

Level of difficultyMedium
Reading time8 min
Views1.9K

Если у вас есть эмбедед(embedded) проект и он написан на С или на С++ вы можете попробовать запустить этот проект в режиме симуляции на десктопном ПК и даже под Windows, по крайней мере у нас это получилось.

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

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

Читать далее

Как на самом деле Async/Await работают в C#. Часть 6. Анализ результатов компиляции асинхронных вызовов

Level of difficultyHard
Reading time24 min
Views6.4K

В этой статье мы продолжим разбирать содержание работы Stephen Toub-а: «How Async/Await Really Works in C#». В этот раз, в след за автором исходного Поста мы рассмотрим код, который генерирует C# компилятор для реализации асинхронных вызовов и множество связанных с этим сущностей-понятий-приемов, таких как: контекст исполнения, боксинг, стейт машина, стек, потоки, … Эта 6-я часть, пожалуй, основная часть всей работы, которая непосредственно отвечает на вопрос: «Как на самом деле Async/Await работают (и компилируются) в C#»

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

Возможно вам будет интересно сравнить эту мою работу с первоначальным переводом.

Читать далее

Async/Await в C#. Часть 5. Функция-перечисление и цикл через рекурсию, асинхронный вызов без Async/Await

Level of difficultyMedium
Reading time8 min
Views6.9K

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

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

Читать далее

Высокоскоростной SPI to Ethernet конвертер, при чем здесь DMA?

Level of difficultyMedium
Reading time13 min
Views5.6K

Чисто техническое, но не очень глубокое описание реализованной задачи с самыми простыми расчетами. Надеюсь, будет полезно соответствующим техническим специалистам или для тех, кто хочет понимать что-то про объем знаний необходимых для использования DMA над некоторым устройством периферии, например SPI.

Относительно использования Ethernet, дальше нескольких упоминаний речь не идет. Как-то, к слову, не пришлось, еще пока. Не обессудьте.

Читать далее

Information

Rating
2,710-th
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead
C#
C++
C
Multiple thread
Programming microcontrollers
Embedded Linux
Bash
Ubuntu
English
Git