Как стать автором
Обновить
14
0.6
middle @middle

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

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

Итоги: 9 главных технологических прорывов 2019 года

Время на прочтение10 мин
Количество просмотров20K
На связи Александр Чистяков, я евангелист vdsina.ru и расскажу про 9 лучших технологических событий 2019 года.

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

Я не сортировал события в списке по значимости или вау-эффекту, потому что их значимость будет понятна лет через десять, а вау-эффект слишком краткосрочен, просто постарался сделать эту историю связной.
Читать дальше →
Всего голосов 26: ↑22 и ↓4+23
Комментарии20

А вы умеете готовить nested_flatbuffers?

Время на прочтение15 мин
Количество просмотров4.8K
У протокола FlatBuffers имеется интересная возможность — использовать вложенную структуру внутри другой структуры, но хранить ее, как массив сырых данных. Такая оптимизация позволяет уменьшить затраты на память и производительность при чтении/записи данных. Для этого необходимо использовать специальный атрибут — nested_flatbuffers.

Правда, как это часто водится за разработчиками протоколов, на нормальные примеры сил им уже не хватает. И даже на тематических форумах типа stackoverflow, groups.google и т.п. сложно найти полную информацию — приходится буквально по крупицам собирать все части паззла, чтобы в конце концов понять, как именно написать рабочий код.

В статье я раскрою проблему подробнее и приведу примеры на C, C++ и Rust.

In concept this is very simple: a nested buffer is just a chunk of binary data stored in a ubyte vector, typically with some convenience methods generated to access a stored buffer. In praxis it adds a lot of complexity.


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

Pylint: о попытке снизить потребление памяти

Время на прочтение8 мин
Количество просмотров6K
Мне приходится работать с огромной кодовой базой, написанной на Python. Этот код, с помощью системы непрерывной интеграции, проверяется с помощью Pylint. Подобная проверка всегда была немного медленной, но недавно я обратил внимание на то, что при её проведении ещё и потребляется очень много памяти. Это, при попытке распараллеливания проверок, приводит к сбоям, которые связаны с нехваткой памяти.



Однажды я решил засучить рукава и найти ответы на следующие вопросы:

  • Что именно потребляет так много памяти?
  • Можно ли как-то этого избежать?

Здесь я хочу рассказать о том, как искал ответы на эти вопросы. Я планирую пользоваться этим материалом как справочником в тех случаях, когда мне придётся заниматься профилированием Python-кода.
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии1

Слабые модели памяти: буферизации записи на x86

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

Об авторе


Антон Подкопаев является постдоком в MPI-SWS, руководителем группы слабых моделей памяти в лаборатории языковых инструментов JetBrains Research и преподавателем Computer Science Center.

Еще в 1979 году Лесли Лампорт в статье «How to make a multiprocessor computer that correctly executes multiprocess programs» ввел, как следует из названия, идеализированную семантику многопоточности — модель последовательной консистентности (sequential consistency, SC). Согласно данной модели, любой результат исполнения многопоточной программы может быть получен как последовательное исполнение некоторого чередования инструкций потоков этой программы. (Предполагается, что чередование сохраняет порядок между инструкциями, относящимися к одному потоку.)

Рассмотрим следующую программу SB:



В этой программе два потока, в каждом из которых первая инструкция — инструкция записи в разделяемую локацию (x или y), а вторая — инструкция чтения из другой разделяемой локации. Для этой программы существует шесть чередований инструкций потоков:


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

Проблемы со сном и их решения: личный опыт длиной в 15 лет

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


Так сложилось, что уже около полутора десятков лет на разнообразные стрессы мой организм реагирует, лишая меня достаточного количества и качества сна. А спать я люблю, и люблю быть бодрой и выспавшейся! Поэтому все эти годы я неустанно борюсь за свой сон и использую все способы его улучшения, о которых узнаю, и которые оказываются мне доступны. Этот текст — подборка лайфхаков для улучшения сна, но в первую очередь это мой личный опыт. Надеюсь, он будет полезен тем, кто, как и я, любит хорошо спать, но порой имеет с этим проблемы.

Чтобы вы поняли масштаб проблемы. Это — определение бессонницы из Википедии:

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

Так вот, ВСЕ из перечисленных проблем в разные годы своей жизни мне довелось почувствовать на себе — и почувствовать не однажды.



Были периоды, когда мне каждый вечер долго не удавалось уснуть. Я проводила бесконечные часы в постели, изнывая от желания спать и невозможности это сделать. В другие моменты жизни я просыпалась несколько раз за ночь, спала неглубоко, в итоге вставала совершенно невыспавшейся. Через несколько лет начались регулярные утренние пробуждения: что-то заставляло меня проснуться в 4-5 утра, и уснуть назад не получалось. Разные проблемы со сном длятся у меня от нескольких недель до нескольких месяцев и могут повторяться.
Читать дальше →
Всего голосов 34: ↑25 и ↓9+26
Комментарии88

Основы компьютерной геометрии. Написание простого 3D-рендера

Время на прочтение30 мин
Количество просмотров53K
Привет меня зовут Давид, а вот я собственной персоной отрендеренный своим самописным рендером:

image

К сожалению я не смог найти более качественную бесплатную модель, но все равно выражаю благодарность заморскому скульптору запечатлевшему меня в цифре! И как вы уже догадались, речь пойдет о написании CPU — рендера.
Читать дальше →
Всего голосов 34: ↑33 и ↓1+43
Комментарии21

Как нарисовать звезду (и не только) в полярных координатах

Время на прочтение6 мин
Количество просмотров33K
Вопрос о формуле для многоугольника в полярных координатах регулярно возникает на тематических ресурсах — и так же регулярно остаётся без внятного ответа. В лучшем случае попадается решение через функцию остатка от деления — что не является «чистым» с математической точки зрения, поскольку не позволяет производить над функцией аналитические преобразования. Видимо, настоящие математики слишком заняты решением проблем тысячелетия и поисками простого доказательства теоремы Ферма, чтобы обращать внимание на подобные банальные задачи. К счастью, в этом вопросе воображение важнее знания, и для решения этой задачи не нужно быть профессором топологических наук — достаточно знания школьного уровня.
Дальше больше картинок
Всего голосов 116: ↑114 и ↓2+148
Комментарии31

Издательство Питер. Осенняя распродажа

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

Привет, Хаброжители! Пришло время осенним скидкам. Подробности внутри.
Читать дальше →
Всего голосов 19: ↑17 и ↓2+24
Комментарии12

Планка найма для инженеров: что это за зверь?

Время на прочтение19 мин
Количество просмотров28K
Последние пять лет Рекурсивный Кактус трудился фулстек-разработчиком в топовой технологической компании, но сейчас решил сменить работу.

За последние полгода Рекурсивный Кактус (так он представился при регистрации на нашем сайте) готовился к будущим собеседованиям, выделяя каждую неделю минимум 20-30 часов на упражнения LeetCode, учебники по алгоритмам и, конечно, практику интервью на нашей платформе для оценки своего прогресса.

Типичный рабочий день Рекурсивного Кактуса:


Время Занятие
6:30 – 7:00 Подъём
7:00 – 7:30 Медитация
7:30 – 9:30 Решение задач по алгоритмам
9:30 – 10:00 Путь на работу
10:00 – 18:30 Работа
18:30 – 19:00 Путь с работы
19:00 – 19:30 Общение с женой
19:30 – 20:00 Медитация
20:00 – 22:00 Решение задач по алгоритмам
Всего голосов 30: ↑28 и ↓2+38
Комментарии105

Случайный трамвай посреди незнакомого города

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


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

В чем же, собственно, задача


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

Для простоты считайте, что трамвайные маршруты в городе пронумерованы без пропусков числами от 1 до N и изначально каждое из этих чисел с равными шансами могло оказаться номером трамвая, который вы бы увидели первым.
Читать дальше →
Всего голосов 29: ↑24 и ↓5+32
Комментарии145

std::atomic. Модель памяти C++ в примерах

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

Для написания эффективных и корректных многопоточных приложений очень важно знать какие существуют механизмы синхронизации памяти между потоками исполнения, какие гарантии предоставляют элементы многопоточного программирования, такие как мьютекс, join потока и другие. Особенно это касается модели памяти C++, которая была создана сложной таковой, чтобы обеспечивать оптимальный многопоточный код под множество архитектур процессоров. Кстати, язык программирования Rust, будучи построенным на LLVM, использует модель памяти такую же, как в C++. Поэтому материал в этой статье будет полезен программистам на обоих языках. Но все примеры будут на языке C++. Я буду рассказывать про std::atomic, std::memory_order и на каких трех слонах стоят атомики.

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

Кто такие шизоиды, где они обитают, и почему вам может быть полезно о них узнать

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

Основные стереотипы о шизоидах в одной картинке

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

Сам этот характер довольно тяжело описать одновременно коротко и корректно. Некоторые называют их «гиками», «интровертами», «чудаками», «ботаниками», «хикканами», «эксцентричными», «нердами», «компьютерными гениями»[1, стр. 231], и все эти характеристики в той или иной мере имеют отношение к, собственно, шизоидам, но ни одна из них не является определяющей.

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

Большая часть литературы, посвящённой шизоидам, имеет клиническую направленность и описывает достаточно тяжёлые случаи шизоидизации, а в рамках этого текста я хотел бы рассказать о здоровых шизоидах, коих среди нас присутствует достаточно для того, чтобы их особенности имели значение в контексте трудовых отношений, управления и маркетинга.
Читать дальше →
Всего голосов 126: ↑119 и ↓7+156
Комментарии351

Перевозим волка, козу и капусту через реку с эффектами на Haskell

Время на прочтение4 мин
Количество просмотров11K
Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только один объект — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту.


В этой статье мы попытаемся найти обобщенное решение для такого типа головоломок и для этого будем использовать алгебраические эффекты.
Читать дальше →
Всего голосов 35: ↑35 и ↓0+35
Комментарии4

Введение в lock-free программирование

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

В этом посте мы хотели бы еще раз поднять тему программирования без блокировок, сперва дав ему определение, а затем выделить из всего многообразия информации несколько ключевых положений. Мы покажем, как эти положения соотносятся между собой, с помощью блок-схем, а потом мы немного коснемся деталей. Минимальное требование к разработчику, постигающему lock-free, — умение писать правильный многопоточный код, используя мьютексы или другие высокоуровневые объекты синхронизации, например, семафоры или события.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии17

Пора обновить ваш монитор

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

Иллюстрация: Юлия Прокопова

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

Поэтому я оптимизирую настройки, чтобы показывать действительно, действительно хорошие буквы. Для этого необходим хороший монитор. Не просто нужен, а ОБЯЗАТЕЛЕН. А под «хорошим» я имею в виду настолько хороший, насколько это возможно. Это мои мысли, основанные на моём собственном опыте того, какие мониторы лучше подходят для программирования.
Читать дальше →
Всего голосов 142: ↑109 и ↓33+115
Комментарии991

Красивая и подробная геологическая карта Марса, сделанная на Python, GDAL

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

На этой неделе — творческое переосмысление геологической (или все же ареологической?) карты Марса на основе карты, сделанной USCS. Использовалась те же геологические данные, что и для оригинальной, но было добавлено больше топонимов и подписей, проведен редизайн визуального стиля, а термины из легенды карты упрощены для общего понимания.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+30
Комментарии8

How to speed up LZ4 decompression in ClickHouse?

Время на прочтение23 мин
Количество просмотров16K
When you run queries in ClickHouse, you might notice that the profiler often shows the LZ_decompress_fast function near the top. What is going on? This question had us wondering how to choose the best compression algorithm.

ClickHouse stores data in compressed form. When running queries, ClickHouse tries to do as little as possible, in order to conserve CPU resources. In many cases, all the potentially time-consuming computations are already well optimized, plus the user wrote a well thought-out query. Then all that's left to do is to perform decompression.



So why does LZ4 decompression becomes a bottleneck? LZ4 seems like an extremely light algorithm: the data decompression rate is usually from 1 to 3 GB/s per processor core, depending on the data. This is much faster than the typical disk subsystem. Moreover, we use all available CPU cores, and decompression scales linearly across all physical cores.
Read more →
Всего голосов 23: ↑21 и ↓2+19
Комментарии0

Объясните мне, как вы для себя разобрались в моделях типизаций — они же все размыты

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


Когда я был начинающим, я мог писать простые приложения на C# и C++. Долго игрался с консольными прогами, пощупал десктопные, и в какой-то момент захотел сделать сайт. Меня ждал большой сюрприз — чтобы делать сайты, одного сишарпа мало. Надо ещё знать жс, хтмл, цсс и прочую фронтовую хрень. Я потратил около недели на эти вещи, и понял — не мое. Я мог написать какой то код на джаваскрипт, но он не содержал типов, и я никак не мог взять в толк — как к этому вообще подходить. Это какое-то игрушечное программирование. Ну и забросил к чертям.


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


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

Читать дальше →
Всего голосов 120: ↑106 и ↓14+115
Комментарии441

Российский fair use: где лежит граница копирайта?

Время на прочтение3 мин
Количество просмотров8.6K
Снова полыхает обсуждение авторских прав. Люди порицают авторские права за их тотальность и глухоту. Давайте посмотрим, что всё-таки можно делать в России. Какой ты, российский fair use?

Книги
Да-да, иногда можно ставить портрет на обложку!
(РИА Новости, Wikimedia Commons, CC-BY-SA)


В законе много запретов, однако сделан и целый ряд льгот. Предлагаю путеводитель по этим льготам.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+34
Комментарии46

Аллокаторы памяти

Время на прочтение20 мин
Количество просмотров103K
Всем привет! Не так давно, после очень плотного изучения аллокаторов и алгоритмов распределения памяти, а также в последующем применении их на практике мне в голову пришла идея написать статью, в которой будет максимально подробно рассказано о них. Считаю, что данная тема будет достаточно востребованной, так как в сети, особенно в русскоязычной части, на данный момент существует очень мало источников, посвященных этому вопросу.
Читать дальше →
Всего голосов 30: ↑27 и ↓3+37
Комментарии15

Информация

В рейтинге
1 856-й
Откуда
Barcelona, Barcelona, Испания
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer
Senior