add blog, uses django-atompub - sfeed_tests - sfeed tests and RSS and Atom files
 (HTM) git clone git://git.codemadness.org/sfeed_tests
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit da288e5cc64e1ad840225e96a3be96662f7d7a50
 (DIR) parent 627538879a243435de10999fae80626ea58eea86
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Fri, 10 Jan 2025 16:58:54 +0100
       
       add blog, uses django-atompub
       
       https://jtauber.com/django-atompub/
       https://github.com/jtauber/django-atompub
       
       Diffstat:
         A input/sfeed/realworld/catap.ru_blo… |     107 +++++++++++++++++++++++++++++++
       
       1 file changed, 107 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/input/sfeed/realworld/catap.ru_blog_atom.xml b/input/sfeed/realworld/catap.ru_blog_atom.xml
       @@ -0,0 +1,106 @@
       +<?xml version="1.0" encoding="utf-8"?>
       +<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>http://catap.ru/blog/</id><title>catap's blog</title><updated>2013-12-29T22:15:54Z</updated><link href="http://catap.ru/blog/" rel="alternate"></link><link href="http://catap.ru/feeds/atom/blog/" rel="self"></link><author><name>Kirill A. Korinskiy</name></author><generator version="r33" uri="http://code.google.com/p/django-atompub/">django-atompub</generator><entry><id>http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/</id><title type="html">Сортированные значения для reducer </title><updated>2013-12-29T22:15:54Z</updated><published>2013-11-27T15:36:52Z</published><category term="hadoop"></category><category term="map reduce"></category><category term="tech"></category><link href="http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/" rel="self"></link><link href="http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/" rel="alternate"></link><content type="html">&lt;p&gt;Коллеги,&lt;/p&gt;
       +
       +&lt;p&gt;Есть хитрость, которая позволяет упростить логику reducer если подавать ему сразу отсортированные значения. Код который это делает: &lt;a href="https://gist.github.com/catap/3aabd33b86c0fc5620aa"&gt;https://gist.github.com/catap/3aabd33b86c0fc5620aa&lt;/a&gt;&lt;/p&gt;
       +
       +&lt;!--more--&gt;
       +
       +&lt;p&gt;Немного footnote по&amp;nbsp;коду.&lt;/p&gt;
       +
       +&lt;p&gt;В &lt;a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapred/MapTask.java#L1116"&gt;Comparator&lt;/a&gt;/&lt;a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/ReduceContext.java#L121"&gt;Grouping&lt;/a&gt; внятным образом получить доступ к value нельзя, приходиться делать составной ключ, который будет включать в&amp;nbsp;себя:&lt;/p&gt;
       +
       +&lt;ul&gt;
       +&lt;li&gt;ключ по которому будут&amp;nbsp;группировать.&lt;/li&gt;
       +&lt;li&gt;значения, или их часть, которые будут использоваться для&amp;nbsp;сортировки.&lt;/li&gt;
       +&lt;/ul&gt;
       +
       +&lt;p&gt;Соотвествено:&lt;/p&gt;
       +
       +&lt;ul&gt;
       +&lt;li&gt;Grouping сравниваются&amp;nbsp;ключи.&lt;/li&gt;
       +&lt;li&gt;Comparator сравниваются ключи и если они совпали, идет логика&amp;nbsp;сортировки.&lt;/li&gt;
       +&lt;/ul&gt;
       +
       +&lt;p&gt;Вроде все прекрасно и все танцуют, но, в hadoop по умолчанию Partitioner использует &lt;a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/lib/partition/HashPartitioner.java#L29"&gt;hashCode&lt;/a&gt; для балансировки ключей по partition. Соответственно, либо реализуем свой hashCode, либо свой Partitioner, иначе будет интересная отладка&amp;nbsp;:)&lt;/p&gt;
       +</content></entry><entry><id>http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/</id><title type="html">over 1M open sockets at linux node</title><updated>2011-12-19T03:17:18Z</updated><published>2011-12-19T02:42:33Z</published><category term="limits"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/" rel="self"></link><link href="http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/" rel="alternate"></link><content type="html">&lt;p&gt;С появлением всяких &lt;a href="http://en.wikipedia.org/wiki/Comet_(programming%29"&gt;commet&lt;/a&gt; соединений обычным делом стали сотни тысяч соединений на одном&amp;nbsp;тазике.&lt;/p&gt;
       +
       +&lt;!--more--&gt;
       +
       +&lt;p&gt;Но иногда хочется большего. Хочется перешагнуть за миллион. И так, шпаргалка по настройки системы для 10и миллионов&amp;nbsp;соединений:&lt;/p&gt;
       +
       +&lt;ul&gt;
       +&lt;li&gt;&lt;p&gt;&lt;strong&gt;/etc/security/limits.conf&lt;/strong&gt;:&lt;/p&gt;
       +
       +&lt;p&gt;services       soft    nofile&amp;nbsp;10000000&lt;/p&gt;
       +
       +&lt;p&gt;services       hard    nofile&amp;nbsp;10000000&lt;/p&gt;&lt;/li&gt;
       +&lt;li&gt;&lt;p&gt;&lt;strong&gt;/etc/sysctl.conf&lt;/strong&gt;:&lt;/p&gt;
       +
       +&lt;p&gt;net.core.somaxconn =&amp;nbsp;100000&lt;/p&gt;
       +
       +&lt;p&gt;net.nf_conntrack_max =&amp;nbsp;268435456 &lt;/p&gt;
       +
       +&lt;p&gt;net.core.rmem_max =&amp;nbsp;65536&lt;/p&gt;
       +
       +&lt;p&gt;net.core.wmem_max =&amp;nbsp;65536&lt;/p&gt;
       +
       +&lt;p&gt;net.ipv4.tcp_wmem = 4096 16384&amp;nbsp;65536  &lt;/p&gt;
       +
       +&lt;p&gt;net.ipv4.tcp_rmem = 4096 16384&amp;nbsp;65536  &lt;/p&gt;
       +
       +&lt;p&gt;fs.nr_open =&amp;nbsp;10485760&lt;/p&gt;&lt;/li&gt;
       +&lt;/ul&gt;
       +
       +&lt;p&gt;Да, на сервере должно быть много памяти&amp;nbsp;:)&lt;/p&gt;
       +</content></entry><entry><id>http://catap.ru/blog/2011/06/15/linux-time-interval/</id><title type="html">временной интервал в linux</title><updated>2011-06-15T00:20:29Z</updated><published>2011-06-15T00:13:02Z</published><category term="clock_gettime"></category><category term="clock_monotonic"></category><category term="clock_monotonic_raw"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/06/15/linux-time-interval/" rel="self"></link><link href="http://catap.ru/blog/2011/06/15/linux-time-interval/" rel="alternate"></link><content type="html">&lt;p&gt;Задали вопрос: как понять, сколько прошло времени в&amp;nbsp;linux?&lt;/p&gt;
       +
       +&lt;!--more--&gt;
       +
       +&lt;p&gt;Первый ответ, который приходит на ум это&amp;nbsp;взять:&lt;/p&gt;
       +
       +&lt;pre&gt;&lt;code&gt;gettimeofday(&amp;amp;time1, NULL)
       +sleep(5);
       +gettimeofday(&amp;amp;time2, NULL)
       +&lt;/code&gt;&lt;/pre&gt;
       +
       +&lt;p&gt;и вычесть time1 из time2. Плох этот вариант тем, что время будет не предсказуемое ибо оно может смениться в следствии ntpdate, которая резко переводит время. Есть еще ntpd, который просто корректирует длину&amp;nbsp;секунды.&lt;/p&gt;
       +
       +&lt;p&gt;Второй вариант&amp;nbsp;это:&lt;/p&gt;
       +
       +&lt;pre&gt;&lt;code&gt;clock_gettime(CLOCK_MONOTONIC, &amp;amp;time1);
       +sleep(5);
       +clock_gettime(CLOCK_MONOTONIC, &amp;amp;time2);
       +&lt;/code&gt;&lt;/pre&gt;
       +
       +&lt;p&gt;лучше. ntpdate уже не страшен, время привязано к uptime, но от ntpd не спасет. Опять же, на точность влияет &lt;a href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/"&gt;kernel.vsyscall64&lt;/a&gt;.&lt;/p&gt;
       +
       +&lt;p&gt;И самый верный вариант (но доступный с ядер 2.6.28)&amp;nbsp;это:&lt;/p&gt;
       +
       +&lt;pre&gt;&lt;code&gt;clock_gettime(CLOCK_MONOTONIC_RAW, &amp;amp;time1);
       +sleep(5);
       +clock_gettime(CLOCK_MONOTONIC_RAW, &amp;amp;time2);
       +&lt;/code&gt;&lt;/pre&gt;
       +</content></entry><entry><id>http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/</id><title type="html">gettimeofday без syscall</title><updated>2011-05-22T03:12:39Z</updated><published>2011-05-22T02:16:00Z</published><category term="gettimeofday"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/" rel="self"></link><link href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/" rel="alternate"></link><content type="html">&lt;p&gt;Тут случайно узнал что gettimeofday может не стоить syscall.&amp;nbsp;Делюсь.&lt;/p&gt;
       +
       +&lt;!--more--&gt;
       +
       +&lt;p&gt;На amd64 есть системная ручка &lt;code&gt;/proc/sys/kernel/vsyscall64&lt;/code&gt;, она может принимать три&amp;nbsp;значения:&lt;/p&gt;
       +
       +&lt;ul&gt;
       +&lt;li&gt;0 &amp;#8212; делаем syscall и получаем с точностью до&amp;nbsp;μs;&lt;/li&gt;
       +&lt;li&gt;1 &amp;#8212; по прежнему получаем μs, но где-то рядом, зато без context switch и прочих syscall&amp;nbsp;особенностей;&lt;/li&gt;
       +&lt;li&gt;2 &amp;#8212; временные интервалы уже в ms, накладные расходов почти&amp;nbsp;нет.&lt;/li&gt;
       +&lt;/ul&gt;
       +</content></entry><entry><id>http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/</id><title type="html">flash64: memcpy patch for 10.3.162.29</title><updated>2010-12-10T16:14:09Z</updated><published>2010-12-10T16:07:29Z</published><category term="linux"></category><category term="patch"></category><category term="tech"></category><link href="http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/" rel="self"></link><link href="http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/" rel="alternate"></link><content type="html">&lt;p&gt;Мой &lt;a href="http://catap.ru/blog/2010/11/26/flash-memcpy-patch/"&gt;патчик&lt;/a&gt; пользуется популярность. И люди попросили сделать для новой версии. &lt;a href="http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff"&gt;Патч на версию 10.3.162.29&lt;/a&gt;. Накладывать используя&amp;nbsp;bspatch.&lt;/p&gt;
       +
       +&lt;!--more--&gt;
       +
       +&lt;p&gt;Например&amp;nbsp;так:&lt;/p&gt;
       +
       +&lt;pre&gt;&lt;code&gt;wget http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff
       +sudo cp /usr/lib64/flash-plugin/libflashplayer.so /usr/lib64/flash-plugin/libflashplayer.so.old
       +sudo bspatch /usr/lib64/flash-plugin/libflashplayer.so.old /usr/lib64/flash-plugin/libflashplayer.so ./memcpy-10.3.162.29.bsdiff
       +&lt;/code&gt;&lt;/pre&gt;
       +
       +&lt;p&gt;рестарт браузера и можно радоваться&amp;nbsp;жизни.&lt;/p&gt;
       +</content></entry></feed>
       +\ No newline at end of file