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"><p>Коллеги,</p>
+
+<p>Есть хитрость, которая позволяет упростить логику reducer если подавать ему сразу отсортированные значения. Код который это делает: <a href="https://gist.github.com/catap/3aabd33b86c0fc5620aa">https://gist.github.com/catap/3aabd33b86c0fc5620aa</a></p>
+
+<!--more-->
+
+<p>Немного footnote по&nbsp;коду.</p>
+
+<p>В <a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapred/MapTask.java#L1116">Comparator</a>/<a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/ReduceContext.java#L121">Grouping</a> внятным образом получить доступ к value нельзя, приходиться делать составной ключ, который будет включать в&nbsp;себя:</p>
+
+<ul>
+<li>ключ по которому будут&nbsp;группировать.</li>
+<li>значения, или их часть, которые будут использоваться для&nbsp;сортировки.</li>
+</ul>
+
+<p>Соотвествено:</p>
+
+<ul>
+<li>Grouping сравниваются&nbsp;ключи.</li>
+<li>Comparator сравниваются ключи и если они совпали, идет логика&nbsp;сортировки.</li>
+</ul>
+
+<p>Вроде все прекрасно и все танцуют, но, в hadoop по умолчанию Partitioner использует <a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/lib/partition/HashPartitioner.java#L29">hashCode</a> для балансировки ключей по partition. Соответственно, либо реализуем свой hashCode, либо свой Partitioner, иначе будет интересная отладка&nbsp;:)</p>
+</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"><p>С появлением всяких <a href="http://en.wikipedia.org/wiki/Comet_(programming%29">commet</a> соединений обычным делом стали сотни тысяч соединений на одном&nbsp;тазике.</p>
+
+<!--more-->
+
+<p>Но иногда хочется большего. Хочется перешагнуть за миллион. И так, шпаргалка по настройки системы для 10и миллионов&nbsp;соединений:</p>
+
+<ul>
+<li><p><strong>/etc/security/limits.conf</strong>:</p>
+
+<p>services soft nofile&nbsp;10000000</p>
+
+<p>services hard nofile&nbsp;10000000</p></li>
+<li><p><strong>/etc/sysctl.conf</strong>:</p>
+
+<p>net.core.somaxconn =&nbsp;100000</p>
+
+<p>net.nf_conntrack_max =&nbsp;268435456 </p>
+
+<p>net.core.rmem_max =&nbsp;65536</p>
+
+<p>net.core.wmem_max =&nbsp;65536</p>
+
+<p>net.ipv4.tcp_wmem = 4096 16384&nbsp;65536 </p>
+
+<p>net.ipv4.tcp_rmem = 4096 16384&nbsp;65536 </p>
+
+<p>fs.nr_open =&nbsp;10485760</p></li>
+</ul>
+
+<p>Да, на сервере должно быть много памяти&nbsp;:)</p>
+</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"><p>Задали вопрос: как понять, сколько прошло времени в&nbsp;linux?</p>
+
+<!--more-->
+
+<p>Первый ответ, который приходит на ум это&nbsp;взять:</p>
+
+<pre><code>gettimeofday(&amp;time1, NULL)
+sleep(5);
+gettimeofday(&amp;time2, NULL)
+</code></pre>
+
+<p>и вычесть time1 из time2. Плох этот вариант тем, что время будет не предсказуемое ибо оно может смениться в следствии ntpdate, которая резко переводит время. Есть еще ntpd, который просто корректирует длину&nbsp;секунды.</p>
+
+<p>Второй вариант&nbsp;это:</p>
+
+<pre><code>clock_gettime(CLOCK_MONOTONIC, &amp;time1);
+sleep(5);
+clock_gettime(CLOCK_MONOTONIC, &amp;time2);
+</code></pre>
+
+<p>лучше. ntpdate уже не страшен, время привязано к uptime, но от ntpd не спасет. Опять же, на точность влияет <a href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/">kernel.vsyscall64</a>.</p>
+
+<p>И самый верный вариант (но доступный с ядер 2.6.28)&nbsp;это:</p>
+
+<pre><code>clock_gettime(CLOCK_MONOTONIC_RAW, &amp;time1);
+sleep(5);
+clock_gettime(CLOCK_MONOTONIC_RAW, &amp;time2);
+</code></pre>
+</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"><p>Тут случайно узнал что gettimeofday может не стоить syscall.&nbsp;Делюсь.</p>
+
+<!--more-->
+
+<p>На amd64 есть системная ручка <code>/proc/sys/kernel/vsyscall64</code>, она может принимать три&nbsp;значения:</p>
+
+<ul>
+<li>0 &#8212; делаем syscall и получаем с точностью до&nbsp;μs;</li>
+<li>1 &#8212; по прежнему получаем μs, но где-то рядом, зато без context switch и прочих syscall&nbsp;особенностей;</li>
+<li>2 &#8212; временные интервалы уже в ms, накладные расходов почти&nbsp;нет.</li>
+</ul>
+</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"><p>Мой <a href="http://catap.ru/blog/2010/11/26/flash-memcpy-patch/">патчик</a> пользуется популярность. И люди попросили сделать для новой версии. <a href="http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff">Патч на версию 10.3.162.29</a>. Накладывать используя&nbsp;bspatch.</p>
+
+<!--more-->
+
+<p>Например&nbsp;так:</p>
+
+<pre><code>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
+</code></pre>
+
+<p>рестарт браузера и можно радоваться&nbsp;жизни.</p>
+</content></entry></feed>
+\ No newline at end of file