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

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

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

Моя любимая функция Kotlin

Время на прочтение6 мин
Количество просмотров13K
За последние несколько лет я видел много дискуссий о функциях Kotlin. Среди обсуждаемых тем обнуляемость всегда в первых рядах. Мне она нравится, но это определенно не моя любимая функция.

Больше всего в Kotlin мне нравятся некоторые мелкие особенности, благодаря которым язык становится очень элегантным. Например, смарт-кастинг (контракты), приостановка, функции приемника/расширения и делегирование.

Но на данный момент моей любимой особенностью является сочетание функций inline и suspend.
Читать дальше →
Всего голосов 20: ↑16 и ↓4+17
Комментарии2

Нестандартный полиморфизм. Паттерн Type Erasure

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

Нестандартный полиморфизм. Паттерн Type Erasure.

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

Читать далее
Всего голосов 12: ↑11 и ↓1+14
Комментарии47

Вычисляем на видеокартах. Технология OpenCL. Часть 2. Алгоритмы в условиях массового параллелизма

Время на прочтение9 мин
Количество просмотров8K
Автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов провёл вебинар «Вычисляем на видеокартах. Технология OpenCL».



Мы подготовили для вас его текстовую версию, для удобства разбив её на смысловые блоки.
1. Зачем мы здесь собрались. Краткая история GPGPU.
1a. Как работает OpenCL.
1b. Пишем для OpenCL.
2. Алгоритмы в условиях массового параллелизма.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии4

Почему мьютексы в Rust реализованы именно так

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

Я часто слышу от пробующих работать с Rust системных программистов жалобы на мьютексы и особенно на Rust Mutex API. Жалобы обычно выглядят так:

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

Такие изменения превратили бы Rust mutex API в эквивалент C/Posix mutex API. Однажды я даже видел, как один разработчик пытался использовать Mutex<()> и разные хитрости, чтобы его имитировать.

Однако у такого стремления есть проблема: эти два аспекта Mutex неразрывно связаны друг с другом, а также с гарантиями безопасности Rust в целом — изменение одного из них или обоих откроет возможности для возникновения незаметных багов и повреждений из-за гонок данных.

Использование API мьютексов в стиле C, состоящего из набора косвенно защищаемых данных и из функций lock и unlock было бы опрометчивым в Rust, потому что это позволяет безопасному коду легко вносить ошибки, нарушающие безопасность памяти и вызывающие гонки данных.

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

В этом посте я разберу типичный C mutex API, сравню его с типичным Rust mutex API, и расскажу о том, что произойдёт, если мы изменим Rust API так, чтобы он напоминал C.
Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии26

Вызов виртуальных функций в конструкторах и деструкторах (C++)

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

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

Читать дальше →
Всего голосов 11: ↑9 и ↓2+10
Комментарии6

Как писать bash-скрипты надежно и безопасно: минимальный шаблон

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

Скрипты на Bash. Как много в этом слове. Любому разработчику рано или поздно приходится их писать. Почти никто не скажет "да, я люблю писать bash-скрипты", и поэтому этой теме уделяют мало внимания.

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

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

Как я переписывал vim конфиг в init.lua

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

Статья рассказывает о том, как я с нуля переписывал свой nvim-конфиг (init.vim) в конфиг с поддержкой lua (init.lua).

Читать далее
Всего голосов 16: ↑15 и ↓1+18
Комментарии38

Особое мнение Ричарда Фейнмана по гибели шаттла «Челленджер»

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

В процессе чтения неплохого поста про американскую SLS наткнулся на цитату из документа, на который часто ссылаются в постах про Space Shuttle, но целиком на русском я его найти не смог - особое мнение Ричарда Фейнмана в составе комиссии по расследованию катастрофы шаттла "Челленджер" в 1986 году.

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

Читать далее
Всего голосов 65: ↑63 и ↓2+90
Комментарии77

Как понимать свой рабочий ресурс, и что делать, если он непостоянен, как питерская погода

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

Периодически я увлекаюсь [интересными проектами] и забываю «смотреть на приборы», игнорируя сигналы мясного костюма и мозга о том, что пора бы уже и отдохнуть. Замедлиться. Сделать паузу. Выдохнуть.

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

Это становится сигналом, который я не могу игнорировать. Свидетельство того, что батарейка моя на исходе, и надо что-то с этим делать, чтобы не свалиться в очередное выгорание.

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

Основы Java Bytecode

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

Внимание, статья содержит довольно много картинок и получилась довольно тяжелой и объемной

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

В данной статье будут рассмотрены только основы Java Bytecode. Если вы уже знакомы с его основами, статья вряд ли будет вам интересна.

Вглубь
Всего голосов 14: ↑14 и ↓0+14
Комментарии5

Как управлять вашими секретами с git-crypt

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

Большинство программных проектов используют секреты – обычно, как ключи к удаленному API или данные для доступа к внешнему ресурсу, например к базе данных. Вашему приложению необходимы эти ключи во время работы, поэтому вам нужно предоставить их при развертывании приложения или на этапе подготовки окружения.
В данной статье я покажу вам, как использовать git-crypt так, чтобы вы могли безопасно хранить секреты ваших приложений в репозиториях исходного кода, даже публичных.

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

[Личный опыт] Есть ли жизнь в ЮАР и стоит ли туда переезжать инженеру

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

Серьезно, ЮАР? Может быть, сразу Зимбабве или Гонолулу? Но между прочим ЮАР — это страна с технологическими стартапами, практически средиземноморским климатом и самым богатым национальным составом. Наш герой Илья Шихов открыл в ЮАР стартап и проводит в стране по 3 месяца в году вместе с женой и двумя детьми. Он расскажет, как в Африке живется, как обстоят дела с образованием и медициной, что привлекает в страну европейских пенсионеров и чем здесь вообще заниматься IT-специалисту.




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

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

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

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

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

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

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

Qt на Android: как мы дали вторую жизнь приложению с авторскими медитациями

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

Краткое лирическое вступление — в 2017 году мне случилось очень плотно заинтересоваться медитациями. Этому способствовала целая цепочка событий, благоприятных и не очень. Я долгие годы интересуюсь и практикую осознанные сновидения, однако конкретно медитациями в их каноническом виде до этого заниматься не приходилось. В эти дни многие истории начинаются в баре (с) увлечения начинаются с поиска в Google, вот и я начал именно так. Практически сразу нашлись топовые по популярности приложения для занятия медитацями — Calm и Headspace.


Первое послужило неплохое отправной точкой (отличные обучающие медитации для начинающих), второе я не нашел для себя полезным, не понравилась подача. Оба оттолкнули своими платными (и надо сказать весьма дорогостоящими для РФ) тарифными планами. Возможно я просто не отношусь к категории людей, которым нужно заплатить, чтобы подбадривать себя чем-то заниматься :) Продолжная изучать Google play, я наткнулся на два близких мне по духу бесплатных приложения. Первое это "Let's Meditate" — я пользуюсь им по сей день, о втором речь пойдет в теле статьи.

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

Средства консоли Chrome, которыми вы, возможно, никогда не пользовались

Время на прочтение7 мин
Количество просмотров53K
Консоль инструментов разработчика Chrome — это, вероятно, одно из самых широко используемых и самых полезных специализированных средств браузера. Консоль даёт программисту множество интересных возможностей. Она помогает в отладке, профилировании и мониторинге кода страниц.



Материал, перевод которого мы сегодня публикуем, посвящён рассказу о некоторых возможностях консоли Chrome, которые известны не так широко, как они того заслуживают.
Читать дальше →
Всего голосов 94: ↑94 и ↓0+94
Комментарии27

256 строчек голого C++: пишем трассировщик лучей с нуля за несколько часов

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

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

Внимание: просто рассматривать мой код, равно как и просто читать эту статью с чашкой чая в руке, смысла не имеет. Эта статья рассчитана на то, что вы возьмётесь за клавиатуру и напишете ваш собственный движок. Он наверняка будет лучше моего. Ну или просто смените язык программирования!

Итак, сегодня я покажу, как отрисовывать подобные картинки:


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

Осторожный переезд в Нидерланды с женой и ипотекой. Часть 1: поиск работы

Время на прочтение12 мин
Количество просмотров108K
На Хабре да и вообще в русскоязычном Интернете есть немало инструкций о том, как перебраться в Нидерланды. Я и сам немало полезного почерпнул из одной статьи на Хабре (ныне, видимо, скрытой в черновике уже нет, вот она). Но я все-таки расскажу о своем опыте поиска работы и переезда в эту европейскую страну. Помнится, и когда я только собирался рассылать резюме, и когда уже проходил собеседования, мне было очень интересно почитать об аналогичном опыте других коллег по цеху.

image

В общем, если вам интересен рассказ о том, как C++ программист из Подмосковья искал работу в Европе, желательно в Великобритании, а нашел-таки в Нидерландах, переехал туда сам и привез жену, все это с непогашенной ипотекой в России и с небольшими приключениями — добро пожаловать под кат.
Читать дальше →
Всего голосов 216: ↑202 и ↓14+188
Комментарии306

Откуда растут ноги у Java Memory Model

Время на прочтение19 мин
Количество просмотров77K
Современное железо и компиляторы готовы перевернуть с ног на голову наш код, лишь бы он работал быстрее. А их производители тщательно скрывают свою внутреннюю кухню. И все прекрасно, пока код выполняется в одном потоке.

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

Но все уже осознали, ведь жить с этим как-то надо. А Java программисты даже неплохо живут. Потому что в Java есть модель памяти — Java Memory Model (JMM), которая предоставляет достаточно простые правила для написания корректного многопоточного кода.

И правил этих достаточно для большинства программ. Если вы их не знаете, но пишите или хотите писать многопоточные программы на Java, то лучше как можно скорее ознакомиться с ними. А если знаете, но вам не хватает контекста или интересно узнать откуда растут ноги у JMM, тогда статья может вам помочь.
Читать дальше →
Всего голосов 55: ↑53 и ↓2+51
Комментарии10

io_submit: альтернатива epoll, о которой вы никогда не слышали

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


Недавно внимание автора привлекла статья на LWN о новом интерфейсе ядра для опроса (polling). В ней обсуждается новый механизм опроса в Linux AIO API (интерфейс для асинхронной работы с файлами), который добавили в ядро версии 4.18. Идея довольно интересная: автор патча предлагает использовать Linux AIO API для работы с сетью.

Но постойте! Ведь Linux AIO был создан для работы с асинхронным вводом-выводом с диска / на диск! Файлы на диске — это не то же самое, что сетевые соединения. Возможно ли вообще использовать Linux AIO API для работы с сетью?

Оказывается, да, возможно! В этой статье объясняется, как использовать сильные стороны Linux AIO API для создания более быстрых и лучших сетевых серверов.

Но давайте начнём с разъяснения, что представляет собой Linux AIO.
Читать дальше →
Всего голосов 77: ↑77 и ↓0+77
Комментарии36

Внутри Quake: всегда рассматривайте альтернативы

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

Программист Майкл Абраш, в середине 90-х приглашённый Джоном Кармаком для работы над движком первого Quake, написал в процессе разработки серию статей. Это вторая колонка из данной серии. Перевод первой находится здесь.

Должен признаться: меня достал классический рок. В последний раз я с радостью слушал что-нибудь из Cars или Boston довольно давно, около 20 лет назад. Кроме того, меня никогда особо не привлекали Боб Сигер и Queen, не говоря уже об Элвисе, так что здесь мало что изменилось. Но я понимал, что нечто изменилось, когда мне хотелось переключить радио, услышав Allman Brothers, или Steely Dan, или Pink Floyd, или, господи, прости, Beatles (но только на таких вещах, как «Hello Goodbye» и «I’ll Cry Instead», а не «Ticket to Ride» или «A Day in the Life»; я ещё не зашёл настолько далеко). Долго искать причины этого не пришлось; я слушал одни и те же песни четверть века, и просто от них устал.

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

Мы говорим о десятилетней девочке, росшей на постоянной диете из старых хитов. Ей нравятся мелодии, легко запоминающиеся песни и хорошие певцы. Ничего из этого не найдёшь, слушая станцию про альтернативный рок. Поэтому неудивительно, что когда я включил радио, она первым делом сказала «Фу!»

Но вот что меня удивило: послушав какое-то время, она сказала: «Знаешь, папа, а на это на самом деле интересно».

Это не только намекнуло мне о том, какая музыка будет грохотать по всему дому, когда она станет тинейджером. Её быстрое принятие альтернативного рока (по сравнению с моим длящимся десяток лет увлечением музыкой собственной юности) напомнило мне кое о чём, что легко забывается, когда становишься старше и образ жизни становится устоявшимся. Это напомнило мне, что необходимо сохранять открытость сознания и быть готовым — более того, стремиться — пробовать новые вещи.
Читать дальше →
Всего голосов 40: ↑36 и ↓4+32
Комментарии5
1

Информация

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