Pull to refresh
-7
1.6

Пользователь

Send message

Сложно о простом. Как работает интернет. Часть 2. Что такое сеть, маска подсети, сегментация сети с помощью VLAN и маски

Level of difficultyEasy
Reading time12 min
Views46K

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

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

В этом цикле статей я не стану учить вас настраивать оборудование и проектировать сети. Я расскажу об основных (и не только) принципах построения сети, а также о функционировании сети и сетевых протоколов в стеке TCP/IP.

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

Читать далее

Путеводитель C++ программиста по неопределённому поведению

Level of difficultyHard
Reading time3 min
Views11K

Путеводитель C\+\+\ программиста по неопределённому поведению


Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

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

Мастер-класс по точечному переносу изменений между ветками в git

Level of difficultyEasy
Reading time7 min
Views10K

Представьте ситуацию: вы нашли критический баг в проекте, исправили его в feature-ветке, но до полного слияния ещё далеко. Или вам срочно нужно перенести одно конкретное изменение из текущей ветки в другую. В таких случаях git cherry-pick становится вашим секретным оружием.

Читать далее

Как линейная алгебра помогла мне в разработке интерактивного редактора диаграмм

Level of difficultyEasy
Reading time9 min
Views11K

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

Читать далее

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

Level of difficultyEasy
Reading time9 min
Views24K

Привет, Хабр!

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

Читать далее

Делаем опенсорс курс C++ 17+. Присоединяйтесь

Level of difficultyEasy
Reading time9 min
Views14K
Небольшой командой энтузиастов мы уже два года развиваем проект Senior Junior. Это площадка с курсами от программистов для программистов. Из отзывов и разговоров с пользователями мы накопили любопытные наблюдения. Например, какие трюки помогают не бросить обучение на пол-пути и как избавиться от самообмана «ха, я точно понял эту тему».

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


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

Основные принципы организации микроклимата в закрытом грунте

Level of difficultyMedium
Reading time8 min
Views2.7K

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

Читать далее

Разбор регулярного выражения, проверяющего простоту чисел

Level of difficultyEasy
Reading time16 min
Views10K

Как-то я исследовал способы наиболее эффективного определения простоты числа и наткнулся на показанный выше код.

Он меня заинтриговал. Хоть это, возможно, и не самый эффективный способ, но определённо один из наименее очевидных, поэтому мне стало любопытно. Каким образом соответствие регулярному выражению .?|(..+?)\1+ должно показать, что число непростое (после его преобразования в унарную систему счисления)?

Если вы заинтересовались, продолжайте чтение, я проанализирую это регулярное выражение и объясню, что же в нём происходит. Объяснение не зависит от языка программирования, однако я приведу версии показанного выше Java-кода на PythonJavaScript и Perl  и объясню, почему они немного различаются.

Я объясню, как регулярное выражение ^.?$|^(..+?)\1+$ способно отфильтровывать все простые числа. Почему это выражение, а не .?|(..+?)\1+ (использованное в примере кода на Java)? Это связано с тем, как работает String.matches(), о чём я расскажу ниже.

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

Читать далее

Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

Level of difficultyHard
Reading time15 min
Views12K

Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина

Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua, подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода.

Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше!

Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

Читать далее

OrbStack: Почему я забыл про Docker Desktop

Level of difficultyEasy
Reading time4 min
Views39K

Работая на MacBook с Docker Desktop, я часто сталкивался с тем, что система становилась менее отзывчивой, особенно при запуске нескольких контейнеров одновременно. Высокая нагрузка на CPU и память заметно влияла на время автономной работы.

Но недавно я наткнулся на OrbStack, и это изменило мой рабочий процесс настолько, что я решил поделиться своим опытом. Спойлер: теперь мой MacBook не превращается в печку, батарея держится дольше, а Docker-контейнеры летают.

Читать далее

Ведение дел – мой опыт

Level of difficultyEasy
Reading time10 min
Views8.1K

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

Создать свой список дел!

Простая красота XOR-сжатия чисел с плавающей запятой

Level of difficultyMedium
Reading time59 min
Views9.3K

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

Алгоритм


Алгоритм* прост. Сначала мы записываем первое число с плавающей запятой полностью; для всех последующих чисел выполняется XOR с предыдущим числом, а затем результат кодируется одним из трёх способов.

[*Конкретно эта версия сжатия чисел с плавающей запятой при помощи XOR была впервые описана в «Gorilla: A Fast, Scalable, In-Memory Time Series Database» и часто называется «Gorilla-сжатием».]
Читать дальше →

PostgreSQL 16. Снимки данных. Часть 4

Level of difficultyMedium
Reading time5 min
Views4K

Данная статья является продолжением: PostgreSQL 16. Страницы и версии строк. Часть 3.

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

Читать далее

Hardware in the Loop (HIL) или как залупить модель с контроллером. Зачем и кому это надо?

Level of difficultyEasy
Reading time18 min
Views3.4K

Отладка систем управления вместе с моделью объекта. 

В данной статье рассмотрены примеры использования графических языков программирования в жизненном цикле модельно-ориентированного проектирования для систем управления сложными техническими объектами. А также продемонстрировано, как графические языки программирования делают жизнь проще, но интересней. И чтобы читатель не заскучал, мы рассмотрим противостояние программистов и технологов. Это как Монтекки и Капулетти, физики и лирики, красное и белое.  Разберемся кто из них главный, а кто лишний.

Все события выдуманы, все совпадения случайны.

Определение:

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

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

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

Читать далее

BitImageTool — пиктограммы для кнопок и панелек приложений, закодированные в ASCII

Level of difficultyMedium
Reading time10 min
Views1.7K

Статья о том, как легко делать графические кнопки для панелей инструментов, не таская за приложением гору бинарных ресурсов с картинками. Этот метод платформонезависимый и может быть использован в различных языках и средах, позволяющих работать с графикой и растровыми изображениями. Ниже приводятся примеры для C# (WinForms / WPF), JavaScript, Python.

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

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

Читать далее

Мои взгляды на программирование на июль 2024 года

Reading time5 min
Views8K
Эта статья – собрание убеждений о разработке ПО, которые выработались у меня на сегодняшний день. Всё основано на личном опыте.

Подход к задачам


Основная часть моей работы – разбираться с тикетами, и я до сих пор продолжаю совершенствоваться в этом деле. Вот несколько вещей, которые я открыл для себя в процессе.
  • Разные задачи, проекты и команды требуют разных подходов. Например, сделать пейсмейкер без автоматических тестов было бы безответственным решением – кто-то может от этого пострадать. И вместе с тем, глупо изводиться по поводу автоматических тестов на геймджеме, куда вы отправились на выходных. Содержание понятия «хороший код» меняется в зависимости от контекста, и нужно адаптировать свой подход под конкретную ситуацию.
  • Делайте марш-броски. Бывает, что я ставлю себе цель довести какую-то функциональность до готовности в кратчайшие сроки, пусть даже срезая углы где только можно, с кодом ужасного качества и TODO на каждом шагу. Когда у меня появится что-то рабочее, тогда и буду приводить всё в должный вид. Я пришел к выводу, что это хороший способ обозначить для себя проблемные зоны, а также неплохой путь к ускорению процесса разработки. На эту тему есть статья «Выбросьте первый набросок кода».
  • Если я бьюсь головой об задачу и никак не могу сдвинуться с мертвой точки, значит, необходимо оторваться от нее на какое-то время.
  • Прежде чем начать работу над сложной задачей, я задаю себе вопрос: «А что если вообще этого не делать?» Как правило, вопрос оказывается глупым и выполнять задачу все-таки приходится. Но примерно в пяти процентах случаев я осознаю, что определенную часть работы можно спокойно пропустить.

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

Подборка докладов по С# 2023-2024

Level of difficultyEasy
Reading time3 min
Views8K

Недавно мы публиковали подборку докладов по C++, но не будем же мы обделять и C# разработчиков. Поэтому предлагаем вашему вниманию интересные доклады из мира .NET и C#.

Вперёд к новым знаниям!

Дайте мне 15 минут, и я изменю ваш взгляд на GDB

Level of difficultyMedium
Reading time6 min
Views17K

Материал подготовлен на основе выступления с CppCon 2015 "Greg Law: Give me 15 minutes & I'll change your view of GDB" (доступно по ссылке ). Многие моменты я изменял и корректировал, поэтому учтите, что перевод достаточно вольный.

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

В статье будет рассматриваться отладка кода на C в ОС Linux.

Читать далее

Собираем docker и деплоим из GitHub Actions

Level of difficultyMedium
Reading time4 min
Views7.3K

Я приведу краткую инструкцию, как быстро собирать проект и деплоить docker. Флоу будет очень простым: одним job мы собираем образ (с указанием тэга или ветки) и кладем в приватный репозиторий образов GitHub, а другим - job деплоим оттуда. Это удобно, когда есть несколько сред и мы один раз собираем и контейнер запускаем из него с разными переменными среды.

Начнем

.NET Aspire — империя дотнета наносит ответный удар

Level of difficultyEasy
Reading time7 min
Views45K

Когда я первый раз услышал про .NET Aspire, я подумал что это какая-то очередная лажа от Майкрософта, про которую все забудут через неделю.

Особенно, учитывая какую дичь часто завозят в шарп (например те же ужасно спроектированные Primary Constructor'ы про которые я писал, или вот прикол-пропозал от самого Тоуба). Так что ожидания у меня, честно говоря, были ниже нуля.

Но попробовав его лично, я был, честно говоря, шокирован. Трепещите, жависты!! Трепещите гошники! Трещепищите питонисты - такого вы еще точно не видели.

Я даже представить не мог, что DevEx можно сделать настолько офигительным.

Узнать про Aspire без смс и регистрации
1
23 ...

Information

Rating
1,443-rd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity