Pull to refresh
50
-2
Тимофей Казанцев @Levitanus

Пианист-оркестровщик-быдлокодер

Send message

Эргономично, дёшево, сердито

Level of difficultyEasy
Reading time11 min
Views16K

Я давно зачитываюсь статьями про эксперименты авторов со своими рабочими местами: про кастомные кресла, клавиатуры, раскладки. Целый год мне очень хотелось улучшить своё рабочее пространство. Но я боялся даже начать думать об этом по существу, потому что все авторы рассказывали, как поиск удобства отнимал у них 4-5-значные суммы в долларах, долгие месяцы настройки и привыкания к новой реальности.

Главным образом, эта статья ‒ про то, как я уменьшил своё рабочее место с 5 м² до 3 м², избавился от мозоли на запястье, боли в спине и шее, трудностей с набором текстов на русском, английском и немецком; и потратил на это 4 дня и ≈150 €! Но также мне хочется выразить мысль, что эргономика ‒ это не идеальный стол, кресло или клавиатура. Это, скорее, организация пространства так, чтобы в нём было комфортно во всех сценариях его использования.

Что он поменял?
Total votes 54: ↑53 and ↓1+52
Comments45

От крышки рояля до фреймворка на rust: как системное программирование помогает творческой реализации

Reading time16 min
Views5.6K

Здравствуйте, меня зовут Тимофей, и я алкоголик программирую, чтобы писать музыку. Судя по всему, недуг мой прогрессирует:

- Пять лет назад, когда я впервые услышал про LilyPond — язык программирования, на котором можно писать партитуры в текстовом редакторе — я посмеялся над гиком, что это придумал, и прошёл дальше.
- Два года назад я прочитал код партитуры из примеров — удивился, насколько логично и музыкально он выглядит, подивился задротству автора, и пошёл набирать ноты в MuseScore.
- В этом году я пишу экспортёр MIDI из Reaper в исходники LilyPond, а сегодня зарелизил rea-rs: фреймворк для написания расширений для Reaper на rust.

И, несмотря на то, что в этом альфа-релизе >16 300 строк, я всё ещё считаю, что занимаюсь «бытовым программированием». Имею в виду что-то вроде готовки: можно, конечно, сходить в ресторан, когда хочется чего-то эдакого, но в ресторан каждый день не набегаешься. А то, что погреб на даче потихоньку превращается в винодельню — так это побочный эффект. Зато всё своё, домашнее, натуральное.

В последнее время, подобные мысли я проговаривал не как здоровый сарказм, а как симптомы болезни: мол, «это не хумус, видео не передаёт запах»! Но, намедни, моя музыкальная школа подогнала мне мак с Finale и полным комплектом Adobe на борту, чтобы совместно работать над сборником рождественских песен. И… Holly crap, I was damn right! Но расскажу по порядку, как я дошёл до жизни такой.

К рассказу
Total votes 42: ↑42 and ↓0+42
Comments6

Rust: параметризуем мутабельность через маркеры и ассоциированные типы

Reading time7 min
Views4.8K

КПДВ: borrow checker не даёт стрелять в ногу при работе с FFI


Borrow-checker — отличный секюрити, который очень эффективен, если мы находимся в безопасном Rust. Его поведение отлично описано в RustBook, и, по крайней мере, я почти никогда не сталкиваюсь с придирками, которым я бы не был благодарен.


Но вот когда нужно написать семантически-безопасный API над функциями и данными, которые вообще не безопасны — у меня всё стало валиться из рук. Последние пару дней я потратил на то, чтобы придумать элегантный способ параметризации мутабельности. Над тем, чтобы на уровне API сохранялась семантика — зависимость изменяемости полей друг от друга. Даже если на самом деле они живут сами по себе.


На английском, с примерами — на GitHub pages.


Исходник тестов — на GitHub.

Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments21

Waking up of the sleeping institution: how we taking off training-wheels from Python in REAPER

Reading time7 min
Views1.1K

Image for taking attention


About a week I wonder around the idea of this article, mainly, because of missing the content here and tidiness of the coronavirus-themes. But, when robotic-harvester, hacking zip with bitcoins and other cool articles released — I decided not to publish crude material.


However, unexpectedly today the maintainer of this review hero showed up from the lockdown and, several hours ago reapy v0.6.0 has been published on PyPi. Under the cut — the last change log, which contains (to my pleasure) no line where I have not been involved one way, or another.


Finally: why reapy is needed and how Python works inside REAPER.

Read more →
Total votes 2: ↑1 and ↓10
Comments0

Пробуждение спящего института: как мы убираем ходунки у Python в REAPER

Reading time6 min
Views3.6K

КПДВ


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


Однако, сегодня нежданно вырвался из локдауна ментейнер героя сегодняшнего обзора, и, буквально несколько часов назад в PyPi ушел reapy v0.6.0: пакет, который позволяет полноценно использовать Python для написания расширений для Reaper DAW.


Итак: зачем нужен reapy, и что происходит с Python в REAPER.

Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments5

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

Reading time10 min
Views23K


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


  • это не статья, это пост. А более конкретно — реакция на серию статей "Блеск и Нищета"
  • я сознательно не буду брать случаи "Блеска", потому что музыканты-миллионеры, как и многие другие суперзвезды, попадают в несколько другую схему. Тем не менее, в качестве примера раскрутки человека в творческой сфере "с нуля на непаханном поле" я бы хотел привести интервью Покраса Лампаса https://youtu.be/APayqoDDYMA
  • Пару раз сталкивался, в т.ч. на хабре, с достаточно радикальным мнением, что разбор вопроса в метафорах и аналогиях — моветон. Тем не менее мне это не кажется чем-то из ряда вон, и я считаю аналогии применимыми во многих случаях, в т.ч. и в этом.
  • Мне откровенно лениво делать картинки, тем более, что писать я и не планировал. Простите.

Итак, почему какие-то музыканты, которых навалом в VK, YT и на треккерах зарабатывают? Должны ли они зарабатывать вообще, и как выжить в суровом пиратском мире?
Для начала надо понять, кто же это такие, "современные музыканты": чем они отличаются от "музыкантов несовременных", и чем они отличаются от "немузыкантов".

Читать дальше →
Total votes 68: ↑62 and ↓6+56
Comments37

Несколько подводных камней статической типизации в Python

Reading time5 min
Views38K


Думаю, мы все потихоньку уже привыкаем, что у Python есть аннотации типов: их завезли два релиза назад (3.5) в аннотации функций и методов (PEP 484), и в прошлом релизе (3.6) к переменным (PEP 526).


Так как оба этих PEP были вдохновлены MyPy, расскажу, какие житейские радости и когнитивные диссонансы подстерегали меня при использовании этого статического анализатора, равно как и системы типизации в целом.


Disclamer: я не поднимаю вопрос о необходимости или вредности статической типизациии в Python. Просто рассказываю о подводных камнях, на которые натолкнулся в процессе работы в статически-типизированном контексте.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments13

Не создавайте собственный ЯП (DSL) для расширения функционала приложения

Reading time6 min
Views15K

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


КПДВ

Читать дальше →
Total votes 48: ↑41 and ↓7+34
Comments56

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity