Как стать автором
Обновить
60
0
Alexey Shrub @worldmind

Программист

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

Доработка метода ZettelKasten до эффективного инструмента по вытаскиванию самого себя из глупости

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

Как я доработал метод структурирования информации ZettelKasten для своих задач, и успешно (и с комфортом!) применяю его в повседневной жизни.

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

Дефицит есть, а денег не дают. Почему?

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

Мы уже выяснили, что у нас есть дефицит рабочих рук во всех отраслях. На примере СССР увидели, что дефицит легко закрывается деньгами и плюшками, что сейчас и происходит в IT. Однако при дефиците рабочих рук в остальных отраслях зарплаты остаются на уровне Румынии и никак не подтягиваются. Почему?

Читать далее
Всего голосов 618: ↑603 и ↓15+588
Комментарии1205

Глобальная блокировка интерпретатора (GIL) и её воздействие на многопоточность в Python

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

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

Как вы, наверное, знаете, глобальная блокировка интерпретатора (GIL, Global Interpreter Lock) — это механизм, обеспечивающий, при использовании интерпретатора CPython, безопасную работу с потоками. Но из-за GIL в конкретный момент времени выполнять байт-код Python может лишь один поток операционной системы. В результате нельзя ускорить Python-код, интенсивно использующий ресурсы процессора, распределив вычислительную нагрузку по нескольким потокам. Негативное влияние GIL на производительность Python-программ, правда, на этом не заканчивается. Так, GIL создаёт дополнительную нагрузку на систему. Это замедляет многопоточные программы и, что выглядит достаточно неожиданно, может даже оказать влияние на потоки, производительность которых ограничена подсистемой ввода/вывода.

Здесь я опираюсь на особенности CPython 3.9. По мере развития CPython некоторые детали реализации GIL, определённо, изменятся. Материал опубликован 22 сентября 2021 года, после публикации в него внесено несколько дополнений.

Читать далее
Всего голосов 63: ↑60 и ↓3+57
Комментарии12

Пол Грэм: «Нечто большее, чем интеллект»

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


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

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

В детстве я думал, что больше всего в жизни люди хотят быть умными. Вероятно, вы тоже так думали. Но готов поспорить, это не то, что вы хотели. Представьте, что вам дали выбор: быть умным и не совершать открытий или, быть чуть менее умным, но открывать много новых идей. Вы бы наверняка склонились ко второму варианту — уж я-то точно. Да, делать такой выбор немного неловко, но его преимущества очевидны.
Читать дальше →
Всего голосов 26: ↑20 и ↓6+14
Комментарии70

Обработка ошибок в Rust

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

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

Читать далее
Всего голосов 40: ↑38 и ↓2+36
Комментарии23

Консистентно о Консенсусе

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

Здравствуйте, меня зовут Дмитрий Карловский. А вы на канале Core Dump, где мы берём различные темы из компьютерной науки и раскладываем их по полочкам.


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



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

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

Безопасная многопоточность в Rust

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

Представьте ситуацию: вы решили добавить функционал в некоторую сущность (класс, структуру, ...). Для этого вам понадобилось хранить внутри сущности дополнительные данные. Вы добавляете приватные поля, меняете и читаете их внутри методов, интерфейс методов не изменяется, и всё выглядит хорошо. И не просто выглядит, а компилируется, запускается и проходит тесты. Красота... А потом, в один прекрасный день, прод падает. И может быть даже, теряет часть важных данных. Вы с коллегами начинаете искать причину поломки. И оказывается, что та сущность, которую вы дополняли год назад, делится между несколькими потоками, а поля добавленные вами не потокобезопасны и поэтому гонка за доступ к ним в какой-то момент вызывает их повреждение. Неприятно, согласитесь? Хотелось бы иметь инструмент, позволяющий избегать подобных ситуаций. И язык программирования Rust такой инструмент предоставляет.

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

Make argumentation SExI again: как аргументировать свои решения и предложения

Время на прочтение14 мин
Количество просмотров21K
Недавно в Яндекс.Практикуме прошёл вебинар «Как аргументировать свои решения и предложения». Его провёл Виктор Горбатов, автор и наставник курса «Критическое мышление: анализ информации, аргументация и принятие решений». Виктор рассказал о том, что такое убедительная аргументация, как создавать аргументы и выстраивать из них единую систему, которая поможет в переговорах, спорах и в жизни вообще.




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

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

Сначала расскажу о микроструктуре аргументации — как устроен каждый отдельный аргумент. Затем перейду к макроструктуре аргументации и покажу несколько способов соединения аргументов между собой, немного расскажу об аргумент-картах. Ещё будет простая, но эффективная техника построения убеждающей речи, которую можно без труда использовать в повседневной жизни.
Всего голосов 16: ↑16 и ↓0+16
Комментарии6

3D моделирование в Python

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

Допустим, вам потребовалось на языке программирования python, построить трёхмерную модель некоторого объекта, затем визуализировать его, или подготовить файл для печати на 3D принтере. Существует несколько библиотек, помогающих в решении этих задач. Поговорим о том, как строить трёхмерные модели из точек, граней и примитивов в python. Как выполнять элементарные приемы 3D моделирования: перемещение, поворот, объединение, вычитание и другие.

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

Что такое функциональное программирование?

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

Эта статья является переводом материала «What is functional programming?».

В этой статье Владимир Хориков попытается ответить на вопрос: что такое функциональное программирование?

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

Математические функции не являются методами в программном смысле. Хотя мы иногда используем слова «метод» и «функция» как синонимы, с точки зрения функционального программирования это разные понятия. Математическую функцию лучше всего рассматривать как канал (pipe), преобразующий любое значение, которое мы передаем, в другое значение

Читать далее
Всего голосов 32: ↑27 и ↓5+22
Комментарии108

Как формируются зарплаты с точки зрения экономики и почему программисты столько получают

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

Всем же интересно про зарплаты? Давайте про зарплаты

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

Под катом я рассказываю о том, как формируется зарплата (особенно программиста) с точки зрения экономики.

Читать далее
Всего голосов 70: ↑62 и ↓8+54
Комментарии399

А нужен ли Redis или хватит PostgreSQL

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

Есть проверенная архитектура, которую я видел много раз для поддержки ваших веб-сервисов и приложений:

  • PostgreSQL для хранения данных
  • Redis для координации очередей фоновых заданий (и некоторых ограниченных атомарных операций)

Redis — это фантастика, но что, если бы я сказал вам, что его наиболее распространенные варианты использования этого стека на самом деле могут быть достигнуты с использованием только PostgreSQL?

Сценарий 1: очередь заданий


Пожалуй, наиболее частое использование Redis, которое я видел, — это координация отправки заданий из вашего веб-сервиса в пул фоновых воркеров. Идея состоит в том, что вы хотите записать желание выполнить какое-то фоновое задание (возможно, с некоторыми входными данными) и гарантировать, что только один из многих ваших фоновых воркеров выполнит его. Redis помогает в этом, поскольку предоставляет богатый набор атомарных операций для своих структур данных.
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии10

Практическое руководство по именованию классов, функций и переменных

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

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

Читать далее
Всего голосов 37: ↑32 и ↓5+27
Комментарии41

Чего «энтерпрайзу» в PostgreSQL не хватает

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

В конце прошлого года Иван Панченко предложил мне рассказать на внутреннем семинаре Postgres Pro, чего, по нашему опыту использования PostgreSQL в "кровавом энтерпрайзе" "Тензора", не хватает в этой СУБД.

С докладом пока так и не сложилось, зато появилась эта статья, в которой я постарался собрать наиболее показательные вещи, которые вызывают "напряги" при активном использовании PostgreSQL в реальном бизнесе.

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

Мы Опубликовали Качественный, Простой, Доступный и Быстрый Синтез Речи

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

fiona


Вторая частьhttps://habr.com/ru/post/563484/


Вокруг темы синтеза речи сейчас много движения: на рынке есть огромное число тулкитов для синтеза, большое число закрытых коммерческих решений за АПИ (как на современных технологиях, так и на более старых, т.е. "говорилки") от условных GAFA компаний, большое количество американских стартапов, пытающихся сделать очередные аудио дипфейки (voice transfer).


Но мы не видели открытых решений, которые бы удовлетворяли одновременно следующим критериям:


  • Приемлемый уровень естественности речи;
  • Большая библиотека готовых голосов на разных языках;
  • Поддержка синтеза как в 16kHz так и в 8kHz из коробки;
  • Наличие своих собственных голосов у авторов решения, не нарушающих чужие права и лицензии;
  • Высокая скорость работы на "слабом" железе. Достаточная скорость работы на 1 потоке / ядре процессора;
  • Не требует GPU, команды ML инженеров или какой-либо дополнительной тренировки или для использования;
  • Минимализм и отсутствие зависимостей / использование в 1 строчку / не надо ничего собирать или чинить;
  • Позиционируется именно как готовое решение, а не очередной фреймворк / компиляция чужих скриптов / тулкитов для сбора плюсиков;
  • Решение никак не связано и не аффилировано с закрытыми экосистемами и продуктами Гугла / Сбера / Яндекса / вставить нужное;

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

Всего голосов 205: ↑205 и ↓0+205
Комментарии229

Две недели с F#

Время на прочтение7 мин
Количество просмотров12K
А вы когда-нибудь записывали свои впечатления от изучения нового языка? Записывали все, что вам не понравилось, чтобы через пару недель изучения понять, насколько недальновидными и тупыми они были? 



На днях я понял F#, и попытаюсь описать словами мысль, стоящую за языком. 
Читать дальше →
Всего голосов 57: ↑45 и ↓12+33
Комментарии22

Реализация процессорной архитектуры из книги Чарльза Петцольда «Код. Тайный язык информатики»

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

Наверное многие, из тех, кто увлекается изучением того, как работает компьютер на самом низком уровне читали такие книги как: Таненбаум "Архитектура компьютера" или Харрис, Харрис "Цифровая схемотехника и архитектура компьютера", которые безусловного являются объемлющими трудами и хорошими книгами для обучения. Но если вы не являетесь инженером, но всё равно хотите погрузиться в мир цифровых вычислений и более глубоко понять то, а как же работает компьютер. В этом вам сможет помочь книга Чальза Петцольда "Код. Тайный язык информатики", которая начинает свой рассказ от причин, по которым людям понадобился обмен информацией и её обработка , с какими проблемами при этом столкнулись и заканчивает рассказам об устройстве реальных операционных систем и процессоров и их архитектуру. При этом автором был отлично подобран уровень абстракции, которого он придерживался при написании. В каких-то моментах подробно описывая работу элементарных частей процессора, а в других рассказывая простыми словами о сложных вещах.

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

Почему список в кортеже ведет себя странно в Python?

Время на прочтение3 мин
Количество просмотров21K
В языках программирования меня всегда интересовало их внутреннее устройство. Как работает тот или иной оператор? Почему лучше писать так, а не иначе? Подобные вопросы не всегда помогают решить задачу «здесь и сейчас», но в долгосрочной перспективе формируют общую картину языка программирования. Сегодня я хочу поделиться результатом одного из таких погружений и ответить на вопрос, что происходит при модификации tuple'а в list'е.
Читать дальше →
Всего голосов 106: ↑104 и ↓2+102
Комментарии51

Монады как паттерн переиспользования кода

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


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


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


Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?


Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.


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


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

Читать дальше →
Всего голосов 108: ↑104 и ↓4+100
Комментарии256

Информация

В рейтинге
Не участвует
Откуда
Гомель, Гомельская обл., Беларусь
Зарегистрирован
Активность