<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@inv2004</title><generator>teletype.in</generator><description><![CDATA[@inv2004]]></description><link>https://teletype.in/@inv2004?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/inv2004?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/inv2004?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Mon, 21 Sep 2026 03:53:59 GMT</pubDate><lastBuildDate>Mon, 21 Sep 2026 03:53:59 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@inv2004/cr21AgjDK3N</guid><link>https://teletype.in/@inv2004/cr21AgjDK3N?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/cr21AgjDK3N?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Переезд в telegram-канал: inv2004 Dev Blog</title><pubDate>Sun, 09 Jan 2022 02:12:18 GMT</pubDate><description><![CDATA[https://t.me/inv2004_dev_blog]]></description><content:encoded><![CDATA[
  <p id="HrzT"><a href="https://t.me/inv2004_dev_blog" target="_blank">https://t.me/inv2004_dev_blog</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/VkvmTr4aScq</guid><link>https://teletype.in/@inv2004/VkvmTr4aScq?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/VkvmTr4aScq?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Настройки клавиатуры для windows</title><pubDate>Sun, 09 Jan 2022 00:38:36 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/a3/30/a3307c4d-b553-496c-99b3-7a64fac75301.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/c7/00/c7007db5-67d3-4a49-b9a2-159b1497e293.png"></img>Несколько лет были проблемы с Ctrl - мне казалось, что нажимать её крайне удобно, после чего обнаружил, что я не один такой, и многие переносят её на CapsLock. Помогло, но всё же не полностью, и около года назад, обнаружив microsoft/PowerToys: Windows system utilities to maximize productivity (github.com) я скопировал Mac решение - а именно, перенести Ctrl на кнопку слева от пробела, а Alt на соседнюю  - и, кажется, что это лучший вариант на текущий момент.]]></description><content:encoded><![CDATA[
  <p id="MCQC">Несколько лет были проблемы с Ctrl - мне казалось, что нажимать её крайне удобно, после чего обнаружил, что я не один такой, и многие переносят её на CapsLock. Помогло, но всё же не полностью, и около года назад, обнаружив <a href="https://github.com/microsoft/PowerToys" target="_blank">microsoft/PowerToys: Windows system utilities to maximize productivity (github.com)</a> я скопировал Mac решение - а именно, перенести Ctrl на кнопку слева от пробела, а Alt на соседнюю  - и, кажется, что это лучший вариант на текущий момент.</p>
  <p id="swIx">Дополнительная проблема, что системные кнопки не мапились, из-за этого пришлось дополнительно поменять местами комбинации alt+Tab и ctrl+Tab</p>
  <figure id="yN0p" class="m_custom">
    <img src="https://img1.teletype.in/files/c7/00/c7007db5-67d3-4a49-b9a2-159b1497e293.png" width="1418" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/URwq1IC1K</guid><link>https://teletype.in/@inv2004/URwq1IC1K?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/URwq1IC1K?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Tiling WM for Windows-10</title><pubDate>Sun, 27 Dec 2020 00:32:45 GMT</pubDate><description><![CDATA[<img src="https://teletype.in/files/a4/86/a486e9a5-a4cf-44fa-8ec4-e3c70866eaaf.gif"></img>Одна из причин, по которой меня иногда тянуло обратно на linux была dwm - dynamic window manager | suckless.org software that sucks less]]></description><content:encoded><![CDATA[
  <p>Одна из причин, по которой меня иногда тянуло обратно на linux была <a href="https://dwm.suckless.org/" target="_blank">dwm - dynamic window manager | suckless.org software that sucks less</a></p>
  <p>Помню ещё давно искал что-то подобное на Win-10, но нормально рабочих решений не было, да и комбинации win+стрелки работали более-менее. Однако, неожиданно на github нашлось хорошее решение: <a href="https://github.com/rickbutton/workspacer" target="_blank">rickbutton/workspacer: a tiling window manager for Windows (github.com)</a></p>
  <p>По виду видно, что это копировали именно с dwm, а не с чего-то другого. Пользуюсь - удобно. Есть конфиги с которыми пока не разбирался.</p>
  <p>TaskBar на экране есть, хотя на скриншотах с их сайта его не видно.</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/a4/86/a486e9a5-a4cf-44fa-8ec4-e3c70866eaaf.gif" width="692" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/179908.html</guid><link>https://teletype.in/@inv2004/179908.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/179908.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>duck-typing sh..</title><pubDate>Fri, 29 May 2020 22:23:56 GMT</pubDate><tt:hashtag>kdb</tt:hashtag><tt:hashtag>q</tt:hashtag><description><![CDATA[The root cause of the problem is quite simple:]]></description><content:encoded><![CDATA[
  <pre>t:([] k:&#x60;a&#x60;b&#x60;a; v:1 2 3)
select k, v, kk:?[1=v mod 2; {&#x60;$a,a:string x} each k;k] from t
k  k1 v
-------
aa a  1
b  b  2
aa a  3

select k, v, kk:?[1=v mod 2; {&#x60;$a,a:string x} each k;k] from 0#t
&#x27;type
  [0]  select k, v, kk:?[1=v mod 2; {&#x60;$a,a:string x} each k;k] from 0#t

</pre>
  <p>The root cause of the problem is quite simple:</p>
  <pre>type {x} each &#x60;a&#x60;b
11h
type {x} each &#x60;$()
0h // brakes everything, because ?[] check type of the second argument
</pre>
  <tt-tags>
    <tt-tag name="kdb">#kdb</tt-tag>
    <tt-tag name="q">#q</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/179633.html</guid><link>https://teletype.in/@inv2004/179633.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/179633.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Попытался переехать на linux, и откатился назад.</title><pubDate>Fri, 06 Mar 2020 11:47:14 GMT</pubDate><tt:hashtag>linux</tt:hashtag><tt:hashtag>windows</tt:hashtag><description><![CDATA[После прочтения https://www.phoronix.com/scan.php?page=article&amp;item=icelake-clear-windows&amp;num=1, поставил разные линуксы на второй ssd:
из приятного - действительно время сборки с ходу в два раза меньше.
CPU-бенчмарки тоже показали что тут собирается как-то лучше: https://github.com/inv2004/rust_vectors/blob/master/win_lin.md]]></description><content:encoded><![CDATA[
  <p>После прочтения <a href="https://www.phoronix.com/scan.php?page=article&item=icelake-clear-windows&num=1" target="_blank">https://www.phoronix.com/scan.php?page=article&amp;item=icelake-clear-windows&amp;num=1</a>, поставил разные линуксы на второй ssd:<br />из приятного - действительно время сборки с ходу в два раза меньше.<br />CPU-бенчмарки тоже показали что тут собирается как-то лучше: <a href="https://github.com/inv2004/rust_vectors/blob/master/win_lin.md" target="_blank">https://github.com/inv2004/rust_vectors/blob/master/win_lin.md</a></p>
  <p>Однако, того, что при установке пакетов зависает мыша, dd if=1.iso of=/dev/sdb1 вообще даже на kill -9 не реагирует, гном упал один раз, хотя у меня просто lenovo без всяких nvidia. в общем, чисто на уровне ощущений убунта оставила очень неприятные впечатления, зато приятные впечатления оставили elementary-OS и dwm+antiX (хотя наверное стоило бы MX-Linux).</p>
  <p>из печального - chromium даже с на странице с простыми баннерами бывает поджирает под 30% CPU, надо постоянно что ли на top смотреть чтобы просто браузером пользоваться? скроллинг заметно хуже, youtube вообще не говорю - под 100% CPU улетают на простых даже видео - т.е. пользоваться всем этим не очень приятно, я-то думал такой проблемы нет, а за 20 лет до сих пор в линуксе нету браузера по сути нормального.</p>
  <p>В чате меня спросили, сколько бы я лично пожертвовал на развития десктопа linux&#x27;а, я ответил какую-то сумму, но после убунты я решил, что фиг бы я за это стал вообще платить, а лучше бы отдал, чтобы разобрать что же такое притормаживает у меня в винде, и действительно вспомнил, что IDEA что-то там делает с антивирусом - попробовал, и это разогнало сборку cargo, хоть и не до линуксовых значний, но значительно ближе.</p>
  <p>Осталось разобраться с этом: <a href="https://github.com/inv2004/rust_vectors/blob/master/win_lin.md" target="_blank">https://github.com/inv2004/rust_vectors/blob/master/win_lin.md</a><br />Но там код не такой уж сложный - попробую сравнить C++ - вариант.</p>
  <p>-- update --<br />провёл ~ неделю на elemenetary - она даже понравилась, впрочем отличия от разных ubuntu не очень значительные. Открытием стало, что в аpt всё настолько протухшее, что много чего ставить из snap или flatpack, даже neovim.</p>
  <p>но окончателточку поставило, что на батарее ноут на одной батарее живёт около 4часов, когда под win более 5 1/2, и то, под lin я старался ничего лишнего не запускать.</p>
  <tt-tags>
    <tt-tag name="linux">#linux</tt-tag>
    <tt-tag name="windows">#windows</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/179232.html</guid><link>https://teletype.in/@inv2004/179232.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/179232.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Rust - достаточно</title><pubDate>Wed, 26 Feb 2020 22:20:44 GMT</pubDate><tt:hashtag>rust</tt:hashtag><description><![CDATA[Rust практически вылетел из зоны моих интересов, жаль что довольно большой проект на нём застрял.]]></description><content:encoded><![CDATA[
  <p>Rust практически вылетел из зоны моих интересов, жаль что довольно большой проект на нём застрял.</p>
  <p>Ситуация такая: я уже почти увидел свет в конце тоннеля по проекту, но, на клиентской стороне использовать монгу не решился =&gt; нужно уметь читать данные как из монги так и из локальных файлов. В качестве такого решения напрашивается некий trait Storage, который реализует функцию создания итератора для структур Mongo и Local (из файла). Итераторы соответственно MongoIterator и LocalIterator которые реализуют просто Iterator. Проще, вроде как, и придумать трудно.</p>
  <p>Собственно всё, что Local можно отбросить, чтобы просто сделать MongoIterator - надо в ней хранить и коллекцию и курсор, а это уже получается self-referential структура, после двух недель борьбы с Pin и unsafe (не смотря на то что пример вроде как есть тут: <a href="https://doc.rust-lang.org/std/pin/#example-self-referential-struct" target="_blank">https://doc.rust-lang.org/std/pin/#example-self-referential-struct</a> , но это не очень помогло), знающие люди подсказали поискать в крейтах, и действительно, нашёлся некий <a href="https://crates.io/crates/rental" target="_blank">https://crates.io/crates/rental</a> , который естественно полон макросов, а куда в расте без них, которые генерят это self-ref с лайфтаймами друг на друге и функции для их извлечения.</p>
  <p>Кое-как всё пройдено, сам крейт проекта нормально собирается, теперь надо просто использовать это в бинарнике - и тут хоп - эта вот штука ещё используется, хотя вот тут уже конец блока, чуть ли не в main, с какой такой стати, почему - не ясно вообще, у меня уже начали опускаться руки, попытки понять лайфтаймов макросов, генерящих Pin, не сильно обрадовали и я пошёл искать тех самых знающих людей, которых мне помогут. Люди, как мне кажется, действительно знающие, нашлись и даже принялись за проблему, починили за час ... но нет, я просто случайно закомментил весь значимый код, раскомментил, и люди пришли к выводу, что разобраться в чём дело не удаётся. А это по сути просто интерфейс Storage - проще, мне кажется, и придумать нельзя.</p>
  <p>На этом я решил, что больше свои руки, без необходимости, в это опускать не буду. Я благодарен расту за эксперимент-попытку поставить как основу всей системы move-семантику из плюсов, но это так просто не работает - ты бродишь по лабиринту, пытаясь удовлетворить borrow-чекер больше чем пишешь программу, повезло - вышел из лабиринта, не повезло - ты возвращаешься на много шагов назад и не факт, что выход в итоге есть. Иногда это интересная головоломка, но иногда, потратив на неё месяцы и опять оказавшись в тупике, ты понимаешь что это уже не смешно, работающего кода это не прибавило, а время потрачено без какой-то, ощутимой для проекта, пользы.</p>
  <p>--- update ---<br />через три дня, мне постучались в телегу, и сказали, что не спали три ночи, но проблему исправили - ура.</p>
  <tt-tags>
    <tt-tag name="rust">#rust</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/178974.html</guid><link>https://teletype.in/@inv2004/178974.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/178974.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>windows terminal</title><pubDate>Thu, 16 Jan 2020 20:18:43 GMT</pubDate><description><![CDATA[неплохо. меня раньше от PS отгораживало, что он грузится дольше cmd или conemu+clink, в windows terminal всё быстро + после накидки привычных биндингов + полупрозрачности фона - вообще удобно стало, хотя, конечно PS пока не очень привычен.]]></description><content:encoded><![CDATA[
  <p>неплохо. меня раньше от PS отгораживало, что он грузится дольше cmd или conemu+clink, в windows terminal всё быстро + после накидки привычных биндингов + полупрозрачности фона - вообще удобно стало, хотя, конечно PS пока не очень привычен.</p>
  <p>Да и по ущущениям быстрее conemu работает.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/178923.html</guid><link>https://teletype.in/@inv2004/178923.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/178923.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Rust - опять #2</title><pubDate>Sun, 22 Dec 2019 16:27:33 GMT</pubDate><tt:hashtag>rust</tt:hashtag><description><![CDATA[Для предыдущей проблемы пришлось патчить hyper. Справился - отлично, можно идти дальше, пару новых строчек кода (безопасного) и программа _после компиляции_ кидает ошибку на 15 страниц. В чём дело? Вероятно, простая и безопасная библиотка по выводу progress-bar'а на экран запуталась в своих безопасных Mutex'ах в самом безопасном на свете языке.]]></description><content:encoded><![CDATA[
  <p>Для предыдущей <a href="https://teletype.in/@inv2004/178442.html" target="_blank">проблемы</a> пришлось патчить hyper. Справился - отлично, можно идти дальше, пару новых строчек кода (безопасного) и программа _после компиляции_ кидает ошибку на 15 страниц. В чём дело? Вероятно, простая и безопасная библиотка по выводу progress-bar&#x27;а на экран запуталась в своих безопасных Mutex&#x27;ах в самом безопасном на свете языке.</p>
  <tt-tags>
    <tt-tag name="rust">#rust</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/178442.html</guid><link>https://teletype.in/@inv2004/178442.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/178442.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Rust - опять</title><pubDate>Wed, 18 Dec 2019 23:21:34 GMT</pubDate><tt:hashtag>rust</tt:hashtag><description><![CDATA[Есть у меня pet-проект, который тянется уже больше года и, постепенно, подходит к финальному аккорду.]]></description><content:encoded><![CDATA[
  <p>Есть у меня pet-проект, который тянется уже больше года и, постепенно, подходит к финальному аккорду.</p>
  <p>В какой-то момент было решено изменить способ хранения данных у клиента на простые файлы =&gt; понадобилась некая скачивался данных из базы для этого, всё работало почти отлично - данные качались чанк за чанком, прогрес-бар показывал сколько осталось. Кроме одного - данные не сжаты и их много - отдавать потоком - остаться без Content-Length - пользователь будет в неведении сколько осталось. Сжимать сразу много - пользователю очень долго ждать этого Content-Length.</p>
  <p>Было решено просто - собирать по 1000, сжимать и отдавать - всё опять же работало, но что-то было странно - иногда некоторые чанки приходили битыми. Посмотрев на пакеты стало понятно - что пакеты нормальные, а вот способ их обработки у hyper такой - если chunk не влезает в буффер (8kb) - то выдавать chunk с тем что есть, а остальное - как будто это другой чанк. Насколько это корректное поведение не берусь судить, возможно и верное. Хотел было переехать на web-sockets, и тут, actix-web, казавшийся нормальным в качестве http показал, что структура для ws должна делаться так: <strong>Client&lt;SinkWrite&lt;Message, SplitSink&lt;Framed&lt;T, Codec&gt;, Message&gt;&gt;&gt;</strong> - просто же, и удобно - все кишки видны, а то мало ли нужно будет из client.0.0.0 извлечь codec.</p>
  <p>Дальше надо описать актор, потом Handler, потом ещё StreamHandler, в который надо передать mut-контекст этого клиента, после чего из него дёргать руками методы типа ctx.0.write или обёртки. Но это не заработает со фьючовыми стримами, потому как при создании этого клиента - надо вызвать мутабельный add_stream на нём, в котором связать Stream и контекст - видимо иначе он не будет знать что надо дёргать этот handler, при этом, даже если совершить все эти действия - это только для обработки выходного потока из stream - как писать в него из другого стрима без своего impl Stream поверх - останется загадкой.</p>
  <p>В общем, от такого юзать ws как-то расхотелось. Знающие люди говорили, что надо просто накрутить length_delimited кодек на чанки http и у меня будут нормальные фреймы данных - попробую в эту сторону. Кодеки работают через ASyncRead, а hyper/actix выдают Stream&lt;Item=Vec&lt;u8&gt;&gt; - хотя в общем-то понятно, что результат их работы в этом случае одинаков, и только в futures 0.3 сделали метод into_async_read() который позволяет одну абстракцию преобразовывать в другую =&gt; можно просто писать в codec - ура!, но нет, не ура, tokio 0.2 почему-то имеет свои ASyncRead, которые почему-то не совместимы с futures 0.3, а другие мне не подойдут. Есть некий клей - compat, но, бывалые люди, сказали что всё же _надёжнее разобрать байты руками_, чем пробраться через страницу какой-нибудь ошибки, которую покажет что compat(), без compat() ошибки и так по пол-страницы и не сильно проще читать.</p>
  <p>Вернёмся к тому, что я никак не ожидал - что я могу застрять на несколько недель на простой скачивалке файла чанками, a раст, в очередной раз, как говорится, пробивает дно в производительности сроков написания чего-то отличного от примеров из папки examples (кстати и это часто не собирается). И у меня много таких случаев о которых можно было бы рассказать не меньше - но первый раз, когда решил написать.</p>
  <tt-tags>
    <tt-tag name="rust">#rust</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@inv2004/178349.html</guid><link>https://teletype.in/@inv2004/178349.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004</link><comments>https://teletype.in/@inv2004/178349.html?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=inv2004#comments</comments><dc:creator>inv2004</dc:creator><title>Rust, рефакторинг</title><pubDate>Wed, 11 Sep 2019 03:22:49 GMT</pubDate><tt:hashtag>rust</tt:hashtag><description><![CDATA[Всё работало, вроде неплохо, пока не подключил extern crate pyo3. Естественно всё просто в Rust быть не может - не могу обернуть структуру с лайфтаймами макросами pyo3 =&gt; начался глобальный рефакториг по вычищению от лайфтаймов довольно центральной структуры =&gt; всё замазывается толстым слоем Rc/Arc/RefCell, настолько толстым, что хотется начать писать на Swift.]]></description><content:encoded><![CDATA[
  <p>Всё работало, вроде неплохо, пока не подключил extern crate pyo3. Естественно всё просто в Rust быть не может - не могу обернуть структуру с лайфтаймами макросами pyo3 =&gt; начался глобальный рефакториг по вычищению от лайфтаймов довольно центральной структуры =&gt; всё замазывается толстым слоем Rc/Arc/RefCell, настолько толстым, что хотется начать писать на Swift.</p>
  <p>что-то типа такого:</p>
  <pre>self.borrow().control.borrow().stats.borrow_mut().counter += 1;</pre>
  <p>какой приятный код :(<br />При этом это по сути убивает всю lifetime концепцию - так как каждый borrow - это твой личный и ручной контроль поверх раста.</p>
  <tt-tags>
    <tt-tag name="rust">#rust</tt-tag>
  </tt-tags>

]]></content:encoded></item></channel></rss>