<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-654279083390275842</id><updated>2026-10-10T17:25:13.559+03:00</updated><category term="О программировании"/><category term="О жизни"/><category term="язык C++"/><category term="Поток сознания"/><category term="Foto"/><category term="Ссылки"/><category term="SObjectizer"/><category term="О работе"/><category term="Внушаить"/><category term="Мысля давеча посетила"/><category term="Кино"/><category term="Humour"/><category term="Спорт"/><category term="Дартс"/><category term="Павбывавбы"/><category term="Мои фото"/><category term="Подсмотренное"/><category term="Из непонятого"/><category term="Actor Model"/><category term="Маразм крепчал"/><category term="Multithreading"/><category term="Афигеть"/><category term="Об управлении"/><category term="Отдых"/><category term="Message-Passing"/><category term="Concurrency"/><category term="Bugs"/><category term="Вопрос залу"/><category term="Хвастаюсь"/><category term="Business"/><category term="Book review"/><category term="О компьютерах"/><category term="Знакомство с фотомастером"/><category term="Природа"/><category term="язык Ruby"/><category term="RESTinio"/><category term="Отлично сказано"/><category term="Mxx_ru"/><category term="Путешествия"/><category term="История"/><category term="Штуковина"/><category term="Воспоминания"/><category term="язык Java"/><category term="Parallel Programming"/><category term="Сиде-2012"/><category term="язык Scala"/><category term="язык Rust"/><category term="Блог"/><category term="язык D"/><category term="ACE"/><category term="Искусство"/><category term="язык Go"/><category term="Music"/><category term="Велосипедостроение"/><category term="язык C"/><category term="OpenSource"/><category term="Быть начальником?"/><category term="Отличная мысль"/><category term="CMake"/><category term="Каппадокия-2012"/><category term="Кризис в РБ"/><category term="Фантастика"/><category term="Могилев-2013-04"/><category term="Музыка"/><category term="Склерозник"/><category term="язык Erlang"/><category term="POCO"/><category term="Внезапно"/><category term="язык Haskell"/><category term="timertt"/><category term="Живопись"/><category term="Функциональное программирование"/><category term="Boost"/><category term="MQTT"/><category term="Книга &quot;Оружие победы&quot;"/><category term="Сиде-2011"/><category term="DDS"/><category term="Internet of Things"/><category term="ObjESSty"/><category term="Profileschool"/><category term="Книга &quot;Живая компания&quot;"/><category term="Книга &quot;Структура в кулаке&quot;"/><category term="Machine-2-Machine"/><category term="Must Read"/><category term="json_dto"/><category term="Книга &quot;В поисках совершенства&quot;"/><category term="Язык Eiffel"/><category term="Shrimp Demo-Project"/><category term="Война"/><category term="Akka"/><category term="Amazon&#39;s Dynamo"/><category term="ODBC"/><category term="VIM"/><category term="Библиотека OTL"/><category term="День Нептуна-2013"/><category term="Жестокость"/><category term="Лучше не скажешь"/><category term="Спиртное"/><category term="Характерный портрет"/><category term="AMQP"/><category term="Overloading Control"/><category term="Serialization"/><category term="XML"/><category term="ZeroMQ"/><category term="Книга &quot;Великие а не большие&quot;"/><category term="Книга &quot;Построенные навечно&quot;"/><category term="Погружение в Agile"/><category term="Успешные Менеджеры Программистов"/><category term="язык JavaScript"/><category term="язык OCaml"/><category term="Asio"/><category term="Carl Zeiss"/><category term="War"/><category term="gSOAP"/><category term="Эдвардс Деминг"/><category term="язык Ceylon"/><category term="&#xa;язык D#О программировании"/><category term="О жизни"/><category term="О работе#О программированииПоток сознания"/><category term="#О программированииязык Scala"/><category term="Benchmark"/><category term="Catch2"/><category term="GSM"/><category term="Kilim"/><category term="Kubuntu"/><category term="LaTeX"/><category term="MSSQL"/><category term="MinGW"/><category term="NoSQL"/><category term="OODB"/><category term="Qt"/><category term="SOAP"/><category term="SourceForge"/><category term="Unix"/><category term="doctest"/><category term="Боевик"/><category term="Генри Минцберг"/><category term="Дарс"/><category term="Книга &quot;Выход из кризиса&quot;"/><category term="Наука"/><category term="Рыбалка"/><category term="Старческое брюзжание"/><category term="язык Ada"/><category term="язык Gosu"/><category term="язык PHP"/><category term="язык Python"/><title type='text'>Размышлизмы eao197</title><subtitle type='html'>Размышления и впечатления, которые не хочется держать в себе. О программировании в частности. Ну и о творчестве, и о жизни вообще.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3835</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-2905440149949091685</id><published>2030-01-01T00:00:00.002+03:00</published><updated>2025-05-20T06:31:53.669+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Блог"/><title type='text'>О блоге</title><content type='html'>&lt;p&gt;Более тридцати лет я занимался разработкой ПО, в основном как программист и тим-лид, а в 2012-2014гг как руководитель департамента разработки и внедрения ПО в компании Интервэйл (подробнее на &lt;a href=&quot;http://www.linkedin.com/in/eao197/&quot;&gt;LinkedIn&lt;/a&gt;). В настоящее время занимаюсь развитием компании по разработке ПО &lt;a href=&quot;http://stiffstream.com&quot;&gt;&lt;b&gt;stiff&lt;/b&gt;stream&lt;/a&gt;, в которой являюсь одним из соучредителей. Поэтому в моем блоге много заметок &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9E%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5&quot;&gt;о работе&lt;/a&gt;, в частности &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9E%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8&quot;&gt;о программировании&lt;/a&gt; и &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9E%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0%D1%85&quot;&gt;компьютерах&lt;/a&gt;, а так же &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9E%D0%B1%20%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8&quot;&gt;об управлении&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Так же я пишу &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9E%20%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8&quot;&gt;о жизни&lt;/a&gt; вообще и о нескольких своих увлечениях: &lt;a href=&quot;http://eao197.blogspot.com/search/label/Foto&quot;&gt;о фотографии&lt;/a&gt; (включая публикацию &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9C%D0%BE%D0%B8%20%D1%84%D0%BE%D1%82%D0%BE&quot;&gt;своих фотографий&lt;/a&gt;, некоторые есть и на &lt;a href=&quot;http://www.zeissimages.com/standardgallery.php?puid=2701&amp;showall&quot;&gt;ZeissImages&lt;/a&gt;), &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%A1%D0%BF%D0%BE%D1%80%D1%82&quot;&gt;о спорте&lt;/a&gt;, особенно &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%94%D0%B0%D1%80%D1%82%D1%81&quot;&gt;о дартсе&lt;/a&gt;, и, совсем коротко, &lt;a href=&quot;http://eao197.blogspot.com/search/label/%D0%9A%D0%B8%D0%BD%D0%BE&quot;&gt;о кино&lt;/a&gt;.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2905440149949091685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2905440149949091685'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2014/05/blog-post.html' title='О блоге'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-2770562979760356223</id><published>2029-12-31T10:53:00.000+03:00</published><updated>2018-04-27T17:06:39.634+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Foto"/><category scheme="http://www.blogger.com/atom/ns#" term="Мои фото"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><title type='text'>[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)</title><content type='html'>&lt;p&gt;Вы художник? Бармен или музыкант? Или, может быть, коллекционер? Плотник или столяр? Кузнец или слесарь? Владеете маленьким магазинчиком или управляете большим производством? Реставрируете старинные часы или просто починяете примус? Всю жизнь занимаетесь своим любимым делом и хотели бы иметь фото на память?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOXzdoXx5jrFBn7G9z7Pz6GcTBgwYJysWvLXJw_fB415r9yK0jLTN0vRbSELrwto6HwKUM2GvlRv219Kl61hvnBRZYL8IN5Jp7siO0y0uxc__Kovaqgc7hjsk-jjJPmSdIQHSEgenkTOk/s800-Ic42/portrait_collage_20151001.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Предлагаю сделать портрет в обстановке, связанной с вашей работой или увлечением. Абсолютно бесплатно. Очень уж мне нравится фотографировать людей в их естественной среде. Происходить это может так...&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

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

&lt;p&gt;Если вы заинтересовались, то связаться со мной можно по мейлу eao197 на gmail точка com или в Skype по имени eao197. Либо же оставив комментарий к этой записи. Или в соцсетях: &lt;a href=&quot;http://vk.com/eao197&quot;&gt;VK&lt;/a&gt;, &lt;a href=&quot;https://www.facebook.com/eao197&quot;&gt;Facebook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Для съемки мне нужно знать в каких условиях будет проходить фотосессия: помещение или открытое пространство, темно там или светло, можно ли использовать вспышку или это будет невозможно в принципе и т.д. Если мое присутствие на вашем рабочем месте или рядом с ним требует какого-то предварительного согласования -- то вам самим нужно будет позаботиться об этом. Ну и было бы желательно, чтобы ваши коллеги и клиенты были в курсе и не протестовали бы против попадания в кадр.&lt;/p&gt;

&lt;p&gt;Во избежание чрезмерных ожиданий хочу сразу предупредить: я всего лишь любитель, не проффи. Поэтому результат не гарантирован. По опыту, для того, чтобы получился хороший портрет, приоткрывающий характер человека, нужен не один дубль, и даже не десять, а то и не сто. Ориентироваться нужно на 3-4 часа общения и фотосьемки, что выльется в несколько сотен кадров из которых будет отобрано всего несколько штук. Так что вам потребуется немного терпения, а мне -- капелька удачи.&lt;/p&gt;

&lt;p&gt;Вот пример того, что может получаться в результате таких съемок:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;кукольных дел мастер &lt;a href=&quot;https://goo.gl/photos/khfXG6kGQ52yELyu7&quot;&gt;Екатерина Katiedda Минакова&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;саксофонист &lt;a href=&quot;https://goo.gl/photos/t2t7v58jgVRpN4Xr8&quot;&gt;Анатолий Аксёнов&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;резчик по дереву &lt;a href=&quot;https://plus.google.com/photos/117023091752061088817/albums/6178693720360830017&quot;&gt;Виктор Россолов&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;уникальный гармонист &lt;a href=&quot;https://goo.gl/photos/k4PGyrA7MzYqf8Zu7&quot;&gt;Вячеслав Сивуха&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;кузнец &lt;a href=&quot;https://goo.gl/photos/Zq9YH84PQjXCYpgG7&quot;&gt;Дмитрий Андреев&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;реконструктор &lt;a href=&quot;https://goo.gl/photos/YF8vhEwEKfrPURo47&quot;&gt;Виталий Медведев&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Вот еще несколько примеров того, что получалось в прошлом:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhifcC-yjcJRTTk3s_e4rgb6kBJUGAT7gMbHZHzWz3Vb9h1sN_X8LamFz7DZ-2IlGrG-SUDbMWZMx7BNNV7nKErZ4n6IIckeT7r-j9jWRot-gVQgDApyNmgt_JB6n79fC-zE9bqNHJmtMpR/w1236-h824-no/20150412-144413-KLN_3957.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Танго на набережной --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggFi_ELwi-Tt6l_1o1E32y-_mgOgjLLzH0_dAxJfkXSl3s91P-pSSu9NqgSlnHzjvkidAAMUhB4XflmgKRBLWPcfIzWj1Pk2WL2Mx_smJ7_1ShOTFsTTxcb3R5NgVu1CPyAwSjrysbH9RR/w548-h823-no/20130719-200026-20130719-200026.jpg&quot; height=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- День нептуна --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXSeO_FWkX9vrWPNQTZqM7LhCsPkyJS6ARhRQGXG3-AcFBZrBhaqBYgzNOxZmsBqP7JzUSO7wpZOgTidaFMqk3MDbm9Z_o2vD0r9iQ1ASR4BGEntsWMJxhsV1QPchhU_ap-jTaTDPANp5h/w1398-h824-no/20130713-123844-20130713-123844.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- --&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1409694203.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1402041657.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1401782657.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Сергей Вяхирев --&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1396898490.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Скрипачка за столом --&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1394868675.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Гитарист --&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1394868546.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Коллекционер --&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1378559938.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Музыканты в Минске под дождем --&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1377513249.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Портрет фотографа --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1QNGFkWrtHiOAgTtz5zFZJ3MJvTubJPSQX95FoRm-JD_X9CuegOkzXf4Z_1fkn8uBGEj5YSJGFG1Qo0j4I3qLqtWPVBrO2NFXh2006s56zasJjQjRL0Wr6d-lBO76WMY1RCRC70GKUg/w800-h532-no/20140302-141423.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Реконструкторы в Гомеле на Прудах в 2013-м --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT3NP_5J4-Mbu2ylqqUWg4WeWfU1Og-xhez2EF5RUUxGgPSQ9HyzJfuUvqvZkKNGz7F_r5pnmodFAcn6fcvizXMGe9sYJPAIf9en0mbIRLjN44aMTMWn1E6ifCVJxglSs3PqdtBo4ziIQ/w640-h800-no/20130703-174153.jpg&quot; height=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKur-Y7UIZqw3js9RB53-Ne-umQZuWL1wHSptbthka9hp0W6P77onZsuPdl0ioUfA18gzlB2mdVZ8j3bLiL7swCN0LEwn3Fre4MOVaUwhsbD6WdIpH0gP7K5UMBjSHcKusklCDVWc2UN8/w800-h532-no/20130703-171342.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- С первенства РБ по ката (кёкусинкай каратэ, 2015) --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE3a2H9DeTWkbKaDtbuNIhV9O3nS7QS1ACe5yKTjJKdMKwv7ZDual0cfWcgsSJQz1n-EQsIBWEYZ1Id8paEQDHMTTXnmmux1hCHAWPdpVnWdOZHH53XSVqqDuuIuEbEiBTpwRMEWYnv9A/w1238-h824-no/20150503-105021-KLN_4268.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgCHxrHcWhn769_p48SN0iZ4L12SV0P-9_o_QaB_bsv9vSi3U5-bCm-1__lDgwsXEFZLlKRMLPYKquIjzUjDu70q6xyrjSunJiaAzS4SVd9_ZdIkEXluHVNKd-l6BxRFmPKIPEKEL5OS8/w948-h824-no/20150503-113301-KLN_4471.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- С выступления рестлеров на 9-е мая 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC20Dfr3WLZ9E5dR2cJEngLdTyQYJGMj_nJVUmJe4ZOB4544mlbtQNKlDJWP4cTbkbLxNrXVmwGOAPBRX5khJUVlPKRkqtrU_MF3QNL5IqdsEVussMcB0HAip1ZdnHcFGszOjxbOQENS8/w1238-h824-no/20150509-163040-KLN_5585.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Резчик по дереву Андрей Пастухов (9-е мая 2015) --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh91_sBu92Hln0lhoUEUmHPNeyCnTZIw5sIjsk_SYSkCbZ5NGob26lskCVVnRDcKuz64axtukTGPk2DQ5dYjx6kmCW1lRUfbRk1dvoJgyrLMqGAb85UjeTIdxTe11GXWaJ0GFIbcryPoXI/w548-h823-no/20150509-115629-KLN_5343.jpg&quot; height=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Пожилой коллекционер на 9-е мая 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCq5JemgTpg-GL1l9ST4UDAqDsSNt_yLCNb53DoqIJ23F8dIZ6cNjbE4I4rxsMlYGbCxsVW4HmgM6hCMRzZlzzVqOwltr6GDawimlvDDBa4l04ApI_7NXQim2YpTw3ym-57qdE5d0WqLI/w548-h823-no/20150509-123258-KLN_5434.jpg&quot; height=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Саксофонист Анатолий Аксёнов 31-го мая 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKUpmfVGkbT9B37uSVCDNZA3bzvzM8pnjB2JBSoUZNzDzuFuxAEY7OxLmnNy9PyunOWZy1NPfzz4d9SkSaqqiEkayrHHcm0PToKHmiyhc8gvx85MsSb8D9Unf2eMnjRsfT7pGM-dDkBbE/w1374-h914-no/&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Гончар со свистулькой в гомельском парке 31-го мая 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKc7wPx23qIvV0VhcDK8xMvnddQMP0WbrVIqLzPQoWzAyKaCvMVs1Hml6kz4nzCTFcWp_76ApLrEnInbTfL4KLatoE-R_so-Vn4V1AnSWiuAzeQU7JphHCWL0CPwKX8unvCKHAEqGzzlM/w1143-h914-no/&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Клоун на акции &quot;День красного носа&quot; 31-го мая 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyuVhUBIY1qjyRFW-IMEUj-qkMzCMF1DQ0xyYhv9cUGhI6XVrat88zYeHx9QD1dEBeANusq9fnQeoqZokj_XHbKAVWjb76Q7oCinspcbwvB-KlEqzSPKeb8Nisse2x_-7NiBrnh-Suffk/w1458-h914-no/&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Екатерина Минакова на мастерклассе по изготовлению кукол-тыквоголовок 20 июня 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-cAXLjAfasIZtlsztbKlUBbBzKyYH6BU5uV8eehc36cykLclz0uBLJrgmi1JtFyqgJZ6IZQnQ24-f40jb6tMLZUZ9BcN4gg-zaCMSFeRn6HBdwo39oEmFl4KgPkKsPd98BVVL4bqO6jo/w800/&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Два музыканта у ГЦК 24-го июня 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF_1hnFeYw2yKc2DnVJjy1J0hsVG84mKB3RwPO_bfXxS1S8kpvdtkCf1ZLfwBUFJ6XG76UkgCMXQE0R4FRUeq4iugRbVsEhG_Au9NQafUNE-9SKp-UWEdim9gENkYsqe2cXOHEEDtyCHQ/w800/&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5rZhlDaCdtFPK-iEN1g5_hQHWZNmbWpo3YNXYFdt9P9-yT1WmZu34gHWtpXUyyWAZC-jm7jS3Rw7LfHLtbaSSR_4UWhmgIu1xxP321EwnaeT_TWQXu2ksQFviImwb39UPlLDD07MLotI/w800/&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Виктор Россолов, резчик по дереву --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGMq55RIQknA7mKBSGVr4jhUUBV-t18hw9BzaDXzfpNuIcUPImXz_TY_hyphenhypheniPeKY3NCmUVGzJgbHqevMJgykdVb9i6BbE_rrqBNX0_N3zEPaxsl0XbBBZihz7hiteaRyGSnL_LUWsaHLJs/h800/&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMDaKKX2jHWf3Y6hjab0toitpjjgR7PAmzLiyMSeolf7dq2WlJ4Ig8d0h-pIUS8txw59dura-Ykg_Pe_KD_eovPtWzoxuMNfxtvQfPWXWQZpg54QDhaKVeX2d4y7WNgldwWWmBp8iTxi0/h800/&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0nAX9EHANBxYjNCGn372IbgjgfxT8puIaOS80TreWgWC6bDqa-sLLdPONk9s2G1C5IG2VKci7xw2GFoDRfCsAfW3G3vprdFMvcHlV7A0_gFfhl2X-FSo0SOYHAk_8Xw4OYWGmA4av7T4/w800/&quot;/&gt;&lt;/p&gt;

&lt;!-- Рыбак на соревнования по ловле рыбы фидером 2-го августа 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_Fz7t4qq1Sq6f2uRrAsONMzNmaO9xKFMLdd8tEiR8I5RhiFyMoJRB3qVNwJHIK8Q91bHAiaXFInpBvE-LvD1xXlZM5qiYKES9g5SkDtdaYBeZL0hokXKUbUrW946w_K6dbkka2ot2ZTU/w800/&quot;/&gt;&lt;/p&gt;

&lt;!-- Вячеслав Сивуха 29-го августа 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrT-u70zu5ct3AJGIGHNDkfuD2EeOgRD2a0UQWH_EfonOsLZje58ROKSIRFDCJ_LufKdRwfAZS8xilb3YPEjI2TD7XQo8Q3Z7E2c3USMcDXZFq_vRl6ku4CF42Wk_DqyP5B_74aTi-dAY/w800/&quot;/&gt;&lt;/p&gt;

&lt;!-- С фестиваля &quot;Минск Старажытны&quot; 12-го сентября 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4GrXCz0bPTJnbZgzsPh3homr0BwdCNq2-DqmJ7GQnSZ90e9fTaCnul5q2b7fgJ961_ls5EHZg-jJzBo4b7yrIgcrB1TScScB8LIl7Cj8OYkYQ4itZBh2NfeBojKDGS3UWX8bB9L38oWQ/s800-Ic42/20150912-151417-DSC_0882.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvDCy81e4YysNurf-0h4nFbKb2GjzVjcFVdZFCQ-Whr8wovwkVWxFK_5nu-707hJKfuu04TQptRsZYAiPfyDf6DBAdDKmG5A1yJ2QwbcSDVHBLQOQikr8X6gb6E2x5LH9OrVmER8rBYZ4/s800-Ic42/20150912-152641-DSC_0925.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Кузнец Дмитрий Андреев (23-е сентября 2015) --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRvCyJViaygimCzZR16fUzHSBR2cCM3KUuUrf0d7P9q2zRNkvTvrLRjHSf1N5lVwLuHY1mQ-jtfGBQOSksCk2vUAY-eg4qdUlMCUMqzEslHDvV-LoCREHsZV95VbxgH2k_sM6ugTpw01E/s800-Ic42/20150923-123159-DSC_1473.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_gfleps0XNHwnhj09nDaVGyFEUBHthLYG0IHJpRKaO4WdQrryU4Gt1A79-mLt62QZOxVNMFJ5pMc23xEU2xAJGNK_V2ILa8Es2o10QcD52on86QzEdnckpKWZ_uIeXcZ47XYj-KYuskU/s800-Ic42/20150923-130645-DSC_1628.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Реконструктор Виталий Медведев (9-е мая 2016) --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDr5QOogMAu7h-24LVKoW6URZlnr425_uWTx84T_xZt11dMx90o-rDzk9op9LCQXyeECUxOgWPFNPqohad4gBq4Dzg1vHTWhglXErpbFEzaTKH6JxYguNU_fKZz-ZaRcR5WEzbkIk7bgw/s800/20160509-140603-DSC_6134.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITCbq_SB_JDVejEOSMFd-JM6ZGvWi4xAxNqioyQDLWiUxg51nXeZTqn_FUIfOAmzvEKe073rsqsnqxKLxE9N6Cirfg6Zw6o3HkqJhg1Zes75ka0vV_O0vOUKTWcu8JVT6qn2yFKCuO7o/s800/20160509-141604-DSC_6195-2.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Бородач за компьютером на CoreHard Spring 2017 (13-е мая 2017)) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/34349688134/in/photostream/&quot; title=&quot;20170513-112141-DSC_7774&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/5/4277/34349688134_2621e0ef2b_c.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;20170513-112141-DSC_7774&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Дори Экстерман на CoreHard Spring 2017 (13-е мая 2017)) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/34349687964/in/photostream/&quot; title=&quot;20170513-120348-DSC_7816&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/5/4274/34349687964_ef67a1b270_c.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;20170513-120348-DSC_7816&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- ДиДжей на Фестивале городской еды (27-е августа 2017) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/36910824456/in/dateposted/&quot; title=&quot;20170827-142946-DSC_9303&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4377/36910824456_4a02bc95a5_c.jpg&quot; width=&quot;534&quot; height=&quot;800&quot; alt=&quot;20170827-142946-DSC_9303&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Жонглер на Дне Красного носа (27-е августа 2017) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/36957765561/in/photostream/&quot; title=&quot;20170827-134632-DSC_9214&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4346/36957765561_689280daeb_c.jpg&quot; width=&quot;534&quot; height=&quot;800&quot; alt=&quot;20170827-134632-DSC_9214&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Клоун на мотоцикле на Дне Красного носа (27-е августа 2017) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/37099333605/in/photostream/&quot; title=&quot;20170827-131334-DSC_9010&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4375/37099333605_dce23edd09_c.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;20170827-131334-DSC_9010&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Скрипач на Невском в Питере (апрель 2018) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/27868900178/in/dateposted/&quot; title=&quot;20180422-155704-DSCF0015&quot;&gt;&lt;img src=&quot;https://farm1.staticflickr.com/912/27868900178_ceeabf5305_c.jpg&quot; width=&quot;800&quot; height=&quot;533&quot; alt=&quot;20180422-155704-DSCF0015&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Гитарный мастер Евгений в Питере (апрель 2018) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/26800424547/in/photostream/&quot; title=&quot;20180422-143118-DSCF9903&quot;&gt;&lt;img src=&quot;https://farm1.staticflickr.com/825/26800424547_cede9a2743_c.jpg&quot; width=&quot;800&quot; height=&quot;533&quot; alt=&quot;20180422-143118-DSCF9903&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;А можно отнестись к этой затее и более широко. Не обязательно иметь экзотическую профессию или уникальное хобби. Достаточно быть неординарным человеком и быть готовым провести несколько часов под прицелом фотоаппарта, желательно в подходящем антураже...&lt;/p&gt;

&lt;!-- Девушка из Танго на набережной --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLZ6yiBD4483bYfWnvrGBy3OXRqyEwkO2eSvhpGmF-rXTn5RCNNycMd9GVuW_0mfNpt1S7cUazdeQm7p1xQNnW9TbdZmeo5_RqgZfgdeL45CCwCTnyv-o1f5BCdNyER53aK2-lmEc-cX0I/w1238-h824-no/20130719-195618-20130719-195618.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Лёша Юша в Минске --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipDa7WAOebKiuNEAeJkkBfryC2LZ4BzAjRI7bwKqcO8f4Zma89qMnrlbkbX1YR2RaTsmfCbZAWEN1U4gOQHqd_hLbD7jb44dhcWCMqjuBpgePi8Oz8495R2tXyUMPiQli9233_OYngRJw/w800-h569-no/20131215-114227.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Андрей Тарасенко на Belarus Open --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1_kdV4N5wWkEaOlL-ipso65N57CfWXJg2Huo-qpamYMYJ0wGVUtu-LUHlPqVeToiDpnA1DahqY9l3Cp5zRdm9j5SpklDqdLxcznr-duoR2R45-eTEfZD6lNzXa1iljRiIhtYZVcxHLU4/w800-h532-no/20130824-201046.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO0MNULOvLkhXM_yE8t-x5KNvUKuXrPPcsh5oLRT5RBPSm3WoHF2YRXKgdwD9PcwlO10YIWzl6pLQCwE5F_fgSLHu_o0lgCNnckYeY5_Y-CR52PB-2LjZ9K3rm5NrQath4lB_E1MbMDEE/w800-h532-no/20140504-203526.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.zeissimages.com/gallery/2701/U2701I1420460994.SEQ.0.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtyd8XUzToyw2hFKQjHuStquKmK6TgiN9pPjT_oajIEZtqDXh2LJWFnMA8oNBKqZr3I258JxibKqhRzIUOpy0WdCKMYv3_UbILLm1F2olymQG906Z-L1b83lxQMQA_ZKdKYrBZmsf6qftb/w800-h640-no/20131215-082410.jpg&quot; width=&quot;800&quot;/&gt;&lt;/p&gt;

&lt;!-- Алексей Голубев 1-го сентября 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZjUgHdf8cV_1MOpQ2KiMdtNWlEIqfKzo2TPn7f0hQLdIaNblQvfiozDWZ2P_1olUKYVN45RXMckjIzeihvE7kdpviUmDCW4l1FP2DOal-F_jZ9BPJdDfmLrJcZY_Lsr9z6FhehGJgtkg/w800/&quot;/&gt;&lt;/p&gt;

&lt;!-- Девушка играет на свистульке. Минск Старажытны, 12-го сентябры 2015 --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIQPL058wfGCdzrKqSUrsL3Gi-C0L7F8mIJzgiw2CZ8HXt_sCreAywMCPQCcZz_-EdYA8_d2HF3sViWJLyRVRLtBjUyB9sXr0zsXjEFG_WaoxAceFuwxZWB5HU5abLPa5w2I5qk5N9_0Q/s800-Ic42/20150912-144846-DSC_0820-2.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Алексей Юша (Минск Старажытны, 12-го сентября 2015) --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsbqLqASBIlzY4F-drzVLaD2_P8U3APefX5_jQST1m5h6kHMsIVvisZLoGMUG_UhhDcLnL0StuusP2aAPAHg5hfcEXdbjVMmN6HU0ruH5truTxawOf4MQABpkHIh_a9smRUx315z_L5gA/s800-Ic42/20150912-125946-DSC_0471.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Владислав Волков (Москва, 9-е февраля 2016) --&gt;

&lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvMXbkjzlRN6V9g5vvKwPtYupIhvyT6iMkJtW8tXW-GBZMQCrMs_YTdOLRoR1ruXLYPA-i6avsoL5p1FOEr3fnf7PBfdsWcAf4OZ-C1aDxmQEPjFGlFiUKCVXYpA7xY3YTZIqrUKxGpHw/s800-Ic42/20160209-124944-DSCF2643.jpg&quot;/&gt;&lt;/p&gt;

&lt;!-- Коля Шмаков на CoreHard Spring 2017 (13-е мая 2017)) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/34349688574/in/dateposted/&quot; title=&quot;20170513-103826-DSC_7656&quot;&gt;&lt;img src=&quot;https://c1.staticflickr.com/5/4290/34349688574_d1b88f8f08_c.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;20170513-103826-DSC_7656&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Ретро-фотограф на Дне Города (16-е сентября 2017) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/36447681394/in/dateposted/&quot; title=&quot;20170916-142459-DSC_9446&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4408/36447681394_1c98df6081_c.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;20170916-142459-DSC_9446&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;!-- Музыканты на Дне Города (16-е сентября 2017) --&gt;

&lt;a data-flickr-embed=&quot;true&quot;  href=&quot;https://www.flickr.com/photos/152498119@N03/36887823000/in/photostream/&quot; title=&quot;20170916-154013-DSC_9543&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4331/36887823000_2d451b3b7a_c.jpg&quot; width=&quot;800&quot; height=&quot;534&quot; alt=&quot;20170916-154013-DSC_9543&quot;&gt;&lt;/a&gt;&lt;script async src=&quot;//embedr.flickr.com/assets/client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/2770562979760356223/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/2770562979760356223' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2770562979760356223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2770562979760356223'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2015/04/lifephoto_19.html' title='[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOXzdoXx5jrFBn7G9z7Pz6GcTBgwYJysWvLXJw_fB415r9yK0jLTN0vRbSELrwto6HwKUM2GvlRv219Kl61hvnBRZYL8IN5Jp7siO0y0uxc__Kovaqgc7hjsk-jjJPmSdIQHSEgenkTOk/s72-c-Ic42/portrait_collage_20151001.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-6594112228940297583</id><published>2026-10-10T17:25:13.558+03:00</published><updated>2026-10-10T17:25:13.559+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><category scheme="http://www.blogger.com/atom/ns#" term="О работе"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[work;life] СтифСтриму десять лет</title><content type='html'>&lt;p&gt;Таки нам десять лет. Несколько неожиданно. И в том плане, что дожить до 10 было не просто. И в том плане, что очень уж быстро эти годы пролетели.&lt;/p&gt;

&lt;p&gt;Данный пост содержит мою личную рефлексию по данному поводу. И написан он, скорее всего, для меня самого, чтобы было что перечитать через 5, 10, а может быть и 15 лет. Поэтому заранее извиняюсь, если вы не найдете здесь ничего интересного для себя.&lt;/p&gt;

&lt;p&gt;Несколько лет назад пошутил:&lt;/p&gt;

&lt;blockquote&gt;...ген велосипедостроения во мне настолько силен, что мне временами кажется, что даже &quot;СтифСтрим&quot; -- это лисапед, придуманный и сделанный для того, чтобы работать так, как нравится и хочется...&lt;/blockquote&gt;

&lt;p&gt;теперь же уверен, что это не шутка. Собственно, так оно и есть. Окончательно уйдя из найма в 2014-ом году и не видя перспектив устроиться на интересное место у себя в Гомеле, а переезжать в более крупный город не хотелось, пришлось создавать рабочее место по своему разумению.&lt;/p&gt;

&lt;p&gt;Можно сказать, что целью было создать фирму, где можно было работать над тем, что тебе интересно и так, как ты считаешь правильным, и чтобы тебе за это еще и платили.&lt;/p&gt;

&lt;p&gt;Пока что на 100% эта цель не достигнута 😉&lt;br/&gt;
Тут еще есть над чем работать.&lt;/p&gt;

&lt;p&gt;В чем открытие своей компании однозначно себя оправдало, так это в отсутствии менеджеров над тобой. Прямо скажу, что последние годы в найме на нервы и здоровье очень сильно давила необходимость подчиняться каким-то странным персонажам с невнятными идеями и откровенно говнистым поведением. Теперь такого явления нет как такового. Есть заказчики со своими приколами, да. Но, по моему небольшому опыту, с заказчиком гораздо проще найти общий язык, чем с пришедшим со стороны начальником, потому что здесь совершенно понятные отношения &quot;ты мне, я тебе&quot;. Особенно когда заказчик еще и (со)владелец бизнеса, а не наемный менеджер.&lt;/p&gt;

&lt;p&gt;В общем, была возможность, было желание, были люди, с которыми не страшно было пуститься в данную авантюру. Грех было не попробовать. Но есть нюансы.&lt;/p&gt;

&lt;p&gt;Во-первых, когда СтифСтрим создавался, мне было уже за 40. И я исходил из того, что это будет моя первая и последняя попытка начать собственное дело. Поэтому не рассматривал для себя опцию &quot;быстро попробуем, если не пойдет, то закроемся и посмотрим в другую сторону&quot;. Хотя, наверное, следовало бы. Оглядываясь назад и присматриваясь к чужому опыту понимаю, что одним из важных качеств бизнесмена является умение признавать неудачи, быстро ликвидировать убыточные предприятия и пробовать новые направления. Мне этого умения не хватило. Возможно, компанию имело смысл закрыть где-то в 2019-ом или 2020-ом году, когда все наши первоначальные планы окончательно накрылись медным тазом. Возможно. Но история не знает сослагательного наклонения. Поэтому сегодня СтифСтим отмечает свое десятилетие.&lt;/p&gt;

&lt;p&gt;Во-вторых, пожалуй, главной нашей ошибкой стало то, что мы поздно переключились именно на услуги заказной разработки. Первоначально хотели зарабатывать вокруг своих OpenSource проектов, а заказную разработку рассматривали просто как способ продержаться до тех пор, пока не появится нормальный поток средств от поддержки OpenSource. Нужно было сразу позиционировать себя как аутсорсеров. Но, думаю, тогда бы такой проект, как RESTinio, просто бы не состоялся. А насколько просто было искать заказы не имея того же RESTinio в своем портфолио -- это большой и открытый вопрос.&lt;/p&gt;

&lt;p&gt;В-третьих, я долго не мог понять кому же нужны наши услуги. Только в последние 3-4 года стало окончательно понятно, что это небольшие по размеру компании, в которых от 4-5 до 10-15 разработчиков.&lt;/p&gt;

&lt;p&gt;В-четвертых, возможно, название stiffstream оказалось не самым удачным, но моя упертость не позволила учесть предупреждения от знающих английский язык друзей и знакомых. С другой стороны, упертость -- это ДНК нашей компании, поэтому название &quot;Упрямый поток&quot; (или, что менее литературно, но более точно &quot;Упертый поток&quot;) как нельзя лучше обозначает наш характер.&lt;/p&gt;

&lt;p&gt;Ну да все это дела минувшие. А вот заглядывать в будущее страшновато.&lt;/p&gt;

&lt;p&gt;В первую очередь потому, что я не понимаю как изменит область разработки ПО искусственный интеллект. Если дела будут развиваться по худшему сценарии, то работы для таких как я в индустрии не останется. Либо же её будет так мало, что не будет смысла здесь оставаться и конкурировать за жалкие крохи, остающиеся от вайб-кодеров.&lt;/p&gt;

&lt;p&gt;А также потому, что непонятно куда катится окружающий мир. Есть ощущение, что к глобальному &lt;strike&gt;звиздецу&lt;/strike&gt; экономическому кризису и III-ей мировой войне. И не исключено, что через пару-тройку лет на месте нашего офиса будут дымящиеся руины, а может еще и сильно радиоактивные.&lt;/p&gt;

&lt;p&gt;Поэтому планов на будущее не строю от слова совсем, горизонт планирования буквально 2-3 месяца. И да, я знаю, что с точки зрения бизнеса это неправильно. Но я и так очень и очень многое в своей жизни делал неправильно. Одним неправильным поведением больше, одним меньше. Поэтому живем сегодняшним днем: стараемся качественно выполнять задачи текущего заказчика, выкраиваем время для развития SO-5, надеемся рано или поздно вернуться и к RESTinio.&lt;/p&gt;

&lt;p&gt;Как-то так: делай что должно и будь что будет. Ну а я был бы не против через 10 лет написать еще один такой пост.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/6594112228940297583/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/6594112228940297583' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6594112228940297583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6594112228940297583'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/10/worklife.html' title='[work;life] СтифСтриму десять лет'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-8449839675344383565</id><published>2026-10-09T08:51:25.223+03:00</published><updated>2026-10-09T08:51:25.224+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Business"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><category scheme="http://www.blogger.com/atom/ns#" term="О работе"/><title type='text'>[work;life] Уроки из 10 лет ведения собственного бизнеса</title><content type='html'>&lt;p&gt;Жизнь &lt;a href=&quot;https://stiffstream.com/&quot;&gt;нашей крошечной компании&lt;/a&gt; официально началась чуть менее 10 лет назад. Думаю, что на эту тему я еще сделаю отдельный маленький пост. Сегодня же хочется собрать в одном месте главные уроки, которые жизнь преподала за это время. Все это уже писалось здесь раньше, поэтому тот, кто читает меня давно, не найдет для себя ничего нового.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Успех не гарантирован&lt;/b&gt;. Вот вообще. Не смотря на вашу квалификацию, ценность ваших идей, качество и готовность вашего продукта. Если у вас в прошлом был приличный спортивный опыт, в частности участие во многих соревнованиях и, главное, опыт поражений, то вам будет проще понять о чем речь: на старт турнира выходит множество спортсменов, часть из которых находится в отличной форме для того, чтобы победить. Но призовых мест всего три, а победитель вообще один. Это означает, что подавляющее количество стартовавших вообще ничего не добьется. Начиная собственное дело вы оказываетесь в условиях, в которых практически все стартовавшие останутся ни с чем. И даже если у вас изначально отличные расклады, все равно что-то может пойти не так и вы ничего не добьетесь. Вы должны не просто знать об этом, вы должны это осознавать всем телом.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Ловушка wishful thinking (выдача желаемого за действительное) имеет место быть.&lt;/b&gt; Вряд ли получится ее избежать, но чем раньше реальность разобьет ваши розовые очки, тем лучше. С другой стороны, если не верить, что у тебя все получится (а это wishful thinking в чистом виде и есть), то и не хватит смелости решиться на открытие своего бизнеса.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Никто кроме вас&lt;/b&gt;. В буквальном смысле. Все решения только ваши собственные, вся ответственность целиком и полностью на вас. Даже если вы кому-то что-то делегируете, именно вы определяете, что и зачем делается. Или не делается. Пенять можно только на себя, переложить ответственность ни на кого не получится. Коллегиальность принятия решений не спасает, проверено.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Ваши проблемы будут с вами 24x7x365&lt;/b&gt;. Если не понятно почему, то см. выше про &quot;Никто кроме вас&quot;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Скорее всего вы никто и звать вас никак&lt;/b&gt;. Особенно актуально для тех, кто добился более-менее высоких должностей в крупных компаниях с уже сложившейся репутацией. Грубо говоря, когда вы предлагаете покупателю продукт/сервис от HP или IBM, то это одно, но когда вы не имеете за спиной поддержки громкого бренда и продвигаете новый продукт от никому не известной компании &quot;Рога и Копыта&quot;, то вы никто и звать вас никак. Очень хорошо, если для старта вы можете воспользоваться старыми связями и покупку вашего продукта/сервиса могут пролобировать те, кто вас уже знает и/или имеет какой-то свой интерес в этом. Но за пределами этого не очень широкого круга старых связей вы никто и звать вас никак. Имя и репутацию нужно строить с нуля.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Наличие большой подушки (серьезных инвестиций) на начальном этапе может навредить.&lt;/b&gt; Бизнес должен приносить деньги, а то, что вы делаете должно продаваться. Я не думаю, что цель бизнеса в прибыли, прибыль -- это способ существование бизнеса. Нет продаж -- нет денег, нет денег -- нет развития. Поэтому нужно стремиться зарабатывать с самого начала. А наличие начальных инвестиций может создать иллюзию того, что у вас есть время для доведение продукта до приемлемого качества прежде чем выходить на рынок. Когда эти самые инвестиции закончатся можно обнаружить себя с продуктом, который не продается. А на исправление ситуации ни времени, ни ресурсов уже нет.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Воронка продаж&lt;/b&gt;. Она существует.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Время -- деньги или &quot;time to market really matters&quot;&lt;/b&gt;. Ваше отношение ко времени и деньгам изменится. Одним из основных вопросов станет &quot;когда продукт станет доступен на рынке?&quot;, а каждый день просрочки вы в прямом смысле начнете ощущать собственным кошельком. Соответственно, качество вашего продукта станет всего лишь одним из его свойств. Жизнь показала, что качество стоит очень дорого, мало кто готов за это платить, т.к. платить приходится не только и не столько деньгами, сколько временем, которое не купить и которым никто не располагает в достаточной мере. Ну кроме наемных работников, само собой ;)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Это не спринт, это забег на длинную дистанцию&lt;/b&gt;. Сразу избавьтесь от мысли, что вы сейчас плотно-плотно поработаете полгодика или даже годик, а потом все будет в шоколаде. См. выше про &quot;Успех не гарантирован&quot;. Не знаю, что происходит у тех, кто быстро достигает успеха и сразу же продает свое детище за приличные деньги. Но для тех, кому так не везет, все это напоминает непрекращающийся длинный марш-бросок со множеством мелких спринтов, карабканий на очередной бугор, головокружительных спусков, топтаний на месте, поворотов не туда и пр. Вы должны продолжать свой путь, а не выгореть, что не просто, т.к. см. выше про &quot;Никто кроме вас&quot;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Самая большая ценность, вероятно, это люди, с которыми вы отправились в этот путь&lt;/b&gt;. Тут особо больше ничего и не скажешь. Вы сами это прочувствуете. С одной стороны это значит, что запускать общий бизнес нужно с теми, с кем вы готовы идти в разведку (мне, например, с этим повезло). С другой стороны, не нужно делать это с теми, с кем бы вы не хотели портить отношения ни при каких обстоятельствах (речь прежде всего о близких друзьях и родственниках).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Ничто не вернет времени, которое вы потратили на бизнес, а не на семью&lt;/b&gt;. Ничто.&lt;/p&gt;

&lt;p&gt;PS. Последний урок, вероятно, самый важный.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/8449839675344383565/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/8449839675344383565' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8449839675344383565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8449839675344383565'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/10/worklife-10.html' title='[work;life] Уроки из 10 лет ведения собственного бизнеса'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-3866372013267856485</id><published>2026-10-06T14:20:49.551+03:00</published><updated>2026-10-06T14:20:49.552+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Actor Model"/><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency"/><category scheme="http://www.blogger.com/atom/ns#" term="SObjectizer"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.c++] Пара слов о докладе про переход от акторов к C++20 короутинам</title><content type='html'>&lt;p&gt;На Хабре появился отчет &quot;&lt;a href=&quot;https://habr.com/ru/companies/yadro/articles/1090332/&quot;&gt;У нас есть «плюсы» дома: о чем говорили на митапе YADRO × C++ Russia&lt;/a&gt;&quot;, в котором опубликованы видео докладов &quot;Make legacy great again: переводим зрелый проект на С++20-корутины&quot; и &quot;С++20-корутины в KvadraOS: как устроены и зачем внедрялись&quot;. Первый из этих докладов я посмотрел и, как разработчик &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer&quot;&gt;акторного фреймворка для С++&lt;/a&gt;, имею что сказать.&lt;/p&gt;

&lt;p&gt;Из рассказанного и показанного складывается ощущение, что отказ от акторов в пользу stackless короутин был полностью оправдан. И тому есть две причины.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Первая и главная, в том, что акторы, реализованные в виде объектов с коллбэками, плохо подходят для &quot;линейного&quot; кода. Т.е. когда ваш алгоритм выражается простой последовательностью шагов, вроде: сделали запрос к подсистеме №1, дождались ответа, сделали запрос к подсистеме №2, дождались ответа, сделали запрос к подсистеме №3 и т.д., то реализация его как актора превратит код в лапшу. Либо в совсем страшную, если все коллбэки представляются лямбдами, либо чуть в менее страшную, если коллбэки -- это обычные методы обычного объекта. Но все равно будет лапша из-за принципиального ограничения такого подхода -- коллбэк не должен &quot;засыпать&quot; и блокировать тред, на котором работает. Обработчик события должен максимально быстро сделать свое дело и вернуть управление фреймворку, отвечающему за вызов коллбэков.&lt;/p&gt;

&lt;p&gt;Поэтому-то код на подобных акторах будет представлять из себя цепочку атомарных действий, не связанных в единое целое. Т.е. вместо простого линейного кода вида:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;auto r1 = subsystem_1.ask_something();
auto r2 = subsystem_2.ask_something(r1.some_data);
auto r3 = subsystem_3.ask_something(r2.some_data);
make_response(r3.some_data);&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Будет что-то вида (псевдокод, не привязанный к конкретному C++ному фреймворку):&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;my_actor.on([&amp;amp;](start_signal) {
  send&amp;lt;ask_something&amp;gt;(subsystem_1).reply_to(my_actor);
});
my_actor.on(subsystem_1, [&amp;amp;](response &amp;amp; r) {
  send&amp;lt;ask_something&amp;gt;(subsystem_1, r.some_data).reply_to(my_actor);
});
my_actor.on(subsystem_2, [&amp;amp;](response &amp;amp; r) {
  send&amp;lt;ask_something&amp;gt;(subsystem_2, r.some_data).reply_to(my_actor);
});
my_actor.on(subsystem_3, [&amp;amp;](response &amp;amp; r) {
  make_response(r.some_data);
});&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Поэтому если в вашем распоряжении C++ный акторный фреймворк по типу CAF или SObjectizer и вам нужно писать, в основном, линейный код, то задействовав акторы вы только усложните себе работу.&lt;/p&gt;

&lt;p&gt;Акторы будут себя оправдывать в ситуациях, когда вы ожидаете не одно входящее событие, а несколько разных. Т.е. у вас нет сценария &quot;запросили что-то у подсистемы 1 и ждем ответа&quot;, а у вас есть сценарий &quot;инициировали несколько действий и далее ждем одно из трех/четырех/пяти/... событий&quot;. Вот тогда вы либо превращаете свой код в лапшу через switch-и:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;auto msg = receive_message();
switch(msg.type)
{
case event_1: ...; break;
case event_2: ...; break;
case event_3: ...; break;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;либо выделяете реакцию на каждое событие в отдельный коллбэк и позволяете фреймворку самому разбираться с тем, что именно пришло и какой именно коллбэк нужно вызвать для обработки.&lt;/p&gt;

&lt;p&gt;На продемонстрированных в докладе слайдах как раз было видно, что люди имеют дело с простыми последовательными сценариями, в которых акторы на коллбэках показывают себя хуже всего.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Вторая причина, как мне кажется, связана с самим выбранным акторным фреймворком. Вроде бы в докладе его название явным образом не произносили, но судя по примерам кода это был &lt;a href=&quot;https://www.actor-framework.org/&quot;&gt;CAF&lt;/a&gt;. А у CAF-а, на мой очень субъективный и весьма пристрастный взгляд, есть большие проблемы и с читаемостью, и еще большие с сопровождаемостью.&lt;/p&gt;

&lt;p&gt;Во-первых, потому, что виденный мной код акторов на CAF -- это лямбда в лямбде верхом на лямбде и лямбдой погоняет.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDMjXjvyIS4V86P7JUsXAJrcQq1DT1F7aHSaAgz14Ph4tb2HWoU0ykFjEVxhNECMULA9OdqeH6SaJ2BsdkiK1AiX0GpSRPmCo8Z3C1owH2YFPQXMpqo3rxf-deIf6IG-WPxNCIdoKrS45LE7t-jm9LIiKXfdQUqNvnA1XFGtJuPMk4XLW-eATdKJ3xDM/s2880/Screenshot_20261006_084859.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1800&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDMjXjvyIS4V86P7JUsXAJrcQq1DT1F7aHSaAgz14Ph4tb2HWoU0ykFjEVxhNECMULA9OdqeH6SaJ2BsdkiK1AiX0GpSRPmCo8Z3C1owH2YFPQXMpqo3rxf-deIf6IG-WPxNCIdoKrS45LE7t-jm9LIiKXfdQUqNvnA1XFGtJuPMk4XLW-eATdKJ3xDM/s600/Screenshot_20261006_084859.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Во-вторых, потому, что в виденных мной примерах кода на CAF сообщения принято передавать в виде ad-hoc туплов. Все эти туплы приходится выписывать и в декларациях обработчиков сообщений, и в операциях отсылки сообщений. Что требует затем ручной правки всех этих мест в коде если тупл потребовалось изменить (например, добавить еще что-то в отсылаемое сообщение).&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9SxjiEBbYzFixtcf6ei33E9hfqIgiCsJAtwls95UNHZV0WPoGLn9lEOEYXA4aQIPNelC7bGpAoeJZmNvnzWODX71jLJ-Qj8kbxArdXx0nELpZxuy2vwXOhOTx09nk8XSVdIUs_z5yddo8FD2dG7h1hAgGMr6NS-i6wIka4PQF_c1-WZ8G33QLOjN77ug/s2880/Screenshot_20261006_084942.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1800&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9SxjiEBbYzFixtcf6ei33E9hfqIgiCsJAtwls95UNHZV0WPoGLn9lEOEYXA4aQIPNelC7bGpAoeJZmNvnzWODX71jLJ-Qj8kbxArdXx0nELpZxuy2vwXOhOTx09nk8XSVdIUs_z5yddo8FD2dG7h1hAgGMr6NS-i6wIka4PQF_c1-WZ8G33QLOjN77ug/s600/Screenshot_20261006_084942.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;В SObjectizer-е принят совсем другой подход. Поэтому код на SObjectizer, надеюсь, чуть более прост и удобен в сопровождении.&lt;/p&gt;

&lt;p&gt;Тут я не хочу сказать, что SO-5 для подобной задачи подходит лучше, чем CAF. Увы, это не так, а почему не так описано выше при разборе первой причины. Но, тешу себя надеждой, что будь этот код написан на SO-5, то сопровождать его было бы проще, чем код на CAF. В том числе и из-за того, что в SO-5 нет таких жестких связей между акторами, чтобы один держал ссылку на другого и это бы мешало завершению работы приложения.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Отдельный вопрос в том, а акторы в принципе подходят под решение задач, подобных рассмотренной в докладе &quot;Make legacy great again: переводим зрелый проект на С++20-корутины&quot;?&lt;/p&gt;

&lt;p&gt;Увы, не могу однозначно ответить на данный вопрос, т.к. сама задача была озвучена только поверхностно. С точки зрения банальной эрудиции: почему бы и нет?&lt;/p&gt;

&lt;p&gt;Однако, похоже на то, что было выбрано решение &quot;один актор на запрос&quot;. Что при большом количестве одновременных запросов ведет к появлению большого количества одновременно живущих акторов. К сожалению, неоднократно убеждался на &lt;a href=&quot;https://habr.com/ru/articles/324978/&quot;&gt;собственном опыте&lt;/a&gt;, что большое количество одновременно живущих акторов -- это не решение проблемы, это сама по себе проблема.&lt;/p&gt;

&lt;p&gt;Поэтому лично я бы при попытке подойти к подобной проблеме с акторами на перевес, попробовал бы сперва продумать схему &quot;один актор на операцию&quot;. Т.е. актор для авторизации, один актор для выполнения запросов к БД, один актор для протоколирования и т.д., и т.п.&lt;/p&gt;

&lt;p&gt;В таком случае акторов было бы меньше, они были бы сложнее, но их было бы проще контролировать. И здесь акторы как раз бы работали не в простых последовательных сценариях, а в ситуациях, где в каждый момент времени может прийти несколько разных событий.&lt;/p&gt;

&lt;p&gt;Так же, возможно, акторы были бы вполне уместны даже в схеме &quot;один актор на запрос&quot;, но в случае, если у акторов коллбеки могут безопасно и дешево засыпать на синхронных обращениях к другим акторам, не блокируя при этом механизмы диспетчеризации событий в акторном фреймворке. Например, если каждый актор -- это stackfull короутина (fiber, green thread). Тогда актор запросто может заснуть на синхронной операции, а обслуживающий его тред ОС возьмет в работу какого-то другого актора. Но, во-первых, ни CAF, ни SObjectizer подобные акторы не поддерживают. Во-вторых, в докладе отдельно говорится про проблемы, связанные с fiber-ами.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Теперь пара слов о том, а можно ли получить лучшее из двух миров в одном флаконе, т.е. иметь возможность использовать и акторы, и C++20 stackless короутины.&lt;/p&gt;

&lt;p&gt;Главным образом вопрос о том, а можно ли научить акторов вызывать co_await внутри своих коллбэков и при этом не требовать от фреймворка создания сотен тысяч тредов для обслуживания всего этого роскошества.&lt;/p&gt;

&lt;p&gt;Да, думаю, что можно.&lt;/p&gt;

&lt;p&gt;И я пытаюсь научить SO-5 этому. Но не могу сказать, когда же это заработает на практике.&lt;/p&gt;

&lt;p&gt;Тут нужно понимать одну простую вещь: SObjectizer напрямую не приносит нам денег, мы не зарабатываем ни на продаже SO-5, ни на его техподдержке, ни на обучении, ни на кастомизации SO-5 под чьи-то специфические нужды. SO-5 и RESTinio создают нам репутацию, которая приводит клиентов. Но клиенты платят за решение &lt;i&gt;своих&lt;/i&gt; проблем в &lt;i&gt;своем&lt;/i&gt; коде. И эти проблемы, в 99% случаев, вообще никак не связаны с SO-5.&lt;/p&gt;

&lt;p&gt;Поэтому работы над SO-5 ведутся лишь тогда, когда для этого удается выкроить ресурсы. То, что могло бы занять 2-3 месяца нормальной работы над SO-5 в режиме &quot;полный рабочий день&quot;, растягивается, буквально, на год, если получается выкраивать по 10-15 часов в неделю, да и то далеко не всегда. Посему поддержка короутин в SO-5, надеюсь, появится. Но не через неделю, и даже не через месяц, а может и не через два. Увы, такова се ля ви.&lt;/p&gt;

&lt;p&gt;По текущему статусу добавления С++20 короутин в SO-5 могу сказать следующее: часть подготовительных работ выполнена. Дело уперлось в такое понятие, как &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer/blob/cac83bec2da8a709b21d647f8f43c107b0f00cd2/dev/so_5/execution_demand.hpp#L35&quot;&gt;event_handler_method_t&lt;/a&gt;. Эта штука предназначена для хранения обработчиков сообщений и сейчас она заточена только под синхронные обработчики. А нужно поддержать еще и асинхронные. И вопрос в том как это сделать.&lt;/p&gt;

&lt;p&gt;Есть один очевидный вариант. Но он потребует ператрахивания (с) значительной части потрохов SO-5. И, вероятно, немного снизит скорость диспетчеризации сообщений (для реальных прикладных программ это вряд ли будет заметно, но вот на тупых бенчмарках, по которым судят о качестве инструмента, просадка может быть заметна). Однако, больше всего меня смущает трудоемкость.&lt;/p&gt;

&lt;p&gt;Возможно, найдется какая-то более интересная и простая в реализации идея. Тогда все пойдет гораздо веселее. Но, увы, пока не нашлась.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/3866372013267856485/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/3866372013267856485' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3866372013267856485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3866372013267856485'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/10/progc-c20.html' title='[prog.c++] Пара слов о докладе про переход от акторов к C++20 короутинам'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDMjXjvyIS4V86P7JUsXAJrcQq1DT1F7aHSaAgz14Ph4tb2HWoU0ykFjEVxhNECMULA9OdqeH6SaJ2BsdkiK1AiX0GpSRPmCo8Z3C1owH2YFPQXMpqo3rxf-deIf6IG-WPxNCIdoKrS45LE7t-jm9LIiKXfdQUqNvnA1XFGtJuPMk4XLW-eATdKJ3xDM/s72-c/Screenshot_20261006_084859.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-8875755909709469704</id><published>2026-10-05T07:33:04.672+03:00</published><updated>2026-10-05T07:33:04.672+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О компьютерах"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[comp.notebooks] От 14&quot; ноутбука к 16&quot; и обратно</title><content type='html'>&lt;p&gt;Поделюсь очень неожиданным для себя самого открытием. В очередной раз на тему ноутбуков. Уж прошу простить мне эту слабость, т.к. в последние 25 лет работаю только на ноутбуках и для меня это инструмент, с которым я живу, наверное, в режиме 10/7, а иногда и 12/7.&lt;/p&gt;

&lt;p&gt;Так вот, много лет подряд пользовался небольшими по размеру 13.3&quot; и 14&quot; ноутбуками. Была &lt;a href=&quot;https://eao197.blogspot.com/2019/08/compnotebooks_17.html&quot;&gt;попытка в 2019-ом пересесть на 15.6&quot;&lt;/a&gt;, но в итоге эта пятнашка гораздо чаще использовалась (и используется) для обработки фото и просмотра кино, чем для работы, программировал же, в основном, на 14&quot; ноутбуке.&lt;/p&gt;

&lt;p&gt;Но постепенно стали накапливаться некоторые проблемы, вызванные как размерами 14&quot; экрана, так и тем, что в современных 13&quot; и 14&quot; ноутбуках производители очень редко делают на клавиатуре отдельные кнопки Insert, PgUp, PgDn, не говоря уже про Home и End:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;при созвонах в Zoom или Telemost собеседники часто показывали свои экраны. И если на той стороне большой дисплей с разрешением выше 2.5K,  масштабируется на твой 14&quot; экранчик, то читаемость заметно ухудшается (даже не смотря на то, что на 14&quot; экране разрешение 2.8K);&lt;/li&gt;

  &lt;li&gt;если заходишь по RDP из Linux-а через Remmina на Windows машину, то качество шрифтов в окне Remmina оставляет желать много лучшего. Причем это проблема именно входа из Linux-а через Remmina, когда вход делаешь с Windows машины, то с качеством все гораздо, гораздо лучше. Но так уж получается, что в основном я работаю на Linux-е 🙁
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk4nPgtyDegsrxIL2O9bssmueeoW89W5J4i4NqRrvAnkclIJtvvvKJMus0-8l_OixLe6Ru-YF-R9rOeJwUIe___3lS7qvtisrJsAhcz3j0OpB7Tkeq8JpebVmTLnqKBILFllXkglgyRIX_DzkTU8O0otBTij9Ors4deWLQz0OTJDvN-S3mmEtqi0waV78/s2880/Screenshot_20261004_093653.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1800&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk4nPgtyDegsrxIL2O9bssmueeoW89W5J4i4NqRrvAnkclIJtvvvKJMus0-8l_OixLe6Ru-YF-R9rOeJwUIe___3lS7qvtisrJsAhcz3j0OpB7Tkeq8JpebVmTLnqKBILFllXkglgyRIX_DzkTU8O0otBTij9Ors4deWLQz0OTJDvN-S3mmEtqi0waV78/s600/Screenshot_20261004_093653.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;в какой-то момент я стал в vim-е делить окно пополам для того, чтобы в левой части держать один файл (например, .hpp), а в правой части -- другой (.cpp). Тем самым охватывая взглядом фрагменты из разных файлов. На 14&quot; это можно было сделать только очень сильно уменьшив размер шрифта, а работать так долго невозможно, быстро устают глаза;
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZKTr-pWZ4kiGdMgwtFr30b99jTKYtt6mnwOEfrdMDSmkISdVsZ5YsYEzufMMLeW8VRMMNx9DIKgQQY0NYxb_QzBZL8KYDyUEbIncLrsJLQ05iNvSbbpruweFU7U2Z0ti4Un6qaHFJiiMskIgGwY1AiFgQ2gGvx5Y7IpcVRd83gCabWnBLw_XwCjwAVpQ/s2519/vim_splitted_window.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1417&quot; data-original-width=&quot;2519&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZKTr-pWZ4kiGdMgwtFr30b99jTKYtt6mnwOEfrdMDSmkISdVsZ5YsYEzufMMLeW8VRMMNx9DIKgQQY0NYxb_QzBZL8KYDyUEbIncLrsJLQ05iNvSbbpruweFU7U2Z0ti4Un6qaHFJiiMskIgGwY1AiFgQ2gGvx5Y7IpcVRd83gCabWnBLw_XwCjwAVpQ/s600/vim_splitted_window.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;на имевшихся в моем распоряжении 14&quot; ноутбуках не было аппаратных кнопок Insert (привык пользоваться комбинациями Shift+Insert и Ctrl+Insert), Home и End. А на одном из них не было и отдельных клавиш PgUp, PgDn. Что со временем стало сильно раздражать, т.к. невозможно было двигаться по документам (в Word-е или в окне браузера) посредством одной руки. Например, держишь ноутбук на весу левой рукой, а правой пытаешься двигаться по тексту. Или же держишь в правой руке карандаш для записей в тетрадке, а левой выполняешь навигацию по документу (или даже нескольким документам).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В конце 2025-го года все эти факторы накопились + добавилось подозрение, что в 2026-ом новые ноутбуки могут заметно подорожать из-за роста цен на память и SSD. Появилось желание пересесть на 16&quot; ноутбук пока есть возможность закупиться по старым ценам. Что и было сделано в январе 2026-го года.&lt;/p&gt;

&lt;p&gt;Сперва был полный восторг. Особенно из-за того, что на 16&quot; была полноценная клавиатура со всеми нужными мне аппаратными кнопками. В какой-то момент мне даже стало казаться, что 16&quot; маловато, надо хотя бы 17.3&quot;, а еще лучше 18.4&quot; 🙂&lt;/p&gt;

&lt;p&gt;Но вот пару недель назад на этом ноутбуке начали сильно гудеть вентиляторы и в ожидании их замены пришлось вернуться обратно на 14&quot; и...&lt;/p&gt;

&lt;p&gt;И тут я был шокирован тем, что возвращение на 14&quot; не только не было болезненным, но вообще возникло ощущение, что я вернулся домой. Работать на 14&quot;, как будто бы, оказалось даже комфортнее, чем на 16&quot;.&lt;/p&gt;

&lt;p&gt;Полагаю, что сказалось несколько факторов.&lt;/p&gt;

&lt;p&gt;В последнее время стал реже участвовать в созвонах, на которых демонстрируются экраны собеседников. Не знаю почему, уж как-то так само получилось.&lt;/p&gt;

&lt;p&gt;По RDP заходить на Windows-сервера клиентов приходится лишь изредка. Раньше к этому прибегать приходилось гораздо чаще. А когда делаешь это раз в неделю и всего на пару-тройку минут, то шрифты плохого качества проблемой не являются. Неприятно, но пять минут можно и потерпеть. Да и, как выяснилось, качество шрифтов в Remmina на 16&quot; не сильно лучше, чем на 14&quot;.&lt;/p&gt;

&lt;p&gt;Делить экран в vim-е на две части по вертикали практически перестал. Оказалось, что даже на 16&quot; при комфортном размере шрифта этот режим далеко не всегда удобен. Тут в очередной раз хочу сказать спасибо тем разработчикам, которые считают, что ограничение на 80 символов в строке -- это пережиток прошлого. У меня на эту тему уже давно нет цензурных слов, поэтому промолчу.&lt;/p&gt;

&lt;p&gt;Т.е. на 16&quot; с разрешением 3200x2000 можно сделать шрифт достаточно мелким, чтобы открыть в vim-е два файла по вертикали и текст оставался читаемым. Но долго в таком режиме не поработаешь. Таки уже не молод и глаза быстро уставали, приходилось увеличивать размер символов.&lt;/p&gt;

&lt;p&gt;В общем, те причины, по которым состоялся переход на 16&quot;, со временем оказались менее актуальными. Возможно, если бы я сменил 14&quot; сразу на 18.4&quot; с 4K матрицей, то эффект был бы более долгосрочным, а с 16&quot; получилось вот так.&lt;/p&gt;

&lt;p&gt;Кроме того, сыграл еще один фактор. За долгие-долгие годы программирования привык к режиму &quot;одного окна&quot;, т.е. когда практически всю площадь экрана занимает одно текущее окно приложения, а остальные скрыты под ним. Будь то vim, под которым прячется консоль. Или же браузер, под которым прячется vim. Или окно telegram, под которым прячется что-то еще.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMH80gyDNcLE0CmSELbvSit0VyFvPeEtQLiCsxfLCP5gFTQINXyaY5JgkdFk9sdYdwdzAS4zvlrZX2CMHwfD64GYhImCoP6Hb_FK_hT5uy7F7LzBRsV7iyudAm3354LXouDtNH3uAq_NFsh90W8VrSZp0Zys537FjJPi8ow3dWjUgA8lJE9-BO6lRhPg/s2880/Screenshot_20261004_083629.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1800&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMH80gyDNcLE0CmSELbvSit0VyFvPeEtQLiCsxfLCP5gFTQINXyaY5JgkdFk9sdYdwdzAS4zvlrZX2CMHwfD64GYhImCoP6Hb_FK_hT5uy7F7LzBRsV7iyudAm3354LXouDtNH3uAq_NFsh90W8VrSZp0Zys537FjJPi8ow3dWjUgA8lJE9-BO6lRhPg/s600/Screenshot_20261004_083629.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Видимо, корни уходят в 1990-е годы, когда я только учился программировать. Происходило это на маленьких алфавитно-цифровых экранах 80x25, да еще в однозадачных ОС (вроде CP/M и MS-DOS). Даже когда появились Windows и OS/2 с возможностью запустить сразу несколько приложений, то на тогдашних 14&quot; ЭЛТ мониторах с разрешением 640x480 или даже 800x600 (хотя это было ну очень круто по тем временам) все равно не было возможности комфортно поделить площадь экрана сразу между несколькими окнами.&lt;/p&gt;

&lt;p&gt;Так до сих пор и работаю: в центре основное текущее приложение (как правило, это vim, konsole, браузер или telegram), а из под него выглядывают краешки окон других приложений. И оказывается, что на 14&quot; эти самые краешки отвлекают гораздо меньше, чем на 16&quot;.&lt;/p&gt;

&lt;p&gt;Похоже, что на 14&quot; режим &quot;одного окна&quot; таки комфортнее, чем на ноутбуках с большей диагональю.&lt;/p&gt;

&lt;p&gt;А вот о чем остается только сожалеть при возвращении на 14&quot;, так это об отсутствии отдельных клавиш Insert, PgUp, PgDn, Home и End. Такое ощущение, что когда года через 2-3 буду выбирать более мощный и современный ноутбук, то придется смотреть в сторону ThinkPad-ов, на которых все эти кнопки все еще присутствуют. Хоть сам я не большой любитель клавиатур ThinkPad-ов. А особенно не любитель цен на нормальные ThinkPad-ы T-серии 🙂&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/8875755909709469704/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/8875755909709469704' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8875755909709469704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8875755909709469704'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/10/compnotebooks-14-16.html' title='[comp.notebooks] От 14&quot; ноутбука к 16&quot; и обратно'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk4nPgtyDegsrxIL2O9bssmueeoW89W5J4i4NqRrvAnkclIJtvvvKJMus0-8l_OixLe6Ru-YF-R9rOeJwUIe___3lS7qvtisrJsAhcz3j0OpB7Tkeq8JpebVmTLnqKBILFllXkglgyRIX_DzkTU8O0otBTij9Ors4deWLQz0OTJDvN-S3mmEtqi0waV78/s72-c/Screenshot_20261004_093653.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-6786274274641876776</id><published>2026-10-01T07:43:11.669+03:00</published><updated>2026-10-01T07:49:04.002+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Кино"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><category scheme="http://www.blogger.com/atom/ns#" term="Ссылки"/><title type='text'>[life.cinema] Очередной кинообзор (2026/09)</title><content type='html'>&lt;p&gt;Традиционный отчет о просмотренных фильмах. Традиционно в начале каждого из списков идет то, что понравилось больше, а в конце то, на что можно и не тратить свое время. В этот раз, к счастью, есть то, что мне понравилось, местами сильно.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Фильмы&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/206317/annot/&quot;&gt;Майк и Ник, Ник и Элис (Mike &amp;amp; Nick &amp;amp; Nick &amp;amp; Alice, 2026)&lt;/a&gt;. Очень даже неплохо, мне понравилось. Но есть в этом кино некая толика укуренности в хорошем смысле этого слова. Мне такая укуренность зашла, но кому-то наверняка испортит впечатления от просмотра.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/209830/annot/&quot;&gt;Ночной бизнес (The Get Out, 2026)&lt;/a&gt;. Мне понравилось.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://ru.kinorium.com/10886290/&quot;&gt;Ограбление на миллион (Verbrannte Erde, 2024)&lt;/a&gt;. Этот фильм можно посмотреть просто ради того, чтобы увидеть насколько европейское кино отличается от голливудского. А конкретно эта картина, как будто бы, снята в традициях соцреализма перестроечных времен.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/209893/annot/&quot;&gt;Сыграть в ящик (Just Play Dead, 2026)&lt;/a&gt;. Нормально, можно смотреть, хотя на мой взгляд, с поворотами сюжета авторы перемудрили.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/192667/annot/&quot;&gt;Зараза (Cold Storage, 2025)&lt;/a&gt;. Как по мне, то неплохая черная комедия. Главное не ждать от кино чего-то серьезного.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/198095/annot/&quot;&gt;Запретный город (&quot;Forbidden City&quot; или &quot;La Città proibita&quot;, 2025)&lt;/a&gt;. На удивление любопытный боевик с мордобоем и тетенькой в роли главного непобедимого бойца. Портит впечатление количество розовых соплей вокруг происходящего, лучше бы экшОна побольше впихнули.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/210556/annot/&quot;&gt;Соперники Амзиа Кинга (или &quot;Гнев улья&quot;, The Rivals of Amziah King, 2025)&lt;/a&gt;. Купился на участие в фильме Мэттью Макконахи, но его роль там оказалась не самой главной. Фильм специфический и, как по мне, несколько странный. Посмотреть можно. По визуальной составляющей, как и по актерской игре, у меня претензий нет. А вот что касается смысла и сюжета, то у меня остались вопросы о том, кто же здесь главный злодей.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://ru.kinorium.com/12092587/&quot;&gt;Старуха с ножом (Pagwa, 2025)&lt;/a&gt;. Во-первых, это кино для тех, кто спокойно или положительно относится к корейскому кинематографу. Во-вторых, фильм далеко не шедевр: экшОна маловато, в сюжет лучше не вдумываться вовсе.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/205595/annot/&quot;&gt;Обсессия (Obsession, 2025)&lt;/a&gt;. Низкобюджетная муть, жалко потраченного времени. Мне кажется, что низкобюджетные ужастики из видеосалонов 1980-х и то были сделаны круче.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/ros/184309/annot/&quot;&gt;Гандикап (2023)&lt;/a&gt;. Не понял что это было, больше похоже на отечественный ответ &quot;Бегущему человеку&quot; на самых-самых минималках. В общем, можно пройти мимо.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Сериалы&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/178710/annot/&quot;&gt;Джентельмены (The Gentelmen, второй сезон, 2026)&lt;/a&gt;. Отличное продолжение. Мне даже показалось, что второй сезон динамичнее и интереснее первого. Посмотрел с удовольствием. Надеюсь, что будет продолжение.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/ros/187549/annot/&quot;&gt;Похищение (первый сезон, 2025)&lt;/a&gt;. Очень двойственные чувства. С одной стороны, очень интересно смотреть за происходящим и повороты сюжета заранее предугадывать не получается. Плюс шикарная актерская работа, прежде всего Тимофея Трибунцева. С другой стороны, в сюжете для меня есть серьезные дыры, про которые даже и думать не хочется, а то впечатления от просмотренного сразу начинают портиться.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kinopoisk.ru/series/5274192&quot;&gt;Магазин для киллеров (Killeodeului syopingmol, второй сезон, 2026)&lt;/a&gt;. Если понравился первый сезон, то смело можно смотреть и второй. Мне зашло, хотя временами фантастичность происходящего была где-то на уровне сказочки для детей.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/ros/192485/annot/&quot;&gt;Холод (первый сезон, 2026)&lt;/a&gt;. Разочарован, ждал от сериала сильно большего. А выбор Любовь Аксёнова в главной роли, это очевидный для меня мискаст.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Вне категории&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/136494/annot/&quot;&gt;Преимущества путешествия поездами (Ventajas de viajar en tren, 2019)&lt;/a&gt;. Как по мне, так совершенно укуренное кино. Мне такие нравятся. Однако, рекомендовать не могу, т.к. ну очень уж на любителя.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/6786274274641876776/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/6786274274641876776' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6786274274641876776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6786274274641876776'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/10/lifecinema-202609.html' title='[life.cinema] Очередной кинообзор (2026/09)'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-2239058186636292548</id><published>2026-09-28T15:38:09.208+03:00</published><updated>2026-09-28T15:38:09.208+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Foto"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><title type='text'>[life.photo] Несколько кадров из прогулки по лесу</title><content type='html'>&lt;p&gt;Давненько здесь не было ничего про фотографию. Но в минувшие выходные прогулялся по лесу со своей старенькой беззеркалкой Fujifilm x30, что-то получилось снять. И что-то из отснятого даже понравилось. Поэтому решил поделиться несколькими снимками с небольшими комментариями. Хотя, если фотография нуждается в комментариях, то стоимость ее невелика, однако в данном случае речь не столько о самих кадрах, сколько про мое отношение к отснятому. В общем, кому интересно, милости прошу под кат.&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;p&gt;Когда у меня x30 только появилась, то я, как &quot;настоящий фотограф&quot;, конечно же, снимал в RAW. Но достаточно быстро от этого ушел в пользу съемки непосредственно в JPG.&lt;/p&gt;

&lt;p&gt;Во-первых, в той древней версии Adobe Lightroom-а, которую я когда-то купил и которой пользуюсь до сих пор, поддержка x30 была так себе. Штатный софт от Fujifilm показывал себя обработке RAW-ов гораздо лучше. Но заставить себя пользоваться софтиной от Fujifilm так и не смог. Что-то меня там сильно не устраивало, но уже не помню что. Оказалось гораздо проще снимать сразу в JPG и заливать в общий каталог Lightroom JPG-файлы.&lt;/p&gt;

&lt;p&gt;Во-вторых, оказалось, что с беззеркалкой с электронным видоискателем ошибок с экспозицией гораздо меньше, чем в случае с обычной цифрозеркалкой. Плюс к тому, x30 очень не быстрая камера, поэтому снимать на нее репортаж, не говоря уже про спорт, не приходится. А в случае каких-то бытовых зарисовок или пейзажей есть достаточно времени, чтобы подобрать выдержку с диафрагмой так, чтобы не приходилось потом сильно доставать что-то из теней или светов. С кадрами с x30 мне вообще редко приходится что-то серьезно обрабатывать, в основном это кадрирование и повышение резкости (то, что в Lightroom-е называется sharpening).&lt;/p&gt;

&lt;p&gt;В-третьих, в самом x30 зашита отличная эмуляция различных видов пленки (&lt;a href=&quot;https://fujifilm-dsc.com/ru/manual/x30/menu_shooting/film_simulation/index.html&quot;&gt;например&lt;/a&gt;). Чем я со временем и стал пользоваться. Больше всего мне понравилась эмуляция пленки Velvia и больше 90% снимков делается именно в этом режиме.&lt;/p&gt;

&lt;p&gt;Но иногда пробую снимать один и тот же кадр в других вариантах. Вот этот снимок, например, был сделан в режиме Classic Chrome. И, как по мне, он гораздо лучше передает осеннее настроение, чем более яркая Velvia. Лично мне эта фотография больше всего нравится именно в Classic Chrome. В Velvia он получается более броским, но совсем не таким драматическим.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIAxIYSzFbXggdS-BWh5OisQqjzeGFShNtuuzJf5Mu3J6ZLufOQjUx2n2rglPhDsxFzfGU4FyUzQC2d1pCFlaAGJh6NkR0O_z4yiaUnXGSU4VXs3_Q2nsV8VMBRu4RsOuPGd08dnA5_QFy9-WuftFilVpeXS5mrenUrN9nefRDrZN2BlyIfdUVgzpHyNQ/s1920/20260927-DSCF1870.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1440&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIAxIYSzFbXggdS-BWh5OisQqjzeGFShNtuuzJf5Mu3J6ZLufOQjUx2n2rglPhDsxFzfGU4FyUzQC2d1pCFlaAGJh6NkR0O_z4yiaUnXGSU4VXs3_Q2nsV8VMBRu4RsOuPGd08dnA5_QFy9-WuftFilVpeXS5mrenUrN9nefRDrZN2BlyIfdUVgzpHyNQ/s600/20260927-DSCF1870.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;hr/&gt;

&lt;p&gt;Говоря о цветах не могу еще раз не отметить то, что сам я большой любитель черно-белой фотографии. Но не могу не признать, что временами именно цвет и есть главное действующее лицо на снимке.&lt;/p&gt;

&lt;p&gt;В качестве примера два кадра, каждый из которых ничем не примечателен кроме, разве что, сочетания цветов. И перевод этих снимков в Ч/Б полностью убил бы весь интерес.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tq_PcZ0YAZWQPoIpdyNi1K2WcXXDjlte_9APxbd6UGOzQTjujhQR5tYlsqg3ChnBxKHX0ID5ewEIu12-tb_gCG3hI89hw21uW2TsZco0YWP8bPLnZyXcXBLzoHNf1A9BbL7FHxa6hOEZRpEgPIxskLPEAeyRtep7Jz9xHmzvgWjuGo3N_mUradKxFDs/s1920/20260927-DSCF1906.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1080&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tq_PcZ0YAZWQPoIpdyNi1K2WcXXDjlte_9APxbd6UGOzQTjujhQR5tYlsqg3ChnBxKHX0ID5ewEIu12-tb_gCG3hI89hw21uW2TsZco0YWP8bPLnZyXcXBLzoHNf1A9BbL7FHxa6hOEZRpEgPIxskLPEAeyRtep7Jz9xHmzvgWjuGo3N_mUradKxFDs/s600/20260927-DSCF1906.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9vzHeLO2xwU6MTMSIFwmVF7HOab1feIROSRuR8sQ6BdLDv7kqPig0q5iyuqIrfL8Xr8XLblEjy5e17ZlpgGQaseJq1z2fBh9wMBj0H4pUkWFPr6VXU2ABgQ5NyoBC1QZZgI2m4hz6vCdwHeVGoYHKoPXd7QjBguYqjckszTRnRk87LcubXzqDIrHy7gY/s1920/20260927-DSCF1940.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1440&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9vzHeLO2xwU6MTMSIFwmVF7HOab1feIROSRuR8sQ6BdLDv7kqPig0q5iyuqIrfL8Xr8XLblEjy5e17ZlpgGQaseJq1z2fBh9wMBj0H4pUkWFPr6VXU2ABgQ5NyoBC1QZZgI2m4hz6vCdwHeVGoYHKoPXd7QjBguYqjckszTRnRk87LcubXzqDIrHy7gY/s600/20260927-DSCF1940.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Именно цвет, точнее необычные цветовые пятна, которые в лесу можно найти разве что ранней осенью, привлекли мое внимание.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;В лес мы отправились за грибами. Жена любит это дело, она занималась поиском грибов, тогда как я пытался фотографировать найденное.&lt;/p&gt;

&lt;p&gt;Однако, в лесу можно найти что-то интересное просто глядя под ноги:&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_l6jdhAwk6zeZs1nv8I8hGaopZzXnYjZUB62arWhNqZ9qmh0z9DQBoR7pJYVgQmvFSQU1lsHAjMs58GkzDpMbPD2Aiew8CmS-ZjUJlihDHu8gbyx_Tktl-n5cG0m76WKyGohuxGPQjLd1nUPwFBe-r0qXN7a9JP81K1oN2F5EAKnJeMgLL5o6N3i_MDk/s1920/20260927-DSCF1834.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1440&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_l6jdhAwk6zeZs1nv8I8hGaopZzXnYjZUB62arWhNqZ9qmh0z9DQBoR7pJYVgQmvFSQU1lsHAjMs58GkzDpMbPD2Aiew8CmS-ZjUJlihDHu8gbyx_Tktl-n5cG0m76WKyGohuxGPQjLd1nUPwFBe-r0qXN7a9JP81K1oN2F5EAKnJeMgLL5o6N3i_MDk/s600/20260927-DSCF1834.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;или же по сторонам:&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNe2FJd8_miPjSq7U32SaAFNFJ9JvObmfnWCh00D-5QwaUDLKtHTnMQ4QQLx-Qx0fUYUBDwOFypr88Mfi4esOQwq_IAXImMh2fOf2RHtMiZ46bir_GW5hNv4UzHiH_Hia1l3cHJfxl6RRpswZW4e2Bzbj1Kga54t7B1Y80lC3hDiqMhs1qQKByqbAm028/s1920/20260927-DSCF1847.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;600&quot; data-original-height=&quot;1920&quot; data-original-width=&quot;1440&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNe2FJd8_miPjSq7U32SaAFNFJ9JvObmfnWCh00D-5QwaUDLKtHTnMQ4QQLx-Qx0fUYUBDwOFypr88Mfi4esOQwq_IAXImMh2fOf2RHtMiZ46bir_GW5hNv4UzHiH_Hia1l3cHJfxl6RRpswZW4e2Bzbj1Kga54t7B1Y80lC3hDiqMhs1qQKByqbAm028/s600/20260927-DSCF1847.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Природа сама подкидывает такие сюжеты в стиле &quot;абстракция&quot;, что аналогичный стиль живописи воспринимается как откровенная конъюнктурная профанация 🙂&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Ну и, собственно, грибы. Сделал множество снимков с грибами, но в итоге оставил всего &lt;a href=&quot;https://vk.ru/eao197?w=wall255633836_4687&quot;&gt;пару-тройку штук&lt;/a&gt;. Однако, самой запоминающейся из них стала вот эта карточка:&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEUz2Tr_UUDGL2xLo0wLgukBYhruHdfvxDgGWIJmFsWzgvy2yf3gwjZ4ATelgm0XO3_WGh5GxzE1zt_vMqRZdtmf4hy1xhzyG6M0aig-DUH7y2Ux1yK-MUAm5U8Vn9azSDNO10MRxVwmxsK3jngyHcZ3o4-lm471kqmlhR6F4qN5wbo_R3aE1yacBZ40k/s1920/20260927-DSCF1890.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1440&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEUz2Tr_UUDGL2xLo0wLgukBYhruHdfvxDgGWIJmFsWzgvy2yf3gwjZ4ATelgm0XO3_WGh5GxzE1zt_vMqRZdtmf4hy1xhzyG6M0aig-DUH7y2Ux1yK-MUAm5U8Vn9azSDNO10MRxVwmxsK3jngyHcZ3o4-lm471kqmlhR6F4qN5wbo_R3aE1yacBZ40k/s600/20260927-DSCF1890.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Жене она не нравится, а вот меня что-то цепляет. Какой-то чисто осенний &quot;цветок&quot; с затягивающей в себя глубиной.&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/2239058186636292548/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/2239058186636292548' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2239058186636292548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2239058186636292548'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/09/lifephoto.html' title='[life.photo] Несколько кадров из прогулки по лесу'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIAxIYSzFbXggdS-BWh5OisQqjzeGFShNtuuzJf5Mu3J6ZLufOQjUx2n2rglPhDsxFzfGU4FyUzQC2d1pCFlaAGJh6NkR0O_z4yiaUnXGSU4VXs3_Q2nsV8VMBRu4RsOuPGd08dnA5_QFy9-WuftFilVpeXS5mrenUrN9nefRDrZN2BlyIfdUVgzpHyNQ/s72-c/20260927-DSCF1870.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-2395237162475290561</id><published>2026-09-27T10:19:16.596+03:00</published><updated>2026-09-27T10:25:12.618+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Мысля давеча посетила"/><category scheme="http://www.blogger.com/atom/ns#" term="О компьютерах"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[comp.thoughts] Многопроцессорные ноутбуки на ARM-ах. Почему нет?</title><content type='html'>&lt;p&gt;Уже почти два года с удовольствием пользуюсь 12&quot; планшетом HONOR Pad 9. По Geekbench 7 у него не сказать, чтобы какие-то выдающиеся результаты. Что-то около 800 баллов в однопотоке и чуть больше 2800 баллов в многопотоке. Т.е. формально это откровенно тормознутый по нынешним меркам процессор.&lt;/p&gt;

&lt;p&gt;Однако, за два года использования этого планшета для потребления контента (т.е. ролики на YouTube/RuTube/VK, чтение статей на сайтах, просмотр PDF, небольшие правки в Google Docs, простые ответы по email, переписка в Telegram, Yandex.Music в фоне и вот это вот все) никаких тормозов замечено не было. Т.е. с производительностью для обычных повседневных задач у достаточно старого по нынешним временам Snapdragon 6 Gen 1 хватает. И здесь остается только жалеть, что на таком процессоре нет легкого, тихого и долго живущего на одном заряде ноутбука.&lt;/p&gt;

&lt;p&gt;Почему раньше не было ноутбуков на ARM-ах из мобильных телефонов понятно: хоть Windows когда-то в 1990-е и начиналась как ОС с поддержкой нескольких типов архитектур, но довольно быстро десктопная версия Windows сконцентрировалась исключительно на x86, а всякие MIPS и Alpha пошли лесом, т.к. рыночек порешал. Этот же рыночек вместе с эффективным менеджментом из Microsoft и Nokia порешал и мобильную Windows CE (или как она там в последние годы своей жизни назвалась).&lt;/p&gt;

&lt;p&gt;Тем не менее, мегауспешный переход Apple на свои собственные процессоры подтолкнул Microsoft к портированию десктопной Windows на ARM-ы. И уже года четыре как Windows доступна на ноутбуках с ARM. Например, был вот такой совсем чахлый &lt;a href=&quot;https://rg.ru/2022/10/24/obzor-noutbuka-tcl-book-14-go-ekzotika-estetika.html&quot;&gt;TCL Book 14 Go&lt;/a&gt; на Snapdragon 7C Gen.1, который, по отзывам, был не просто тормозной, а очень тормозной. Возможно, не из-за процессора, а совсем крошечного по нынешним временам объема RAM, но все таки.&lt;/p&gt;

&lt;p&gt;Первый блин Windows-ноутбуков на ARM в лице вот таких вот TCL Book 14 Go вышел комом, поэтому дальше эволюция пошла привычным для ИТ способом -- дождались выхода гораздо более мощных Snapdragon X от Qualcomm и пошли клепать не самые дешевые модели с этим новым процессором, большим объемом памяти, крутыми экранами и вот этим вот всем. Т.е. как будто бы основной прицел был в сегмент повыше среднего. Встречаются недорогие ASUS Vivobook-и и Lenovo IdeaPad-ы из среднего сегмента, но там и разновидности Snapdragon X не самые мощные.&lt;/p&gt;

&lt;p&gt;Уж не знаю, есть ли какой-то успех у Windows-ноутбуков на ARM, сам пока не отважился на покупку чего-то подобно (хотя, наверное, надо бы рискнуть, чтобы было на чем проверять свои OpenSource разработки). Но давеча задумался вот о чем: а почему не пробуют сделать ARM ноутбуки с несколькими процессорами?&lt;/p&gt;

&lt;p&gt;Грубо говоря, почему бы вместо дорогих и горячих Snapdragon X не взять 2-3-4 более старых, но вполне себе годных Snapdgragon 6 Gen 1, как в моем HONOR Pad 9? Пусть каждый из них сидит в своем сокете и располагает собственными 6 или 8 GiB RAM.&lt;/p&gt;

&lt;p&gt;Да, в этом случае будут некоторые ограничения. Типа того, что запущенное приложение будет ограничено возможностями того процессора, на котором оно запустилось -- т.е. и не всю доступную в ноутбуке память сможет использовать, и треды не сможет по всем процессорам раскидать.&lt;/p&gt;

&lt;p&gt;Ну так а реально ли оно надо если речь идет о ноутбуке для &lt;strike&gt;домохозяек&lt;/strike&gt; потребления контента, а не для программирования, видеомонтажа и обучения нейросетей?&lt;/p&gt;

&lt;p&gt;Что-то мне кажется, что не надо.&lt;/p&gt;

&lt;p&gt;Смысл же в том, что если сделать ноутбук на одном Snapdragon 6 Gen 1 с 8 GiB RAM, то его ограниченность (как в плане быстродействия, так и в плане доступной памяти) быстро выплывет на поверхность.&lt;/p&gt;

&lt;p&gt;Но есть таких процессоров будет уже два, а памяти не 8, а 16, то это уже совсем другая история. А если не 2, а 3 процессора и 24 GiB RAM? Это же еще лучше. Ну а 4-е процессора -- это уже совсем серьезная штука 😀&lt;/p&gt;

&lt;p&gt;Любопытно, почему по этому пути не пошли? Что является основным препятствием? Железо или софт?&lt;/p&gt;

&lt;p&gt;Рискну предположить, что приди в голову кому-нибудь идея выпуска подобных ноутбуков, то куча проблем была бы и с аппаратной, и с программной частями. Может быть даже с программной частью больше (особенно если RAM на каждом сокете будет своя, не связанная с RAM других сокетов).&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/2395237162475290561/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/2395237162475290561' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2395237162475290561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2395237162475290561'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/09/compthoughts-arm.html' title='[comp.thoughts] Многопроцессорные ноутбуки на ARM-ах. Почему нет?'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-8481012460348584002</id><published>2026-09-25T15:21:55.552+03:00</published><updated>2026-09-25T15:21:55.552+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Вопрос залу"/><category scheme="http://www.blogger.com/atom/ns#" term="Из непонятого"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><title type='text'>[prog.question] А что сейчас понимают под &quot;архитектурой программного обеспечения&quot;?</title><content type='html'>&lt;p&gt;В контексте пришествия ИИ в разработку софта регулярно приходится слышать о том, что мол человеку не придется больше писать код, это как раз будет делать ИИ-шка, но вот за человеком останется архитектура программного обеспечения.&lt;/p&gt;

&lt;p&gt;И тут у меня возникает вопрос: а что, собственно, высказыватели этой надежды понимают под &quot;архитектурой&quot;?&lt;/p&gt;

&lt;p&gt;Как бы вопрос не праздный, поскольку последние лет 10, а может и побольше, мне приходится, в основном, колупаться в коде: искать проблемы, что-то переписывать, что-то дописывать, что-то выбрасывать и т.д, и т.п. Но уже давно не доводилось заниматься проектированием &quot;по большому&quot;, типа того, что здесь у нас будет такая-то СУБД и в ней будет храниться то-то и то-то, здесь у нас будет такой компонент, который с БД будет общаться напрямую, а здесь вот такой компонент, который будет общаться не с БД, а с первым компонентом, а здесь у нас будет вот такой компонент, который будет вот так-то следить за первыми двумя компонентами, а здесь будет еще вот это и вот это... В последние годы если что-то и приходится проектировать, так это небольшие библиотеки или даже &lt;a href=&quot;https://eao197.blogspot.com/2025/08/progc_25.html&quot;&gt;отдельные классы&lt;/a&gt;, которые упрощают те или иные задачи.&lt;/p&gt;

&lt;p&gt;Складывается впечатление, что под &quot;архитектурой ПО&quot; подразумевается рисование квадратиков и связей между ними, как это принято делать на system design interview, где соискателя просят &quot;спроектировать&quot; очередной клон Facebook-а или YouTube.&lt;/p&gt;

&lt;p&gt;Если я прав, то непонятно почему кто-то надеется, что ИИ не заберет эту задачу у человека точно так же, как забирает обычное кодирование.&lt;/p&gt;

&lt;p&gt;В общем, кому не жаль времени, просвятите, пожалуйста, &lt;strike&gt;старого пердуна&lt;/strike&gt; отставшего от трендов лисапедостроителя, что же сейчас попадает под термин &quot;архитектура ПО&quot; и понимается под &quot;проектирование архитектуры&quot;?&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/8481012460348584002/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/8481012460348584002' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8481012460348584002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8481012460348584002'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/09/progquestion.html' title='[prog.question] А что сейчас понимают под &quot;архитектурой программного обеспечения&quot;?'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-1020773083713789173</id><published>2026-09-14T08:34:47.856+03:00</published><updated>2026-09-14T08:34:47.856+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.thoughts] Мои личные заморочки с ранними return-ами</title><content type='html'>&lt;p&gt;Прежде чем перейти к основной теме поста два важных дисклеймера:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;во-первых, это мое личное мнение. Делюсь им, но ни в коем случае не настаиваю на его непогрешимости и, уж тем более, не утверждаю, что оно единственно правильное. Может быть кто-то из прочитавших сочтет его заслуживающим внимания и постарается относиться к return-ам более ответственно, чтобы таким как я было проще читать код;&lt;/li&gt;

  &lt;li&gt;во-вторых, я программирую, в основном, на C++, поэтому ниже будет C++ная специфика. Возможно, сказанное ниже гораздо менее критично для других языков программирования;&lt;/li&gt;

  &lt;li&gt;в-третьих, любой анонимный эксперт c LOR, RSDN или Habr вам убедительно объяснит, что программировать я не умею, да и вообще редкостный дебил. Посему ошибки у меня сплошь и рядом, в том числе и с плюс-минус-единичкой.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Итак, когда я только начинал учиться программированию в 1990-ом году, то нам говорили, что умные люди масштаба Никлауса Вирта рекомендуют иметь единственный return в функции. Типа одна точка входа -- одна точка выхода.&lt;/p&gt;

&lt;p&gt;Понятное дело, что своя логика в этой рекомендации есть. И на момент ее появления (а это, могу предположить, 1970-е, если не 1960-е годы) данная рекомендация была гораздо более актуальна, чем сейчас. Но таки у ранних return-ов есть свои преимущества и можно сходу вспомнить пару ситуаций, где ранний return упрощает код.&lt;/p&gt;

&lt;p&gt;Очевидный пример -- это проверка валидности аргументов функции/метода:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;copy_file(&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::string &amp;amp; src,&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::string &amp;amp; dest)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(src.empty())&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Ошибка: нет имени источника.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;errors::empty_src_name;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(dest.empty())&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Ошибка: нет имени результата.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;errors::empty_dest_name;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;...&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Далее уже непосредственно действия по копированию.&lt;/font&gt;&lt;br&gt;
}
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Этот код, имхо, гораздо понятнее, чем вот такой:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;copy_file(&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::string &amp;amp; src,&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::string &amp;amp; dest)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;result = errors::unexpected_error;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(!src.empty())&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(!dest.empty())&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Далее уже непосредственно действия по копированию.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;else&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Ошибка: нет имени результата.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = errors::empty_dest_name;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;else&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Ошибка: нет имени источника.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = errors::empty_src_name;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;result;&lt;br&gt;
}&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Или вот такой:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;copy_file(&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::string &amp;amp; src,&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::string &amp;amp; dest)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;result = errors::unexpected_error;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(src.empty())&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Ошибка: нет имени источника.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = errors::empty_src_name;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;else&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(dest.empty())&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Ошибка: нет имени результата.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = errors::empty_dest_name;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;else&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Далее уже непосредственно действия по копированию.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;result;&lt;br&gt;
}&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Еще один простой пример: отказ от выполнения действий, если объект находится в неподходящем состоянии. Допустим, у нас есть класс &quot;Файл&quot; в виде обертки над простым хэндлом, который записывает значения строго в BigEndian представлении. Что-то вроде:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;file_with_big_endian_data&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Хэндл открытого файла. Значение -1 указывает, что файл не был открыт.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;m_handle;&lt;br&gt;
&amp;nbsp;&amp;nbsp;...&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Методы для записи различных типов значений.&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;void&lt;/font&gt;&amp;nbsp;write(std::span&amp;lt;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color=&quot;#90f020&quot;&gt;uint16_t&lt;/font&gt;&amp;gt; what);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;void&lt;/font&gt;&amp;nbsp;write(std::span&amp;lt;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color=&quot;#90f020&quot;&gt;uint32_t&lt;/font&gt;&amp;gt; what);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;void&lt;/font&gt;&amp;nbsp;write(std::span&amp;lt;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color=&quot;#90f020&quot;&gt;uint64_t&lt;/font&gt;&amp;gt; what);&lt;br&gt;
&amp;nbsp;&amp;nbsp;...&lt;br&gt;
};&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;В таком случае каждый метод write может иметь в начале проверку m_handle с ранним return-ом для того, чтобы ничего не делать, если файл не был открыт:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;void&lt;/font&gt;&amp;nbsp;file_with_big_endian_data::write(&lt;br&gt;
&amp;nbsp;&amp;nbsp;std::span&amp;lt;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;std::&lt;font color=&quot;#90f020&quot;&gt;uint16_t&lt;/font&gt;&amp;gt; what)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(-&lt;font color=&quot;#ffa0a0&quot;&gt;1&lt;/font&gt;&amp;nbsp;== m_handle)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;...&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Запись с перестановкой байт, если это необходимо.&lt;/font&gt;&lt;br&gt;
}&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Еще один пример подсказали &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7503718746809712640/&quot;&gt;в комментариях на LinkedIn&lt;/a&gt;: ранние return-ы для ситуаций, когда компилятор может избавиться от хвостовой рекурсии. Сам пример достаточно игрушечный, но для иллюстрации вполне себе норм. Привожу его в оригинале на Python-е (спасибо пользователю &lt;a href=&quot;https://www.linkedin.com/in/konstantin-z-ml-dl&quot;&gt;Konstantin Z.&lt;/a&gt;):&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#ffff60&quot;&gt;def&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#90fff0&quot;&gt;classify&lt;/font&gt;(n, steps=&lt;font color=&quot;#ffa0a0&quot;&gt;0&lt;/font&gt;):&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;&amp;nbsp;n &amp;lt;&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;0&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffa0a0&quot;&gt;negative&lt;/font&gt;&lt;font color=&quot;#ffa0a0&quot;&gt;&amp;quot;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;&amp;nbsp;n ==&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;0&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;f&lt;font color=&quot;#ffa0a0&quot;&gt;&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffa0a0&quot;&gt;reached zero in {steps} steps&lt;/font&gt;&lt;font color=&quot;#ffa0a0&quot;&gt;&amp;quot;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;&amp;nbsp;n ==&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;1&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;f&lt;font color=&quot;#ffa0a0&quot;&gt;&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffa0a0&quot;&gt;almost there, {steps + 1} steps&lt;/font&gt;&lt;font color=&quot;#ffa0a0&quot;&gt;&amp;quot;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;classify(n -&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;2&lt;/font&gt;, steps +&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;1&lt;/font&gt;)&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Тем не менее, не смотря на то, что у ранних return-ов есть (на мой взгляд) неоспоримые преимущества в тех или иных ситуациях, лично у меня с подобными return-ами не все так однозначно. Хотя, наверное, было бы правильно говорить не о ранних return-ах вообще, а об их применении в чужих кодовых базах, куда время от времени по рабочей нужде приходиться заглядывать.&lt;/p&gt;

&lt;p&gt;Прежде всего лично мне гораздо удобнее разбирать прикладную логику в виде лесенки if-ов. Т.е. вот это:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;if(first-condition)
{
  if(second-condition)
  {
    if(third-condition)
    {
      ... основные действия, ради которых все условия проверялись.
    }
  }
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;изучать гораздо проще, чем вот это:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;if(!first-condition)
  return;

if(!second-condition)
  return;

if(!third-condition)
{
  ... основные действия, ради которых все условия проверялись.
}
&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Видимо это какие-то особенности моего восприятия (или проявления старческого слабоумия). Но лесенка из if-ов как бы сама уводит взгляд к кульминации и сама говорит &quot;если вот это, и вот это, и вот это, то...&quot; Тогда как ранние return-ы эту прямую последовательность к кульминации прерывают.&lt;/p&gt;

&lt;p&gt;При этом ранние return-ы для проверки валидности аргументов меня лично не напрягают: к основной прикладной логике проверки отношения не имеют и, грубо говоря, их можно вообще выбросить (что часто и делают в критичных к скорости работы фрагментах) или вынести в отдельную вспомогательную функцию и ничего принципиально не изменится.&lt;/p&gt;

&lt;p&gt;А вот если уходящую вправо лесенку из if-ов переписать в виде нескольких if-ов с return-ами, то лично для меня логика уже меняется и воспринимать замысел автора становится сложнее.&lt;/p&gt;

&lt;p&gt;У лесенки из if-ов есть еще одно преимущество: нормально такая лесенка воспринимается пока в ней не больше двух-трех уровней. Но как только она становится глубже, то сразу видно, что код превращается в известную субстанцию. Хочешь не хочешь, а задумываешься о том, как переписать. Переписываешь и получаешь более приемлемый результат.&lt;/p&gt;

&lt;p&gt;Тогда как с ранними return-ами такого критерия нет. Может быть функция на 40 строк, в которой 10 ранних return-ов. По сути это уже говнокод, но без столь явного запаха, как у лесенки из if-ов в 5-6 уровней глубины.&lt;/p&gt;

&lt;p&gt;Но хуже всего, когда встречаются объемные функции, в которых ранние return-ы расположены в if-ах на разной глубине. Что-то вроде:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;do_something_important(&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;a,&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;b)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(!is_first_arg_valid(a))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;results::error_code_1;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(!is_second_arg_valid(b))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;results::error_code_2;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;bool&lt;/font&gt;&amp;nbsp;need_update_cache =&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;false&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(is_specific_arg_combination(a, b))&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;auto&lt;/font&gt;&amp;nbsp;cache_id = make_cache_id(a, b);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(has_result_in_cache(cache_id))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;take_value_from_cache(cache_id);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;results::result_from_cache;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;else&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;need_update_cache =&amp;nbsp;&lt;font color=&quot;#ffa0a0&quot;&gt;true&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;prepare_result = prepare_for_change(a, b);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(prepare_result != results::ok)&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(prepare_result == results::pool_overflow)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remove_oldest_from_pool();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;prepare_result = prepare_for_change(a, b);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(prepare_result != results::ok)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;prepare_result;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;commit_change(a, b);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(need_update_cache)&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;auto&lt;/font&gt;&amp;nbsp;cache_id = make_cache_id(a, b);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;const&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;auto&lt;/font&gt;&amp;nbsp;cache_update = update_cache_for(cache_id);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;if&lt;/font&gt;(cache_update == results::no_resources)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;results::ok;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;else&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;results::ok_with_warnings;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;return&lt;/font&gt;&amp;nbsp;results::ok;&lt;br&gt;
}&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Когда подобный код написан не тобой и ты видишь его впервые, то уследить за всей логикой с return-ами мне лично сложно.&lt;/p&gt;

&lt;p&gt;Еще хуже, когда в центре такой объемной функции будет цикл, внутри которого будут сочетаться и return, и break, и continue. И если мне скажут, что это перебор и такого не бывает, то увы, такое бывает. Хотя да, это перебор.&lt;/p&gt;

&lt;p&gt;Но помимо чтения подобного кода иногда у меня возникает необходимость временно добавить в подобную функцию трассировку. В простейшем случае это может быть печать &quot;do_something_important started&quot; при входе и &quot;do_something_important completed&quot; при входе.&lt;/p&gt;

&lt;p&gt;Когда у нас есть единственный return в конце, то нет ничего проще -- одна печать на входе, вторая на выходе. Но когда return-ов много, то...&lt;/p&gt;

&lt;p&gt;...то приходится прибегать к созданию в начале функции объекта, который в своем конструкторе будет печатать &quot;do_something_important started&quot;, а в деструкторе -- &quot;do_something_important completed&quot;. Для языков, в которых детерминированного вызова конструкторов-деструкторов нет, подойдет та или иная реализация Go-шного defer-а.&lt;/p&gt;

&lt;p&gt;Но это не помогает, если строчка с &quot;do_something_important completed&quot; должна содержать еще и какое-то значение (например, возвращаемое значение). Вставлять такую печать перед каждым return-ом ну так себе занятие. Приходится что-то изобретать.&lt;/p&gt;

&lt;p&gt;А вот для единственного return-а это не проблема от слова совсем. Тут вообще все тривиально и ничего не нужно изобретать.&lt;/p&gt;

&lt;p&gt;Ну и как-то мне с необходимостью делать подобные трассировки регулярно везет. То нужно построить трассу взаимных вызовов. То засечь время работы. Или и то, и другое сразу. Благо в C++ легко делать объекты в RAII-стиле. В какой-нибудь Java сложностей было бы побольше.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Что хочется сказать в завершении.&lt;/p&gt;

&lt;p&gt;ИМХО, в современном мире правило &quot;один вход -- один выход&quot; -- это уже какой-то экстремальный экстрим. Непонятно зачем отказываться от ранних return-ов, если они делают код и компактнее, и проще, и надежнее (как элемент defensive programming), и (временами) быстрее (раскрутка хвостовой рекурсии).&lt;/p&gt;

&lt;p&gt;Но и другая крайность, когда return-ы лепятся не приходя в сознание, не менее экстремальный экстрим. Потому что ведет к спагетти коду, разбираться в котором и сопровождать который можно пожелать только врагу.&lt;/p&gt;

&lt;p&gt;Посему могу только попросить программистов думать при написании return-ов, чтобы не плодить их сверх меры.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/1020773083713789173/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/1020773083713789173' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/1020773083713789173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/1020773083713789173'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/09/progthoughts-return.html' title='[prog.thoughts] Мои личные заморочки с ранними return-ами'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-5605377729805159902</id><published>2026-09-05T12:05:22.998+03:00</published><updated>2026-09-05T12:05:22.998+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="язык C++"/><title type='text'>[prog.c++] Всегда удивляюсь, когда вижу имена членов класса без суффиксов/префиксов</title><content type='html'>&lt;p&gt;Данный пост навеян фрагментом кода из свежей статьи на хабре &quot;&lt;a href=&quot;https://habr.com/ru/articles/1078334/&quot;&gt;Анатомия граблей&lt;/a&gt;&quot;, а именно вот этим фрагментом кода:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;Foo {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;value;&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foo(&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;value) {&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// параметр затеняет поле class&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value = value;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// ничего не делает, присваивает параметр самому себе&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
};&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Честно говоря, мне дико видеть, что кто-то до сих пор использует имена членов класса без специальных префиксов/суффиксов. Вроде как очень и очень старый прием, которым я сам пользуюсь с середины 1990-х и который не только делает код читабельнее, но и защищает от подобных ошибок.&lt;/p&gt;

&lt;p&gt;У меня бы было написано так:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;Foo {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;m_value;&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foo(&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;value) {&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// параметр ничего не затеняет&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_value = value;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
};&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;И подобная опечатка сразу бы оказалась видна.&lt;/p&gt;

&lt;p&gt;Но если уж префиксы или суффиксы для членов класса оскорбляют ваше чувство прекрасного, то возьмите за правило обращаться к ним через &lt;tt&gt;this-&gt;&lt;/tt&gt;:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;Foo {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;value;&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Foo(&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;value) {&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// параметр затеняет поле class&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;this&lt;/font&gt;-&amp;gt;value = value;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// ничего не затеняет&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
};&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Тем паче, что обращение &lt;tt&gt;this-&gt;&lt;/tt&gt; зачастую бывает необходимо при написании кода шаблонов (например, когда шаблон класса наследуется от шаблона класса и обращается к унаследованным из базового класса членам/методам).&lt;/p&gt;

&lt;p&gt;PS. Самая странная система именования членов классов, которую доводилась видеть, была такой:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;Demo {&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;a;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// Открытый член класса без префикса или суффикса.&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;protected&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;_b;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// А вот защищенные и закрытые члены с префиксом.&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;private&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;int&lt;/font&gt;&amp;nbsp;_c;&lt;br&gt;
};&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;PPS. Касательно самой статьи &quot;&lt;a href=&quot;https://habr.com/ru/articles/1078334/&quot;&gt;Анатомия граблей&lt;/a&gt;&quot;: она позиционируется как сборник C++ных граблей из области игростроя. Но практически все из описанного мне доводилось видеть в разнообразных проектах, которые к игрострою не имели никакого отношения. И какие-то из них (вроде выхода за границы статических массивов) не имеют дешевых решений, увы. По поводу же той части статьи, которая касается контроля за ресурсами и ручной работы с malloc/free, то слишком мало конкретики (плюс есть у меня подозрение, что в игрострое собирается публика, которой очень и очень фиолетово качество кода, но не факт, что подозрение верное).&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/5605377729805159902/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/5605377729805159902' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/5605377729805159902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/5605377729805159902'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/09/progc.html' title='[prog.c++] Всегда удивляюсь, когда вижу имена членов класса без суффиксов/префиксов'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-3584679625602125678</id><published>2026-09-01T07:32:13.470+03:00</published><updated>2026-09-01T07:32:13.470+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Кино"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><category scheme="http://www.blogger.com/atom/ns#" term="Ссылки"/><title type='text'>[life.cinema] Очередной кинообзор (2026/08)</title><content type='html'>&lt;p&gt;Традиционный отчет о просмотренных за минувший месяц фильмах. Традиционно в начале каждого из списков идет то, что понравилось больше, а в конце то, на что свое время можно и не тратить.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Фильмы&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/163917/annot/&quot;&gt;Кривые линии господа (&quot;God&#39;s Crooked Lines&quot; или &quot;Los renglones torcidos de Dios&quot;, 2021)&lt;/a&gt;. Однозначно самое интересное из увиденного за последнее время. Некоторые твисты ну очень классные. Правда, чтобы разобраться в том, что же было показано, пришлось гуглить. И результат поисков не то, чтобы меня порадовал, лично я увидел в кино совсем другой сюжет (чисто детективный, без сильной привязки к психиатрии).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/199852/annot/&quot;&gt;Человек-паук: Новый день (Spider-Man: Brand New Day, 2026)&lt;/a&gt;. Очень круто сделанный очередной кино-аттракцион для любителей супергероев из &quot;вселенной Марвел&quot;. Строго для поклонников жанра.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/192002/annot/&quot;&gt;Чокнутые (Riff Raff, 2024)&lt;/a&gt;. Отличное кино, получил удовольствие от просмотра. Но мои вкусы несколько специфичны, поэтому сразу предупреждаю, что зайдет оно не всем.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/asia/207197/annot/&quot;&gt;Колония (Gunche, 2026)&lt;/a&gt;. Если понравился &quot;Поезд в Пусан&quot; от этого же режиссера, то можно смотреть и &quot;Колонию&quot;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/187693/annot/&quot;&gt;Замри (Don&#39;t Move, 2024)&lt;/a&gt;. Ничего не ждал, но этот оказался вполне себе добротным фильмом. Далеко не шедевр, но смотреть было интересно и никакого отрицательного послевкусия не осталось.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/206142/annot/&quot;&gt;Соулм8йт (Soulm8te, 2026)&lt;/a&gt;. В принципе, снято очень даже неплохо. Но все портит абсолютная предсказуемость происходящего на экране.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/212372/annot/&quot;&gt;Шёпот за окном (The Whisper Man, 2026)&lt;/a&gt;. Хорошие актеры и неплохой сюжет, но когда начинаешь вдумываться в происходящее, то возникает слишком много белых пятнышек, которые непонятно как объяснить. Поэтому невольно задаешься вопросом &quot;а не втирают ли нам здесь какую-то дичь?&quot;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/asia/212248/annot/&quot;&gt;Коллектор (&quot;The Dept Collector&quot; или &quot;Khon Dueat Thuang Khaen&quot;, 2026)&lt;/a&gt;. В принципе неплохой боевик. Местами предсказуемый, местами не очень, местами впадающий в какую-то Санта-Барбару. Но мне показался несколько затянутым.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/211724/annot/&quot;&gt;Последний дом (The Last House, 2026)&lt;/a&gt;. Даже не смотря на то, что это фантастика, в некоторые моменты настолько не верится, что это напрочь убивает всю идею происходящего на экране и сильно портит впечатление от фильма.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/201660/annot/&quot;&gt;Точка замерзания (Dead of Winter, 2025)&lt;/a&gt;. Хорошие актеры, хорошо играют. Но в происходящее на экране не верится от слова совсем.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/181486/annot/&quot;&gt;Та, что сбежала: История Кары Робинсон (The Girl Who Escaped: The Kara Robinson Story, 2026)&lt;/a&gt;. Очень и очень бюджетно, что сказывается как на картинке, так и на актерской игре -- такое впечатление, что играет одна лишь главная героиня, а всех остальных набрали из массовки по объявлению. В общем, можно смело пройти мимо.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/210209/annot/&quot;&gt;Семь снайперов (Seven Snipers, 2026)&lt;/a&gt;. Редкая фигня не смотря на наличие хороших (в прошлом) актеров. Не тратить на это время ни в коем случае!&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Сериалы&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/211187/annot/&quot;&gt;Парижская полиция 1910 (Paris Police 1910, 2026)&lt;/a&gt;. Отличное продолжение отличного сериала.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/192983/annot/&quot;&gt;Убийства в Оре (&quot;Åre Murders&quot; или &quot;The Åremorden&quot;, первый сезон, 2025)&lt;/a&gt;. Не смотря на то, что всего пять небольших по хронометражу серий, типичная сериальная затянутость все равно ощущается. Но именно к детективной составляющей претензий нет, у каждого расследования неожиданная развязка.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/206911/annot/&quot;&gt;Лаки (Lucky, первый сезон, 2026)&lt;/a&gt;. Ждал много большего, по факту же очень и очень средний уровень, может быть даже пониже среднего. Плюс традиционная сериальная затянутость, пару серий точно можно было бы выбросить.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/179943/annot/&quot;&gt;Шугар (Sugar, второй сезон, 2026)&lt;/a&gt;. Первый сезон был любопытный. А вот во втором ничего заслуживающего внимания нет. Пожалуй, единственное его достоинство -- это качественно сделанная картинка и несколько хорошо играющих свои роли актеров.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/212080/annot/&quot;&gt;Подразделение специального назначения (&quot;Elite Force&quot; или &quot;G.I.G.N&quot;, первый сезон, 2026)&lt;/a&gt;. Ждешь жесткий боевик про крутых спецназовцев, получаешь какую-то унылую мелодраму.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Фильм вне категории&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/201667/annot/&quot;&gt;Майкл (Michael, 2026)&lt;/a&gt;. Здесь разочаровало все -- начиная от сюжета и даже визуального ряда до попыток станцевать так же, как Майкл Джексон. Такое ощущение, что после &lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/129457/annot/&quot;&gt;Богемской рапсодии&lt;/a&gt; и &lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/131878/annot/&quot;&gt;РокетМена&lt;/a&gt; захотелось повторить тот же трюк с еще одной музыкальной суперзвездой. И, что самое страшное, это получилось с таким очень и очень никаким фильмом.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/3584679625602125678/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/3584679625602125678' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3584679625602125678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3584679625602125678'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/09/lifecinema-202608.html' title='[life.cinema] Очередной кинообзор (2026/08)'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-2001486373566121278</id><published>2026-08-21T09:05:05.967+03:00</published><updated>2026-08-21T09:05:05.967+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Воспоминания"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><title type='text'>[life.memories] Ответ &quot;А я не знаю&quot; от преподавателя в университете</title><content type='html'>&lt;p&gt;Посмотрел недавно ролик &quot;Разбираем популярные манипуляции квантовых психологов. Алексей Семихатов и Виктория Шиманская&quot; на &lt;a href=&quot;https://www.youtube.com/watch?v=7W2B2IHEKJw&quot;&gt;YouTube&lt;/a&gt; (на RuTube пока нет, но, может быть, появится на &lt;a href=&quot;https://rutube.ru/channel/31344098/videos/&quot;&gt;этом канале&lt;/a&gt;). Очень понравился мне там момент в районе 41-й минуты, когда Семихатов сказал, что роль учителя в том, чтобы показать как вообще можно размышлять над сложной проблемой.&lt;/p&gt;

&lt;p&gt;В этой связи (речь про хороших учителей) мне вспомнилось как на первом курсе универа я задал одному из преподавателей какой-то вопрос связанный с особенностью конкретного языка программирования и преподаватель просто ответил мне &quot;а я не знаю&quot;.&lt;/p&gt;

&lt;p&gt;Для меня это был шок и разрыв шаблона.&lt;/p&gt;

&lt;p&gt;Потому что 10 лет до этого в школе нас натаскивали на то, что ты должен знать. Математические выражения, физические законы, химические формулы, исторические даты и вот это вот все. Ты либо знаешь и молодец, либо не знаешь и &quot;садись, два!&quot;&lt;/p&gt;

&lt;p&gt;А тут раз, и &quot;а я не знаю&quot;. От преподавателя. Который затем на сессии у тебя будет требовать знаний. Но который здесь и сейчас не может ответить на вопрос по предмету, который он же тебе и преподает.&lt;/p&gt;

&lt;p&gt;Таких случаев, когда преподаватель отвечал &quot;я не знаю&quot; было несколько. Помнится, бывало на следующем занятии лектор говорил &quot;вот вы мне в прошлый раз задали такой вопрос, я разобрался и вот что там получается&quot;. Помнится, случалось, когда после слов &quot;а я не знаю&quot; преподаватель произносил &quot;давайте порассуждаем...&quot; и при нас, студентах, начинал думать вслух советуясь с нами по ходу дела.&lt;/p&gt;

&lt;p&gt;И вот это вот осознание что не знать чего-то здесь и сейчас -- это нормально и естественно -- стало для меня откровением в далеком 1990-ом году. Именно не знать, а не подзабыть и вовремя не вспомнить. Невозможно знать все даже в теме, которой ты занимаешься много лет. Всегда можно столкнуться с собственным незнанием. И если такое произошло, то следует просто воспринять это как должное, разобраться в предмете и узнать что-то новое (даже если вскоре забудешь за ненадобностью).&lt;/p&gt;

&lt;p&gt;Хотя, надо сказать, что воспринимать собственное незнание как должное, да еще и признаваться в этом, не так уж и просто. И еще одна заслуга хороших учителей в том, что они собственным примером показывают как это должно быть.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/2001486373566121278/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/2001486373566121278' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2001486373566121278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/2001486373566121278'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/08/lifememories.html' title='[life.memories] Ответ &quot;А я не знаю&quot; от преподавателя в университете'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-5395799970589730923</id><published>2026-08-10T08:42:29.532+03:00</published><updated>2026-08-10T14:13:57.096+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Humour"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><title type='text'>[prog.sarcasm] Если долго сидеть на берегу, то можно увидеть как Erlang-еры...</title><content type='html'>&lt;p&gt;...&lt;a href=&quot;https://www.linux.org.ru/forum/development/18355784&quot;&gt;переписывают свой софт на Rust&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;Моя идея о том, чтобы переписать наш Flussonic с Erlang на Rust оказалась совершенно прекрасной и у меня совершенно прекрасные результаты. Захват 10 000 камер на сервер - это прямо скажем серьезный результат, на рынке таких предложений мало.&lt;/blockquote&gt;

&lt;p&gt;Это слова Макса Лапшина, одного из самых известных пользователей Erlang-а в Рунете (ссылки на пару статей которого были даже у меня в блоге). Он же и автор &lt;a href=&quot;https://www.linux.org.ru/forum/development/13592001?cid=13593525&quot;&gt;мема&lt;/a&gt; о том, что писать на С++ -- это выгребать корки по утрам.&lt;/p&gt;

&lt;p&gt;Сколько было в прошлом разговоров о том, насколько хорош Erlang и насколько Erlang подходит и для таких задач, где, казалось бы, C++у самое место, а не одному из самых медленных динамически-типизированных языков. И все это для того, чтобы в итоге отказаться от Erlang-а в пользу нативного компилируемого языка, прямого конкурента С++ по производительности и ресурсоемкости.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Upd.&lt;/b&gt;В этой теме на LOR-е еще &lt;a href=&quot;https://www.linux.org.ru/forum/development/18355784?cid=18356270&quot;&gt;прекрасное добавилось&lt;/a&gt; от Лапшина (это ответ на вопрос уперся ли Erlang в потолок производительности):&lt;/p&gt;

&lt;blockquote&gt;Во все потолки, какие можно было.&lt;br/&gt;

И производительность, и количество библиотек, и количество людей и всё прочее.&lt;br/&gt;

Когда стало ясно, что прийдется самому руками писать QUIC, тут я слегка устал от эрланга.&lt;br/&gt;

О перфомансе вида «принять 10 000 камер» и речи не идет, причем если бы не медленный сторадж, новый код можно поковырять и до 20 тыс (просто это не нужно).
&lt;/blockquote&gt;

&lt;p&gt;При всем моем уважении к Erlang-у и людям, которые его создали, но такие факторы, как &quot;производительность&quot; и &quot;количество людей&quot;, как по мне, так были очевидны много-много лет назад.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Если говорить серьезно, то когда вам повезло работать на проекте в течении 10-15-20 и более лет, то у вас есть возможность наблюдать за тем, как принятые вами же решения, которые когда-то давно казались крутыми и удачными, через годы не просто перестают такими быть, а нуждаются в замене на что-то, что сейчас кажется крутым и удачным (и далее по рекурсии).&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/5395799970589730923/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/5395799970589730923' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/5395799970589730923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/5395799970589730923'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/08/progsarcasm-erlang.html' title='[prog.sarcasm] Если долго сидеть на берегу, то можно увидеть как Erlang-еры...'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-3110039922620474253</id><published>2026-08-04T08:46:14.350+03:00</published><updated>2026-08-04T08:46:35.725+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><title type='text'>[life.audiophile] Неожиданно приятное открытие в VE Megatron</title><content type='html'>&lt;p&gt;Несколько лет назад попал ко мне в руки USB-ЦАП Megatron от Venture Electronics (хороший обзор на него можно посмотреть здесь: &lt;a href=&quot;https://www.youtube.com/watch?v=6CT4ZQgjWHo&quot;&gt;YouTube&lt;/a&gt; или &lt;a href=&quot;https://rutube.ru/video/498df9872dc65ba7138e7f7c207ec4d7/&quot;&gt;RuTube&lt;/a&gt;). Попасть-то попал, но большую часть времени лежал без дела. По звуку с ним все OK, но требует, зараза, высокоомные наушники. Мои вкладыши на 300ом приходится слушать на минимальной громкости.&lt;/p&gt;

&lt;p&gt;В общем, большую часть времени валялся Megatron в ящике стола. И, возможно, я бы от него давно избавился бы, но лень было заниматься продажей.&lt;/p&gt;

&lt;p&gt;А вот буквально на днях случайно выяснилось, что по 3.5mm разъему Megatron поддерживает гарнитуру!&lt;/p&gt;

&lt;p&gt;И это решило проблему, с которой мне приходилось мириться на протяжении многих месяцев. А именно: на работе я подключаю к компьютеру USB-ЦАП чтобы слушать музыку в наушниках. Но когда возникает необходимость рабочего созвона через какой-то мессенджер или Zoom/Telemost, то приходится переключаться на гарнитуру, которая втыкается в 3.5mm разъем компьютера. И это переключение я регулярно забываю делать. Не говоря уже о том, что сама по себе эта необходимость раздражает.&lt;/p&gt;

&lt;p&gt;Но, к счастью, Megatron делает все эти манипуляции ненужными. Достаточно в 3.5mm разъем Megatron-а воткнуть наушники с гарнитурой, в 4.4mm (или 2.5mm) разъем -- наушники для музыки, а сам Megatron по USB подключить к компьютеру. И все. Слушаешь себе спокойно музыку (хоть из локального хранилища, хоть со стримминга), а когда нужно созвониться, то просто берешь другие наушники, подключенные к тому же самому Megatron-у и все.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4LmDtMufs6hr5pkV6m1GJN19dRpjCer9kvv8YR93IT0YLwKkBXGcXTUFb571dZm9VJHyN2NaDo_e3rwNThmX3MNroilyXMGv2_dKYk-aretAzQ7UzF7LHtV8Sswivsmqo3WBJSKT_1JnZUEyH-nQhtOzhXHdvmtGIdXU2AK4XrI51u3Qn29iwXq2ZaPc/s1920/1785821864157.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1584&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4LmDtMufs6hr5pkV6m1GJN19dRpjCer9kvv8YR93IT0YLwKkBXGcXTUFb571dZm9VJHyN2NaDo_e3rwNThmX3MNroilyXMGv2_dKYk-aretAzQ7UzF7LHtV8Sswivsmqo3WBJSKT_1JnZUEyH-nQhtOzhXHdvmtGIdXU2AK4XrI51u3Qn29iwXq2ZaPc/s600/1785821864157.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;PS. Почему для музыки и для созвонов разные наушники? Ну просто так получатеся, что дорогие динамики я не ставлю в наушники с гарнитурным кабелем. Эти кабеля не самые надежные и за пару-тройку лет выходят из строя (а то и раньше, тут как повезет с качеством самого гарнитурного блока). А менять кабель все-таки спокойнее, когда ты знаешь, что динамики дешевые и если случайно повредишь при разборке наушников, то сильно обидно не будет.&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/3110039922620474253/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/3110039922620474253' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3110039922620474253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3110039922620474253'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/08/lifeaudiophile-ve-megatron.html' title='[life.audiophile] Неожиданно приятное открытие в VE Megatron'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4LmDtMufs6hr5pkV6m1GJN19dRpjCer9kvv8YR93IT0YLwKkBXGcXTUFb571dZm9VJHyN2NaDo_e3rwNThmX3MNroilyXMGv2_dKYk-aretAzQ7UzF7LHtV8Sswivsmqo3WBJSKT_1JnZUEyH-nQhtOzhXHdvmtGIdXU2AK4XrI51u3Qn29iwXq2ZaPc/s72-c/1785821864157.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-7556569567509749949</id><published>2026-08-01T08:34:44.697+03:00</published><updated>2026-08-01T08:34:44.697+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Кино"/><category scheme="http://www.blogger.com/atom/ns#" term="О жизни"/><category scheme="http://www.blogger.com/atom/ns#" term="Ссылки"/><title type='text'>[life.cinema] Очередной кинообзор (2026/07)</title><content type='html'>&lt;p&gt;Традиционный отчет о просмотренных за минувший месяц фильмах. Традиционно в начале каждого из списков идет то, что понравилось больше, а в конце то, что не понравилось вообще. В целом же почти ничего не могу рекомендовать, большая часть отсмотренного оказалаь &quot;ну такое себе&quot; 😣&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Фильмы&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/205202/annot/&quot;&gt;День разоблачения (Disclosure Day, 2026)&lt;/a&gt;. Не ждал ничего выдающегося и получил приятный для просмотра фильм. Наблюдать за происходящим было интересно, в финале ожидал чего-то подобного (до сих пор помню разочарование от финала &quot;Близких контактов третьей степени&quot; того же автора), поэтому в этом моменте разочаровать меня кино не смогло. В целом, на фоне остального выходящего сейчас шлака, очень даже приличный фильмец.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/204243/annot/&quot;&gt;Стервятники (Vultures или Rapaces, 2025)&lt;/a&gt;. Тот самый случай, когда от кино вообще ничего не ждешь, а получаешь вполне нормальный фильм. Не шедевр, но крепкий середнячок.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/asia/169435/annot/&quot;&gt;Грязные деньги (Deoreowoon done sondaeji mara, 2023)&lt;/a&gt;. Если бы не специфика азиатской актерской игры, то был бы крепкий середнячок в стиле криминальной драмы с интересной развязкой.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/ros/188479/annot/&quot;&gt;Кто-то должен умереть (2025)&lt;/a&gt;. Отличная картинка. Хорошие актеры. Любопытный сюжет. Но авторам не удалось создать атмосферу настоящей реальности -- смотришь на происходящее на экране и не можешь поверить что такое может происходить на самом деле.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/196269/annot/&quot;&gt;Бескрайняя ночь (The Vast of Night, 2019)&lt;/a&gt;. Если вы любитель артхаусного и фестивального кино, то можете попробовать глянуть. Мне лично не зашло.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/206417/annot/&quot;&gt;Глубокие воды (Deep Water, 2026)&lt;/a&gt;. Очень и очень бюджетно. Лучше обойти мимо и не тратить свое время.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/205903/annot/&quot;&gt;Смерть Робина Гуда (The Death of Robin Hood, 2026)&lt;/a&gt;. Унылая тягомотина с непонятным для меня замыслом и невнятным сюжетом.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Сериалы&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/201693/annot/&quot;&gt;Во всем виновата она (All Her Faul, первый сезон, 2025)&lt;/a&gt;. Отличный подбор актеров. Как по мне, так по некоторым ролям попадание 100%. Не самая плохая развязка, хотя к некоторым важным моментам остаются вопросики. Однако, мне показалось, что фильм безбожно растянут. Если бы вместо 8 серий было 4, получилось бы хорошо, а так скучновато.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/210445/annot/&quot;&gt;Я тебя отыщу (I Will Find You, первый сезон, 2026)&lt;/a&gt;. Актеров хороших собрали. И они играют. Но это единственное хорошее, что есть в сериале. Когда начинаешь вдумываться в сюжет, то оказывается, что нам втирают какую-то дичь.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/ros/171388/annot/&quot;&gt;Минута тишины (первый сезон, 2024)&lt;/a&gt;. Очень картонные персонажи, очень все шаблонно, местами приторно-елейно. Но в целом не самый плохой сериал.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/hollywood/206198/annot/&quot;&gt;Побег (Run, первый сезон, 2026)&lt;/a&gt;. Главным достоинством сериала является то, что в нем всего шесть небольших серий. Для меня главный вопрос -- как историю преступника с несколькими десятками успешных ограблений и двумя побегами из тюрьмы превратили в такую нудную мелодраму. Смотреть можно только ради того, чтобы полюбопытствовать а как же снимают кино в Австралии. Есть здесь какой-то свой стиль, отличный от голливудского.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/ros/199485/annot/&quot;&gt;После Фишера. Инквизитор (2026, это же третий сезон &quot;Фишера&quot;)&lt;/a&gt;. Редкая муть, смело можно пройти мимо.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Кино вне категории&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.kino-teatr.ru/kino/movie/euro/28938/annot/&quot;&gt;&quot;Человек кусает собаку&quot; или &quot;Это случается рядом с вами&quot; (C&#39;est arrivé près de chez vous, 1992)&lt;/a&gt;. Самое необычное кино из тех, что посмотрел за последние несколько лет. Рекомендовать не буду т.к. ну очень уж специфическое. Однако, на фоне сегодняшнего широпотреба выглядит более чем необычно.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/7556569567509749949/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/7556569567509749949' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/7556569567509749949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/7556569567509749949'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/08/lifecinema-202607.html' title='[life.cinema] Очередной кинообзор (2026/07)'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-6126030081442811009</id><published>2026-07-31T23:01:17.360+03:00</published><updated>2026-07-31T23:01:17.361+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.thoughts] Так как же ИИ может изменить профессию &quot;программист&quot;?</title><content type='html'>&lt;p&gt;Попробую подвести итог начатых &lt;a href=&quot;https://eao197.blogspot.com/2026/07/progthoughts_01420504552.html&quot;&gt;ранее&lt;/a&gt; размышлений.&lt;/p&gt;

&lt;p&gt;Прежде всего нужно обозначить два важнейших фактора, которые могут перевернуть все представления с ног на голову.&lt;/p&gt;

&lt;p&gt;Во-первых, это экономическая и политическая обстановка в мире. Если не будет какого-то катаклизма, сравнимого с Первой или Второй Мировыми войнами, если мировая экономика выберется из кризиса и вернется экономический рост, то у программистов в целом все будет ОК. Будет работа, которая, наверняка, сильно изменится. Но эта самая работа хотя бы будет. А вот если мир скатится во что-то вроде Великой Депрессии в США 1930-х годов, или периода Веймарской республики начала 1920-х годов, то увы. Всем будет очень и очень не очень. В том числе и программистам. А может быть программистам как раз в первую очередь.&lt;/p&gt;

&lt;p&gt;Во-вторых, это экономика конкретных ИИ-компаний, которые сейчас пытаются поделить глобальный рынок ИИ-инструментария. Говорят (говорят!), что пока что экономика у них не сходится, что они глубоко убыточны и что непонятно какова должна быть реальная стоимость их услуг для того, чтобы окупить многомиллиардные инвестиции. Если получится, что реальная рыночная цена на этот самый ИИ будет сравнима со стоимостью обычного человека, то на какое-то время программистам можно будет облегченно выдохнуть.&lt;/p&gt;

&lt;p&gt;Еще, конечно же, интересный вопрос в том, до какого уровня качества этот самый ИИ в итоге дойдет. Пока все говорят (говорят!), что ИИ с каждой новой версией становится все лучше и лучше. Хотя внешней публике и не видно во что (по деньгам инвесторов) эти улучшения обходятся.&lt;/p&gt;

&lt;p&gt;А то ведь может оказаться, что с ИИ такая же ситуация, как с аудиофилией: очень несложно и совсем не дорого дойти до 90% от теоретически возможного качества звука. Зато стоимость каждого следующего процента качества возрастает в геометрической прогрессии. Может и с ИИ так? Может мы еще даже до 90% не дошли. И каждая следующая ступень качества, когда модели будут выдавать более точные решения и меньше галлюцинировать, будет обходиться на порядок дороже предыдущей. Чтобы в итоге стало не выгодно вкладывать деньги в повышение этого самого качества.&lt;/p&gt;

&lt;p&gt;Ну да ладно, давайте представим, что Третьей Мировой на наше счастье не случится и ИИ продолжит развиваться семимильными шагами без роста стоимости.&lt;/p&gt;

&lt;p&gt;Думаю, что тогда наша профессия изменится. Быстро и бесповоротно.&lt;/p&gt;

&lt;p&gt;Но не исчезнет.&lt;/p&gt;

&lt;p&gt;Надобность в прикладных программистах останется. Просто их инструменты и стиль работы сильно поменяются. Программист будет сочетать в себе роль бизнес-аналитика, чтобы выяснять что же именно нужно заказчику и формулировать это в виде ТЗ, а так же тим-лида над группами ИИ-агентов, которым эти самые ТЗ затем скармливаются и которые, собственно, код и производят. И который будет отвечать за все сотворенное в таком симбиозе.&lt;/p&gt;

&lt;p&gt;А вот класс инфраструктурных программистов сильно скукожится. Совсем они не исчезнут. Но их станет сильно меньше. И нужны они будут, в основном, чтобы заниматься прокачкой ИИ-агентов (возможно, с помощью ИИ-агентов). И чтобы разгребать дерьмо, в которое рано или поздно будут скатываться проекты, где код генерируется ИИ-агентами по ТЗ от новых прикладных программистов. Такое время от времени будет случаться и придется звать на помощь специальных людей, которые помогут разобраться с произошедшим (возможно, с помощью специализированных и особо натренированных ИИ-агентов). Но таких людей будет не много.&lt;/p&gt;

&lt;p&gt;Так что тем, кто не сможет переквалифицироваться в &quot;новых прикладников&quot; или в новых &quot;разгребателей дерьма&quot;, придется отправиться на выход. Что, как по мне, очень плохая новость для тех, кто ловит кайф от ручного набора кода и самостоятельного придумывания решений для стоящих перед ними задач. Останемся мы с вами без работы, увы.&lt;/p&gt;

&lt;p&gt;Но если вы хороший прикладной программист и умеете общаться с заказчиком, то ничего страшного вам не грозит. Всего лишь нужно освоить новые инструменты и еще плотнее держать руку на пульсе самых передовых технологий.&lt;/p&gt;

&lt;p&gt;Ну вот какие-то такие у меня мысли на данный момент. Однако, прошу не считать все вышесказанное инвестиционной рекомендацией.&lt;/p&gt;

&lt;p&gt;Сам-то я пока уверен в том, что большинству из нас, программистов, в ближайшие годы придется остаться без работы не из-за ИИ, а из-за глобальных экономических (а может и не только экономических) кризисов.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/6126030081442811009/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/6126030081442811009' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6126030081442811009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6126030081442811009'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progthoughts_0981391758.html' title='[prog.thoughts] Так как же ИИ может изменить профессию &quot;программист&quot;?'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-8092648397899184943</id><published>2026-07-30T18:54:00.952+03:00</published><updated>2026-07-31T23:02:35.126+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.thoughts] Надобность в &quot;инфраструктурниках&quot; из-за того, что людям приходилось писать код самим</title><content type='html'>&lt;p&gt;Продолжу то, что начал &lt;a href=&quot;https://eao197.blogspot.com/2026/07/progthoughts_01198913158.html&quot;&gt;ранее&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Итак, компьютеры нужны нам, людям, для решения прикладных задач. Ну, по крайней мере, с этого когда-то все начиналось: научные и инженерные расчеты, финасы, управление производством и вот это вот все. Для всего этого нужно было писать прикладные программы.&lt;/p&gt;

&lt;p&gt;Но так уж вышло, что программы всегда получались ну очень уж большими для того, чтобы программисты могли удерживать все их подробности в голове. И поэтому приходилось придумывать средства борьбы со сложностью, которая проистекала из-за этой самой многословности и объема: макросы, подпрограммы, модули, объекты и вот это вот все.&lt;/p&gt;

&lt;p&gt;Сюда же и рекомендации по написанию понятного и сопровождаемого кода: структурное программирование и отказ от goto, ограничения на объем одной подпрограммы, отсутствие глобальных переменных, инкапсуляция и сокрытие данных...&lt;/p&gt;

&lt;p&gt;Все эти штуки были созданы нами и для нас, людей. Потому что мы не можем держать в памяти одновременно большое количество деталей. Но можем бороться с подобного рода сложностями за счет абстракций.&lt;/p&gt;

&lt;p&gt;Получается, что чем более сложную задачу нам нужно решить, тем большим количеством более мощных абстракций мы должны располагать. Будь то языковые конструкции (вроде классов или шаблонов/дженериков) или библиотеки готовых &quot;компонентов&quot;. А воплощение в жизнь подобных абстракций -- это именно что работа инфраструктурных программистов. Кто-то из инфраструктурщиков развивает языки программирования для того, чтобы поднять уровень и дать возможность выражать в коде все более и более сложные вещи, при этом обеспечивая и надежность, и удобство (если не брать в рассмотрение C++, конечно же). Кто-то пишет библиотеки и фреймворки. Кто-то создает вспомогательные инструменты вроде flex/bison или ANTLR.&lt;/p&gt;

&lt;p&gt;В итоге прикладные программисты получают в свое распоряжение все больший и больший набор средств. Что дает возможность писать все более и более объемные и сложные программы. Делать это быстрее, с меньшими усилиями и с более предсказуемым результатом (если не брать в рассмотрение C++, конечно же).&lt;/p&gt;

&lt;p&gt;Или может быть лучше сказать &quot;получали&quot;?&lt;/p&gt;

&lt;p&gt;Вот, например, нужно человеку отсортировать массив целых чисел -- он пишет код для сортировки. Потом видит, что этот код приходится повторять в других местах и чтобы избежать дублирования (поскольку дублирование плохо, т.к. увеличивает объем кода с которым затем придется работать) и выносит его в повторно используемую функцию. Потом обнаруживает, что сортировать приходится не только целые числа, но и вещественные, а также строки, а иногда и структуры. И вот уже появляется тот или иной вариант обобщенной реализации сортировки. А попутно выясняется какие языковые механизмы лучше способствуют созданию этих самых обобщенных реализаций.&lt;/p&gt;

&lt;p&gt;Но эти варианты нужны лишь потому, что человеку выгодно применять абстракцию &quot;сортировка&quot; вместо того, чтобы копипастить один и тот же код снова и снова.&lt;/p&gt;

&lt;p&gt;Однако, вряд ли эта самая абстракция необходима ИИ. Написали в спецификации о том, что какие-то данные должны быть упорядочены по какому-то критерию и для ИИ этого уже достаточно. Каким образом данное требование будет отображено в коде -- реализацией сортировки &quot;по месту&quot; или обращением к какой-то готовой функции -- безразлично, это всего лишь деталь реализации. Для каких-то хорошо известных и многократно повторенных задач ИИ будет переиспользовать уже написанный когда-то людьми код. Для чего-то более экзотического ИИ сгенерирует что-то свое. Что это будет и будет ли это соответствовать тем же самым критериям &quot;хорошего&quot; кода (простота, читаемость, сопровождаемость) не суть важно, т.к. скорее всего людям и не придется заглядывать в сгенерированный код в подавляющем большинстве случаев.&lt;/p&gt;

&lt;p&gt;Т.е. те самые абстракции, которые рождались с большим трудом, конкурировали друг с другом, проходили многолетний естественный отбор и выживали чтобы стать повсеместной практикой, перестают быть вотчиной программистов людей. Я бы даже сказал, что сами эти абстракции становятся лишними.&lt;/p&gt;

&lt;p&gt;Это люди могли набить шишки на return -1, прийти к выводу, что исключения надежнее, потом собрать кучу граблей с исключениями, прийти к выводу, что нужен симбиоз, изобрести синтаксис `?` в Rust и try в Swift...&lt;/p&gt;

&lt;p&gt;Чтобы в итоге этих самых людей заменил ИИ, который будет генерить простыни Go-шного кода с примитивнейшим `if err != nil` ничуть не страдая от того, что это и многословно, и отвлекает внимание, и не обеспечивает достаточной надежности.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;a href=&quot;https://eao197.blogspot.com/2026/07/progthoughts_0981391758.html&quot;&gt;Продолжение.&lt;/a&gt;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/8092648397899184943/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/8092648397899184943' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8092648397899184943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8092648397899184943'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progthoughts_01420504552.html' title='[prog.thoughts] Надобность в &quot;инфраструктурниках&quot; из-за того, что людям приходилось писать код самим'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-1023337900754715459</id><published>2026-07-29T07:28:02.197+03:00</published><updated>2026-07-30T18:54:41.159+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.thoughts] Мое деление программистов на &quot;прикладных&quot; и &quot;инфраструктурных&quot;</title><content type='html'>&lt;p&gt;Чтобы продолжить рассуждения о том, как ИИ может повлиять на будущее профессии &quot;программист&quot; (начатые &lt;a href=&quot;https://eao197.blogspot.com/2026/07/progthoughts.html&quot;&gt;здесь&lt;/a&gt; и продолженные &lt;a href=&quot;https://eao197.blogspot.com/2026/07/progthoughts_0766252012.html&quot;&gt;здесь&lt;/a&gt;) придется озвучить одну из классификаций программистов, которой придерживаюсь в последние годы.&lt;/p&gt;

&lt;p&gt;Прикладные программисты делают то, что нужно пользователю. Причем не важно, о каком именно продукте идет речь -- это может быть какая-то сделанная на коленке под заказ система складского учета для провинциальной конторы &quot;Рога и Копыта&quot;, пакет Microsoft Office или же сервер реляционной СУБД. Суть в том, что есть продукт, есть требования к нему, есть список фич, которые нужно выкатить, есть сроки, есть бюджеты, есть обязательства и т.д., и т.п. И появляется конкретный продукт для конкретного пользователя именно благодаря труду прикладных программистов.&lt;/p&gt;

&lt;p&gt;Инфраструктурные программисты делают инструменты, которые используют прикладные программисты в своей работе. Самыми яркими примерами таких инструментов являются фреймворки и библиотеки. Как общего назначения (вроде Qt, JDK или .NET Framework), так и какие-то специализированные, заточенные под конкретный проект.&lt;/p&gt;

&lt;p&gt;Хоть и те и другие до недавнего времени вроде как одинаково писали код, между ними были принципиальные отличия во многих вещах -- начиная от внимания к мелким деталям при написании кода, заканчивая мировоззрением. Или, может быть, правильнее было бы сказать начиная от мировоззрения и заканчивая мелкими деталями в коде.&lt;/p&gt;

&lt;p&gt;Цель прикладного программиста -- решить конкретную задачу стоящую перед конкретным пользователем. Если решение будет работать и удовлетворять заказчика/покупателя продукта, то не суть важно, слеплено ли оно из говна и палок, скручено из разных костылей синей изолентой или же посажено на суперклей.&lt;/p&gt;

&lt;p&gt;И это более чем правильный подход. Потому что решение нужно здесь и сейчас иначе не будет денег от заказчика/покупателя, а без денег не будет нужды ни в прикладных программистах, ни в инфраструктурных.&lt;/p&gt;

&lt;p&gt;Тогда как задача инфраструктурного программиста в том, чтобы предоставить прикладному программисту как можно больше полезных инструментов, чтобы уменьшить количество синей изоленты в прикладном коде.&lt;/p&gt;

&lt;p&gt;Яркий пример, демонстрирующий разность в подходах, довелось увидеть буквально пару дней назад в докладе &lt;a href=&quot;https://www.youtube.com/watch?v=2BNhv6NA4L0&quot;&gt;«Опыт перехода проекта „Авито.Доставка“ с Java на Go» / Илья Лапин, Сергей Поляков (Avito)&lt;/a&gt;, который мне YouTube зачем-то подсунул в рекомендациях (но оказалось довольно любопытно, благо доклад короткий и толковый):&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM4bSTq8F-KoHfxAGfn5KnACEkrSDknF250X7uzLTawCsmzZ728DHPEcTANRzPSNDlvADkViljljYhkRQmLLIbMFGb03h-tXW_LGZIldVhc_-3dN61CoG3-z0uWUQV0LS-RIDgVOCk7tGwbn_SwswA4s0g5p8zBNDYvG_9FT4g-X2dL3q_K32LUhcAJpg/s1706/Screenshot_20260728_184259.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;960&quot; data-original-width=&quot;1706&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM4bSTq8F-KoHfxAGfn5KnACEkrSDknF250X7uzLTawCsmzZ728DHPEcTANRzPSNDlvADkViljljYhkRQmLLIbMFGb03h-tXW_LGZIldVhc_-3dN61CoG3-z0uWUQV0LS-RIDgVOCk7tGwbn_SwswA4s0g5p8zBNDYvG_9FT4g-X2dL3q_K32LUhcAJpg/s600/Screenshot_20260728_184259.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Суть в том, что на момент доклада (2018-й год) в стандартной библиотеке Go (как и в самом языке) не было такого понятия как &quot;множество&quot; (оно же Set). Понятие &quot;словарь&quot; встроенное в сам язык было (в виде штатного типа map), а вот &quot;множества&quot; -- нет.&lt;/p&gt;

&lt;p&gt;Прикладной программист: ну OK, раз нет &quot;множества&quot;, то сойдет и &quot;словарь&quot;, просто в качестве значения для ключа будет использоваться экземпляр пустой структуры. Не, ну а чё, работает же.&lt;/p&gt;

&lt;p&gt;Тогда как инфраструктурный программист от подобного впадает в ступор. Типа: &quot;а почему этот самый Set нельзя было взять и сделать?&quot; 😉&lt;/p&gt;

&lt;p&gt;PS. Убедительная просьба не воспринимать этот текст как попытку ранжирования программистов по их качеству. Типа &quot;прикладные&quot; программисты -- не настоящие программисты вовсе, тогда как &quot;инфраструктурные&quot; -- соль профессии и настоящая илитарная илита. Как раз жизнь учит тому, что все программирование живет и зарабатывает исключительно благодаря &quot;прикладным&quot; программистам, тогда как &quot;инфраструктурые&quot; являются всего лишь обслуживающим персоналом (но без этого обслуживающего персонала тоже нельзя).&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;a href=&quot;https://eao197.blogspot.com/2026/07/progthoughts_01420504552.html&quot;&gt;Продолжение.&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/1023337900754715459/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/1023337900754715459' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/1023337900754715459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/1023337900754715459'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progthoughts_01198913158.html' title='[prog.thoughts] Мое деление программистов на &quot;прикладных&quot; и &quot;инфраструктурных&quot;'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM4bSTq8F-KoHfxAGfn5KnACEkrSDknF250X7uzLTawCsmzZ728DHPEcTANRzPSNDlvADkViljljYhkRQmLLIbMFGb03h-tXW_LGZIldVhc_-3dN61CoG3-z0uWUQV0LS-RIDgVOCk7tGwbn_SwswA4s0g5p8zBNDYvG_9FT4g-X2dL3q_K32LUhcAJpg/s72-c/Screenshot_20260728_184259.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-6365534929407112969</id><published>2026-07-28T10:08:02.764+03:00</published><updated>2026-07-28T10:08:02.764+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Мысля давеча посетила"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.thoughts] И еще одна мысль про влияние ИИ на программирование</title><content type='html'>&lt;p&gt;Навеяно вот этой статьей: &lt;a href=&quot;https://habr.com/ru/articles/1058500/&quot;&gt;Английский вместо кода&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Когда я приходил в профессию на программиста возлагались следующие задачи:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;выяснить что именно нужно сделать (здесь подразумевается общение с заказчиком и умение сформировать более-менее адекватное ТЗ по результатам этого общения);&lt;/li&gt;

  &lt;li&gt;решить как именно это будет сделано (архитектура, алгоритмы, сторонние библиотеки, форматы данных и вот это вот все);&lt;/li&gt;

  &lt;li&gt;воплотить решение в коде (чистый, работающий, тестируемый, сопровождаемый код и вот это вот все);&lt;/li&gt;

  &lt;li&gt;протестировать сделанное.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Плюсом сюда же могло попасть (и зачастую попадало) участие во внедрении сделанного. А потом и сопровождение, включая оперативное реагирование на инциденты с внезапной побудкой в полтретьего ночи или срочным выездом на объект заказчика.&lt;/p&gt;

&lt;p&gt;Никаких бизнес-аналитиков и тестировщиков в то время в наших палестинах еще не существовало как класса, появилось все это лет на 5-10 позже (хотя на Западе, как я слышал, к началу 1990-х все это уже было). Ну да не суть.&lt;/p&gt;

&lt;p&gt;Суть же в том, что для некоторых настоящее программирование заключалось прежде всего в &quot;воплотить решение в коде&quot; + (кому-то в больше степени, кому-то в меньшей) &quot;решить как именно сделать&quot; и &quot;протестировать сделанное&quot; (иногда в формулировке &quot;заставить это все работать в конце-то концов!&quot;). А общение с заказчиком и формирование ТЗ было худшим из периодов и настоящим наказанием.&lt;/p&gt;

&lt;p&gt;Постепенно профессия подвергалась влиянию специализации: выделение ролей &quot;бизнес-аналитик&quot;, &quot;архитектор&quot;, &quot;тестировщик&quot;, &quot;внедренец&quot; и т.д., уменьшало объем задач, ложившихся на плечи одного &quot;программиста&quot;. Но задача писать чистый, работающий, тестируемый и сопровождаемый код, к счастью, все еще оставалась главной для программиста.&lt;/p&gt;

&lt;p&gt;Теперь же эту задачу забирает на себя ИИ. И работа для остающихся в профессии специалистов (вроде как) смещается в сторону &quot;выяснить что именно нужно сделать&quot; и, в некоторой степени, &quot;решить как именно это сделать&quot;. В смысле формулирования более-менее однозначно трактуемых ИИ-шкой спецификаций -- как раз то, о чем идет речь в упомянутой статье.&lt;/p&gt;

&lt;p&gt;Только вот для некоторых это уже не будет тем самым настоящим программированием от которого эти некоторые получали наибольший кайф и в котором пытались достичь своего наивысшего мастерства.&lt;/p&gt;

&lt;p&gt;Мне сложно судить какой процентный состав этих самых &quot;некоторых&quot; и насколько нас таких много. К сожалению, в их число попадаю и я, а этого уже достаточно. Грустно размышлять о том, что в недалеком будущем ты, как программист, будешь заниматься разве что формулированием бизнес-правил вида &quot;если пользователь зашел на страницу с описанием предоставленных ему персональных скидок, но не воспользовался ими в течении 24 часов, то направить пользователю дополнительное напоминание&quot;.&lt;/p&gt;

&lt;p&gt;Как по мне, так это уже и не программирование вовсе.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/6365534929407112969/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/6365534929407112969' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6365534929407112969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/6365534929407112969'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progthoughts_0766252012.html' title='[prog.thoughts] И еще одна мысль про влияние ИИ на программирование'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-7933784411231981250</id><published>2026-07-27T16:29:51.442+03:00</published><updated>2026-07-27T16:29:51.443+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Мысля давеча посетила"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Поток сознания"/><title type='text'>[prog.thoughts] Подумалось тут про ИИ и будущее программирования...</title><content type='html'>&lt;p&gt;Продвинутые ИИ модели дошли до того, чтобы &lt;a href=&quot;https://bun.com/blog/bun-in-rust&quot;&gt;переписывать большие проекты&lt;/a&gt; и &lt;a href=&quot;https://www.opennet.ru/opennews/art.shtml?num=65963&quot;&gt;генерировать реализации по спецификациям&lt;/a&gt; с минимальным участием человека. А люди, плотно использующие ИИ для разработки ПО все больше говорят о том, что работа с ИИ агентами становится похожа на работу тим-лида или даже технического лида: раздаешь задания, контролируешь исполнение, сам практически ничего не пишешь и, может быть, даже не читаешь то, что ИИ генерирует (хотя бы потому, что объемы сгенерированного кода будут превышать возможности человека-ревьювера).&lt;/p&gt;

&lt;p&gt;В связи с этим подумалось, что наступает золотая эпоха тех специалистов, которые были вынуждены программировать ну хоть как-то. Вроде физиков, химиков и биологов, которым нужно было делать вычислительные эксперименты, для чего приходилось осваивать программирование хотя бы в минимальной степени. В лучшем случае на Python или Pascal, но скорее на Fortran, а в особо запущенных случаях и на С++.&lt;/p&gt;

&lt;p&gt;Вот они теперь смогут переложить реализацию вычислительной части на ИИ. И смогут сосредоточиться на том, чтобы решить что и как расчитывать, не тратя свою энергию на воплощение своих вычислительных моделей в коде. С кодом как раз ИИ вполне себе справится.&lt;/p&gt;

&lt;p&gt;PS. Прошу не воспринимать вышесказанное как прогноз, не нужно запоминать этот твит. На самом деле данный пост начинался как большой и глубоко пессимистический текст с самыми мрачными фантазиями о недалеком будущем. Но потом я решил, что лучше бы попробовать найти в происходящем что-нибудь хорошее 🙂&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/7933784411231981250/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/7933784411231981250' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/7933784411231981250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/7933784411231981250'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progthoughts.html' title='[prog.thoughts] Подумалось тут про ИИ и будущее программирования...'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-8611717330705226893</id><published>2026-07-25T14:24:49.261+03:00</published><updated>2026-07-27T19:29:09.722+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Multithreading"/><category scheme="http://www.blogger.com/atom/ns#" term="Вопрос залу"/><category scheme="http://www.blogger.com/atom/ns#" term="Из непонятого"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="язык C++"/><title type='text'>[prog.c++.multithreading] Сломал себе мозг пытаясь понять что не нравится thread sanitizer-у</title><content type='html'>&lt;p&gt;&lt;b&gt;Upd. Похоже, что проблема сперва была в том, что SO-5 подключался в проект через vcpkg и когда проект компилировался с TSan, то линковался SO-5, собранный без TSan. А когда я включил исходники SO-5 в сам проект, чтобы все компилировалось с одинаковыми ключами, то ошибся с порядком команд в CMakeLists.txt и при компиляции SO-5 опции для TSan не учитывались. Если же собрать и SO-5, и остальной проект с одинаковыми опциями, то данной проблемы не возникает (пока?).&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;В текущем проекте thread sanitizer периодически выдает предупреждение о data race на фрагменте, который относится к SObjectizer-у.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9K2NFuLrVliuGWYiaiclGnJCHeQU-pQOTBbGiM2nrOVw_MdVqm_kB3T4bQPRSlaFuR5daNisHxlIKG2i7UmNqtCLYGtZsTamLmon0g-kroQKBZk83eYJshArnHKhXKWlpE6wy7CH8ttBL8Jsgn0KmXuebsY9XmF20crDljpP01CbD0e4BS1LEl0Vqcxw/s2784/Screenshot_20260725_100808-2.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1349&quot; data-original-width=&quot;2784&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9K2NFuLrVliuGWYiaiclGnJCHeQU-pQOTBbGiM2nrOVw_MdVqm_kB3T4bQPRSlaFuR5daNisHxlIKG2i7UmNqtCLYGtZsTamLmon0g-kroQKBZk83eYJshArnHKhXKWlpE6wy7CH8ttBL8Jsgn0KmXuebsY9XmF20crDljpP01CbD0e4BS1LEl0Vqcxw/s600/Screenshot_20260725_100808-2.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Самое плохое то, что:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;я не понимаю в чем именно thread sanitizer видит проблему. Соответственно, неизвестно, является ли срабатывание TSan-а ложно позитивным или же есть реальная ошибка, которую следует исправить;&lt;/li&gt;
  &lt;li&gt;мне не удается повторить такую же ситуацию в тестах для самого SO-5. Т.е. в рамках проекта TSan диагностику выдает, а в мелких тестах, которые пытаются повторить тот же сценарий -- нет. Ни в какую. Что сильно затрудняет разбирательства и поиск обходных путей.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Что здесь происходит:&lt;/p&gt;

&lt;p&gt;Агент на нити T7 отсылает сообщение GiveMeTask агенту-координатору, который работает на нити T3.&lt;/p&gt;

&lt;p&gt;Агент-координатор получает сообщение и обрабатывает его. После чего начинается разрушение объекта &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer/blob/c5ec4485cf6e8b0d8290c309f9a10d306252e6ca/dev/so_5/execution_demand.hpp#L60&quot;&gt;execution_demand_t&lt;/a&gt;, в котором лежит умный указатель на экземпляр сообщения.&lt;/p&gt;

&lt;p&gt;В это же время на нити T7 завершается процедура отсылки сообщения.&lt;/p&gt;

&lt;p&gt;И, как я понимаю, фокус в том, что эти два действия происходят на двух нитях очень близко друг к другу по времени.&lt;/p&gt;

&lt;p&gt;Экземпляр сообщения GiveMeTask создается на нити T7. Указатель на этот экземпляр хранится на нити T7 внутри объекта &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer/blob/c5ec4485cf6e8b0d8290c309f9a10d306252e6ca/dev/so_5/atomic_refcounted.hpp#L91&quot;&gt;intrusive_ptr_t&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;На нити T3 внутри execution_demand_t так же есть свой объект intrusive_ptr_t который хранит указатель на этот же экземпляр GiveMeTask.&lt;/p&gt;

&lt;p&gt;Т.е. на двух нитях есть два разных intrusive_ptr_t, которые хранят в себе указатель на один и тот же объект GiveMeTask.&lt;/p&gt;

&lt;p&gt;При этом счетчик ссылок на GiveMeTask хранится в самом объекте GiveMeTask. Класс GiveMeTask наследуется от so_5::message_t:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;struct GiveMeTask final : public so_5::message_t
{
    const so_5::mbox_t _workerMbox;

    GiveMeTask(so_5::mbox_t workerMbox)
        : _workerMbox{ std::move(workerMbox) }
    {}
};&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;А &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer/blob/c5ec4485cf6e8b0d8290c309f9a10d306252e6ca/dev/so_5/message.hpp#L46&quot;&gt;so_5::message_t&lt;/a&gt; наследуется от so_5::atomic_refcounted_t:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;class message_t : public atomic_refcounted_t
    {
        ...
    };&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;В &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer/blob/c5ec4485cf6e8b0d8290c309f9a10d306252e6ca/dev/so_5/atomic_refcounted.hpp#L77&quot;&gt;so_5::atomic_refcounted_t&lt;/a&gt; счетчик ссылок хранится &lt;a href=&quot;https://github.com/Stiffstream/sobjectizer/blob/c5ec4485cf6e8b0d8290c309f9a10d306252e6ca/dev/so_5/types.hpp#L24&quot;&gt;в виде std::atomic&lt;/a&gt;. Т.е. операции инкремента-декремента количества ссылок происходят атомарно и не нуждаются в дополнительной синхронизации.&lt;/p&gt;

&lt;p&gt;Получается, что на нити T7 создается новый экземпляр GiveMeTask, указатель на него сохраняется в локальном объекте intrusive_ptr_t и счетчик ссылок на GiveMeTask выставляется в 1.&lt;/p&gt;

&lt;p&gt;На нити T7 вызывается send для GiveMeTask и формируется execution_demand_t для агента-координатора. Внутри execution_demand_t создается свой intrusive_ptr_t и счетчик ссылок для GiveMeTask получает значение 2.&lt;/p&gt;

&lt;p&gt;Затем на нити T3 происходит обработка GiveMeTask, после чего начинается разрушение execution_demand_t и его содержимого (в том числе и второго intrusive_ptr_t).&lt;/p&gt;

&lt;p&gt;Но чуть раньше на нити T7 происходит разрушение своего intrusive_ptr_t после чего счетчик ссылок в GiveMeTask опускается до 1.&lt;/p&gt;

&lt;p&gt;А уже после этого на нити T3 счетчик ссылок на GiveMeTask обнуляется и происходит разрушение объекта GiveMeTask.&lt;/p&gt;

&lt;p&gt;Происходят действия именно в этом порядке. Если бы сперва полностью разрушился execution_demand_t на нити T3 и лишь после этого началось уничтожение intrusive_ptr_t на нити T7, то деструктор GiveMeTask вызвался бы на нити T7, а не на нити T3.&lt;/p&gt;

&lt;p&gt;Т.е. с моей точки зрения здесь все OK. Но TSan видит data race. А я не понимаю про какой data race идет речь.&lt;/p&gt;

&lt;p&gt;Под катом выхлоп от TSan в текстовом виде.&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;code&gt;WARNING: ThreadSanitizer: data race (pid=105293)&lt;br&gt;
&amp;nbsp;&amp;nbsp;Write of size 8 at 0x720800038028 by thread T3:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0 operator delete(void*, unsigned long) ../../../../src/libsanitizer/tsan/tsan_new_delete.cpp:150 (libtsan.so.2+0xa66c8) (BuildId: 2a13a7710e361d06f7babbea53065ca2be93f738)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#1 Calculation::CoordinatorImpl::GiveMeTask::~GiveMeTask() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/include/CalculationCoordinatorAgents.h:23 (&amp;lt;censored&amp;gt;+0x1420c2a) (BuildId: d95e75b5663cd24e4ecc0f7a4ab2777babe82359)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#2 so_5::intrusive_ptr_t&amp;lt;so_5::message_t&amp;gt;::dismiss_object() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/atomic_refcounted.hpp:322 (&amp;lt;censored&amp;gt;+0x16ac5db) (BuildId: d95e75b5663cd24e4ecc0f7a4ab2777babe82359)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#3 so_5::intrusive_ptr_t&amp;lt;so_5::message_t&amp;gt;::~intrusive_ptr_t() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/atomic_refcounted.hpp:178 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#4 so_5::execution_demand_t::~execution_demand_t() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/execution_demand.hpp:61 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#5 void std::destroy_at&amp;lt;so_5::execution_demand_t&amp;gt;(so_5::execution_demand_t*) /usr/include/c++/13/bits/stl_construct.h:88 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#6 void std::allocator_traits&amp;lt;std::allocator&amp;lt;so_5::execution_demand_t&amp;gt; &amp;gt;::destroy&amp;lt;so_5::execution_demand_t&amp;gt;(std::allocator&amp;lt;so_5::execution_demand_t&amp;gt;&amp;amp;, so_5::execution_demand_t*) /usr/include/c++/13/bits/alloc_traits.h:560 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#7 std::deque&amp;lt;so_5::execution_demand_t, std::allocator&amp;lt;so_5::execution_demand_t&amp;gt; &amp;gt;::pop_front() /usr/include/c++/13/bits/stl_deque.h:1580 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#8 so_5::disp::reuse::work_thread::details::no_activity_tracking_impl_t::serve_demands_block(std::thread::id, std::deque&amp;lt;so_5::execution_demand_t, std::allocator&amp;lt;so_5::execution_demand_t&amp;gt; &amp;gt;&amp;amp;) /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/disp/reuse/work_thread/work_thread.hpp:448 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#9 so_5::disp::reuse::work_thread::details::work_thread_template_t&amp;lt;so_5::disp::reuse::work_thread::details::no_activity_tracking_impl_t&amp;gt;::body() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/disp/reuse/work_thread/work_thread.hpp:705 (&amp;lt;censored&amp;gt;+0x16ac5db)&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;Previous atomic write of size 8 at 0x720800038028 by thread T7:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0 std::__atomic_base&amp;lt;unsigned long&amp;gt;::operator--() /usr/include/c++/13/bits/atomic_base.h:410 (&amp;lt;censored&amp;gt;+0x141ff80) (BuildId: d95e75b5663cd24e4ecc0f7a4ab2777babe82359)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#1 so_5::atomic_refcounted_t::dec_ref_count() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/atomic_refcounted.hpp:80 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#2 so_5::intrusive_ptr_t&amp;lt;so_5::message_t&amp;gt;::dismiss_object() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/atomic_refcounted.hpp:317 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#3 so_5::intrusive_ptr_t&amp;lt;so_5::message_t&amp;gt;::~intrusive_ptr_t() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/atomic_refcounted.hpp:178 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#4 void so_5::low_level_api::deliver_message&amp;lt;Calculation::CoordinatorImpl::GiveMeTask&amp;gt;(so_5::message_delivery_mode_t, so_5::abstract_message_box_t&amp;amp;, std::type_index, std::unique_ptr&amp;lt;Calculation::CoordinatorImpl::GiveMeTask, std::default_delete&amp;lt;Calculation::CoordinatorImpl::GiveMeTask&amp;gt; &amp;gt;) /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/mbox.hpp:393 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#5 void so_5::impl::instantiator_and_sender_base&amp;lt;Calculation::CoordinatorImpl::GiveMeTask, false&amp;gt;::send&amp;lt;so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;&amp;gt;(so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;, so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;) /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/send_functions.hpp:59 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#6 void so_5::send&amp;lt;Calculation::CoordinatorImpl::GiveMeTask, so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;, so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;&amp;gt;(so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;, so_5::intrusive_ptr_t&amp;lt;so_5::abstract_message_box_t&amp;gt; const&amp;amp;) /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/send_functions.hpp:231 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#7 Calculation::CoordinatorImpl::Worker::so_evt_start() /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/src/model/calc/CalculationCoordinatorAgents.cpp:30 (&amp;lt;censored&amp;gt;+0x141ff80)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#8 so_5::agent_t::demand_handler_on_start(std::thread::id, so_5::execution_demand_t&amp;amp;) /home/eao197/sandboxes/&amp;lt;censored&amp;gt;/so_5/agent.cpp:1433 (&amp;lt;censored&amp;gt;+0x1671404) (BuildId: d95e75b5663cd24e4ecc0f7a4ab2777babe82359)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#9 &amp;lt;null&amp;gt; &amp;lt;null&amp;gt; (libstdc++.so.6+0xecdb3) (BuildId: 753c6c8608b61d4e67be8f0c890e03e0aa046b8b)&lt;br&gt;
&lt;/code&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/8611717330705226893/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/8611717330705226893' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8611717330705226893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/8611717330705226893'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progcmultithreading-thread-sanitizer.html' title='[prog.c++.multithreading] Сломал себе мозг пытаясь понять что не нравится thread sanitizer-у'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9K2NFuLrVliuGWYiaiclGnJCHeQU-pQOTBbGiM2nrOVw_MdVqm_kB3T4bQPRSlaFuR5daNisHxlIKG2i7UmNqtCLYGtZsTamLmon0g-kroQKBZk83eYJshArnHKhXKWlpE6wy7CH8ttBL8Jsgn0KmXuebsY9XmF20crDljpP01CbD0e4BS1LEl0Vqcxw/s72-c/Screenshot_20260725_100808-2.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-3587001199798429564</id><published>2026-07-22T07:37:23.878+03:00</published><updated>2026-07-22T07:37:23.879+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="Ссылки"/><title type='text'>[prog.flame] Узнал давеча о переписывании какого-то Bun с какого-то Zig на какой-то Rust :)</title><content type='html'>&lt;p&gt;Т.к. я не тормоз, а всего лишь медленный газ, то только вчера узнал об очередном скандале на просторах этого нашего Интернета. Если кто-то, как и я, все еще не в курсе, то:&lt;/p&gt;

&lt;p&gt;Некий проект &lt;a href=&quot;https://github.com/oven-sh/bun&quot;&gt;Bun&lt;/a&gt; (говорят, что это какой-то очень и очень быстрый инструментарий для JavaScript, включая и виртуальную машину) внутри Antropic-а переписали с Zig на Rust посредством нескольких десятков параллельно работавших в течении 11 дней агентов: &lt;a href=&quot;https://bun.com/blog/bun-in-rust&quot;&gt;https://bun.com/blog/bun-in-rust&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;На рассказ об этой процедуре среагировал разработчик языка Zig и высказался в том духе, что &lt;strike&gt;баба с возу кобыле легче&lt;/strike&gt; переписали на Rust и славно, а то эти Bun-овцы уже изрядно задолбали дискредитацией всего Zig-а низким качеством своего кода: &lt;a href=&quot;https://andrewkelley.me/post/my-thoughts-bun-rust-rewrite.html&quot;&gt;https://andrewkelley.me/post/my-thoughts-bun-rust-rewrite.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Как по мне, так и то, и другое чтиво вполне себе интересное и заслуживает того, чтобы быть прочитанным.&lt;/p&gt;

&lt;p&gt;Но больше всего интересует вот какой момент. В блог-посте про переписывание с Zig на Rust приводится пример кода на Zig, который иллюстрирует заморочки, с которыми приходилось сталкиваться Bun-овцам при написании надежного кода на Zig:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#ffff60&quot;&gt;fn&lt;/font&gt;&amp;nbsp;foo(a_ptr: SharedPtr(TCPSocket))&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;!&lt;/font&gt;&lt;font color=&quot;#90f020&quot;&gt;void&lt;/font&gt;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90fff0&quot;&gt;const&lt;/font&gt;&amp;nbsp;a:&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;*&lt;/font&gt;TCPSocket&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;=&lt;/font&gt;&amp;nbsp;a_ptr.get();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ff80ff&quot;&gt;defer&lt;/font&gt;&amp;nbsp;a_ptr.deref();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#90fff0&quot;&gt;const&lt;/font&gt;&amp;nbsp;b&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;=&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;try&lt;/font&gt;&amp;nbsp;do_something_with_a(a);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ff80ff&quot;&gt;defer&lt;/font&gt;&amp;nbsp;b.deref();&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#80a0ff&quot;&gt;// ...&lt;/font&gt;&lt;br&gt;
}&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Поскольку я не знаю Zig, то очень интересно, а это прям идиоматический код и лучше на Zig уже не получится? Или же это откровенный говнокод, низкое качество которого очевидно даже начинающим Zig-ерам?&lt;/p&gt;

&lt;p&gt;PS. Так же я не полностью согласен с тезисом, что для C++ надежность кода достигается за счет следования какому-то административно утвержденному code style (как в случае с упомянутым в блог-посте от Bun-овцев Google C++ code style guide). Многие проблемы (вроде контроля времени жизни объектов, находящихся в совместном использовании) должны решаться не соглашениями, а типами (вроде unique_ptr, shared_ptr и т.д.) Но кто я такой, чтобы рассуждать на эту тему? 😉&lt;/p&gt;

&lt;p&gt;PPS. А Rust подтверждает свою репутацию языка, на котором ничего нового не пишут, а только переписывают существующее 🤣&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/3587001199798429564/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/3587001199798429564' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3587001199798429564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/3587001199798429564'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progflame-bun-zig-rust.html' title='[prog.flame] Узнал давеча о переписывании какого-то Bun с какого-то Zig на какой-то Rust :)'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-654279083390275842.post-943201720739203574</id><published>2026-07-17T07:24:17.910+03:00</published><updated>2026-07-17T07:24:17.910+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Multithreading"/><category scheme="http://www.blogger.com/atom/ns#" term="О программировании"/><category scheme="http://www.blogger.com/atom/ns#" term="язык C++"/><title type='text'>[prog.c++.multithreading] Мой способ обойти ложное срабатывание в TSan с инверсией порядка захвата mutex-ов</title><content type='html'>&lt;p&gt;Продолжение &lt;a href=&quot;https://eao197.blogspot.com/2026/07/progcmultithreading-false-positive_01605290765.html&quot;&gt;вчерашней темы&lt;/a&gt; с ложно позитивным срабатыванием thread sanitizer, когда TSan ошибочно диагностировал инверсию порядка захвата mutex-ов.&lt;/p&gt;

&lt;p&gt;Поскольку в коде с точки зрения порядка блокировок все было OK, то возник вопрос: а как удовлетворить TSan, чтобы избавиться от ложной диагностики и продолжить использовать TSan для поиска других проблем?&lt;/p&gt;

&lt;p&gt;Было найдено вот такое решение:&lt;/p&gt;

&lt;table width=&quot;100%&quot; bgcolor=&quot;#000040&quot;&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;font color=&quot;#c0c0c0&quot;&gt;
&lt;font color=&quot;#ff80ff&quot;&gt;#if defined( __SANITIZE_THREAD__ )&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#90f020&quot;&gt;template&lt;/font&gt;&amp;lt;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;typename&lt;/font&gt;&amp;nbsp;M &amp;gt;&lt;br&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;tsan_friendly_lock_guard&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp; M &amp;amp; m_what;&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp; tsan_friendly_lock_guard( M &amp;amp; what )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: m_what{ what }&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;while&lt;/font&gt;( !m_what.try_lock() )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::this_thread::yield();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp; ~tsan_friendly_lock_guard()&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_what.unlock();&lt;br&gt;
&amp;nbsp;&amp;nbsp; }&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#ff80ff&quot;&gt;#else&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#90f020&quot;&gt;template&lt;/font&gt;&amp;lt;&amp;nbsp;&lt;font color=&quot;#90f020&quot;&gt;typename&lt;/font&gt;&amp;nbsp;M &amp;gt;&lt;br&gt;
&lt;font color=&quot;#90f020&quot;&gt;class&lt;/font&gt;&amp;nbsp;tsan_friendly_lock_guard&lt;br&gt;
&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::lock_guard&amp;lt; M &amp;gt; m_guard;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff60&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tsan_friendly_lock_guard( M &amp;amp; mutex )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : m_guard{ mutex }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}&lt;br&gt;
&amp;nbsp;&amp;nbsp; };&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#ff80ff&quot;&gt;#endif&lt;/font&gt;&lt;br&gt;
      &lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Затем в тех местах кода, где TSan ругался на потенциальную инверсию порядка захвата mutex-ов, std::lock_guard был заменен на tsan_friendly_lock_guard. И оно сработало: &lt;a href=&quot;https://godbolt.org/z/fb84zsr4M&quot;&gt;https://godbolt.org/z/fb84zsr4M&lt;/a&gt;.&lt;/p&gt;


</content><link rel='replies' type='application/atom+xml' href='http://eao197.blogspot.com/feeds/943201720739203574/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/654279083390275842/943201720739203574' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/943201720739203574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/654279083390275842/posts/default/943201720739203574'/><link rel='alternate' type='text/html' href='http://eao197.blogspot.com/2026/07/progcmultithreading-tsan-mutex.html' title='[prog.c++.multithreading] Мой способ обойти ложное срабатывание в TSan с инверсией порядка захвата mutex-ов'/><author><name>eao197</name><uri>http://www.blogger.com/profile/17283739752119445290</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>