Как стать автором
Обновить
0
@AlexandreDumasread⁠-⁠only

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

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

C и C++: межъязыковые интерфейсы

Время на прочтение11 мин
Количество просмотров15K
Как известно, C и C++ — это родственные языки между которыми есть много общего. Но их пути, с годами, расходятся всё сильнее. В общих чертах дело обстоит так: код, написанный на одном из этих языков, не может быть скомпилирован под видом кода, написанного на другом. Этому мешает множество больших и маленьких различий между языками. Причём, речь идёт не только о синтаксических различиях. Некоторые общие синтаксические конструкции могут иметь разную семантику. Поэтому обычно нет никакого смысла в том, чтобы компилировать код, написанный на C, с помощью C++-компилятора. Не стоит доверять тем, кто утверждает обратное.

Правда, есть одна сфера, где обычно наблюдается согласие между C и C++. Это — ABI (Application Binary Interface, двоичный интерфейс приложений). Структуры данных и функции одного языка могут быть, в той или иной мере, использованы в другом языке. C и C++, кроме того, достаточно сильно пересекаются в области спецификаций интерфейсов, вследствие чего один и тот же заголовочный файл можно использовать из кода, написанного на обоих языках.



В этом материале я постараюсь собрать то общее, что есть у C и C++ и предложу некоторые рекомендации, которые позволят достаточно хорошо сочетать эти языки. Это, правда, будет всего лишь рассказ, иллюстрирующий точку зрения C-программиста, который хочет создавать интерфейсы для C++.
Читать дальше →
Всего голосов 49: ↑43 и ↓6+37
Комментарии11

Алан Кэй, создатель ООП, про разработку, Лисп и ООП

Время на прочтение5 мин
Количество просмотров60K
image

Если вы никогда не слышали про Алана Кэя, то как минимум слышали его знаменитые цитаты. Например, это высказывание 1971 года:
The best way to predict the future is to invent it.
Лучший способ предсказать будущее это изобрести его.


У Алана очень яркая карьера в информатике. Он получил Премию Киото и Премию Тьюринга за работу над парадигмой объектно-ориентированного программирования. Он был одним из первопроходцев в области персональных компьютеров и графического интерфейса, он разработал Smalltalk — один из первых самых влиятельных языков программирования всех времен.

У нас в Хекслете, особенно в чате, постоянно поднимается вопрос «что такое ООП» и «что имел ввиду Алан Кэй на самом деле». В этой заметке собраны интересные цитаты Алана о состоянии современной разработки, ООП и языке Лисп.
Читать дальше →
Всего голосов 42: ↑37 и ↓5+32
Комментарии139

Все программисты думают что C++ поддерживает ООП, кроме автора ООП

Время на прочтение5 мин
Количество просмотров37K
В последнее время заметил статьи на тему «ООП крут vs процедурное программирование плохо» и «ООП плохо vs процедурное программирование круто» и «ООП и процедурное плохо vs будущее за XYZ принципами», где XYZ какое-то модно новое понятие.

image

Самое смешное в этих статьях то, что многие под ООП понимают некий принцип когда-то заложенный в C++. И редко кто реально понимает что такое ООП. Вдруг мне показалось что 99% программистов вообще плохо понимают что такое ООП. Но может быть я ошибаюсь? Давайте посмотрим…
Читать дальше →
Всего голосов 55: ↑24 и ↓31-7
Комментарии310

Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты

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

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

Читать далее
Всего голосов 108: ↑100 и ↓8+92
Комментарии338

Фетиш LaTeX (или Не пишите в LaTeX! Он только для вёрстки)

Время на прочтение24 мин
Количество просмотров119K
Сейчас то время года, когда студенты выбирают себе классы для обучающих навыков. Один из навыков, который будет поощряться, — обучение LaTeX. Другие могут придти к использованию LaTeX по другим причинам: кто-то хочет сверстать книгу; кто-то слышал, что LaTeX может иметь отношение к журналу Digital Humanities; ну и так далее. Я написал это эссе в качестве предварительного введения в LaTeX. Оно не научит вас использовать редактор (я не имею квалификации для этого!), но я попытаюсь популярно объяснить тем, кто ещё не использует LaTeX, для чего именно он нужен. Это поможет им понять, стоит ли LaTeX усилий на его изучение (не говоря уже о том, чтобы просто заставить его работать). Почему такое большое эссе? Потому что многие из евангелистов превратили LaTeX в фетиш и распространяют дезинформацию о его истинных достоинствах. Хочу прояснить ситуацию.

1. Что такое LaTeX?


По словам официального сайта, LaTeX — это «высококачественная система набора и вёрстки» и «стандарт де-факто для обмена и публикации научных документов». С этим никто не спорит.
Читать дальше →
Всего голосов 55: ↑33 и ↓22+11
Комментарии71

Почему чип Apple M1 такой быстрый?

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

Опыт использования новых маков с М1 начинает расставлять точки над i. Эти чипы быстрые. Очень быстрые. Но почему? В чем магия?

Я смотрел видео на Youtube, где автор купил iMac в прошлом году максимальной конфигурации. Машина с 40+ Gb ОЗУ стоила ему около 4000$. Он смотрел с недоверием, как его гипердорогой iMac был разнесен в пух и прах новеньким Mac mini с М1 на борту, который стоил около 700$.

В реальном мире, тест за тестом, макбуки с М1 не просто превосходят топовые компьютеры Intel прошлых поколений. Компьютеры Mac просто уничтожают их. С недоверием люди стали спрашивать, как такое возможно?

Читать далее
Всего голосов 115: ↑73 и ↓42+31
Комментарии550

Код на React и TypeScript, который работает быстро. Доклад Яндекса

Время на прочтение16 мин
Количество просмотров27K
Евангелисты Svelte и других библиотек любят показывать примеры тормозящих компонентов на React. React и TypeScript дают много возможностей создавать медленный код. После доклада Виктора victor-homyakov вы сможете писать более производительные компоненты без усложнения кода.

— Здравствуйте, меня зовут Виктор, я один из разработчиков страницы поиска Яндекса. На ней каждый день сотни миллионов пользователей вводят свои запросы, получают страницу со ссылками или сразу с правильными ответами. Из-за такого количества запросов нам очень важно, чтобы наш код работал оптимально. И, конечно, я сразу должен затронуть тему преждевременной оптимизации кода.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии30

Как я собрал «умный» органайзер для электронных компонентов

Время на прочтение13 мин
Количество просмотров28K
Привет. Я Александр Бурага, разработчик из команды роботов и беспилотных автомобилей Яндекса. Но сегодня речь пойдёт не о них, а о моём личном проекте, над которым тружусь дома.

Сложно найти радиолюбителя, который не занимался бы монтажом печатных плат. Ещё сложнее — того, кто задумывается об удобном хранении деталей прежде, чем поиск чего-то нужного среди запасов превращается в сущий кошмар. Инструменты для ведения проектов, написания кода и контроля версий в последние десятилетия развиваются очень быстро. ПО, упрощающее монтаж, тоже обновляется, хотя и не так стремительно. А вот системы хранения электронных компонентов практически не изменились с 90-х: помните кассетницы из спичечных коробков?



Мне часто случается вооружаться паяльником — например, дорабатывать или монтировать отдельные радиоэлектронные блоки — с проблемой бессистемного хранения столкнулся и я. Под катом вас ждёт рассказ о том, как я пытаюсь решить её с помощью «умного» органайзера, который понимает речь и запоминает своё содержимое.
Читать дальше →
Всего голосов 71: ↑68 и ↓3+65
Комментарии110

ARM и программирование без блокировок

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


Выпуск ARM-процессора Apple M1 вдохновил меня на то, чтобы написать в Твиттер про опасности программирования без блокировок (lock-free). Этот твит вызвал бурную дискуссию. Обсуждение прошло довольно неплохо, учитывая то, что попытки втиснуть в рамки Твиттера обсуждениие такой сложной темы, как модели памяти центрального процессора, — в принципе бессмысленны. Но у меня осталось желание немного раскрыть тему.

Этот пост задуман не только как обычная вводная статья про опасности программирования без блокировок (о которых я в последний раз писал около 15 лет назад), но и как объяснение, почему слабая модель памяти ARM ломает некоторый код, и почему этот код, вероятно, не работал изначально. Я также хочу объяснить, почему стандарт C++11 значительно улучшил ситуацию в программировании без блокировок (несмотря на возражения против противоположной точки зрения).
Читать дальше →
Всего голосов 59: ↑55 и ↓4+51
Комментарии60

Как мы в RUVDS спасаем наших пользователей от брутфорса

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


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

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

Стандартные «решения»


Рассылать жалобы


Очень распространенный подход. При обнаружении вторжения в свою ИС занести атакующего в фаерволл (или не занести) и отправить автоматическую жалобу по почте, которую нашли во whois.
Мы получаем жалобы на наших клиентов от системы обнаружения вторжений разных банков, офисов, сайтов. Даже, вроде как, крупные организации просто накатывают fail2ban и на этом все.
Работать это все будет через раз, что, если атакующего не забанят? Да и неправильно это, давать возможность постучаться к себе в дверь, что, если кто-то установит пароль уровня solarwinds123 и его взломают с первой попытки?

Заставлять пользователей «делать правильно».


Можно сделать свою службу, почти малварь, как это сделали Godaddy, добавить еще одного пользователя под логином nydys и забыть отключить администратора cloud-init, как это сделали Godaddy, установить в систему 8 лишних сертификатов, как это сделали Godaddy.
Еще можно блокировать AD и другие «небезопасные порты», как это делали некоторые другие хостинги и вот это вот все.
Читать дальше →
Всего голосов 37: ↑32 и ↓5+27
Комментарии13

Constraint Programming или как решить задачу коммивояжёра, просто описав её

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

Пожалуй, наиболее популярной парадигмой программирования является императивное программирование, но это не единственный вид программирования, широки известны функциональное и логическое программирование. Constraint Programming (Программирование в ограничениях/Ограниченное программирование) не так популярно. Но это очень мощный инструмент для решения комбинаторных задач. Вместо реализации алгоритма, который решает задачу, с последующей тратой кучи времени на его отладку, рефакторинг и оптимизацию, программирование с ограничениями позволяет вам просто описать модель в специальном синтаксисе, а особая программа (решатель) найдет решение для вас (или скажет, если их нет). Впечатляет не правда ли? Мне кажется, каждый программист должен знать о такой возможности.

Read more
Всего голосов 14: ↑14 и ↓0+14
Комментарии7

Вышел Wine 6.0: что нового?

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

С момента выхода Wine 5.0 прошел целый год, и разработчики представили стабильный релиз Wine 6.0. Обновлений много, всего в новой версии Wine более 8300 изменений. Главное, что стоит отметить, — поставка базовых модулей Wine в формате PE, бэкенд на основе графического API Vulkan для WineD3D, обновленная текстовая консоль, появление поддержки DirectShow и фреймворка Media Foundation.

На данный момент официально подтверждена нормальная работа 5049 Windows-приложений. С дополнительной настройкой Wine 6.0 позволяет запускать еще 4227 приложений. Работа некоторых из них нестабильна, но, в целом, под Wine работает гораздо больше 10 тысяч Windows-программ.
Читать дальше →
Всего голосов 63: ↑62 и ↓1+61
Комментарии32

Браузер для удалёнки — своя версия

Время на прочтение5 мин
Количество просмотров7.9K
image

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

Прошедший год был полон самых неожиданных событий и сюрпризов, как приятных, так и не очень, и одним из таких новшеств, вынужденно ставших в нашей жизни уже почти нормой, можно назвать удалённую работу. Нет, удалёнка появилась давно, когда скорости интернета позволили без особых проблем избегать офисной отсидки, но тогда она ассоциировалась с тропиками, пляжем и неспешным программированием под шелест набегающих на белоснежный песок океанских волн. Не секрет, что у многих из нас такой стиль работы был приятной мечтой. Что же, мечты сбываются — теперь мы все, за небольшим исключением, работаем удалённо. Правда, удалёнка версии 2020 оказалась гораздо более сурова, чем мы себе её представляли. Но разве это проблема, если есть удобные инструменты под рукой?
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии46

Трюки с виртуальной памятью

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

Я уже довольно давно хотел написать пост о работе с виртуальной памятью. И когда @jimsagevid в ответ на мой твит написал о ней, я понял, что время пришло.

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

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

Читать далее
Всего голосов 43: ↑39 и ↓4+35
Комментарии24

Узнать врага: как MITRE TTP помогают определить атакующего

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

Количество способов, которые используют хакерские группировки, чтобы атаковать компании, кажется бесконечным, но на самом деле это не так. Практически все тактики и техники киберпреступников проанализированы и задокументированы в общедоступной базе MITRE ATT&CK. В этом посте мы расскажем о том, как во время расследования реального инцидента использование базы MITRE ATT&CK помогло нам выяснить, какая группировка атаковала компанию-клиента.

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

Что такое транзакция

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

Транзация — это набор операций по работе с базой данных, объединенных в одну атомарную пачку.

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

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

 

Читать далее
Всего голосов 32: ↑22 и ↓10+12
Комментарии30

Кто, зачем и как связывает блокчейны

Время на прочтение3 мин
Количество просмотров11K
С каждым днём количество блокчейн-проектов увеличивается (а ещё размер инфраструктуры, на них построенной). Появляется проблема — существование множества самостоятельных блокчейнов, взаимодействие которых между собой затруднено. Становятся нужными технологии для «общения» блокчейнов между собой. Ниже рассказываю о том, какими путями пытаются решить проблему (не)совместимости блокчейнов.

image
Cхема релейной цепи Polkadot
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии2

О специальных макро в ассемблере

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

Много лет назад американским специалистом Гарри Килдэллом (Gary Kildall) в рамках создания системы программирования для персональных компьютеров был разработан транслятор с языка ассемблера для процессора Intel 8086, который он назвал RASM-86 (Relocating ASseMbler). Этот во многом типичный для своего времени продукт имел особенность: он позволял, не меняя транслятора, добавлять описания новых команд процессора с помощью специальных макросредств.

Автор статьи, используя и развивая этот транслятор, успешно применял данные средства по мере появления новых поколений процессоров. Конечно, иногда и сам транслятор требовал ряда доработок, например, при переходе на архитектуру IA-32, а затем и на x86-64 (IA-32e). Тем не менее, изначально заложенная идея позволила легко продолжать эволюцию транслятора до настоящего времени. Некоторые итоги этой работы рассматриваются далее.

Читать далее
Всего голосов 21: ↑19 и ↓2+17
Комментарии12

8 бесплатных инструментов для создания интерактивных визуализаций данных без необходимости написания кода

Время на прочтение8 мин
Количество просмотров72K
Когда тот, кто работает в сфере Data Science, собирается показать результаты своей деятельности другим людям, оказывается, что таблиц и отчётов, полных текстов, недостаточно для того чтобы представить всё наглядно и понятно. Именно в таких ситуациях возникает нужда в визуализации данных, в такой их обработке, которая позволит всем желающим в них разобраться и ухватить суть тех сложных процессов, которые они описывают.

В этом материале я расскажу о лучших бесплатных инструментах, позволяющих без особых сложностей создавать впечатляющие визуальные представления данных. При этом тут я не буду говорить о сложных системах вроде Power BI и Google Studio. Я выбрал те 8 инструментов, о которых пойдёт речь, из-за того, что ими легко пользоваться, из-за их приятного внешнего вида, из-за того, что работать с ними можно, не написав ни единой строчки программного кода и из-за того, что они бесплатны. Кроме того, они позволяют создавать интерактивные визуализации. А это значит, что графики, представляющие некие данные, могут содержать в себе больше сведений об этих данных, чем обычные изображения. Да и работать с такими графиками интереснее.



Так как инструменты для визуализации данных то появляются, то исчезают, я включил в этот материал только те из них, которые, вероятнее всего, ещё долго будут пребывать в добром здравии. А это значит, что вполне разумным шагом будет вложение некоторого времени в их изучение. Как уже было сказано, пользоваться этими инструментам можно без написания кода. Но если вас интересует визуализация данных именно через код — взгляните на этот материал.
Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии8

Apache vs Nginx: практический взгляд

Время на прочтение12 мин
Количество просмотров361K
Apache vs Nginx

Введение


Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.

Несмотря на то, что у Apache и Nginx много схожих качеств, их нельзя рассматривать как полностью взаимозаменямые решения. Каждый из них имеет собственные преимущества и важно понимать какой веб-сервер выбрать в какой ситуации. В этой статье описано то, как каждый из этих веб-серверов ведет себя при различных условиях.
Читать дальше →
Всего голосов 89: ↑69 и ↓20+49
Комментарии184

Информация

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