Как я доработал метод структурирования информации ZettelKasten для своих задач, и успешно (и с комфортом!) применяю его в повседневной жизни.
Программист
Замыкания в Rust
- Предыдущая часть: Заменяем глобальный аллокатор
- Начало и содержание: Владение
Дефицит есть, а денег не дают. Почему?
Мы уже выяснили, что у нас есть дефицит рабочих рук во всех отраслях. На примере СССР увидели, что дефицит легко закрывается деньгами и плюшками, что сейчас и происходит в IT. Однако при дефиците рабочих рук в остальных отраслях зарплаты остаются на уровне Румынии и никак не подтягиваются. Почему?
Глобальная блокировка интерпретатора (GIL) и её воздействие на многопоточность в Python
Прим. Wunder Fund: в статье рассказано, зачем появилась и существует глобальная блокировка интерпретатора в Питоне, как она работает, и как она влияет на скорость работы Питона, а также о том, куда в будущем, вероятно, будет двигаться Питон. У нас в фонде почти всё, что не написано на плюсах — написано на Питоне, мы пристально следим за тем, куда движется язык, и если вы тоже — вы знаете, что делать )
Как вы, наверное, знаете, глобальная блокировка интерпретатора (GIL, Global Interpreter Lock) — это механизм, обеспечивающий, при использовании интерпретатора CPython, безопасную работу с потоками. Но из-за GIL в конкретный момент времени выполнять байт-код Python может лишь один поток операционной системы. В результате нельзя ускорить Python-код, интенсивно использующий ресурсы процессора, распределив вычислительную нагрузку по нескольким потокам. Негативное влияние GIL на производительность Python-программ, правда, на этом не заканчивается. Так, GIL создаёт дополнительную нагрузку на систему. Это замедляет многопоточные программы и, что выглядит достаточно неожиданно, может даже оказать влияние на потоки, производительность которых ограничена подсистемой ввода/вывода.
Здесь я опираюсь на особенности CPython 3.9. По мере развития CPython некоторые детали реализации GIL, определённо, изменятся. Материал опубликован 22 сентября 2021 года, после публикации в него внесено несколько дополнений.
Пол Грэм: «Нечто большее, чем интеллект»
Если бы вы спросили людей, что особенного было в Эйнштейне, большинство ответило бы, что он был очень умным. Даже те, кто попытался бы дать вам более утонченно звучащий ответ, вероятно, подумали бы именно так в первую очередь. Еще несколько лет назад я бы и сам ответил так же. Но особенность Эйнштейна заключалась не в этом. Особенным в нем было то, что у него были новые важные идеи. Быть очень умным было необходимым условием для появления этих идей, но эти два понятия не идентичны.
Может показаться чересчур педантичными искать разницу между интеллектом и его последствиями, но нет. Между ними существует большой разрыв. Любой, кто проводил время в университетах и исследовательских лабораториях, знает, насколько она велика. Есть много по-настоящему умных людей, которые не достигают чего-то существенного.
В детстве я думал, что больше всего в жизни люди хотят быть умными. Вероятно, вы тоже так думали. Но готов поспорить, это не то, что вы хотели. Представьте, что вам дали выбор: быть умным и не совершать открытий или, быть чуть менее умным, но открывать много новых идей. Вы бы наверняка склонились ко второму варианту — уж я-то точно. Да, делать такой выбор немного неловко, но его преимущества очевидны.
Обработка ошибок в Rust
Одним из факторов, влияющих на надёжность программного обеспечения является способ обрабатывать ошибки, возникающие в процессе выполнения. Создатели Rust не стали повторять популярные методы, а выбрали другой способ, позволяющий описывать и обрабатывать ошибки более явно. В статье мы рассмотрим реализацию данного подхода, а также полезные библиотеки, упрощающие обработку ошибок.
Консистентно о Консенсусе
Здравствуйте, меня зовут Дмитрий Карловский. А вы на канале Core Dump, где мы берём различные темы из компьютерной науки и раскладываем их по полочкам.
И на этот раз мы постараемся прийти к согласию касательно согласованной классификации алгоритмов обеспечения консенсуса в системах со множеством участников. Разберём разные виды блокировок, бесконфликтных алгоритмов. А так же попробуем выявить их фундаментальные особенности, проявляющиеся на самых разных масштабах.
Вы можете смотреть это как видео, читать это как статью, либо открыть в интерфейсе проведения презентаций.
Безопасная многопоточность в Rust
Представьте ситуацию: вы решили добавить функционал в некоторую сущность (класс, структуру, ...). Для этого вам понадобилось хранить внутри сущности дополнительные данные. Вы добавляете приватные поля, меняете и читаете их внутри методов, интерфейс методов не изменяется, и всё выглядит хорошо. И не просто выглядит, а компилируется, запускается и проходит тесты. Красота... А потом, в один прекрасный день, прод падает. И может быть даже, теряет часть важных данных. Вы с коллегами начинаете искать причину поломки. И оказывается, что та сущность, которую вы дополняли год назад, делится между несколькими потоками, а поля добавленные вами не потокобезопасны и поэтому гонка за доступ к ним в какой-то момент вызывает их повреждение. Неприятно, согласитесь? Хотелось бы иметь инструмент, позволяющий избегать подобных ситуаций. И язык программирования Rust такой инструмент предоставляет.
Make argumentation SExI again: как аргументировать свои решения и предложения
Всем привет! Меня зовут Виктор Горбатов, я логик, тренер по аргументации и критическому мышлению. Окончил философский факультет МГУ по кафедре логики. Ещё я большой фанат популяризации логики и критического мышления, поэтому веду всевозможные популярные курсы и являюсь наставником курса по критическому мышлению в Яндекс Практикуме.
Я расскажу о том, как логика помогает структурировать и повышать эффективность наших рассуждений, чтобы убедительнее донести свою идею до собеседника. Я поделюсь несколькими простыми инструментами, которые помогут повысить качество коммуникации с кем угодно, в первую очередь с коллегами, близкими и друзьями. Важно помнить, что эти практики будут хорошо работать только в том случае, если превратятся в навыки вашего мышления.
Сначала расскажу о микроструктуре аргументации — как устроен каждый отдельный аргумент. Затем перейду к макроструктуре аргументации и покажу несколько способов соединения аргументов между собой, немного расскажу об аргумент-картах. Ещё будет простая, но эффективная техника построения убеждающей речи, которую можно без труда использовать в повседневной жизни.
3D моделирование в Python
Допустим, вам потребовалось на языке программирования python, построить трёхмерную модель некоторого объекта, затем визуализировать его, или подготовить файл для печати на 3D принтере. Существует несколько библиотек, помогающих в решении этих задач. Поговорим о том, как строить трёхмерные модели из точек, граней и примитивов в python. Как выполнять элементарные приемы 3D моделирования: перемещение, поворот, объединение, вычитание и другие.
Что такое функциональное программирование?
Эта статья является переводом материала «What is functional programming?».
В этой статье Владимир Хориков попытается ответить на вопрос: что такое функциональное программирование?
Итак, что такое функциональное программирование? Этот термин возникает довольно часто, и каждый автор, пишущий о нем, дает собственное объяснение. На взгляд автора оригинала, самым простым и в то же время точным определением является следующее: функциональное программирование - это программирование с математическими функциями.
Математические функции не являются методами в программном смысле. Хотя мы иногда используем слова «метод» и «функция» как синонимы, с точки зрения функционального программирования это разные понятия. Математическую функцию лучше всего рассматривать как канал (pipe), преобразующий любое значение, которое мы передаем, в другое значение
Как формируются зарплаты с точки зрения экономики и почему программисты столько получают
Всем же интересно про зарплаты? Давайте про зарплаты
Меня зовут Алексей и я работаю в Райффайзенбанке техлидом. Последние 12 лет я нон-стоп нанимаю технических специалистов и меня всегда интересовал зарплатный гэп между айтишниками и не-айтишниками. Судя по дискуссиям в интернете — разница в зарплатах волнует многих. Так получилось, что в качестве хобби я интересуюсь экономикой. Поэтому когда моих знаний стало хватать для понимания причин такого разрыва, то в голове сразу же щелкнули шестеренки, картина мира обрела гармонию и я получил заслуженную порцию дофамина.
Под катом я рассказываю о том, как формируется зарплата (особенно программиста) с точки зрения экономики.
А нужен ли Redis или хватит PostgreSQL
Есть проверенная архитектура, которую я видел много раз для поддержки ваших веб-сервисов и приложений:
- PostgreSQL для хранения данных
- Redis для координации очередей фоновых заданий (и некоторых ограниченных атомарных операций)
Redis — это фантастика, но что, если бы я сказал вам, что его наиболее распространенные варианты использования этого стека на самом деле могут быть достигнуты с использованием только PostgreSQL?
Сценарий 1: очередь заданий
Пожалуй, наиболее частое использование Redis, которое я видел, — это координация отправки заданий из вашего веб-сервиса в пул фоновых воркеров. Идея состоит в том, что вы хотите записать желание выполнить какое-то фоновое задание (возможно, с некоторыми входными данными) и гарантировать, что только один из многих ваших фоновых воркеров выполнит его. Redis помогает в этом, поскольку предоставляет богатый набор атомарных операций для своих структур данных.
Практическое руководство по именованию классов, функций и переменных
В этой статье рассказано о методе именования классов, функций и переменных, который позволяет улучшить читаемость вашего кода.
Чего «энтерпрайзу» в PostgreSQL не хватает
В конце прошлого года Иван Панченко предложил мне рассказать на внутреннем семинаре Postgres Pro, чего, по нашему опыту использования PostgreSQL в "кровавом энтерпрайзе" "Тензора", не хватает в этой СУБД.
С докладом пока так и не сложилось, зато появилась эта статья, в которой я постарался собрать наиболее показательные вещи, которые вызывают "напряги" при активном использовании PostgreSQL в реальном бизнесе.
Мы Опубликовали Качественный, Простой, Доступный и Быстрый Синтез Речи
Вторая часть — https://habr.com/ru/post/563484/
Вокруг темы синтеза речи сейчас много движения: на рынке есть огромное число тулкитов для синтеза, большое число закрытых коммерческих решений за АПИ (как на современных технологиях, так и на более старых, т.е. "говорилки") от условных GAFA компаний, большое количество американских стартапов, пытающихся сделать очередные аудио дипфейки (voice transfer).
Но мы не видели открытых решений, которые бы удовлетворяли одновременно следующим критериям:
- Приемлемый уровень естественности речи;
- Большая библиотека готовых голосов на разных языках;
- Поддержка синтеза как в
16kHz
так и в8kHz
из коробки; - Наличие своих собственных голосов у авторов решения, не нарушающих чужие права и лицензии;
- Высокая скорость работы на "слабом" железе. Достаточная скорость работы на 1 потоке / ядре процессора;
- Не требует GPU, команды ML инженеров или какой-либо дополнительной тренировки или для использования;
- Минимализм и отсутствие зависимостей / использование в 1 строчку / не надо ничего собирать или чинить;
- Позиционируется именно как готовое решение, а не очередной фреймворк / компиляция чужих скриптов / тулкитов для сбора плюсиков;
- Решение никак не связано и не аффилировано с закрытыми экосистемами и продуктами Гугла / Сбера / Яндекса / вставить нужное;
Мы попытались учесть все эти пункты и представить комьюнити свое открытое некоммерческое решение, удовлетворяющее этим критериям. По причине его публичности мы не заостряем внимание на архитектуре и не фокусируемся на каких-то cherry picked
примерах — вы можете оценить все сами, пройдя по ссылке.
Реализация процессорной архитектуры из книги Чарльза Петцольда «Код. Тайный язык информатики»
Наверное многие, из тех, кто увлекается изучением того, как работает компьютер на самом низком уровне читали такие книги как: Таненбаум "Архитектура компьютера" или Харрис, Харрис "Цифровая схемотехника и архитектура компьютера", которые безусловного являются объемлющими трудами и хорошими книгами для обучения. Но если вы не являетесь инженером, но всё равно хотите погрузиться в мир цифровых вычислений и более глубоко понять то, а как же работает компьютер. В этом вам сможет помочь книга Чальза Петцольда "Код. Тайный язык информатики", которая начинает свой рассказ от причин, по которым людям понадобился обмен информацией и её обработка , с какими проблемами при этом столкнулись и заканчивает рассказам об устройстве реальных операционных систем и процессоров и их архитектуру. При этом автором был отлично подобран уровень абстракции, которого он придерживался при написании. В каких-то моментах подробно описывая работу элементарных частей процессора, а в других рассказывая простыми словами о сложных вещах.
Почему список в кортеже ведет себя странно в Python?
tuple
'а в list
'е.Монады как паттерн переиспользования кода
В предыдущей статье мы обсуждали, почему функциональное программирование это совсем не то, что распиарено, и что оно совершенно не противоречит ООП, так, что даже сам "Дядя Боб" пишет про хороший ФП дизайн порождающий хороший ООП дизайн программы (и наоборот).
Сейчас же я хочу рассказать, что такое монады на самом деле, чем они полезны для обычного практикующего разработчика, и приведу примеры, почему недостаточная поддержка их в распространенных языках приводит к копипасте и ненадежным решениям.
Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?
Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.
Получается, что первые обычно полезны тем, кто и так знает обсуждаемую тему, а вторые даже не знаю на кого рассчитаны: сколько я их не прочитал, ничего полезного понять из них мне не удалось.
Я же хотел бы занять промежуточную позицию, и рассказать про монады без заумных терминов, но и без котиков, используя понятные ООП разработчикам термины: интерфейсы, паттерны, копипаста, инкапсуляция сложности, бойлерплейт, и так далее. В процессе работы над статьёй ни один термин теории категории использован не был.
Information
- Rating
- Does not participate
- Location
- Гомель, Гомельская обл., Беларусь
- Registered
- Activity