Pull to refresh
0
0

User

Send message

Как собрать компьютер из оригами

Reading time 5 min
Views 1.4K

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

В 1936 году британский математик Алан Тьюринг выдвинул идею универсального компьютера. Это было простое устройство: бесконечная полоса ленты, покрытая нулями и единицами, вместе с машиной, которая могла двигаться вперед и назад по ленте, меняя нули на единицы и наоборот в соответствии с некоторым набором правил. Он показал, что такое устройство можно использовать для выполнения любых вычислений.

А в сентябре 2023 года Инна Захаревич из Корнельского университета и Томас Халл из колледжа Франклина и Маршалла показали, что всё вычислимое можно вычислить, сложив бумагу.

Читать далее
Total votes 13: ↑12 and ↓1 +11
Comments 0

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

Level of difficulty Medium
Reading time 6 min
Views 16K

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

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

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

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

Читать далее
Total votes 106: ↑105 and ↓1 +104
Comments 110

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

Reading time 26 min
Views 5.7K

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

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

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

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

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

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

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

Break -in- ABI
Total votes 16: ↑14 and ↓2 +12
Comments 40

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

Reading time 9 min
Views 3.7K

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

Читать далее
Total votes 9: ↑9 and ↓0 +9
Comments 2

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

Level of difficulty Easy
Reading time 9 min
Views 2.8K

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

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 2

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

Reading time 8 min
Views 75K

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

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

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

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

Читать далее
Total votes 107: ↑105 and ↓2 +103
Comments 87

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

Level of difficulty Medium
Reading time 12 min
Views 5.9K

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

Читать далее
Total votes 15: ↑14 and ↓1 +13
Comments 33

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

Level of difficulty Medium
Reading time 18 min
Views 3.5K

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

Читать далее
Total votes 11: ↑11 and ↓0 +11
Comments 3

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

Level of difficulty Medium
Reading time 13 min
Views 9.1K
image


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

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

Level of difficulty Medium
Reading time 11 min
Views 41K

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

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

Если отсечь все эмоции, связанные с ООП, то что останется? По-прежнему ли ООП является эффективным инструментом разработки ПО, или оно превратилось в устаревшее увлечение? Профессионалам важно знать ответ на этот вопрос!
Читать дальше →
Total votes 89: ↑71 and ↓18 +53
Comments 139

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

Level of difficulty Easy
Reading time 8 min
Views 2.5K

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

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

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

Level of difficulty Easy
Reading time 4 min
Views 9.9K

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

Читать далее
Total votes 21: ↑20 and ↓1 +19
Comments 14

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

Level of difficulty Easy
Reading time 16 min
Views 4.9K

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

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

Читать далее
Total votes 32: ↑30 and ↓2 +28
Comments 17

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

Level of difficulty Easy
Reading time 5 min
Views 11K

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

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

Читать далее
Total votes 57: ↑57 and ↓0 +57
Comments 81

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

Level of difficulty Hard
Reading time 9 min
Views 10K
TPM (Trusted Platform Module) — это международный стандарт, обеспечивающий доверенную работу с вычислительными платформами в целом и предоставляющий ряд возможностей обеспечения безопасности в компьютерных системах, в частности: хеширование, шифрование, подписывание, генерацию случайных чисел и т.д.


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

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

Level of difficulty Easy
Reading time 7 min
Views 4.6K

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

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

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

Читать далее
Total votes 24: ↑24 and ↓0 +24
Comments 7

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

Level of difficulty Easy
Reading time 9 min
Views 17K

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

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

Level of difficulty Medium
Reading time 10 min
Views 5.3K

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

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

Читать далее
Total votes 25: ↑25 and ↓0 +25
Comments 2

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

Reading time 13 min
Views 15K

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

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

Читать далее
Total votes 22: ↑21 and ↓1 +20
Comments 10

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

Level of difficulty Easy
Reading time 3 min
Views 53K

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

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

Читать далее
Total votes 98: ↑96 and ↓2 +94
Comments 52

Information

Rating
Does not participate
Location
Россия
Registered
Activity