<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6"  />
<title>rulinux.net - Форум - Development</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Инструменты для отладки драйверов ядра Линукс</title>
<link>https://rulinux.net/message.php?newsid=43614&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43614&amp;page=1</guid>
<pubDate>Thu, 13 Feb 2025 20:27:11 +0300</pubDate>
<description><![CDATA[<p>Всем привет!<br><br>Я сделал пару инструментов для отладки драйверов. Всегда есть проблема отладки драйверов усеченного Линукса. Оба инструманта сделаны следующим образом: Простой клиент ставится на отлаживаемый компьютер, где и запускается как UDP сервер. На удаленном компьютере запускается Python GUI приложение. Один инстромент позволяет читать и писать в память/регистры. Второй трассирует функции ядра. Очень просто установить. Питон выбран дла кроссплатформенности. Клиент доступа к памяти написам на C. Его надо кросс-компилятором скомпилировать.<br><br>Доступ к регистрам: https://github.com/stepanovr/linuxreg2/tree/main<br><br>Трасировка: https://github.com/stepanovr/Linux_kernel_trace<br><br>Пожелания по улучшению инструментов приму с благодарностью.</p>]]></description>
</item>
<item>
<title>mplayer-edl</title>
<link>https://rulinux.net/message.php?newsid=43394&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43394&amp;page=1</guid>
<pubDate>Thu, 15 Apr 2021 08:27:11 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>bash</legend><div class="highlight bash"><br />
<span class="co0">#!/bin/sh</span><br />
<br />
<span class="co0"># http://www.mplayerhq.hu/DOCS/HTML/en/edl.html</span><br />
<br />
<span class="re2">MPLAYER</span>=<span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span><span class="kw2">mplayer</span><br />
<span class="re2">VIDEO_EXT</span>=<span class="st0">&quot;avi mp4&quot;</span><br />
<span class="re2">EDL_EXT</span>=<span class="st0">&quot;edl&quot;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="re5">-lt</span> 1 <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Usage: <span class="es4">$(basename $0)</span> &lt;video&gt; ...&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot; &nbsp; or: <span class="es4">$(basename $0)</span> &lt;file.edl&gt; ...&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> 1<br />
<span class="kw1">fi</span><br />
<br />
<span class="kw1">while</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="re5">-gt</span> 0 <span class="br0">&#93;</span>; <span class="kw1">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-r</span> <span class="st0">&quot;$1&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># input filename</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">INPUT</span>=<span class="st0">&quot;$1&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># filename without extension ${EDL_EXT}</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">NAME</span>=<span class="st0">&quot;<span class="es3">${INPUT%.${EDL_EXT}</span>}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;x<span class="es3">${NAME}</span>&quot;</span> == <span class="st0">&quot;x<span class="es3">${INPUT}</span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># VIDEO section</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">VIDEO</span>=<span class="st0">&quot;<span class="es3">${INPUT}</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">OUT</span>=<span class="st0">&quot;<span class="es3">${INPUT%.*}</span>.<span class="es3">${EDL_EXT}</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">CMD</span>=<span class="st0">&quot;-edlout&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># EDL section</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># search video file</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">VIDEO</span>=<span class="st0">&quot;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> EXT <span class="kw1">in</span> <span class="co1">${VIDEO_EXT}</span>; <span class="kw1">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-r</span> <span class="st0">&quot;<span class="es3">${NAME}</span>.<span class="es3">${EXT}</span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">VIDEO</span>=<span class="st0">&quot;<span class="es3">${NAME}</span>.<span class="es3">${EXT}</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;x<span class="es3">${VIDEO}</span>&quot;</span> == <span class="st0">&quot;x&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Supported video for '<span class="es3">${INPUT}</span>' not found (<span class="es3">${VIDEO_EXT}</span>)&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> 3<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">OUT</span>=<span class="st0">&quot;<span class="es3">${INPUT}</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">CMD</span>=<span class="st0">&quot;-edl&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co0"># echo &quot;INPUT='${INPUT}'; VIDEO='${VIDEO}'; OUT='${OUT}'&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">${MPLAYER}</span> <span class="st0">&quot;<span class="es3">${VIDEO}</span>&quot;</span> <span class="co1">${CMD}</span> <span class="st0">&quot;<span class="es3">${OUT}</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;File \`$1' not found&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> 2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">shift</span><br />
<span class="kw1">done</span><br />
&nbsp;</div></fieldset></p>]]></description>
</item>
<item>
<title>[bash] atoi()</title>
<link>https://rulinux.net/message.php?newsid=43390&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43390&amp;page=1</guid>
<pubDate>Fri, 26 Feb 2021 07:22:10 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>bash</legend><div class="highlight bash"><br />
<span class="co0"># convert string to integer (base 10; leading zeros ignored)</span><br />
<span class="kw1">function</span> atoi <span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> len<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> res<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> ch<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">local</span> stop<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> == 1 <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">len</span>=<span class="co1">${#1}</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">res</span>=0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">stop</span>=0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> n <span class="kw1">in</span> <span class="sy0">`</span><span class="kw2">seq</span> 0 $<span class="br0">&#40;</span><span class="br0">&#40;</span>len-1<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">`</span>; <span class="kw1">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">ch</span>=<span class="co1">${1:$n:1}</span><br />
<span class="co0"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo &quot;$n: ${ch}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-n</span> <span class="st0">&quot;<span class="es3">${ch//[0-9]}</span>&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">stop</span>=1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="co1">${stop}</span> <span class="re5">-eq</span> 0 <span class="br0">&#93;</span>; <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">res</span>=$<span class="br0">&#40;</span><span class="br0">&#40;</span>res<span class="sy0">*</span>10+ch<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;<span class="es3">${res}</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div></fieldset><br><br>Пример использования: <fieldset><legend>bash</legend><div class="highlight bash"><br />
<span class="re2">VAL</span>=$<span class="br0">&#40;</span>atoi <span class="st0">&quot;2435&quot;</span><span class="br0">&#41;</span><br />
&nbsp;</div></fieldset></p>]]></description>
</item>
<item>
<title>Тот же malloc, но в отдельной куче</title>
<link>https://rulinux.net/message.php?newsid=43275&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43275&amp;page=1</guid>
<pubDate>Thu, 08 Aug 2019 21:16:35 +0300</pubDate>
<description><![CDATA[<p>Хочется выделить отдельный от кучи регион в адресном пространстве, ну, скажем 1 терабайт, и распределять в нём память ровно так же, как это делает malloc. Ну то есть альтернативную кучу. Что-то не вижу как это можно было бы сделать в сишечке.</p>]]></description>
</item>
<item>
<title>Ебучий шелл</title>
<link>https://rulinux.net/message.php?newsid=43273&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43273&amp;page=1</guid>
<pubDate>Mon, 05 Aug 2019 23:13:27 +0300</pubDate>
<description><![CDATA[<p>Зогадко:

<fieldset><legend>bash</legend><div class="highlight bash"><br />
$ <span class="kw2">mkdir</span> X<br />
$ <span class="kw2">ln</span> <span class="re5">-s</span> <span class="re5">-f</span> X Y<br />
$ <span class="kw2">rm</span> <span class="re5">-rf</span> .<span class="sy0">/</span>X<br />
$ <span class="kw2">mkdir</span> X<br />
$ <span class="kw2">ln</span> <span class="re5">-s</span> <span class="re5">-f</span> X Y<br />
$ <span class="kw2">ls</span> X<span class="sy0">/</span><br />
&nbsp;</div></fieldset>

Вобщем создал пустой каталог Х, сделал на него симлинк У. Потом убил каталог Х и создал его заново. Обновил симлинк той же командой, какой его создал. Спрашивается - что у нас теперь в каталоге Х?</p>]]></description>
</item>
<item>
<title>[bash] Как взять модуль числа?</title>
<link>https://rulinux.net/message.php?newsid=43217&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43217&amp;page=1</guid>
<pubDate>Fri, 08 Feb 2019 14:11:01 +0300</pubDate>
<description><![CDATA[<p>-5 -&gt; 5. Можно за пределами баша. Сходу даже в bc не нашёл такой функции :(<br><br>Или может кто придумает лучшее решение для следующего набора данных?<br><br><fieldset><legend>text</legend><div class="highlight text"><br />
2 -&gt; 75<br />
3 -&gt; 50<br />
4 -&gt; 25<br />
<br />
6 -&gt; 25<br />
7 -&gt; 50<br />
8 -&gt; 75<br />
&nbsp;</div></fieldset><br><br>Я пока только придумал |25 * (n - 5)|, но нужен пресловутый модуль числа.</p>]]></description>
</item>
<item>
<title>make - файлы с пробелами в имени?</title>
<link>https://rulinux.net/message.php?newsid=43178&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=43178&amp;page=1</guid>
<pubDate>Wed, 25 Jul 2018 08:02:49 +0300</pubDate>
<description><![CDATA[<p>Народ, а чем бы заменить make чтобы корректно работало с современными именами файлов? Для мейка вроде есть какой-то патч, но чота он до сих пор не включен в релизы, а хотелось бы чтобы работало везде.</p>]]></description>
</item>
<item>
<title>чем нажать кнопку на приложении?</title>
<link>https://rulinux.net/message.php?newsid=42929&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42929&amp;page=1</guid>
<pubDate>Fri, 30 Jun 2017 07:46:29 +0300</pubDate>
<description><![CDATA[<p>есть одна игрушка, браузеная, нужно жать мышкой в определенную область экрана во флешприложении. на чем это можно написать? под x-ами естественно</p>]]></description>
</item>
<item>
<title>Dr.Uid - а почему у меня строки без коммита сохраняются?</title>
<link>https://rulinux.net/message.php?newsid=42837&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42837&amp;page=1</guid>
<pubDate>Sat, 25 Feb 2017 15:47:40 +0300</pubDate>
<description><![CDATA[<p>Делаю тестовую базу:
<br>
<fieldset><legend>sql</legend><div class="highlight sql"><br />
sqlite3 test1<span class="sy0">.</span>sqlite <span class="sy0">&lt;&lt;</span>EOF<br />
&nbsp; <span class="kw1">CREATE</span> <span class="kw1">TABLE</span> table1<span class="br0">&#40;</span><span class="kw1">KEY</span> varchar<span class="br0">&#40;</span>8<span class="br0">&#41;</span><span class="sy0">,</span> val integer<span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">INSERT</span> <span class="kw1">INTO</span> table1 <span class="kw1">VALUES</span><span class="br0">&#40;</span><span class="st0">'counter'</span><span class="sy0">,</span>0<span class="br0">&#41;</span>;<br />
<span class="sy0">.</span>quit<br />
EOF<br />
&nbsp;</div></fieldset>
<br><br>

Вот такой хелловорлд, который апдейтит строку, вставляет ещё одну и просто выходит:
<br>
<fieldset><legend>c</legend><div class="highlight c"><br />
<span class="coMULTI">/*<br />
&nbsp;* &nbsp;Test utility incrementing field in the table<br />
&nbsp;* &nbsp;Compilation string:<br />
&nbsp;* &nbsp; &nbsp;gcc -o test1 test1.c -lsqlite3<br />
&nbsp;* <br />
&nbsp;* &nbsp;SQLite API: http://www.sqlite.org/c3ref/intro.html<br />
&nbsp;* &nbsp; Res.codes: http://www.sqlite.org/rescode.html<br />
&nbsp;* <br />
&nbsp;*/</span><br />
<span class="co2">#include &lt;sqlite3.h&gt;</span><br />
<span class="co2">#include &lt;unistd.h&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<br />
<br />
<span class="kw4">void</span> fuckup<span class="br0">&#40;</span>sqlite3 <span class="sy0">*</span>dbp<span class="sy0">,</span> <span class="kw4">char</span> <span class="sy0">*</span> sqliteErrorStr<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> custonMsg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>NULL <span class="sy0">!=</span> sqliteErrorStr<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;sqlite error: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqliteErrorStr<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlite3_free<span class="br0">&#40;</span>sqliteErrorStr<span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>NULL <span class="sy0">!=</span> custonMsg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;%s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> custonMsg<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Lib version: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqlite3_libversion<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; sqlite3_close<span class="br0">&#40;</span>dbp<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _exit<span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; sqlite3 <span class="sy0">*</span>db<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw4">int</span> rc <span class="sy0">=</span> sqlite3_open<span class="br0">&#40;</span><span class="st0">&quot;./test1.sqlite&quot;</span><span class="sy0">,</span> <span class="sy0">&amp;</span>db<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Факап нах: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqlite3_errmsg<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Lib version: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqlite3_libversion<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; sqlite3_close<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw4">char</span> <span class="sy0">*</span>err_msg <span class="sy0">=</span> NULL<span class="sy0">;</span><br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_exec<span class="br0">&#40;</span>db<span class="sy0">,</span> <span class="st0">&quot;update table1 set val=val+1 where key='counter'&quot;</span><span class="sy0">,</span> 0<span class="sy0">,</span> 0<span class="sy0">,</span> <span class="sy0">&amp;</span>err_msg<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> err_msg<span class="sy0">,</span> <span class="st0">&quot; &nbsp;# error is in update table1&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/* ===============================================================<br />
&nbsp; &nbsp; &nbsp;* &nbsp; Below insert is done in addendum to updating string above<br />
&nbsp; &nbsp; &nbsp;* &nbsp; this part can be removed since it does not add up anything<br />
&nbsp; &nbsp; &nbsp;* ===============================================================<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
<br />
&nbsp; &nbsp; sqlite3_stmt <span class="sy0">*</span>res<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_prepare_v2<span class="br0">&#40;</span>db<span class="sy0">,</span> <span class="st0">&quot;insert into table1 values('PID', :pid)&quot;</span><span class="sy0">,</span> <span class="sy0">-</span>1<span class="sy0">,</span> <span class="sy0">&amp;</span>res<span class="sy0">,</span> NULL<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Error in sqlite3_prepare_v2: %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> rc<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> NULL<span class="sy0">,</span> sqlite3_errmsg<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw4">int</span> idx<span class="sy0">=</span>sqlite3_bind_parameter_index<span class="br0">&#40;</span>res<span class="sy0">,</span><span class="st0">&quot;:pid&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span> <span class="sy0">&gt;=</span> idx <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;sqlite3_bind_parameter_index: %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> idx<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> NULL<span class="sy0">,</span> sqlite3_errmsg<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_bind_int<span class="br0">&#40;</span>res<span class="sy0">,</span> idx<span class="sy0">,</span> getpid<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> err_msg<span class="sy0">,</span> <span class="st0">&quot; &nbsp;# error is in sqlite3_bind_int&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_step<span class="br0">&#40;</span>res<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_DONE <span class="sy0">==</span> rc<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;OK, done!<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_ROW <span class="sy0">==</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;sqlite3_step ROW: %s | %s <span class="es1">\n</span>&quot;</span><span class="sy0">,</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlite3_column_text<span class="br0">&#40;</span>res<span class="sy0">,</span> 0<span class="br0">&#41;</span><span class="sy0">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlite3_column_text<span class="br0">&#40;</span>res<span class="sy0">,</span> 1<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Errror %d in sqlite3_step: <span class="es1">\n</span>&quot;</span><span class="sy0">,</span> rc<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> NULL<span class="sy0">,</span> sqlite3_errstr<span class="br0">&#40;</span>rc<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/* ==========================================<br />
&nbsp; &nbsp; &nbsp;* &nbsp; Just EXIT, no commit executed<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* &nbsp; Intentionally not calling functions below: <br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* &nbsp; &nbsp; sqlite3_finalize(res)<br />
&nbsp; &nbsp; &nbsp;* &nbsp; &nbsp; sqlite3_close(db)<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* ==========================================<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div></fieldset>

<br><br>
Результат такой:
<br>
<fieldset><legend>bash</legend><div class="highlight bash"><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># rm test1.sqlite</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># sqlite3 test1.sqlite &lt;&lt;EOF</span><br />
<span class="sy0">&gt;</span> &nbsp; create table table1<span class="br0">&#40;</span>key varchar<span class="br0">&#40;</span>8<span class="br0">&#41;</span>, val integer<span class="br0">&#41;</span>;<br />
<span class="sy0">&gt;</span> &nbsp; insert into table1 values<span class="br0">&#40;</span><span class="st_h">'counter'</span>,0<span class="br0">&#41;</span>;<br />
<span class="sy0">&gt;</span> .quit<br />
<span class="sy0">&gt;</span> EOF<br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># sqlite3 test1.sqlite &lt;&lt;EOF</span><br />
<span class="sy0">&gt;</span> &nbsp; <span class="kw1">select</span> <span class="sy0">*</span> from table1;<br />
<span class="sy0">&gt;</span> .exit<br />
<span class="sy0">&gt;</span> EOF<br />
counter<span class="sy0">|</span><span class="nu0">0</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># gcc -o test1 test1.c -lsqlite3 -Wall</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># ./test1 </span><br />
OK, <span class="kw1">done</span><span class="sy0">!</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># ./test1 </span><br />
OK, <span class="kw1">done</span><span class="sy0">!</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># sqlite3 test1.sqlite &lt;&lt;EOF</span><br />
&nbsp; <span class="kw1">select</span> <span class="sy0">*</span> from table1;<br />
.exit<br />
EOF<br />
counter<span class="sy0">|</span>2<br />
PID<span class="sy0">|</span>29343<br />
PID<span class="sy0">|</span><span class="nu0">29390</span><br />
<br />
&nbsp;</div></fieldset>
<br><br>
т.е. всё сохраняется. Что я делаю не так?</p>]]></description>
</item>
<item>
<title>чем такую строку распарсить</title>
<link>https://rulinux.net/message.php?newsid=42768&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42768&amp;page=1</guid>
<pubDate>Tue, 13 Dec 2016 13:51:45 +0300</pubDate>
<description><![CDATA[<p>http://server.ru/show.php?lt=%u0074%u0072%u0061%u006e%u0073%u005f%u006d%u0069%u006e%u0069%u002e%u0070%u0068%u0070%u003f%u0069%u0064%u003d%u0034%u0030%u0039%u0031%u0031%u0030%u0030%u0026%u0077%u0068%u003d%u0074%u0072%u0061%u006e%u0073%u0069%u0065%u006e%u0074%u0073%u002e%u0069%u0064%u003d%u0034%u0030%u0039%u0031%u0031%u0030%u0030&amp;i1=%u0070%u0072%u0065%u0076%u002e%u0070%u0068%u0070%u003f%u0078%u0063%u003d%u0032%u0030%u0034%u002e%u0038%u0038%u0035%u0039%u0031%u0036%u0036%u0036%u0036%u0036%u0037%u0026%u0079%u0063%u003d%u002d%u0033%u0039%u002e%u0030%u0036%u0038%u0033%u0035%u0026%u0078%u0073%u003d%u0030%u002e%u0031%u0026%u0079%u0073%u003d%u0030%u002e%u0031%u0026%u0075%u006d%u0069%u006e%u003d%u002d%u0031%u0026%u0075%u006d%u0061%u0078%u003d%u0034%u002e%u0035%u0026%u0066%u0069%u0074%u0073%u003d%u002f%u006d%u0061%u0073%u0074%u0065%u0072%u002f%u0069%u006d%u0064%u0061%u0074%u0061%u002f%u0070%u0072%u006f%u0064%u0061%u0074%u0061%u002f%u002f%u0032%u0030%u0031%u0036%u002f%u0031%u0032%u002f%u0031%u0032%u002f%u0030%u0030%u0034%u0032%u0039%u0031%u0038%u0036%u002f%u0073%u002e%u0066%u0069%u0074%u002e%u0067%u007a%u0026%u0073%u0063%u0061%u006c%u0065%u003d%u0032%u0026%u0061%u0075%u0074%u006f%u0066%u006c%u0069%u0070%u003d%u0031%u0026%u0070%u006c%u006f%u0074%u005f%u0063%u006e%u0074%u003d%u0031%u0026%u0073%u006b%u0079%u0063%u006f%u006f%u0072%u0064%u003d%u0031%u0026%u0061%u0064%u0064%u0064%u0073%u0073%u003d%u0031%u0026%u0063%u0061%u0074%u003d%u002f%u006d%u0061%u0073%u0074%u0065%u0072%u002f%u0069%u006d%u0064%u0061%u0074%u0061%u002f%u0070%u0072%u006f%u0064%u0061%u0074%u0061%u002f%u002f%u0032%u0030%u0031%u0036%u002f%u0031%u0032%u002f%u0031%u0032%u002f%u0030%u0030%u0034%u0032%u0039%u0031%u0038%u0036%u002f%u0073%u002e%u0063%u0061%u0074%u0026%u0064%u0074%u0070%u003d%u0032%u0030%u0031%u0036%u002d%u0031%u0032%u002d%u0031%u0032%u0020%u0030%u0032%u003a%u0030%u0037%u003a%u0031%u0039%u002e%u0036%u0037%u0036&amp;i2=%u0074%u0072%u0061%u0061%u0064%u0064%u002e%u0070%u0068%u0070%u003f%u0072%u0061%u003d%u0032%u0030%u0034%u002e%u0038%u0038%u0035%u0039%u0031%u0036%u0036%u0036%u0036%u0036%u0037%u0026%u0064%u0065%u0063%u003d%u002d%u0033%u0039%u002e%u0030%u0036%u0038%u0033%u0035%u0026%u0069%u0064%u0031%u003d%u0034%u0032%u0039%u0031%u0038%u0036%u0026%u0069%u0064%u0032%u003d%u0034%u0032%u0039%u0031%u0038%u0030%u0026%u0069%u0064%u0033%u003d%u0032%u0035%u0034%u0036%u0034%u0026%u0073%u0069%u007a%u0065%u003d%u0030%u002e%u0031%u0026%u0064%u0074%u0070%u003d%u0032%u0030%u0031%u0036%u002d%u0031%u0032%u002d%u0031%u0032%u0020%u0030%u0032%u003a%u0030%u0037%u003a%u0031%u0039%u002e%u0036%u0037%u0036&amp;%D0%B5<br><br>это строка урл-запроса <br><br>спасибо!</p>]]></description>
</item>
<item>
<title>А почему Qt company такое УГ?</title>
<link>https://rulinux.net/message.php?newsid=42695&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42695&amp;page=1</guid>
<pubDate>Thu, 13 Oct 2016 18:13:43 +0300</pubDate>
<description><![CDATA[<p>В общем, мои сладенькие, сей фреймворк решил потыкать палочкой я. Оно и очевидно. GKT уже воняет, а тут вроде плюсцы и всё такое... Но сразу наткнулся на неприятный баг, связанный с QStringLiteral. В общем смотрим код:<br><br> <fieldset><legend>cpp</legend><div class="highlight cpp"><br />
<span class="co2"># &nbsp;define QStringLiteral(str) \<br />
&nbsp; &nbsp; ([]() -&gt; QString { \<br />
&nbsp; &nbsp; &nbsp; &nbsp; enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \<br />
&nbsp; &nbsp; &nbsp; &nbsp; static const QStaticStringData&lt;Size&gt; qstring_literal = { \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Q_STATIC_STRING_DATA_HEADER_INITIALIZER(Size), \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QT_UNICODE_LITERAL(str) }; \<br />
&nbsp; &nbsp; &nbsp; &nbsp; QStringDataPtr holder = { qstring_literal.data_ptr() }; \<br />
&nbsp; &nbsp; &nbsp; &nbsp; const QString qstring_literal_temp(holder); \<br />
&nbsp; &nbsp; &nbsp; &nbsp; return qstring_literal_temp; \<br />
&nbsp; &nbsp; }()) \<br />
&nbsp; &nbsp; /**/</span><br />
&nbsp;</div></fieldset><br><br>Видим, что вся оптимизация сводится к созданию статической переменной qstring_literal для каждой строки. А дальше начинается самое весёлое. Эти перцы взяли, да и тупо заменили все сроки на QStringLiteral. Меня, конечно, спросят. А ололо? А не похуй ли? Но тут начинается веселуха. Посоны и не знали, что куйтя грузит плагинчики через dlopen. И если два разных автора написали два разных плагина для одной программы, то есть вероятность, что какой-то из классов у них будет с одинаковым именем. В общем мну в ахуе, но одинаковые статические переменные конфликтуют между собой, даже если их распихать по плагинам и использовать dlopen. Вероятность этого, конечно, не велика и редко когда реально вылазит, но, блджал, у нас есть uic, который генерит ui_*.h с кучей этих ваших QStringLiteral. Так что не удивляйтесь, если в формочке вдруг вылезли левые названия. Скорее всего дело в этом.<br><br> Но сия проблема, конечно, легко обходится посредством переименования формочек, ну или с -fvisivility=hidden поиграться, как вариант. Но дальше ещё интереснее. Если мы выгрузим плугин, то можем схватить сегфолт по причине того, что где-то используется указатель на этот ваш сраный QStringLiteral. Но, видим, что команда занята поиском таких вот багов уже на протяжении нескольких лет. Что я могу сказать? Каждый дрочит как хочет: <br><br><div class="quote"><pre>git log | grep QStringLiteral | wc -l<br><br>124</pre></div><br><br> Ну а дальше ололо, мои сраные товарищи.<br><br> Один из главных индусов предлагает вообще не выгружать плагины. Пруф <a href="http://lists.qt-project.org/pipermail/development/2016-October/027476.html">http://lists.qt-project.org/pipermail/development/2016-October/027476.html</a> Речь идёт про внутренние плагины Qt, если что. А тут чувак просто охуевает от такого решения <a href="http://lists.qt-project.org/pipermail/development/2016-October/027483.html">http://lists.qt-project.org/pipermail/development/2016-October/027483.html</a> Так что, мои любители подрочить на Qt, попрошу забыть про valgrind. Он не нужен.<br><br><br><br> В общем мну бешено негодует и думает таки написать жалобу Линусу. Ололол, дискас. </p>]]></description>
</item>
<item>
<title> [assembler] [preprocessor] преобразовать имя регистра в его номер</title>
<link>https://rulinux.net/message.php?newsid=42671&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42671&amp;page=1</guid>
<pubDate>Thu, 22 Sep 2016 18:54:20 +0300</pubDate>
<description><![CDATA[<p>Компилятор не знает некоторых иструкций процессора. Чтобы вставить их в ассемблерный код я написал макрос, который формирует код нужной инструкции из аргументов. Один из аргументов, который должен попасть в код инструкции - номер регистра. Регистр передается макросу в виде &quot;$N&quot;, где N - собственно номер регистра (N=0..31). Чтобы засунуть его в opcode нужно преобразовать &quot;$N&quot; в &quot;N&quot; и произвести над N арифметическую операцию. Как бы это сделать средствами препроцессора?<br><br>Т.е. хочется как-то так:<br><br> <fieldset><legend>asm</legend><div class="highlight asm"><br />
<br />
#define OP_OFFSET 24<br />
#define REG_OFFSET 16<br />
<br />
#define SUPER_OP 0xbe<br />
<br />
<span class="sy0">.</span><span class="kw4">macro</span> super_ins reg<br />
<span class="sy0">.</span><span class="kw5">word</span> <span class="br0">&#40;</span>SUPER_OP &lt;&lt; OP_OFFSET<span class="br0">&#41;</span> | <span class="br0">&#40;</span>\reg &lt;&lt; REG_OFFSET<span class="br0">&#41;</span><br />
<span class="sy0">.</span><span class="kw4">endm</span><br />
<br />
super_ins $<span class="nu0">4</span><br />
super_ins $<span class="nu0">5</span><br />
super_ins $<span class="nu0">6</span><br />
<br />
&nbsp;</div></fieldset><br><br>Но в этом примере вместо \reg будет подставлено $4 ($5, $6) и компилятор выдаст ошибку. Нужно чтобы вместо $4 подставилось просто 4.<br><br>Пока я сделал по тупому: перекладываем значение из регистра-аргумента во временный регистр $1 и формируем opcode с временным регистром. Но хочется избавиться от лишней инструкции.<br><br> <fieldset><legend>asm</legend><div class="highlight asm"><br />
<br />
<span class="sy0">.</span><span class="kw4">macro</span> super_ins reg<br />
<span class="sy0">.</span>set <span class="kw1">push</span><br />
<span class="sy0">.</span>set noat<br />
<br />
move $1<span class="sy0">,</span> \reg<br />
<span class="sy0">.</span><span class="kw5">word</span> <span class="br0">&#40;</span>SUPER_OP &lt;&lt; OP_OFFSET<span class="br0">&#41;</span> | <span class="br0">&#40;</span>1 &lt;&lt; REG_OFFSET<span class="br0">&#41;</span><br />
<br />
<span class="sy0">.</span>set <span class="kw1">pop</span><br />
<span class="sy0">.</span><span class="kw4">endm</span><br />
<br />
&nbsp;</div></fieldset><br><br>ассемблер mips-linux-gnu-gcc<br><br></p>]]></description>
</item>
<item>
<title>[C] Собрать кучу h-файлов в один большой</title>
<link>https://rulinux.net/message.php?newsid=42588&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42588&amp;page=1</guid>
<pubDate>Fri, 15 Jul 2016 15:22:42 +0300</pubDate>
<description><![CDATA[<p>Дано: куча мелких h-файлов, объявляющих и определяющих свои узкоспециализированные функции.<br><br>Хочу: на выходе получить один большой h-файл, включающий в себя все мелкие. Для примера см. sqlite3.c, который включает в себя 102 отдельных файла, т. н. <a href="http://www.sqlite.org/amalgamation.html">амальгамация</a>.<br><br>Как такого добиться?<br><br>Пока что у меня вот такая команда: gcc -E input.h -nostdinc -C &gt; input_full.h, но там все макросы исчезли и вообще каша на выходе. А хотелось бы получить более-менее читаемый файл.<br><br>ЗЫ input.h <fieldset><legend>C</legend><div class="highlight C"><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;time.h&gt;</span><br />
<br />
<span class="co2">#include &quot;some_file.h&quot;</span><br />
<span class="co2">#include &quot;some_cool_file.h&quot;</span><br />
<span class="co2">#include &quot;another_file.h&quot;</span><br />
<br />
<span class="kw4">int</span> cool_func <span class="br0">&#40;</span><span class="kw4">int</span> a<span class="sy0">,</span> <span class="kw4">char</span> <span class="sy0">*</span>msg<span class="sy0">,</span> <span class="kw4">void</span> <span class="sy0">*</span>ptr<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ptr <span class="sy0">==</span> NULL<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; random<span class="br0">&#40;</span>time<span class="br0">&#40;</span>NULL<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%d: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> a<span class="sy0">,</span> msg<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div></fieldset></p>]]></description>
</item>
<item>
<title>[C] Как справиться с float?</title>
<link>https://rulinux.net/message.php?newsid=42561&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42561&amp;page=1</guid>
<pubDate>Thu, 30 Jun 2016 14:35:04 +0300</pubDate>
<description><![CDATA[<p>Дано:<br><br><fieldset><legend>c</legend><div class="highlight c"><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<br />
<span class="kw4">int</span> main <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">float</span> x <span class="sy0">=</span> <span class="nu16">319.870806</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">float</span> y <span class="sy0">=</span> <span class="nu16">207.611958</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%f %f<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> x<span class="sy0">,</span> y<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; <br />
&nbsp;</div></fieldset><br><br>На выходе имеем:<br><br><fieldset><legend>text</legend><div class="highlight text"><br />
&gt;./a.out <br />
319.870819 207.611954<br />
&nbsp;</div></fieldset><br><br>Обратите внимание на последние цифры: было ...806, стало ...819; было ... 958, стало ...954. Какого, простите, №%#$?!! Как с таким поведением бороться?</p>]]></description>
</item>
<item>
<title>хочу себе такой редактор!</title>
<link>https://rulinux.net/message.php?newsid=42513&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42513&amp;page=1</guid>
<pubDate>Tue, 03 May 2016 16:57:24 +0300</pubDate>
<description><![CDATA[<p>https://github.com/JoelBesada/activate-power-mode<br><br>АААААААА!!!</p>]]></description>
</item>
<item>
<title> [C/C++] а какую короткую запись посоветуйте для тройного варианта ?</title>
<link>https://rulinux.net/message.php?newsid=42481&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42481&amp;page=1</guid>
<pubDate>Thu, 07 Apr 2016 06:46:04 +0300</pubDate>
<description><![CDATA[<p>наподобие записи для двойного<br><br>x = a ? b : c;<br><br>надо чето-то типа такого, но покороче <fieldset><legend>cpp</legend><div class="highlight cpp"><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>a1<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a2<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x <span class="sy1">=</span> b1<span class="sy4">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; x <span class="sy1">=</span> b2<span class="sy4">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; x <span class="sy1">=</span> c<span class="sy4">;</span><br />
<span class="br0">&#125;</span> <br />
&nbsp;</div></fieldset><br><br>так работать будет?<br><br>x = a1 ? (a2 ? b1 : b2) : c; </p>]]></description>
</item>
<item>
<title> websocket: долбило для тестирования</title>
<link>https://rulinux.net/message.php?newsid=42480&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42480&amp;page=1</guid>
<pubDate>Tue, 05 Apr 2016 08:56:23 +0300</pubDate>
<description><![CDATA[<p>нашел в сети тестилку многопроцессных приложений, например завалиться в чат, и раз в секунду что то там вякнуть, например на одновременно 1000 соединений<br><br><a href="https://github.com/machinezone/tcpkali">https://github.com/machinezone/tcpkali</a></p>]]></description>
</item>
<item>
<title>Нужна помощь тестеров.</title>
<link>https://rulinux.net/message.php?newsid=42464&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42464&amp;page=1</guid>
<pubDate>Sat, 19 Mar 2016 03:42:24 +0300</pubDate>
<description><![CDATA[<p>У кого процессоры Intel (любые, лишь бы sse3 поддерживали), можете помочь, запустив пару бенчмарков из моей библиотеки воксельной графики?<br><br>Зависимости там SDL1.2 и <a href="https://github.com/ndevilla/iniparser">iniparser</a> (во фряхе есть для последнего порт). Делать нужно так:<br><br><fieldset><legend>text</legend><div class="highlight text"><br />
git clone git://github.com/shamazmazum/voxvision.git<br />
cd voxvision<br />
mkdir build<br />
mkdir build-sse<br />
<br />
cd build<br />
cmake -DCMAKE_BUILD_TYPE=RELEASE ..<br />
make<br />
make run-benchmarks-voxrnd<br />
<br />
cd ../build-sse<br />
cmake -DCMAKE_BUILD_TYPE=RELEASE -DSSE_INTRIN=ON ..<br />
make<br />
make run-benchmarks-voxrnd<br />
&nbsp;</div></fieldset><br><br>Нужно предоставить вывод make run-benchmarks-voxrnd из двух конфигураций. Там ещё можно поиграться с рендерером, но если у вас не фряха с GCD, то будет адово тормозить.</p>]]></description>
</item>
<item>
<title> c++ final class почему компилятор не делает inline</title>
<link>https://rulinux.net/message.php?newsid=42460&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42460&amp;page=1</guid>
<pubDate>Fri, 18 Mar 2016 10:06:48 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>cpp</legend><div class="highlight cpp"><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">struct</span> A<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">virtual</span> <span class="kw4">long</span> fun<span class="br0">&#40;</span><span class="kw4">long</span> a<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a<span class="sy2">+</span><span class="nu0">11</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">struct</span> A2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">virtual</span> <span class="kw4">long</span> fun2<span class="br0">&#40;</span><span class="kw4">long</span> a<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a<span class="sy2">+</span><span class="nu0">44</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">struct</span> C<span class="sy4">:</span> <span class="kw2">public</span> A<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">long</span> fun<span class="br0">&#40;</span><span class="kw4">long</span> a<span class="br0">&#41;</span> final<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a<span class="sy2">+</span><span class="nu0">33</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">struct</span> D final<span class="sy4">:</span> <span class="kw2">public</span> A2<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">long</span> gmain<span class="br0">&#40;</span><span class="kw4">long</span> j, C <span class="sy3">&amp;</span>c, D <span class="sy3">&amp;</span>d<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j <span class="sy1">=</span> c.<span class="me1">fun</span><span class="br0">&#40;</span>j<span class="br0">&#41;</span><span class="sy4">;</span> &nbsp; <span class="co1">// direct &nbsp; j = j1 + 33</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j<span class="sy2">*</span><span class="sy1">=</span><span class="nu0">141</span><span class="sy4">;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// 45 * (j1+33) * 141 = j1*141 + 4653</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j <span class="sy1">=</span> d.<span class="me1">fun2</span><span class="br0">&#40;</span>j<span class="br0">&#41;</span><span class="sy4">;</span> &nbsp;<span class="co1">// direct? &nbsp;j = j1*141 + 4697</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j<span class="sy2">*</span><span class="sy1">=</span><span class="nu0">151</span><span class="sy4">;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// == j1*21291 + 709247</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> j<span class="sy4">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp;</div></fieldset><br><br>результат (gcc 5.3.0), /opt/gdc/bin/g++ -std=c++11 -O3 -S virt-cpp-inline.cpp<br><br><fieldset><legend>asm</legend><div class="highlight asm"><br />
<br />
&nbsp; &nbsp; <span class="sy0">.</span>globl &nbsp;_Z5gmainlR1CR1D<br />
&nbsp; &nbsp; <span class="sy0">.</span><span class="kw4">type</span> &nbsp; _Z5gmainlR1CR1D<span class="sy0">,</span> @function<br />
_Z5gmainlR1CR1D<span class="sy0">:</span><br />
<span class="sy0">.</span>LFB3<span class="sy0">:</span><br />
&nbsp; &nbsp; <span class="sy0">.</span>cfi_startproc<br />
&nbsp; &nbsp; leaq &nbsp; &nbsp;33<span class="br0">&#40;</span><span class="sy0">%</span>rdi<span class="br0">&#41;</span><span class="sy0">,</span> <span class="sy0">%</span>rax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;&lt; inline<br />
&nbsp; &nbsp; imulq &nbsp; $141<span class="sy0">,</span> <span class="sy0">%</span>rax<span class="sy0">,</span> <span class="sy0">%</span>rsi<br />
&nbsp; &nbsp; movq &nbsp; &nbsp;<span class="br0">&#40;</span><span class="sy0">%</span>rdx<span class="br0">&#41;</span><span class="sy0">,</span> <span class="sy0">%</span>rax<br />
&nbsp; &nbsp; movq &nbsp; &nbsp;<span class="br0">&#40;</span><span class="sy0">%</span>rax<span class="br0">&#41;</span><span class="sy0">,</span> <span class="sy0">%</span>rax<br />
&nbsp; &nbsp; cmpq &nbsp; &nbsp;$_ZN2A24fun2El<span class="sy0">,</span> <span class="sy0">%</span>rax<br />
&nbsp; &nbsp; <span class="kw1">jne</span> <span class="sy0">.</span>L3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;&lt; virtual inline ?<br />
&nbsp; &nbsp; leaq &nbsp; &nbsp;44<span class="br0">&#40;</span><span class="sy0">%</span>rsi<span class="br0">&#41;</span><span class="sy0">,</span> <span class="sy0">%</span>rax<br />
&nbsp; &nbsp; imulq &nbsp; $151<span class="sy0">,</span> <span class="sy0">%</span>rax<span class="sy0">,</span> <span class="sy0">%</span>rax<br />
&nbsp; &nbsp; <span class="kw1">ret</span><br />
&nbsp; &nbsp; <span class="sy0">.</span>p2align 4<span class="sy0">,,</span>10<br />
&nbsp; &nbsp; <span class="sy0">.</span>p2align 3<br />
<span class="sy0">.</span>L3<span class="sy0">:</span><br />
&nbsp; &nbsp; subq &nbsp; &nbsp;$8<span class="sy0">,</span> <span class="sy0">%</span>rsp<br />
&nbsp; &nbsp; <span class="sy0">.</span>cfi_def_cfa_offset 16<br />
&nbsp; &nbsp; movq &nbsp; &nbsp;<span class="sy0">%</span>rdx<span class="sy0">,</span> <span class="sy0">%</span>rdi<br />
&nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;<span class="sy0">*%</span>rax<br />
&nbsp; &nbsp; addq &nbsp; &nbsp;$8<span class="sy0">,</span> <span class="sy0">%</span>rsp<br />
&nbsp; &nbsp; <span class="sy0">.</span>cfi_def_cfa_offset 8<br />
&nbsp; &nbsp; imulq &nbsp; $151<span class="sy0">,</span> <span class="sy0">%</span>rax<span class="sy0">,</span> <span class="sy0">%</span>rax<br />
&nbsp; &nbsp; <span class="kw1">ret</span><br />
&nbsp; &nbsp; <span class="sy0">.</span>cfi_endproc<br />
&nbsp;</div></fieldset></p>]]></description>
</item>
<item>
<title>CL, usocket и timeout</title>
<link>https://rulinux.net/message.php?newsid=42451&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42451&amp;page=1</guid>
<pubDate>Fri, 11 Mar 2016 10:54:32 +0300</pubDate>
<description><![CDATA[<p>Надо же разбавить сие болото.<br><br>Вот, допустим, у меня есть такой код (упрощённый): <fieldset><legend>lisp</legend><div class="highlight lisp"><br />
<span class="br0">&#40;</span><span class="kw1">let</span>* <span class="br0">&#40;</span><span class="br0">&#40;</span>socket <span class="br0">&#40;</span>usocket<span class="sy0">:</span><span class="me1">socket-connect</span> server port <span class="sy0">:</span><span class="me1">timeout</span> timeout<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>stream <span class="br0">&#40;</span>make-stream socket encoding<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#40;</span><span class="kw1">do</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>line<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>read-line stream <span class="kw1">nil</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>read-line stream <span class="kw1">nil</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw1">not</span> line<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#40;</span>do-something-with-line<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp;</div></fieldset> Всё отлично, но возникают редкие ситуации, когда соединение хитрым образом рвётся, а цикл остаётся висеть на read-line до окончания времён.<br><br>Как я понимаю, timeout срабатывает только на установление соединения, а сам read-line спокойно может заблокировать текущий поток на неопределённое время (ну или я совсем что-то не то делаю). Предполагаю, что нужен какой-то таймаут на чтение, после которого можно будет всё это дело прервать и переконнектиться. Вопрос, собственно, в том, как его кроссплатформенно (SBCL, CCL, ECL, чем больше - тем лучше) реализовать наиболее красивым способом.<br><br>Сходу находится какой-то trivial-timeout, но он страшный, мёртвый и, по заверением разработчиков, может не работать. Второй вариант - <a href="https://groups.google.com/forum/#!topic/comp.lang.lisp/wi-FoUn9-dc">решение из comp.lang.lisp</a> с бесконечным циклом и sleep. Вроде бы должно сработать, но бесконечные циклы со sleep меня пугают (хотя можно, если прижмёт).Третье - поиграть с usocket:wait-for-input, но все его применяют для серверных вещей, а у меня типа клиентское.<br><br>Также в качестве извращённого варианта можно предложить какой-нибудь watchdog thread (у меня и так многопоточная штука), который будет проверять время последнего сработавшего read-line и рестартить треды по необходимости. Но это немного странно выглядит, да и надо хэш-таблицу с локами делать.<br><br>Может кто подскажет самое изящное и простое решение?</p>]]></description>
</item>
<item>
<title>Вывод быстроменяющихся данных из ядра в пользовательское пространство</title>
<link>https://rulinux.net/message.php?newsid=42385&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42385&amp;page=1</guid>
<pubDate>Thu, 28 Jan 2016 16:12:11 +0300</pubDate>
<description><![CDATA[<p>Здравствуйте! Очень нужен совет программистов-ядерщиков и всех кто имел дела с написанием/модификацией драйверов/модулей. Есть драйвер, который нужно малость допилить. В общем нужно в этом драйвере как-то считывать значения определенных регистров и передавать их в юзерспейс, причем значения эти быстроменяются (счетный регистр таймера). Сами функции считывания написаны, остается только придумать каким способом отслеживать эти значения из пользовательского пространства. В процессе поиска выяснилось, что можно использовать procfs, sysfs, Netlink, ioctl и наверняка много чего еще. В принципе из драйвера проброшены атрибуты в sysfs, так что можно сделать аналогичным образом, но я не знаю насколько быстро будет происходить обновление значения атрибута (файла в sysfs). Плюс мне не совсем до конца понятна вся концепция модели устройств. Если у кого есть хорошая-годная литература по этому всему, то я обязательно RTFM.</p>]]></description>
</item>
<item>
<title>а нет ли тут любителей R, которые умеют писать в нем GUI?</title>
<link>https://rulinux.net/message.php?newsid=42039&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42039&amp;page=1</guid>
<pubDate>Sat, 22 Nov 2014 08:54:12 +0300</pubDate>
<description><![CDATA[<p>очень-очень need help </p>]]></description>
</item>
<item>
<title>Как демон читает конфиги?</title>
<link>https://rulinux.net/message.php?newsid=42024&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=42024&amp;page=1</guid>
<pubDate>Tue, 18 Nov 2014 09:46:38 +0300</pubDate>
<description><![CDATA[<p>Доброго всем! Хочу написать свой демон на sh со своим же инитскриптом и конфигами. По ходу дела возникло много вопросов, т.к. новичек в этой теме. Ну и собсна сабж. Пробовал делать как-то по-своему, но получается архикриво ((( Подскажите, пожалуйста, пример или куда копать хотя б.</p>]]></description>
</item>
<item>
<title>[git] Заблудился в трёх branch-ах</title>
<link>https://rulinux.net/message.php?newsid=41920&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41920&amp;page=1</guid>
<pubDate>Wed, 15 Oct 2014 19:10:19 +0400</pubDate>
<description><![CDATA[<p>Есть у меня небольшой скрипт, который я переодически дополняю и исправляю. Поскольку с момента последней правки проходит достаточно времени, я конечно же всё, что касается сопровождения проекта в git, основательно забываю. Так и на этот раз. Исправил - закоммител. Исправил - захотел создать ветку. И тут получаю:<br><br><fieldset><legend>text</legend><div class="highlight text"><br />
&gt; git branch<br />
* (no branch)<br />
&nbsp; 3d<br />
&nbsp; master<br />
&nbsp;</div></fieldset><br><br>То есть, я каким-то непонятным для себя образом оказался вне какой-либо ветки. Но там есть коммиты, которые отличают эту &quot;не-ветку&quot; от master-а. В итоге, если перейти на любую другую ветку, например, git checkout -b master, то я теряю все свои изменения из &quot;не-ветка&quot;.<br><br>Можно ли как-то эту &quot;не-ветку&quot; присовокупить к какой-нибудь из двух веток, лучше к master? Серьёзных конфликтов при слиянии там не должно быть, так как все изменения незначительны.</p>]]></description>
</item>
<item>
<title>Привносим монады в PHP</title>
<link>https://rulinux.net/message.php?newsid=41654&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41654&amp;page=1</guid>
<pubDate>Fri, 01 Aug 2014 14:05:13 +0400</pubDate>
<description><![CDATA[<p>На хабре появилось статья &quot;Привносим монады в PHP&quot;. <br><br>Ну шо сказать, дорогая редакция, в PHP осталось воткнуть только монады. Нахуя зададите вы резонный вопрос. Хуй знает, наверно в основном что бы повысить значимость пыхеров (это те кто кроме пыха, прогал на других языках только в ВУЗе))) в обществе. И таки наметить пути дальнейшего повышения их зарплатных ожиданий)))</p>]]></description>
</item>
<item>
<title>Python</title>
<link>https://rulinux.net/message.php?newsid=41508&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41508&amp;page=1</guid>
<pubDate>Thu, 26 Jun 2014 12:27:42 +0400</pubDate>
<description><![CDATA[<p>При смене минорной версии интерпретатора, например с репозиторного 3.4 на левый 3.3, становится невозможен импорт репозиторных библиотек wxpython, pyside и т.д. <br><br>В чем проблема, как ее решать?</p>]]></description>
</item>
<item>
<title>[Решено]Название файла</title>
<link>https://rulinux.net/message.php?newsid=41416&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41416&amp;page=1</guid>
<pubDate>Sat, 07 Jun 2014 14:36:29 +0400</pubDate>
<description><![CDATA[<p>Хочу перекодировать каталог с видео avi в mkv. Написал простенький скрипт.<br><br>for i in *.avi; do 	avconv -i &quot;$i&quot; -c:v libx264 -c:a copy &quot;$i&quot;.mkv done<br><br>Проблема в том, что в название копируется предварительное расширение файла (avi). То есть из файла &quot;video.avi&quot; делается &quot;video.mkv&quot;<br><br>Как лечить?</p>]]></description>
</item>
<item>
<title>Пацаны хотите ...</title>
<link>https://rulinux.net/message.php?newsid=41139&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41139&amp;page=1</guid>
<pubDate>Fri, 04 Apr 2014 19:46:48 +0400</pubDate>
<description><![CDATA[<p>Сделаю плейлит по <a href="http://rulinux.net/thread_39153_page_1">содержимому темы </a> по юзерам и общую - хотите? Было бы прикольно не находите. <br><br>Соур конечно опубликую, питон наверно будет)))</p>]]></description>
</item>
<item>
<title>Посоветуйте чтонить</title>
<link>https://rulinux.net/message.php?newsid=41138&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41138&amp;page=1</guid>
<pubDate>Fri, 04 Apr 2014 16:26:42 +0400</pubDate>
<description><![CDATA[<p>Может кто сталкивался и т.д.<br><br>На питоне есть функции выдающие по параметрам полярные и декартовы координаты 2-мерные и 3-мерные. Хочется строить по ним изображения (графики) для наглядность. Хочется тоже в виде питоновских модулей или там где питоновкие модули можно подключить и использовать как источник данных.<br><br>Под линукс конечно же и фри или опен софтваре.</p>]]></description>
</item>
<item>
<title>А как послать сочетание Ctrl-X?</title>
<link>https://rulinux.net/message.php?newsid=41087&amp;page=1</link>
<guid>https://rulinux.net/message.php?newsid=41087&amp;page=1</guid>
<pubDate>Thu, 27 Mar 2014 17:35:11 +0400</pubDate>
<description><![CDATA[<p>Есть функция send(char * msg, int len). Как передать через неё управляющие команды типа Ctrl-x и пр.?</p>]]></description>
</item>
</channel>
</rss>