Как стать автором
Обновить
0
0

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

Отправить сообщение

Портирование КОМПАС под Linux: особенности реализации и результаты

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 16K

Мы много рассказывали на Хабре, как запустить САПР КОМПАС на Linux с разными вариантами Wine (ссылка 1, ссылка 2). Сегодня впервые публикуем пост о разработке нативной Linux-версии. На связи Андрей Пилюгин, ведущий инженер-программист.

Наша команда отвечает за портирование бизнес-логики, а работы по интерфейсу и по API делают другие команды. Эти процессы идут параллельно.

Работы по портированию КОМПАСа велись не один год, над этим начинала работать совсем небольшая группа программистов, и за этот период вышло две версии под Windows. По этой причине мы не могли разломать весь каркас приложения и написать его заново, приходилось аккуратно трансформировать приложение, постепенно заменяя его составляющие на кроссплатформенные и поддерживая в работоспособном состоянии все остальные. В этом нас сильно выручала система автотестов.

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

Читать далее
Всего голосов 106: ↑105 и ↓1 +104
Комментарии 110

Глубина кроличьей норы: бинарная граница и ABI C++

Время на прочтение 26 мин
Количество просмотров 5.7K

Вопрос ABI (Application Binary Interface), бинарной границы и бинарной совместимости в C++, раскрыт на просторах интернета не так хорошо как хотелось бы. Особенно сложно в его изучении приходится новичкам, потому что эта тема связана со множеством деталей нарочно скрытой от глаз программиста имплементации языка.

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

Подробнее о статье:

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

В первой части статьи я поделюсь теоретическими знаниями о том, что такое ABI и бинарная граница, и какие проблемы могут возникнуть при её пересечении.

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

В рамках всей статьи будут рассмотрены темы: системный стек, системные регистры, динамическая память, детали механизма виртуальных функций, стандарт С++ и реальная имплементация, детали механизма исключений, copy elision при линковке библиотек, шаблоны, POD-типы и ODR violation.

Break -in- ABI
Всего голосов 16: ↑14 и ↓2 +12
Комментарии 40

Детекция машин на мобилке в 2023. С какими проблемами мы столкнулись и как решали

Время на прочтение 9 мин
Количество просмотров 3.7K

Как мы распознавали машины с камеры мобильного телефона с помощью TensorFlow-lite, C++, Qt и что из этого вышло.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 2

Фильтруем логи санитайзеров и valgrind на примере приложения с Qt

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 2.8K

Периодически встречающаяся проблемами кода на С и C++ являются утечки памяти и неопределенное поведение. Даже если вы используете умные указатели, то от ошибок в библиотеках сторонних разработчиков вы не застрахованы. Для поиска ошибок в коде существуют специальные инструменты: санитайзеры и valgrind. Однако, не вся информация об ошибках имеет для нас ценность, рассмотрим методы её фильтрации.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 2

Локальные нейросети. Аналог ChatGPT-3.5 на домашнем ПК: OpenChat 7B превосходящая 70B, DeepSeek для кода уровня ChatGPT

Время на прочтение 8 мин
Количество просмотров 75K

Есть много локальных аналогов ChatGPT, но им не хватает качества, даже 65B модели не могут конкурировать хотя бы с ChatGPT-3.5. И здесь я хочу рассказать про 2 открытые модели, которые всё-таки могут составить такую конкуренцию.

Речь пойдет о OpenChat 7B и DeepSeek Coder. Обе модели за счет размера быстры, можно запускать на CPU, можно запускать локально, можно частично ускорять на GPU (перенося часть слоев на GPU, на сколько хватит видеопамяти) и для такого типа моделей есть графический удобный интерфейс.

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

UPD: Добавлена информация для запуска на Windows с ускорением на AMD.

Читать далее
Всего голосов 107: ↑105 и ↓2 +103
Комментарии 87

Как мы переводили проект на CMake

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 5.9K

В статье мы расскажем о том, как переводили проект с рекурсивной сборочной подсистемы ЗОСРВ "Нейтрино", представляющей собой набор расширений инструмента GNU Make на сборочную систему CMake: с какими нюансами нам пришлось столкнуться, какие преимущества мы получили в результате перевода и как это повлияло на нашу команду разработчиков.

Читать далее
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 33

Разработка расширения для PHP на C++. Хуки встроенных функций и методов

Уровень сложности Средний
Время на прочтение 18 мин
Количество просмотров 3.5K

PHP - это мощный и широко используемый язык программирования для веб-разработки. Однако, иногда требуется расширение функциональности или модификация стандартного поведения PHP с использованием более низкоуровневых языков, таких как C++. В этой статье мы рассмотрим, как создать расширение для PHP на C++ на примере разработки функциональности, позволяющей перехватывать вызовы встроенных функций и методов классов в php.

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 3

Исходников нет, но мы не сдадимся: как и зачем я портировал более старый Android, чем стоял «с завода»?

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 7.7K
image


Моддинг-сцена с разработкой и портированием кастомных прошивок для Android-устройств существует вот уже более 10 лет. В основном, энтузиасты пытаются проапгрейдить свои устройства путем портирования более свежих версий Android, чем предлагает производитель девайса. Чего уж говорить, если Galaxy S III, которому уже 12 лет стукнуло, получил неофициальный апгрейд до Android 14. Порой мне в голову приходят различные, весьма странные моддерские мысли: например, почему бы не портировать на старенький смартфон… ещё более старую версию Android, дабы посмотреть «что будет». Казалось бы «портировал и портировал», но в процессе работы я столкнулся с множеством интересных нюансов и особенностей работы Android, о которых хотел бы рассказать и вам — моим читателям! Сегодняшняя статья будет в классическом «научпоп»-стиле без кода, зато с подробными объяснениями одной из техник портирования Android-прошивок путем патчинга скриптов для конфигурации системы и подмены Board-specific библиотек, дабы система «увидела» всё необходимое железо! Интересно? Тогда жду вас под катом!
Читать дальше →
Всего голосов 62: ↑61 и ↓1 +60
Комментарии 25

Актуально ли сегодня ООП?

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 31K

Почти каждый день возникают дискуссии с критикой или восхвалением объектно-ориентированного программирования. «Java устарела!», «Java потрясающая!». В этой статье я проведу прагматичное исследование ООП на 2024 год.

Термин объектно-ориентированное программирование придумал Алан Кэй. Кэй был членом команды PARC, которая изобрела графический интерфейс пользователя, сделавший таким полезным современный Интернет, персональные компьютеры, планшеты и смартфоны. Ещё она изобрела некоторые из объектно-ориентированных языков, на которых мы сегодня реализуем эти GUI.

Если отсечь все эмоции, связанные с ООП, то что останется? По-прежнему ли ООП является эффективным инструментом разработки ПО, или оно превратилось в устаревшее увлечение? Профессионалам важно знать ответ на этот вопрос!
Читать дальше →
Всего голосов 78: ↑60 и ↓18 +42
Комментарии 105

YouTube Shorts из терминала. Как автоматизировать создание видео с помощью FFMPEG и Bash

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 2.4K

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

Для продвижения игры я начал публиковать Shorts на YouTube, но это отнимало много времени и ресурсов. Будучи инженером, я стараюсь автоматизировать рутинные задачи, поэтому сделал решение, которое самостоятельно нарезает видео на 60-секундные фрагменты. Подробнее — под катом.
Читать дальше →
Всего голосов 38: ↑38 и ↓0 +38
Комментарии 15

Генерация картинок на любом железе без Midjourney

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 9.2K

Для генерации изображений сегодня существует множество сервисов. Некоторые из них платные, другие нет. И даже в большинстве бесплатных сервисов вы можете столкнуться с ограничениями, например, на количество бесплатных картинок за единицу времени, разрешение изображений и прочее. Это обстоятельство объясняется просто. Несмотря на доступность технологии, железо, которое требуется для генерации, остается дорогим. И бесплатно отдавать ресурсы GPU мало кому хочется. Однако, тягу к бесплатному трудно победить. Поэтому в этой статье мы узнаем, как, всё же, генерировать изображения только при помощи браузера и нескольких строк кода.

Читать далее
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 13

Закат эпохи пара, часть 1: Внутреннее сгорание

Уровень сложности Простой
Время на прочтение 16 мин
Количество просмотров 4.6K

Сейчас, в первые десятилетия XXI века паровые турбины ещё можно встретить (хотя их почти никогда не увидишь), но паровые поршневые двигатели — это архаичный пережиток. Почти все движущиеся машины, которые мы видим — автомобили, грузовики, газонокосилки, самолёты в небе и лодки на воде — получают свою энергию непосредственно от сгорания топлива (например, бензина) внутри цилиндра: внутреннее сгорание, в отличие от внешнего сгорания, которое производит пар из топлива, сжигаемого вне котла.

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

Читать далее
Всего голосов 29: ↑27 и ↓2 +25
Комментарии 17

TOTP без смартфона

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 10K

Когда я решил избавиться от необходимости постоянно носить с собой смартфон, одной из проблем оказалась двухфакторная аутентификация (2FA, приложение Google Authenticator). Остаться без возможности авторизации на множестве сервисов было неприемлемо, нужна была альтернатива.

Беглый поиск вывел меня на утилиту oathtool: командная строка, POSIX, OSS — всё, как я люблю, проблема в принципе решена. Но, как и большинство CLI утилит, её удобно использовать в сочетании с другими утилитами, а для этого полезно написать скриптовую обвязку. Собственно этой обвязкой, а также опытом использования, я и решил поделиться.

Читать далее
Всего голосов 56: ↑56 и ↓0 +56
Комментарии 80

Знакомство с TPM (доверенным вычислительным модулем)

Уровень сложности Сложный
Время на прочтение 9 мин
Количество просмотров 10K
TPM (Trusted Platform Module) — это международный стандарт, обеспечивающий доверенную работу с вычислительными платформами в целом и предоставляющий ряд возможностей обеспечения безопасности в компьютерных системах, в частности: хеширование, шифрование, подписывание, генерацию случайных чисел и т.д.


Он был разработан консорциумом TCG (группа по доверенным вычислениям) и стандартизирован в 2009 году Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC), получив номер ISO/IEC 11889:2009.
Читать дальше →
Всего голосов 37: ↑36 и ↓1 +35
Комментарии 10

И вновь KolibriOS! И вновь ассемблер!.

Уровень сложности Простой
Время на прочтение 7 мин
Количество просмотров 4.6K

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

Но далеко не всё так плохо как кажется! В KolibriOS есть готовый редактор кода с подсветкой CEdit, и он поддерживает подсветку для нескольких языков программирования. Но я не уверен что он умеет компилировать под все эти языки. Но как минимум текст набрать можно. Fasm поддерживается полностью и собирать/запускать/отлаживать приложения можно "используя" данный редактор (не совсем, редактор запускает отдельно компилятор и так же запускает отдельно отладчик), что и позволяет полноценно разрабатывать программы.

Я бы хотел сразу предупредить, практически ни какого обучения в статье не будет. Всё рассчитано на то, что вы уже хотя бы немного знаете ассемблер x86 и уже создавали простые программы под данную архитектуру (под Windows, Dos, Linux, а так может и MacOS).

Читать далее
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 7

Советский фрикинг. Были ли телефонные фрикеры в СССР?

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 17K

В жизни порой случаются удивительные совпадения. Прошлым летом я расслаблялся с коктейлем под пальмой на берегу тёплого моря, наслаждаясь книгой «Ghost in the Wires», когда в новостях сообщили о внезапной смерти её автора — Кевина Митника. И я задумался: а существовали ли во времена, о которых Кевин рассказывал в своей книге, телефонные фрикеры по другую сторону океана — в Советском Союзе?
Читать дальше →
Всего голосов 184: ↑183 и ↓1 +182
Комментарии 119

Как в Node.js контролировать потребление памяти при обработке сетевых запросов

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 5.3K

Всем привет! Я Виктор Кугай, руководитель команды разработки спецпроектов в Тинькофф. Мы создаем геймификационные проекты, основанные на данных, чтобы познакомить пользователей с экосистемой компании и повысить узнаваемость бренда.

Расскажу, как с помощью Node.js Streams и механизма Back Pressure протокола TCP реализовать пакетную обработку сотен гигабайтов данных на машинах с жестким лимитом памяти.

Читать далее
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 2

Domain Driven Design в Go – это почти не больно

Время на прочтение 13 мин
Количество просмотров 15K

Как выглядят паттерны DDD (Domain Driven Design) в большом проекте? А самое главное, стоит ли их вообще использовать? Рассмотрим, какими инструментами можно реализовать DDD на Go и оценим, насколько это больно.

Меня зовут Илья Сергунин, я backend-сочинитель в Авито: занимаюсь тем, что передаю смартфоны в хорошие руки. В этой статье попытаюсь объяснить, как можно натянуть DDD на Go без синтаксического сахара и магии Java-подобных языков, и без больших крутых ORM c Data mapper, которые также отсутствуют в Go.

Читать далее
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 10

Как калькуляторы вычисляют синус?

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 53K

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

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

Читать далее
Всего голосов 98: ↑96 и ↓2 +94
Комментарии 52

Первое пришествие айтишниц: почему в 50-х годах в программировании женщин было больше, чем в нулевые?

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 9.7K

В наши дни середины 2020-х женщинами в IT трудного кого-то удивить. Шутки насчёт девушек-программисток рубежа нулевых и десятых годов уже стали анахронизмом — но ещё не так давно компьютерная среда считалась делом суровых бородатых мужиков-гиков, а любая тян глубоко в компьютерной теме воспринималась в качестве удивительной аномалии. Казалось бы, в ещё более старые времена всё в сфере IT было ещё более однозначно. Ан нет: на заре компьютерной эпохи, в США 60-х годов, многие вакансии в сфере цифровых технологий считались едва ли не типично женскими, на уровне машинисток или телеграфисток. Как это случилось, и почему затем компьютеры на несколько десятилетий превратились в мужское царство?
Читать дальше →
Всего голосов 57: ↑51 и ↓6 +45
Комментарии 15

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность