githubbish blog
2024-01-04T09:18:09+00:00
http://okertanov.github.com/
Oleg Kertanov
okertanov@gmail.com
Little Js.js
2016-11-29T00:00:00+00:00
hhttp://okertanov.github.com//2016/11/29/little-js.js
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/Documents/little-js.js.html</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v1">
<meta name="syntax" content="javascript">
<meta name="settings" content="use_css,no_foldcolumn,expand_tabs,prevent_copy=">
<meta name="colorscheme" content="solarized">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
* { font-size: 12pt; }
.Statement { color: #719e07; }
.Comment { color: #93a1a1; font-style: italic; }
.Identifier { color: #268bd2; }
-->
</style>
<script type='text/javascript'>
<!--
-->
</script>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Comment">//</span>
<span class="Comment">// "A little JavaScript problem"</span>
<span class="Comment">// The problem: define functions range, map, reverse and foreach,</span>
<span class="Comment">// obeying the restrictions below, such that the following program works properly.</span>
<span class="Comment">// It prints the squares of numbers from 1 to 10, in reverse order.</span>
<span class="Comment">//</span>
<span class="Comment">// See <a href="http://lisperator.net/blog/a-little-javascript-problem/">http://lisperator.net/blog/a-little-javascript-problem/</a></span>
<span class="Comment">//</span>
<span class="Identifier">var</span> range = <span class="Identifier">function</span>(from, to) <span class="Identifier">{</span>
<span class="Statement">return</span> <span class="Identifier">function</span>(cb) <span class="Identifier">{</span>
<span class="Statement">for</span> (<span class="Identifier">var</span> i = from; i <= to; i++) cb(i);
<span class="Identifier">}</span>
<span class="Identifier">}</span>
<span class="Identifier">var</span> map = <span class="Identifier">function</span>(numbers, fn) <span class="Identifier">{</span>
<span class="Statement">return</span> <span class="Identifier">function</span>(cb) <span class="Identifier">{</span>
numbers(<span class="Identifier">function</span>(i) <span class="Identifier">{</span> cb(fn(i)); <span class="Identifier">}</span>);
<span class="Identifier">}</span>
<span class="Identifier">}</span>
<span class="Identifier">var</span> reverse = <span class="Identifier">function</span>(numbers) <span class="Identifier">{</span>
<span class="Identifier">var</span> continua = <span class="Identifier">function</span>(ofn, fn, param) <span class="Identifier">{</span>
<span class="Statement">return</span> <span class="Identifier">function</span>() <span class="Identifier">{</span> fn(param), ofn(fn, param); <span class="Identifier">}</span>
<span class="Identifier">}</span>
<span class="Statement">return</span> <span class="Identifier">function</span>(cb) <span class="Identifier">{</span>
<span class="Identifier">var</span> inner = <span class="Identifier">function</span>() <span class="Identifier">{}</span>;
numbers(<span class="Identifier">function</span>(i) <span class="Identifier">{</span> inner = continua(inner, cb, i); <span class="Identifier">}</span>);
inner();
<span class="Identifier">}</span>
<span class="Identifier">}</span>
<span class="Identifier">var</span> foreach = <span class="Identifier">function</span>(numbers, fn) <span class="Identifier">{</span>
numbers(fn);
<span class="Identifier">}</span>
<span class="Identifier">var</span> numbers = range(1, 11);
numbers = map(numbers, <span class="Identifier">function</span>(n) <span class="Identifier">{</span> <span class="Statement">return</span> n * n <span class="Identifier">}</span>);
numbers = reverse(numbers);
foreach(numbers, console.log);
<span class="Comment">//</span>
<span class="Comment">// Output:</span>
<span class="Comment">// 100</span>
<span class="Comment">// 81</span>
<span class="Comment">// 64</span>
<span class="Comment">// 49</span>
<span class="Comment">// 36</span>
<span class="Comment">// 25</span>
<span class="Comment">// 16</span>
<span class="Comment">// 9</span>
<span class="Comment">// 4</span>
<span class="Comment">// 1</span>
<span class="Comment">//</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->
Church Numerals.js
2016-02-04T00:00:00+00:00
hhttp://okertanov.github.com//2016/02/04/church-numerals.js
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/projects/_github_/functional.git/js/misc/church-numerals.js.html</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="javascript">
<meta name="settings" content="use_css,no_foldcolumn,expand_tabs,prevent_copy=">
<meta name="colorscheme" content="solarized">
<style type="text/css">
<!--
pre { font-family: monospace; color: #586e75; background-color: #fdf6e3; }
body { font-family: monospace; color: #586e75; background-color: #fdf6e3; }
* { font-size: 1em; }
.Statement { color: #719e07; }
.Comment { color: #839496; font-style: italic; }
.Constant { color: #2aa198; }
.Identifier { color: #268bd2; }
-->
</style>
<script type='text/javascript'>
<!--
-->
</script>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Comment">//</span>
<span class="Comment">// Church Numerals in JS</span>
<span class="Comment">//</span>
<span class="Comment">// See</span>
<span class="Comment">// <a href="https://en.wikipedia.org/wiki/Church_encoding">https://en.wikipedia.org/wiki/Church_encoding</a></span>
<span class="Comment">//</span>
(<span class="Identifier">function</span>() <span class="Identifier">{</span>
<span class="Comment">//</span>
<span class="Comment">// Pure Numerals</span>
<span class="Comment">//</span>
<span class="Identifier">var</span> _zero = f => x => x
<span class="Identifier">var</span> _one = f => x => f(x)
<span class="Identifier">var</span> _two = f => x => f(f(x))
<span class="Identifier">var</span> _three = f => x => f(f(f(x)))
<span class="Identifier">var</span> _four = f => x => f(f(f(f(x))))
<span class="Identifier">var</span> _five = f => x => f(f(f(f(f(x)))))
<span class="Identifier">var</span> _six = f => x => f(f(f(f(f(f(x))))))
<span class="Identifier">var</span> _seven = f => x => f(f(f(f(f(f(f(x)))))))
<span class="Identifier">var</span> _eight = f => x => f(f(f(f(f(f(f(f(x))))))))
<span class="Identifier">var</span> _nine = f => x => f(f(f(f(f(f(f(f(f(x)))))))))
<span class="Identifier">var</span> _ten = f => x => f(f(f(f(f(f(f(f(f(f(x))))))))))
<span class="Comment">//</span>
<span class="Comment">// Numerals via sequences</span>
<span class="Comment">//</span>
<span class="Identifier">var</span> pred = n => f => x => n(g => h => h(g(f)))(y => x)(x => x)
<span class="Identifier">var</span> succ = n => f => x => f(n(f)(x))
<span class="Identifier">var</span> zero = f => x => x
<span class="Identifier">var</span> one = succ(zero)
<span class="Identifier">var</span> two = succ(one)
<span class="Identifier">var</span> three = succ(two)
<span class="Identifier">var</span> four = succ(three)
<span class="Identifier">var</span> five = succ(four)
<span class="Identifier">var</span> six = succ(five)
<span class="Identifier">var</span> seven = succ(six)
<span class="Identifier">var</span> eight = succ(seven)
<span class="Identifier">var</span> nine = succ(eight)
<span class="Identifier">var</span> ten = succ(nine)
<span class="Comment">//</span>
<span class="Comment">// Math Operations</span>
<span class="Comment">//</span>
<span class="Identifier">var</span> add = (n, m) => f => x => n(f)(m(f)(x))
<span class="Identifier">var</span> sub = (n, m) => m(pred)(n)
<span class="Identifier">var</span> mul = (n, m) => f => n(m(f))
<span class="Identifier">var</span> exp = (n, m) => m(n)
<span class="Comment">//</span>
<span class="Comment">// Helpers</span>
<span class="Comment">//</span>
<span class="Identifier">var</span> num = n => n((a) => ++a)(<span class="Statement">null</span>)
<span class="Identifier">var</span> print = n => console.log(n)
<span class="Identifier">var</span> printn = n => print(num(n))
<span class="Identifier">var</span> printns = <span class="Identifier">function</span>() <span class="Identifier">{</span> print(<span class="Identifier">[]</span>.slice.call(<span class="Identifier">arguments</span>).map(n => num(n)).join(<span class="Constant">''</span>)) <span class="Identifier">}</span>
<span class="Comment">//</span>
<span class="Comment">// Debug code</span>
<span class="Comment">//</span>
printns(_zero, _one, _two, _three, _four, _five, _six, _seven, _eight, _nine, _ten)
printns(zero, one, two, three, four, five, six, seven, eight, nine, ten)
printn(add(ten, five))
printn(sub(nine, six))
printn(mul(three, seven))
printn(exp(two, eight))
<span class="Identifier">}</span>)()
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->
Probe
2015-11-27T00:00:00+00:00
hhttp://okertanov.github.com//2015/11/27/probe
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/Documents/probe.scm.html</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="scheme">
<meta name="settings" content="use_css,no_foldcolumn,expand_tabs,prevent_copy=">
<meta name="colorscheme" content="solarized">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
* { font-size: 1em; }
.Statement { color: #719e07; }
.Comment { color: #93a1a1; font-style: italic; }
.Constant { color: #2aa198; }
.Special { color: #dc322f; }
.Identifier { color: #268bd2; }
.Error { color: #dc322f; font-weight: bold; }
-->
</style>
<script type='text/javascript'>
<!--
-->
</script>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Error">#lang</span> scheme
<span class="Comment">; Syntactic sugar</span>
<span class="Special">(</span><span class="Statement">define</span> ^ <span class="Identifier">expt</span><span class="Special">)</span>
<span class="Special">(</span><span class="Statement">define</span> << arithmetic-shift<span class="Special">)</span>
<span class="Comment">; Как можно получать степени двойки:</span>
<span class="Comment">; арифметически, алгоритмически, императивно</span>
<span class="Comment">; и рекурсивно.</span>
<span class="Special">(</span><span class="Identifier">*</span> <span class="Constant">2</span> <span class="Constant">2</span> <span class="Constant">2</span><span class="Special">)</span>
<span class="Special">(</span>^ <span class="Constant">2</span> <span class="Constant">3</span><span class="Special">)</span>
<span class="Special">(</span><< <span class="Constant">1</span> <span class="Constant">3</span><span class="Special">)</span>
<span class="Special">(</span><span class="Statement">define</span> nexpt
<span class="Special">(</span><span class="Error">λ</span> <span class="Special">(</span>n p<span class="Special">)</span>
<span class="Special">(</span><span class="Statement">cond</span>
<span class="Special">((</span><span class="Identifier"><</span> p <span class="Constant">1</span><span class="Special">)</span> <span class="Constant">1</span><span class="Special">)</span>
<span class="Special">(</span><span class="Statement">else</span> <span class="Special">(</span><span class="Identifier">*</span> n <span class="Special">(</span>nexpt n <span class="Special">(</span><span class="Identifier">-</span> p <span class="Constant">1</span><span class="Special">)))))))</span>
<span class="Special">(</span>nexpt <span class="Constant">2</span> <span class="Constant">3</span><span class="Special">)</span>
<span class="Comment">;</span>
<span class="Comment">; 8</span>
<span class="Comment">; 8</span>
<span class="Comment">; 8</span>
<span class="Comment">; 8</span>
<span class="Comment">;</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->
Shared_resource Example.cpp
2013-03-14T00:00:00+00:00
hhttp://okertanov.github.com//2013/03/14/shared_resource-example.cpp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<title>shared_resource-example.cpp</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v10">
<meta name="syntax" content="cpp">
<meta name="settings" content="use_css,expand_tabs">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; font-size: large; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; font-size: large; }
dfn { display: inline; text-decoration: none; border-bottom: 1px dashed; }
.Statement { color: #719e07; }
.Error { color: #dc322f; font-weight: bold; }
.Constant { color: #2aa198; }
.Type { color: #b58900; }
.Comment { color: #93a1a1; font-style: italic; }
-->
</style>
</head>
<body lang="ru" dir="ltr">
<pre>
<span class="Comment">//</span>
<span class="Comment">// Недавно пристально посмотрел на С++ Variadic Templates</span>
<span class="Comment">// и неожиданно для себя изобрел новый RAII Scoped Resource Manager.</span>
<span class="Comment">//</span>
<span class="Comment">// Получилось кратко и эффектно. Например, с C-style выделением памяти:</span>
<span class="Comment">//</span>
<span class="Comment">// Аллоцируем ресурс в блоке.</span>
{
ha::scoped_resource<<span class="Type">void</span><span class="">*, </span><span class="Type">size_t</span><span class="">> mem(::malloc, </span><span class="Constant">1</span><span class="">, ::free);</span>
::memset(mem, <span class="Constant">65</span><span class="">, </span><span class="Constant">1</span><span class="">);</span>
}
<span class="Comment">// А при выходе из блока ресурс будет освобожден автоматически.</span>
<span class="Comment">// Или еще вот так можно захватывать владение ресурсом "файловый дескриптор":</span>
<span class="Comment">// Захватываем ресурс в блоке.</span>
{
ha::scoped_resource<<span class="Type">int</span><span class="">> fd(</span>
[&filename]()
<span class="Error">{</span>
<span class="Statement">return</span><span class=""> ::open(filename.c_str(), O_RDONLY);</span>
<span class="Error">}</span><span class="">,</span>
::close);
assert(fd != -1);
std::vector<<span class="Type">char</span><span class="">> buff(</span><span class="Constant">1024</span><span class="">);</span>
<span class="Type">ssize_t</span><span class=""> rc = ::read(fd, &buff[</span><span class="Constant">0</span><span class="">], </span><span class="Constant">1024</span><span class="">);</span>
}
<span class="Comment">// А при выходе из блока ресурс будет освобожден автоматически</span>
<span class="Comment">// даже после вызова, например, throw std::exception().</span>
<span class="Comment">// Или второй пример можно переписать даже понятней</span>
<span class="Comment">// без применения лямбды:</span>
{
ha::scoped_resource<<span class="Type">int</span><span class="">, </span><span class="Type">char</span><span class="">*, </span><span class="Type">int</span><span class="">> fd(::open, filename.c_str(), O_RDONLY, ::close);</span>
<span class="Statement">if</span><span class=""> (fd == -1)</span>
<span class="Statement">throw</span><span class=""> std::runtime_error(std::string(</span><span class="Constant">"open() failed: "</span><span class="">) + ::strerror(errno));</span>
std::vector<<span class="Type">char</span><span class="">> buff(</span><span class="Constant">1024</span><span class="">);</span>
<span class="Type">ssize_t</span><span class=""> rc = ::read(fd, &buff[</span><span class="Constant">0</span><span class="">], </span><span class="Constant">1024</span><span class="">);</span>
}
<span class="Comment">//</span>
<span class="Comment">// То есть в общем случае имеем темплейтный класс,</span>
<span class="Comment">// который инстанциируется типом ресурса,</span>
<span class="Comment">// а его конструктор принимает две std::functions:</span>
<span class="Comment">// initializer_t и finalizer_t.</span>
<span class="Comment">//</span>
<span class="Comment">// Между инициализатором и финализатором следуют параметры</span>
<span class="Comment">// для инициализатора, которые являются частью спецификаторов шаблона.</span>
<span class="Comment">//</span>
<span class="Comment">// Деструктор просто вызывает финализатор для захваченного ресурса.</span>
<span class="Comment">//</span>
<span class="Comment">// Для raw-доступа к ресурсу существует оператор типа ресурса.</span>
<span class="Comment">//</span>
{
ha::scoped_resource
<resource_t, param1_t, ...>
resource
(ititializer, param1, ..., finalizer);
resource_t
plain_resource =
resource.<span class="Statement">operator</span><span class=""> resource_t();</span>
}
<span class="Comment">//</span>
<span class="Comment">// <b>В чем преимущество перед другими RAII реализациями враперов ресурсов?</b></span>
<span class="Comment">// 1. Инициализатор не вызывается во время редукции параметров конструктора,</span>
<span class="Comment">// а в самом конструкторе.</span>
<span class="Comment">// Это, например, позволяет реализовать "нормальную" передачу инициализатора,</span>
<span class="Comment">// что дает возможность захвата ресурса в lazy-стиле, до первого вызова operator resource_t().</span>
<span class="Comment">// Еще это позволяет создавать именованные инициализаторы, тем самым переиспользуя их.</span>
<span class="Comment">// 2. Можно явно передавать какое-либо количество параметров для инициализатора.</span>
<span class="Comment">// Тут, возможно, есть еще второй полезный механизм - std::initializer_list.</span>
<span class="Comment">// 3. Если пункт 2. по каким-то причинам не применим, можно в качестве инициализатора</span>
<span class="Comment">// передавать лямбду, которая замкнет все параметры инициализатора на себя.</span>
<span class="Comment">// 4. Деинициализатор имеет единственный параметр - тип ресурса,</span>
<span class="Comment">// но в случае необходимости также может быть лямбдой, замыкая</span>
<span class="Comment">// на себя дополнительные параметры деинициализации.</span>
<span class="Comment">// 5. Это намного проще в реализации чем std::shared_ptr(T* ptr, deleter d).</span>
<span class="Comment">//</span>
<span class="Comment">//</span>
<span class="Comment">// <b>Недостатки?</b></span>
<span class="Comment">// Иногда все же эффективней написать полноценный врапер ресурса.</span>
<span class="Comment">//</span>
<span class="Comment">//</span>
<span class="Comment">// <b>Нужно больше примеров? Их есть у меня:</b></span>
<span class="Comment">//</span>
<span class="Comment">// Создание AVFormatContext контекста:</span>
ha::scoped_resource<ffmpeg::AVFormatContext*> formatctx
(ffmpeg::avformat_alloc_context, ffmpeg::avformat_free_context);
<span class="Comment">// Это есть аналог следующего:</span>
std::shared_ptr<ffmpeg::AVFormatContext> formatctx =
std::shared_ptr<ffmpeg::AVFormatContext>
(ffmpeg::avformat_alloc_context(), ffmpeg::avformat_free_context);
<span class="Comment">// Или вот еще, тут применяется составной деинициализатор:</span>
ha::scoped_resource<ffmpeg::AVCodecContext*> codecctx(
ffmpeg::avcodec_alloc_context,
[](ffmpeg::AVCodecContext* c)
<span class="Error">{</span>
ffmpeg::avcodec_close(c),
ffmpeg::av_free(c);
<span class="Error">}</span><span class="">);</span>
<span class="Comment">// А этот пример интересен тем, что происходит захват ресурса, который не нужно освобождать:</span>
ha::scoped_resource<ffmpeg::AVCodec*, ffmpeg::AVCodecID> codec(
ffmpeg::avcodec_find_decoder,
codecctx->codec_id,
[](__attribute__((unused)) ffmpeg::AVCodec* c)
<span class="Error">{</span>
<span class="Error">}</span><span class="">);</span>
<span class="Comment">// И наконец самый простой oneliner:</span>
ha::scoped_resource<ffmpeg::AVFrame*> frame(ffmpeg::avcodec_alloc_frame, ffmpeg::av_free);
<span class="Comment">// Который аналог следующего:</span>
std::shared_ptr<ffmpeg::AVFrame> frame =
std::shared_ptr<ffmpeg::AVFrame>(ffmpeg::avcodec_alloc_frame(), ffmpeg::av_free);
<span class="Comment">// Но неужели это все про naked plain-C ресурсы? А где же примеры с годным С++?</span>
<span class="Comment">// А вот:</span>
ha::mutex mutex;
ha::scoped_resource<ha::mutex*, ha::mutex*> scoped_lock(
[](ha::mutex* m) -> ha::mutex*
<span class="Error">{</span>
<span class="Statement">return</span><span class=""> m->lock(), m;</span>
<span class="Error">}</span><span class="">,</span>
&mutex,
[](ha::mutex* m) -> <span class="Type">void</span>
<span class="Error">{</span>
m->unlock();
<span class="Error">}</span>
);
<span class="Comment">//</span>
<span class="Comment">// <b>Хорошо, но где же реализация?</b></span>
<span class="Comment">// Реализация класса scoped_resource настолько проста и элегантна,</span>
<span class="Comment">// что даже чем-то напомнила мне идею <dfn><abbr title="Y = λf.(λx.f (x x)) (λx.f (x x))">Y-combinator</abbr></dfn>.</span>
<span class="Comment">// То есть возможно с легкостью реализовать что-то подобное, просто начав с декларации</span>
<span class="Comment">// конструктора scoped_resource::scoped_resource(initializer_t, finalizer_t);</span>
<span class="Comment">// и затем наращивать variadic-часть для параметров.</span>
<span class="Comment">//</span>
<span class="Comment">//</span>
<span class="Comment">// Вот как-то так.</span>
<span class="Comment">// © 2013 okertanov@gmail.com</span>
<span class="Comment">//</span>
</pre>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Osx Crosstool Ng
2012-12-24T00:00:00+00:00
hhttp://okertanov.github.com//2012/12/24/osx-crosstool-ng
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/projects/pinguin.git/src/toolchains/build-with-ct-ng.sh.html</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v10">
<meta name="syntax" content="bash">
<meta name="settings" content="use_css,expand_tabs">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
.PreProc { color: #cb4b16; }
.Constant { color: #2aa198; }
.Special { color: #dc322f; }
.Identifier { color: #268bd2; }
.Statement { color: #719e07; }
.Comment { color: #93a1a1; font-style: italic; }
-->
</style>
</head>
<body>
<pre>
<span class="Comment">#!/bin/bash</span>
<span class="Comment">#</span>
<span class="Comment"># @file build-with-ct-ng.sh</span>
<span class="Comment">#</span>
<span class="Comment"># @brief The OSX build script for the crosstool-ng toolset.</span>
<span class="Comment"># It solves the following crosstool-ng OSX issues:</span>
<span class="Comment"># - crosstool-ng build itself;</span>
<span class="Comment"># - crosstool-ng target buildable configuration;</span>
<span class="Comment"># This script builds arm-unknown-linux-gnueabi toolchain</span>
<span class="Comment"># for OSX Mountain Lion (10.8) to use with Raspberry Pi system.</span>
<span class="Comment"># gcc: 4.7.2</span>
<span class="Comment"># kernel: 3.6.3</span>
<span class="Comment"># glibc: 2.14.1</span>
<span class="Comment">#</span>
<span class="Comment"># @author Oleg Kertanov <okertanov@gmail.com></span>
<span class="Comment"># @copyright (c) 2012 Oleg Kertanov <okertanov@gmail.com></span>
<span class="Comment">#</span>
<span class="Comment"># @date December 2012</span>
<span class="Comment">#</span>
<span class="Comment"># @see <a href="http://crosstool-ng.org/">http://crosstool-ng.org/</a></span>
<span class="Comment"># and</span>
<span class="Comment"># <a href="http://okertanov.github.com/2012/12/24/osx-crosstool-ng">http://okertanov.github.com/2012/12/24/osx-crosstool-ng</a></span>
<span class="Comment"># and</span>
<span class="Comment"># <a href="https://raw.github.com/okertanov/pinguin/master/src/toolchains/build-with-ct-ng.sh">https://raw.github.com/okertanov/pinguin/master/src/toolchains/build-with-ct-ng.sh</a></span>
<span class="Comment">#</span>
<span class="Statement">set</span><span class="Identifier"> </span><span class="Special">-e</span><span class="Identifier"> </span><span class="Special">-u</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">0. Starting...</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">0.1 Requirements are:</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant"> Xcode 4, Xcode 4 command line tools, Homebrew, approx. 8Gb free disk space</span><span class="Statement">"</span>
<span class="Identifier">StartBase</span>=<span class="PreProc">$(</span><span class="Statement">pwd</span><span class="PreProc">)</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">1. Installing additional brew packages</span><span class="Statement">"</span>
<span class="Identifier">AdditionalTools</span>=<span class="Statement">"</span><span class="Constant">gnu-sed binutils gawk automake libtool bash</span><span class="Statement">"</span>
<span class="Identifier">AdditionalTools2</span>=<span class="Statement">"</span><span class="Constant"><a href="https://raw.github.com/Homebrew/homebrew-dupes/master/grep.rb">https://raw.github.com/Homebrew/homebrew-dupes/master/grep.rb</a></span><span class="Statement">"</span>
brew update
brew upgrade
brew <span class="Statement">install</span><span class=""> </span><span class="PreProc">$AdditionalTools</span><span class=""> && </span><span class="Statement">true</span>
brew <span class="Statement">install</span><span class=""> </span><span class="PreProc">$AdditionalTools2</span><span class=""> && </span><span class="Statement">true</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">2. Creating sparse volume</span><span class="Statement">"</span>
<span class="Identifier">ImageName</span>=CrossToolNG
<span class="Identifier">ImageNameExt</span>=<span class="PreProc">${</span><span class="PreProc">ImageName</span><span class="PreProc">}</span>.sparseimage
diskutil umount force /Volumes/<span class="PreProc">${</span><span class="PreProc">ImageName</span><span class="PreProc">}</span><span class=""> && </span><span class="Statement">true</span>
<span class="Statement">rm</span> <span class="Special">-f</span><span class=""> </span><span class="PreProc">${</span><span class="PreProc">ImageNameExt</span><span class="PreProc">}</span><span class=""> && </span><span class="Statement">true</span>
hdiutil create <span class="PreProc">${</span><span class="PreProc">ImageName</span><span class="PreProc">}</span><span class=""> </span><span class="Special">-volname</span><span class=""> </span><span class="PreProc">${</span><span class="PreProc">ImageName</span><span class="PreProc">}</span><span class=""> </span><span class="Special">-type</span><span class=""> SPARSE </span><span class="Special">-size</span><span class=""> 8g </span><span class="Special">-fs</span><span class=""> HFSX</span>
hdiutil mount <span class="PreProc">${</span><span class="PreProc">ImageNameExt</span><span class="PreProc">}</span>
<span class="Statement">cd</span> /Volumes/<span class="PreProc">$ImageName</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">3. Downloading crosstool-ng</span><span class="Statement">"</span>
<span class="Identifier">CrossToolVersion</span>=crosstool-ng-1.<span class="Constant">17</span><span class="">.</span><span class="Constant">0</span>
<span class="Identifier">CrossToolArchive</span>=<span class="PreProc">${</span><span class="PreProc">CrossToolVersion</span><span class="PreProc">}</span>.tar.bz2
<span class="Identifier">CrossToolUrl</span>=<a href="http://crosstool-ng.org/download/crosstool-ng/">http://crosstool-ng.org/download/crosstool-ng/</a><span class="PreProc">${</span><span class="PreProc">CrossToolArchive</span><span class="PreProc">}</span>
wget <span class="PreProc">$CrossToolUrl</span>
tar xvf <span class="PreProc">$CrossToolArchive</span>
<span class="Statement">rm</span> <span class="Special">-f</span><span class=""> </span><span class="PreProc">$CrossToolArchive</span>
<span class="Statement">cd</span> <span class="PreProc">$CrossToolVersion</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">4. Patching crosstool-ng</span><span class="Statement">"</span>
<span class="Statement">sed</span> <span class="Special">-i</span><span class=""> .bak </span><span class="Statement">'</span><span class="Constant">6i\</span>
<span class="Constant">#include <stddef.h></span><span class="Statement">'</span> kconfig/zconf.y
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">5. Configuring crosstool-ng</span><span class="Statement">"</span>
./configure <span class="Special">--enable-local</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-objcopy=/usr/local/bin/gobjcopyi</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-objdump=/usr/local/bin/gobjdump</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-ranlib=//usr/local/bin/granlib</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-readelf=/usr/local/bin/greadelf</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-libtool=/usr/local/bin/glibtool</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-libtoolize=/usr/local/bin/glibtoolize</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-sed=/usr/local/bin/gsed</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-awk=/usr/local/bin/gawk</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-automake=/usr/local/bin/automake</span><span class=""> </span><span class="Statement">\</span>
<span class="Special">--with-bash=/usr/local/bin/bash</span><span class=""> </span><span class="Statement">\</span>
<span class="Identifier">CFLAGS</span>=<span class="Statement">"</span><span class="Constant">-std=c99 -Doffsetof=__builtin_offsetof</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">6. Building crosstool-ng</span><span class="Statement">"</span>
make
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">7. Creating ARM toolchain</span><span class="Statement">"</span>
<span class="Identifier">ToolChainName</span>=pinguin-toolchain
<span class="Statement">cd</span> ..
<span class="Statement">mkdir</span> <span class="PreProc">$ToolChainName</span>
<span class="Statement">cd</span> <span class="PreProc">$ToolChainName</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">8. Selecting arm-unknown-linux-gnueabi toolchain</span><span class="Statement">"</span>
<span class="Identifier">PATH</span>=/usr/<span class="Statement">local</span><span class="">/bin:</span><span class="PreProc">$PATH</span><span class=""> ../</span><span class="PreProc">${</span><span class="PreProc">CrossToolVersion</span><span class="PreProc">}</span><span class="">/ct-ng arm-unknown-linux-gnueabi</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">9. Cleaning toolchain</span><span class="Statement">"</span>
<span class="Identifier">PATH</span>=/usr/<span class="Statement">local</span><span class="">/bin:</span><span class="PreProc">$PATH</span><span class=""> ../</span><span class="PreProc">${</span><span class="PreProc">CrossToolVersion</span><span class="PreProc">}</span><span class="">/ct-ng clean</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">10. Copying toolchain configuration</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">10.1 Pay attantion to the following:</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant"> Select 'Force unwind support'</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant"> Unselect 'Link libstdc++ statically onto the gcc binary'</span><span class="Statement">"</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant"> Unselect 'Debugging -> dmalloc or fix its build'</span><span class="Statement">"</span>
cp <span class="PreProc">${</span><span class="PreProc">StartBase</span><span class="PreProc">}</span><span class="">/config-arm-unknown-linux-gnueabi ./.config</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">11. Configuring toolchain</span><span class="Statement">"</span>
<span class="Comment"># Use 'menuconfig' target for the fine tuning.</span>
<span class="Identifier">PATH</span>=/usr/<span class="Statement">local</span><span class="">/bin:</span><span class="PreProc">$PATH</span><span class=""> ../</span><span class="PreProc">${</span><span class="PreProc">CrossToolVersion</span><span class="PreProc">}</span><span class="">/ct-ng oldconfig</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">12. Building toolchain</span><span class="Statement">"</span>
<span class="Identifier">PATH</span>=/usr/<span class="Statement">local</span><span class="">/bin:</span><span class="PreProc">$PATH</span><span class=""> ../</span><span class="PreProc">${</span><span class="PreProc">CrossToolVersion</span><span class="PreProc">}</span><span class="">/ct-ng build.</span><span class="Constant">4</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">"</span><span class="Constant">13. Done.</span><span class="Statement">"</span>
</pre>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Fibonacci.scm
2012-12-07T00:00:00+00:00
hhttp://okertanov.github.com//2012/12/07/fibonacci.scm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>fibonacci.scm</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v10">
<meta name="syntax" content="scheme">
<meta name="settings" content="use_css,expand_tabs">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
.level6c { color: #43cd80; }
.level7c { color: #9a32cd; }
.level8c { color: #cd2626; }
.level9c { color: #3a5fcd; }
.level10c { color: #43cd80; }
.Identifier { color: #268bd2; }
.level11c { color: #9a32cd; }
.level12c { color: #cd2626; }
.level13c { color: #3a5fcd; }
.Constant { color: #2aa198; }
.level14c { color: #43cd80; }
.level15c { color: #9a32cd; }
.Statement { color: #719e07; }
.level16c { color: #cd2626; }
.Comment { color: #93a1a1; font-style: italic; }
.Error { color: #dc322f; font-weight: bold; }
-->
</style>
</head>
<body>
<pre>
<span class="Comment">;;</span>
<span class="Comment">;; fibonacci.scm</span>
<span class="Comment">;;</span>
<span class="Comment">;; @see <a href="http://en.wikipedia.org/wiki/Fibonacci_number">http://en.wikipedia.org/wiki/Fibonacci_number</a></span>
<span class="Comment">;;</span>
<span class="Comment">;;</span>
<span class="Comment">;; @fn fibonacci-naïve</span>
<span class="Comment">;;</span>
<span class="level16c">(</span><span class="Statement">define</span> fibonacci-naïve
<span class="level15c">(</span><span class="Error">λ</span> <span class="level14c">(</span>n<span class="level14c">)</span>
<span class="Constant">"This function calculates the Fibonacci sequence naïvely."</span>
<span class="level14c">(</span><span class="Statement">cond</span>
<span class="level13c">(</span><span class="level12c">(</span><span class="Statement">or</span> <span class="level11c">(</span><span class="Identifier">=</span> <span class="Constant">0</span><span class="level11"> </span>n<span class="level11c">)</span><span class="level12"> </span><span class="level11c">(</span><span class="Identifier">=</span><span class="level11"> </span><span class="Constant">1</span><span class="level11"> </span><span class="schemeOther">n</span><span class="level11c">)</span><span class="level12c">)</span> <span class="schemeOther">n</span><span class="level13c">)</span>
<span class="level13c">(</span><span class="Statement">else</span> <span class="level12c">(</span><span class="Identifier">+</span> <span class="level11c">(</span>fibonacci-naïve <span class="level10c">(</span><span class="Identifier">-</span> n<span class="level10"> </span><span class="Constant">1</span><span class="level10c">)</span><span class="level11c">)</span>
<span class="level11c">(</span>fibonacci-naïve <span class="level10c">(</span><span class="Identifier">-</span> n<span class="level10"> </span><span class="Constant">2</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; @fn fibonacci-linear</span>
<span class="Comment">;;</span>
<span class="level16c">(</span><span class="Statement">define</span> fibonacci-linear
<span class="level15c">(</span><span class="Error">λ</span> <span class="level14c">(</span>n<span class="level14c">)</span>
<span class="Constant">"This function calculates the Fibonacci sequence sequentially."</span>
<span class="level14c">(</span><span class="Statement">cond</span>
<span class="level13c">(</span><span class="level12c">(</span><span class="Statement">or</span> <span class="level11c">(</span><span class="Identifier">=</span> <span class="Constant">0</span><span class="level11"> </span>n<span class="level11c">)</span><span class="level12"> </span><span class="level11c">(</span><span class="Identifier">=</span><span class="level11"> </span><span class="Constant">1</span><span class="level11"> </span><span class="schemeOther">n</span><span class="level11c">)</span><span class="level12c">)</span> <span class="schemeOther">n</span><span class="level13c">)</span>
<span class="level13c">(</span><span class="Statement">else</span>
<span class="level12c">(</span><span class="Identifier">cdr</span>
<span class="level11c">(</span>for/fold <span class="level10c">(</span><span class="level9c">(</span><span class="schemeOther">acc</span> <span class="level8c">(</span><span class="Identifier">cons</span> <span class="Constant">0</span><span class="level8"> </span><span class="Constant">1</span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11"> </span><span class="level10c">(</span><span class="level9c">(</span><span class="schemeOther">i</span><span class="level9"> </span><span class="level8c">(</span><span class="schemeOther">in-range</span><span class="level8"> </span><span class="Constant">2</span><span class="level8"> </span><span class="level7c">(</span><span class="Identifier">+</span> <span class="schemeOther">n</span><span class="level7"> </span><span class="Constant">1</span><span class="level7c">)</span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span>
<span class="level10c">(</span><span class="Identifier">cons</span> <span class="level9c">(</span><span class="Identifier">cdr</span> acc<span class="level9c">)</span><span class="level10"> </span><span class="level9c">(</span><span class="Identifier">+</span><span class="level9"> </span><span class="level8c">(</span><span class="Identifier">car</span> <span class="schemeOther">acc</span><span class="level8c">)</span><span class="level9"> </span><span class="level8c">(</span><span class="Identifier">cdr</span><span class="level8"> </span><span class="schemeOther">acc</span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; @fn fibonacci-tail</span>
<span class="Comment">;;</span>
<span class="level16c">(</span><span class="Statement">define</span> fibonacci-tail
<span class="level15c">(</span><span class="Error">λ</span> <span class="level14c">(</span>n<span class="level14c">)</span>
<span class="Constant">"This function calculates the Fibonacci sequence tail-optimized."</span>
<span class="level14c">(</span><span class="Statement">letrec</span>
<span class="level13c">(</span><span class="level12c">(</span>fibonacci-t
<span class="level11c">(</span><span class="Error">λ</span> <span class="level10c">(</span>n <span class="schemeOther">p1</span><span class="level10"> </span><span class="schemeOther">p2</span><span class="level10c">)</span>
<span class="level10c">(</span><span class="Statement">cond</span>
<span class="level9c">(</span><span class="level8c">(</span><span class="Identifier">=</span> n<span class="level8"> </span><span class="Constant">0</span><span class="level8c">)</span> <span class="schemeOther">p1</span><span class="level9c">)</span>
<span class="level9c">(</span><span class="Statement">else</span> <span class="level8c">(</span>fibonacci-t <span class="level7c">(</span><span class="Identifier">-</span> <span class="schemeOther">n</span><span class="level7"> </span><span class="Constant">1</span><span class="level7c">)</span><span class="level8"> </span><span class="schemeOther">p2</span><span class="level8"> </span><span class="level7c">(</span><span class="Identifier">+</span><span class="level7"> </span><span class="schemeOther">p1</span><span class="level7"> </span><span class="schemeOther">p2</span><span class="level7c">)</span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span>
<span class="level13c">(</span>fibonacci-t <span class="schemeOther">n</span><span class="level13"> </span><span class="Constant">0</span><span class="level13"> </span><span class="Constant">1</span><span class="level13c">)</span><span class="level14c">)</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; @fn fibonacci-dijkstra</span>
<span class="Comment">;;</span>
<span class="level16c">(</span><span class="Statement">define</span> fibonacci-dijkstra
<span class="level15c">(</span><span class="Error">λ</span> <span class="level14c">(</span>n<span class="level14c">)</span>
<span class="Constant">"This function calculates the Fibonacci sequence with</span>
<span class="Constant"> Edsger W. Dijkstra's algorithm."</span>
<span class="level14c">(</span><span class="Statement">letrec</span>
<span class="level13c">(</span><span class="level12c">(</span>fibonacci-d
<span class="level11c">(</span><span class="Error">λ</span> <span class="level10c">(</span>a <span class="schemeOther">b</span><span class="level10"> </span><span class="schemeOther">p</span><span class="level10"> </span><span class="schemeOther">q</span><span class="level10"> </span><span class="schemeOther">c</span><span class="level10c">)</span>
<span class="level10c">(</span><span class="Statement">cond</span> <span class="level9c">(</span><span class="level8c">(</span><span class="Identifier">=</span> c<span class="level8"> </span><span class="Constant">0</span><span class="level8c">)</span> <span class="schemeOther">b</span><span class="level9c">)</span>
<span class="level9c">(</span><span class="level8c">(</span><span class="Identifier">even?</span> c<span class="level8c">)</span> <span class="level8c">(</span><span class="schemeOther">fibonacci-d</span><span class="level8"> </span><span class="schemeOther">a</span>
b
<span class="level7c">(</span><span class="Identifier">+</span> <span class="level6c">(</span><span class="Identifier">*</span> p<span class="level6"> </span><span class="schemeOther">p</span><span class="level6c">)</span><span class="level7"> </span><span class="level6c">(</span><span class="Identifier">*</span><span class="level6"> </span><span class="schemeOther">q</span><span class="level6"> </span><span class="schemeOther">q</span><span class="level6c">)</span><span class="level7c">)</span>
<span class="level7c">(</span><span class="Identifier">+</span> <span class="level6c">(</span><span class="Identifier">*</span> q<span class="level6"> </span><span class="schemeOther">q</span><span class="level6c">)</span><span class="level7"> </span><span class="level6c">(</span><span class="Identifier">*</span><span class="level6"> </span><span class="Constant">2</span><span class="level6"> </span><span class="schemeOther">p</span><span class="level6"> </span><span class="schemeOther">q</span><span class="level6c">)</span><span class="level7c">)</span>
<span class="level7c">(</span><span class="Identifier">/</span> c<span class="level7"> </span><span class="Constant">2</span><span class="level7c">)</span><span class="level8c">)</span><span class="level9c">)</span>
<span class="level9c">(</span><span class="Statement">else</span> <span class="level8c">(</span>fibonacci-d <span class="level7c">(</span><span class="Identifier">+</span> <span class="level6c">(</span><span class="Identifier">*</span> <span class="schemeOther">b</span><span class="level6"> </span><span class="schemeOther">q</span><span class="level6c">)</span><span class="level7"> </span><span class="level6c">(</span><span class="Identifier">*</span><span class="level6"> </span><span class="schemeOther">a</span><span class="level6"> </span><span class="schemeOther">q</span><span class="level6c">)</span><span class="level7"> </span><span class="level6c">(</span><span class="Identifier">*</span><span class="level6"> </span><span class="schemeOther">a</span><span class="level6"> </span><span class="schemeOther">p</span><span class="level6c">)</span><span class="level7c">)</span>
<span class="level7c">(</span><span class="Identifier">+</span> <span class="level6c">(</span><span class="Identifier">*</span> b<span class="level6"> </span><span class="schemeOther">p</span><span class="level6c">)</span><span class="level7"> </span><span class="level6c">(</span><span class="Identifier">*</span><span class="level6"> </span><span class="schemeOther">a</span><span class="level6"> </span><span class="schemeOther">q</span><span class="level6c">)</span><span class="level7c">)</span>
p
q
<span class="level7c">(</span><span class="Identifier">-</span> c<span class="level7"> </span><span class="Constant">1</span><span class="level7c">)</span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span>
<span class="level13c">(</span>fibonacci-d <span class="Constant">1</span><span class="level13"> </span><span class="Constant">0</span><span class="level13"> </span><span class="Constant">0</span><span class="level13"> </span><span class="Constant">1</span><span class="level13"> </span><span class="schemeOther">n</span><span class="level13c">)</span><span class="level14c">)</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; @fn syntax for run with ...</span>
<span class="Comment">;;</span>
<span class="level16c">(</span><span class="Statement">define-syntax</span> run
<span class="level15c">(</span><span class="Statement">syntax-rules</span> <span class="level14c">(</span>with <span class="Identifier">list</span><span class="level14"> </span><span class="Statement">and</span><span class="level14"> </span><span class="schemeOther">time</span><span class="level14c">)</span>
<span class="level14c">(</span><span class="level13c">(</span>_ <span class="Constant"><fn></span><span class="level13"> </span><span class="Constant"><range></span><span class="level13c">)</span>
<span class="level13c">(</span>for <span class="level12c">(</span><span class="level11c">(</span><span class="schemeOther">i</span> <span class="level10c">(</span><span class="schemeOther">in-range</span> <span class="level9c">(</span><span class="Identifier">car</span> <span class="Constant"><range></span><span class="level9c">)</span><span class="level10"> </span><span class="level9c">(</span><span class="Identifier">cdr</span><span class="level9"> </span><span class="Constant"><range></span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)(</span><span class="Constant"><fn></span> <span class="schemeOther">i</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span>
<span class="level14c">(</span><span class="level13c">(</span>_ <span class="schemeOther">with</span><span class="level13"> </span><span class="Identifier">list</span><span class="level13"> </span><span class="Constant"><fn></span><span class="level13"> </span><span class="Constant"><range></span><span class="level13c">)</span>
<span class="level13c">(</span>for/list <span class="level12c">(</span><span class="level11c">(</span><span class="schemeOther">i</span> <span class="level10c">(</span><span class="schemeOther">in-range</span> <span class="level9c">(</span><span class="Identifier">car</span> <span class="Constant"><range></span><span class="level9c">)</span><span class="level10"> </span><span class="level9c">(</span><span class="Identifier">cdr</span><span class="level9"> </span><span class="Constant"><range></span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)(</span><span class="Constant"><fn></span> <span class="schemeOther">i</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span>
<span class="level14c">(</span><span class="level13c">(</span>_ <span class="schemeOther">with</span><span class="level13"> </span><span class="schemeOther">time</span><span class="level13"> </span><span class="Constant"><fn></span><span class="level13"> </span><span class="Constant"><range></span><span class="level13c">)</span>
<span class="level13c">(</span>time <span class="level12c">(</span><span class="schemeOther">for</span> <span class="level11c">(</span><span class="level10c">(</span><span class="schemeOther">i</span> <span class="level9c">(</span><span class="schemeOther">in-range</span> <span class="level8c">(</span><span class="Identifier">car</span> <span class="Constant"><range></span><span class="level8c">)</span><span class="level9"> </span><span class="level8c">(</span><span class="Identifier">cdr</span><span class="level8"> </span><span class="Constant"><range></span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)(</span><span class="Constant"><fn></span> <span class="schemeOther">i</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span>
<span class="level14c">(</span><span class="level13c">(</span>_ <span class="schemeOther">with</span><span class="level13"> </span><span class="Identifier">list</span><span class="level13"> </span><span class="Statement">and</span><span class="level13"> </span><span class="schemeOther">time</span><span class="level13"> </span><span class="Constant"><fn></span><span class="level13"> </span><span class="Constant"><range></span><span class="level13c">)</span>
<span class="level13c">(</span>time <span class="level12c">(</span><span class="schemeOther">for/list</span> <span class="level11c">(</span><span class="level10c">(</span><span class="schemeOther">i</span> <span class="level9c">(</span><span class="schemeOther">in-range</span> <span class="level8c">(</span><span class="Identifier">car</span> <span class="Constant"><range></span><span class="level8c">)</span><span class="level9"> </span><span class="level8c">(</span><span class="Identifier">cdr</span><span class="level8"> </span><span class="Constant"><range></span><span class="level8c">)</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)(</span><span class="Constant"><fn></span> <span class="schemeOther">i</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; Tests</span>
<span class="Comment">;;</span>
<span class="level16c">(</span>fibonacci-naïve <span class="Constant">30</span><span class="level16c">)</span>
<span class="level16c">(</span>fibonacci-linear <span class="Constant">100000</span><span class="level16c">)</span>
<span class="level16c">(</span>fibonacci-tail <span class="Constant">100000</span><span class="level16c">)</span>
<span class="level16c">(</span>fibonacci-dijkstra <span class="Constant">100000</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; Tests with the ranges</span>
<span class="Comment">;;</span>
<span class="level16c">(</span>run <span class="schemeOther">with</span><span class="level16"> </span><span class="schemeOther">time</span><span class="level16"> </span><span class="schemeOther">fibonacci-naïve</span><span class="level16"> </span><span class="level15c">(</span><span class="Identifier">cons</span> <span class="Constant">0</span><span class="level15"> </span><span class="Constant">30</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="level16c">(</span>run <span class="schemeOther">with</span><span class="level16"> </span><span class="schemeOther">time</span><span class="level16"> </span><span class="schemeOther">fibonacci-linear</span><span class="level16"> </span><span class="level15c">(</span><span class="Identifier">cons</span> <span class="Constant">0</span><span class="level15"> </span><span class="Constant">1000</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="level16c">(</span>run <span class="schemeOther">with</span><span class="level16"> </span><span class="schemeOther">time</span><span class="level16"> </span><span class="schemeOther">fibonacci-tail</span><span class="level16"> </span><span class="level15c">(</span><span class="Identifier">cons</span> <span class="Constant">0</span><span class="level15"> </span><span class="Constant">1000</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="level16c">(</span>run <span class="schemeOther">with</span><span class="level16"> </span><span class="schemeOther">time</span><span class="level16"> </span><span class="schemeOther">fibonacci-dijkstra</span><span class="level16"> </span><span class="level15c">(</span><span class="Identifier">cons</span> <span class="Constant">0</span><span class="level15"> </span><span class="Constant">1000</span><span class="level15c">)</span><span class="level16c">)</span>
<span class="Comment">;;</span>
<span class="Comment">;; Results</span>
<span class="Comment">;;</span>
<span class="Comment">;; cpu time: 1030 real time: 1061 gc time: 31</span>
<span class="Comment">;; cpu time: 312 real time: 334 gc time: 63</span>
<span class="Comment">;; cpu time: 266 real time: 262 gc time: 31</span>
<span class="Comment">;; cpu time: 31 real time: 23 gc time: 0</span>
</pre>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Fizzbuzz.scm
2012-11-22T00:00:00+00:00
hhttp://okertanov.github.com//2012/11/22/fizzbuzz.scm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>fizzbuzz.scm.html</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v10">
<meta name="syntax" content="scheme">
<meta name="settings" content="use_css,expand_tabs">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
.Special { color: #dc322f; }
.level9c { color: #3a5fcd; }
.level10c { color: #43cd80; }
.level11c { color: #9a32cd; }
.level12c { color: #cd2626; }
.Constant { color: #2aa198; }
.Identifier { color: #268bd2; }
.level13c { color: #3a5fcd; }
.level14c { color: #43cd80; }
.level15c { color: #9a32cd; }
.Statement { color: #719e07; }
.level16c { color: #cd2626; }
.Comment { color: #93a1a1; font-style: italic; }
.Error { color: #dc322f; font-weight: bold; }
-->
</style>
</head>
<body>
<pre>
<span class="Comment">;;</span>
<span class="Comment">;; <a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html">http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html</a></span>
<span class="Comment">;;</span>
<span class="Comment">;; Write a program that prints the numbers from 1 to 100.</span>
<span class="Comment">;; But for multiples of three print "Fizz" instead of the number and</span>
<span class="Comment">;; for the multiples of five print "Buzz".</span>
<span class="Comment">;; For numbers which are multiples of both three and five print "FizzBuzz".</span>
<span class="Comment">;;</span>
<span class="level16c">(</span><span class="Statement">let*</span> <span class="level15c">(</span><span class="level14c">(</span>range <span class="level13c">(</span><span class="Identifier">cons</span> <span class="Constant">1</span><span class="level13"> </span><span class="Constant">100</span><span class="level13c">)</span><span class="level14c">)</span>
<span class="level14c">(</span>fizz? <span class="level13c">(</span><span class="Error">λ</span><span class="level12c">(</span><span class="schemeOther">n</span><span class="level12c">)(</span><span class="Identifier">zero?</span> <span class="level11c">(</span><span class="Identifier">modulo</span> <span class="schemeOther">n</span><span class="level11"> </span><span class="Constant">3</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span>
<span class="level14c">(</span>buzz? <span class="level13c">(</span><span class="Error">λ</span><span class="level12c">(</span><span class="schemeOther">n</span><span class="level12c">)(</span><span class="Identifier">zero?</span> <span class="level11c">(</span><span class="Identifier">modulo</span> <span class="schemeOther">n</span><span class="level11"> </span><span class="Constant">5</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span><span class="level15c">)</span>
<span class="level15c">(</span>for/list <span class="level14c">(</span><span class="level13c">(</span><span class="schemeOther">i</span> <span class="level12c">(</span><span class="schemeOther">stop-after</span>
<span class="level11c">(</span>in-naturals <span class="level10c">(</span><span class="Identifier">car</span> <span class="schemeOther">range</span><span class="level10c">)</span><span class="level11c">)</span>
<span class="level11c">(</span><span class="Error">λ</span><span class="level10c">(</span>s<span class="level10c">)(</span><span class="Identifier">equal?</span> <span class="schemeOther">s</span><span class="level10"> </span><span class="level9c">(</span><span class="Identifier">cdr</span> <span class="schemeOther">range</span><span class="level9c">)</span><span class="level10c">)</span><span class="level11c">)</span><span class="level12c">)</span><span class="level13c">)</span><span class="level14c">)</span>
<span class="level14c">(</span><span class="Statement">or</span>
<span class="level13c">(</span><span class="Statement">and</span> <span class="level12c">(</span>fizz? <span class="schemeOther">i</span><span class="level12c">)</span><span class="level13"> </span><span class="level12c">(</span><span class="schemeOther">buzz?</span><span class="level12"> </span><span class="schemeOther">i</span><span class="level12c">)</span><span class="level13"> </span><span class="Special">'</span><span class="schemeOther">FizzBuzz</span><span class="level13c">)</span>
<span class="level13c">(</span><span class="Statement">and</span> <span class="level12c">(</span>fizz? <span class="schemeOther">i</span><span class="level12c">)</span><span class="level13"> </span><span class="Special">'</span><span class="schemeOther">Fizz</span><span class="level13c">)</span>
<span class="level13c">(</span><span class="Statement">and</span> <span class="level12c">(</span>buzz? <span class="schemeOther">i</span><span class="level12c">)</span><span class="level13"> </span><span class="Special">'</span><span class="schemeOther">Buzz</span><span class="level13c">)</span>
i<span class="level14c">)</span><span class="level15c">)</span><span class="level16c">)</span>
</pre>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Programmers And Bread
2012-10-04T00:00:00+00:00
hhttp://okertanov.github.com//2012/10/04/Programmers-and-bread
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/Desktop/bread.scm</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v10">
<meta name="syntax" content="scheme">
<meta name="settings" content="use_css,expand_tabs">
<style type="text/css">
<!--
pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
body { font-family: monospace; color: #657b83; background-color: #fdf6e3; }
.Comment { color: #93a1a1; font-style: italic; }
.Identifier { color: #268bd2; }
.Statement { color: #719e07; }
.Special { color: #dc322f; }
.Constant { color: #2aa198; }
.Error { color: #dc322f; font-weight: bold; }
-->
</style>
</head>
<body>
<pre>
<span class="Error">#lang</span> scheme
<span class="Constant">"Как два программиста хлеб пекли. <a href="http://habrahabr.ru/post/153225">http://habrahabr.ru/post/153225</a>"</span>
<span class="Constant">" — Нам нужно, чтобы делался хлеб."</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>bread<span class="Special">)</span><span class="schemeStruc"> </span><span class="Special">'(</span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>make<span class="schemeStruc"> </span><span class="schemeOther">thing</span><span class="Special">)</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">thing</span><span class="Special">))</span>
<span class="Special">(</span>make <span class="schemeOther">bread</span><span class="Special">)</span>
<span class="Constant">" — Нам нужно, чтобы хлеб не просто делался, а выпекался в печке."</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>bake<span class="schemeStruc"> </span><span class="schemeOther">thing</span><span class="Special">)(</span><span class="Error">λ</span><span class="Special">()</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">thing</span><span class="Special">)))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Constant">" — Нам нужно, чтобы печки были разных видов."</span>
<span class="Special">(</span><span class="Statement">define-syntax</span> use
<span class="Special">(</span><span class="Statement">syntax-rules</span><span class="schemeStruc"> </span><span class="Special">(</span>electric<span class="schemeStruc"> </span><span class="schemeOther">microwave</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="Special">)</span>
<span class="Special">((</span>use<span class="schemeStruc"> </span><span class="schemeOther">electric</span><span class="schemeStruc"> </span><span class="Constant"><opt></span><span class="schemeStruc"> </span><span class="schemeOther">...</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">)</span>
<span class="Special">(</span>use<span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">))</span>
<span class="Special">((</span>use<span class="schemeStruc"> </span><span class="schemeOther">microwave</span><span class="schemeStruc"> </span><span class="Constant"><opt></span><span class="schemeStruc"> </span><span class="schemeOther">...</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">)</span>
<span class="Special">(</span>use<span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">))</span>
<span class="Special">((</span>use<span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="Constant"><opt></span><span class="schemeStruc"> </span><span class="schemeOther">...</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">)</span>
<span class="Special">(</span><span class="Statement">cond</span><span class="schemeStruc"> </span><span class="Special">((</span><span class="Identifier">></span><span class="schemeStruc"> </span><span class="Constant"><opt></span><span class="schemeStruc"> </span><span class="Constant">0</span><span class="schemeStruc"> </span><span class="Special">)</span><span class="schemeStruc"> </span>...<span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">))</span>
<span class="Special">(</span><span class="Statement">else</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="Error">λ</span><span class="Special">()(</span>void<span class="Special">)))))</span>
<span class="Special">((</span>use<span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">)</span>
<span class="Special">(</span><span class="Constant"><do></span><span class="schemeStruc"> </span><span class="Constant"><thing></span><span class="Special">))))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">electric</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="Error">220v</span><span class="schemeStruc"> </span><span class="Constant">1/2A</span><span class="Special">)</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">microwave</span><span class="schemeStruc"> </span><span class="schemeOther">vendor:</span><span class="schemeStruc"> </span><span class="Error">Panasonic™</span><span class="schemeStruc"> </span><span class="schemeOther">model:</span><span class="schemeStruc"> </span><span class="schemeOther">EEM1100</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Constant">" — Нам нужно, чтобы газовая печь не могла печь без газа."</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="Constant">0</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="Constant">5.75</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">))</span>
<span class="Constant">" — Нам нужно, чтобы печки могли выпекать ещё и пирожки (отдельно — с мясом, отдельно — с капустой), и торты."</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>pie<span class="schemeStruc"> </span><span class="schemeOther">filling</span><span class="Special">)</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="Error">λ</span><span class="Special">()(</span><span class="Identifier">list</span><span class="schemeStruc"> </span><span class="schemeOther">filling</span><span class="schemeStruc"> </span><span class="Special">'</span><span class="schemeOther">pie</span><span class="Special">)))</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>cake<span class="Special">)</span><span class="schemeStruc"> </span><span class="Special">'(</span><span class="schemeOther">cake</span><span class="Special">))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">pie</span><span class="schemeStruc"> </span><span class="Special">'</span><span class="schemeOther">meat</span><span class="Special">)))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">pie</span><span class="schemeStruc"> </span><span class="Special">'</span><span class="schemeOther">cabbage</span><span class="Special">)))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="schemeOther">cake</span><span class="Special">))</span>
<span class="Constant">" — Нам нужно, чтобы хлеб, пирожки и торты выпекались по разным рецептам."</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>recipe<span class="schemeStruc"> </span><span class="schemeOther">what</span><span class="schemeStruc"> </span><span class="schemeOther">thing</span><span class="Special">)</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="Error">λ</span><span class="Special">()(</span><span class="Identifier">cons</span><span class="schemeStruc"> </span><span class="schemeOther">what</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">thing</span><span class="Special">))))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">recipe</span><span class="schemeStruc"> </span><span class="Constant">"Brown bread"</span><span class="schemeStruc"> </span><span class="schemeOther">bread</span><span class="Special">)))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">gas</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">bake</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">recipe</span><span class="schemeStruc"> </span><span class="Constant">"Kiev cake"</span><span class="schemeStruc"> </span><span class="schemeOther">cake</span><span class="Special">)))</span>
<span class="Constant">" — Нам нужно, чтобы в печи можно было обжигать кирпичи."</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>brick<span class="Special">)</span><span class="schemeStruc"> </span><span class="Special">'(</span><span class="schemeOther">brick</span><span class="Special">))</span>
<span class="Special">(</span><span class="Statement">define</span> <span class="Special">(</span>burn<span class="schemeStruc"> </span><span class="schemeOther">thing</span><span class="Special">)(</span><span class="Error">λ</span><span class="Special">()</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="schemeOther">thing</span><span class="Special">)))</span>
<span class="Special">(</span>make <span class="Special">(</span><span class="schemeOther">use</span><span class="schemeStruc"> </span><span class="schemeOther">electric</span><span class="schemeStruc"> </span><span class="Special">(</span><span class="Error">380v</span><span class="schemeStruc"> </span><span class="Constant">5A</span><span class="Special">)</span><span class="schemeStruc"> </span><span class="schemeOther">oven</span><span class="schemeStruc"> </span><span class="schemeOther">burn</span><span class="schemeStruc"> </span><span class="schemeOther">brick</span><span class="Special">))</span>
<span class="Comment">;;</span>
<span class="Comment">;; Output:</span>
<span class="Comment">;;</span>
<span class="Comment">;; "Как два программиста хлеб пекли. <a href="http://habrahabr.ru/post/153225">http://habrahabr.ru/post/153225</a>"</span>
<span class="Comment">;; " — Нам нужно, чтобы делался хлеб."</span>
<span class="Comment">;; (bread)</span>
<span class="Comment">;; " — Нам нужно, чтобы хлеб не просто делался, а выпекался в печке."</span>
<span class="Comment">;; (bread)</span>
<span class="Comment">;; " — Нам нужно, чтобы печки были разных видов."</span>
<span class="Comment">;; (bread)</span>
<span class="Comment">;; (bread)</span>
<span class="Comment">;; (bread)</span>
<span class="Comment">;; " — Нам нужно, чтобы газовая печь не могла печь без газа."</span>
<span class="Comment">;; (bread)</span>
<span class="Comment">;; " — Нам нужно, чтобы печки могли выпекать ещё и пирожки (отдельно — с мясом, отдельно — с капустой), и торты."</span>
<span class="Comment">;; (meat pie)</span>
<span class="Comment">;; (cabbage pie)</span>
<span class="Comment">;; (cake)</span>
<span class="Comment">;; " — Нам нужно, чтобы хлеб, пирожки и торты выпекались по разным рецептам."</span>
<span class="Comment">;; ("Brown bread" bread)</span>
<span class="Comment">;; ("Kiev cake" cake)</span>
<span class="Comment">;; " — Нам нужно, чтобы в печи можно было обжигать кирпичи."</span>
<span class="Comment">;; (brick)</span>
<span class="Comment">;;</span>
</pre>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Array Iteration Interview Problem
2012-08-03T00:00:00+00:00
hhttp://okertanov.github.com//2012/08/03/Array-Iteration-Interview-Problem
<!DOCTYPE html>
<html lang="en">
<head>
<title>Array Iteration Interview Problem</title>
<script type="text/javascript" src="/assets/lib/jquery/jquery-1.7.2.min.js"></script>
</head>
<body>
<script src="https://gist.github.com/3246113.js"> </script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Object-oriented programming in JS
2012-05-12T00:00:00+00:00
hhttp://okertanov.github.com//dev/2012/05/12/js-klasses
<h2 id="каждый-программист-на-javascript-должен-написать-свою-реализацию-классов-via-habr">Каждый программист на javascript должен написать свою реализацию классов. /via habr</h2>
<p><a href="http://dojotoolkit.org/reference-guide/dojo/declare.html#dojo-declare">Dojo</a><br />
<a href="http://www.rogerwilco.ru/2011/04/sencha-extjs.html">Sencha</a><br />
<a href="http://qooxdoo.org/documentation/0.7/oo_feature_summary">qooxdoo</a><br />
<a href="http://www.phpeveryday.com/articles/MooTools-Basic-Creating-Classes-MooTools-P919.html">MooTools</a><br />
<a href="http://www.prototypejs.org/learn/class-inheritance">Prototype</a><br />
<a href="http://github.com/theshock/atomjs/blob/master/Docs/Class/Class.md">AtomJS</a><br />
<a href="http://jsclass.jcoglan.com/classes.html">JSClass</a><br />
<a href="http://code.google.com/p/jsclassextend/">jsclassextend</a><br />
<a href="http://github.com/jcoglan/js.class">js.class</a><br />
<a href="http://github.com/JustinTulloss/cobra">Cobra</a><br />
<a href="http://www.uselesspickles.com/class_library/">The $class Library</a><br />
<a href="http://classy.pocoo.org/">Classy</a><br />
<a href="http://www.yuiblog.com/blog/2010/01/06/inheritance-patterns-in-yui-3/">YUI 3</a><br />
<a href="http://jashkenas.github.com/coffee-script/#classes">Coffee-Script</a><br />
<a href="http://code.google.com/p/javascript-classes/">JavascriptClasses</a><br />
<a href="http://amix.dk/blog/post/19038">AJS</a><br />
<a href="http://github.com/tannhu/jsface">jsFace</a><br />
<a href="http://jsoop.codeplex.com/">JsOOP</a><br />
<a href="http://code.google.com/p/joot/wiki/API">joot</a><br />
<a href="http://code.google.com/p/oopsjs/">oopsjs</a><br />
<a href="http://github.com/tekool/objs/wiki">Objs</a><br />
<a href="http://maxpert.github.com/oorja/">oorja</a><br />
<a href="http://code.google.com/p/objx/wiki/OClass">objx</a><br />
<a href="http://code.google.com/p/jsclassextend/">jsclassextend</a><br />
<a href="http://code.google.com/p/prolificjs/wiki/OOP">prolificjs</a><br />
<a href="http://code.google.com/p/objectize/">objectize</a></p>
<p><a href="http://code.google.com/p/core-framework/wiki/Inheritance">code.google.com/p/core-framework/wiki/Inheritance</a><br />
<a href="http://code.google.com/p/sfjsoo/">code.google.com/p/sfjsoo/</a><br />
<a href="http://code.google.com/p/jslproject/">code.google.com/p/jslproject/</a><br />
<a href="http://code.google.com/p/magic-classes/wiki/MagicClassesOverview">code.google.com/p/magic-classes/wiki/MagicClassesOverview</a></p>
<p><a href="http://github.com/ded/klass">github.com/ded/klass</a><br />
<a href="http://github.com/jiem/my-class">github.com/jiem/my-class</a><br />
<a href="http://github.com/kilhage/class.js">github.com/kilhage/class.js</a><br />
<a href="http://github.com/Jakobo/Sslac">github.com/Jakobo/Sslac</a><br />
<a href="http://github.com/BonsaiDen/neko.js">github.com/BonsaiDen/neko.js</a><br />
<a href="http://github.com/finscn/GT-Class">github.com/finscn/GT-Class</a><br />
<a href="http://github.com/deadlyicon/klass.js">github.com/deadlyicon/klass.js</a><br />
<a href="http://github.com/neuromantic/CodeJS">github.com/neuromantic/CodeJS</a><br />
<a href="http://github.com/cj/js-oo">github.com/cj/js-oo</a><br />
<a href="http://github.com/darthapo/klass.js">github.com/darthapo/klass.js</a><br />
<a href="http://github.com/nemisj/zet.js">github.com/nemisj/zet.js</a><br />
<a href="http://github.com/k33g/species">github.com/k33g/species</a><br />
<a href="http://github.com/benekastah/JS-Class">github.com/benekastah/JS-Class</a><br />
<a href="http://github.com/tobeytailor/def.js">github.com/tobeytailor/def.js</a><br />
<a href="http://github.com/rstrobl/squeakyJS">github.com/rstrobl/squeakyJS</a><br />
<a href="http://github.com/shinyplasticbag/MojoClass">github.com/shinyplasticbag/MojoClass</a><br />
<a href="http://github.com/firejune/class">github.com/firejune/class</a><br />
<a href="http://github.com/gcoguiec/jquery-class">github.com/gcoguiec/jquery-class</a><br />
<a href="http://github.com/daffl/JS.Class">github.com/daffl/JS.Class</a><br />
<a href="http://github.com/pavelz/class.js">github.com/pavelz/class.js</a><br />
<a href="http://github.com/zerodogg/jqsimple-class">github.com/zerodogg/jqsimple-class</a><br />
<a href="http://github.com/bnoguchi/class-js">github.com/bnoguchi/class-js</a><br />
<a href="http://github.com/arian/Klass">github.com/arian/Klass</a><br />
<a href="http://github.com/kuwabarahiroshi/joo">github.com/kuwabarahiroshi/joo</a><br />
<a href="http://github.com/iamleppert/SimpleClass">github.com/iamleppert/SimpleClass</a><br />
<a href="http://github.com/aenoa/Noode.js">github.com/aenoa/Noode.js</a><br />
<a href="http://github.com/stomlinson/SuperClass">github.com/stomlinson/SuperClass</a><br />
<a href="http://github.com/jzimmek/klazz">github.com/jzimmek/klazz</a><br />
<a href="http://github.com/kbjr/class.js">github.com/kbjr/class.js</a><br />
<a href="http://github.com/jhnns/node.class">github.com/jhnns/node.class</a><br />
<a href="http://github.com/borysf/declare/blob/master/declare.js">github.com/borysf/declare/blob/master/declare.js</a><br />
<a href="http://github.com/ShadowCloud/BF-Class">github.com/ShadowCloud/BF-Class</a><br />
<a href="http://github.com/pic-o/jsClass">github.com/pic-o/jsClass</a><br />
<a href="http://github.com/rosamez/jquery.klass">github.com/rosamez/jquery.klass</a><br />
<a href="http://github.com/yuki-kimoto/javascript-Class_Simple">github.com/yuki-kimoto/javascript-Class_Simple</a><br />
<a href="http://github.com/yaksnrainbows/jarb">github.com/yaksnrainbows/jarb</a><br />
<a href="http://github.com/thirashima/UnderClass">github.com/thirashima/UnderClass</a><br />
<a href="http://github.com/arahaya/package.js">github.com/arahaya/package.js</a><br />
<a href="http://github.com/arieh/Class.def">github.com/arieh/Class.def</a><br />
<a href="http://github.com/bogdan-dumitru/jsClass">github.com/bogdan-dumitru/jsClass</a><br />
<a href="http://github.com/pomke/pomke.js">github.com/pomke/pomke.js</a><br />
<a href="http://github.com/sgolasch/jClassify">github.com/sgolasch/jClassify</a><br />
<a href="http://github.com/kbjr/Classy">github.com/kbjr/Classy</a><br />
<a href="http://github.com/cthackers/jClass">github.com/cthackers/jClass</a><br />
<a href="http://github.com/davidjbeveridge/Clasico">github.com/davidjbeveridge/Clasico</a><br />
<a href="http://github.com/edave64/protojazz">github.com/edave64/protojazz</a><br />
<a href="http://github.com/mrac/solid.js">github.com/mrac/solid.js</a><br />
<a href="http://github.com/benekastah/Classy">github.com/benekastah/Classy</a><br />
<a href="http://github.com/damianmr/JSMiniClass">github.com/damianmr/JSMiniClass</a><br />
<a href="http://github.com/benekastah/classesWithCash">github.com/benekastah/classesWithCash</a><br />
<a href="http://github.com/dialog/Resig-Class">github.com/dialog/Resig-Class</a><br />
<a href="http://github.com/mpodriezov/OJS">github.com/mpodriezov/OJS</a><br />
<a href="http://github.com/dtinth/twcs.js">github.com/dtinth/twcs.js</a><br />
<a href="http://github.com/percyhanna/js-class">github.com/percyhanna/js-class</a><br />
<a href="http://github.com/jalopez/SimpleClassJS">github.com/jalopez/SimpleClassJS</a><br />
<a href="http://github.com/jhamlet/proteus">github.com/jhamlet/proteus</a><br />
<a href="http://github.com/petebrowne/classify">github.com/petebrowne/classify</a><br />
<a href="http://github.com/TdroL/Classy.js">github.com/TdroL/Classy.js</a><br />
<a href="http://github.com/azendal/neon">github.com/azendal/neon</a><br />
<a href="http://github.com/aulizko/Alan-Point-JavaScript-Library/tree/master/src/oop">github.com/aulizko/Alan-Point-JavaScript-Library/tree/master/src/oop</a></p>
Oldest domains
2012-04-21T00:00:00+00:00
hhttp://okertanov.github.com//links/2012/04/21/100-oldest-domains
<h2 id="100-oldest-com-domains">100 oldest .com domains</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1. 15-Mar-1985 SYMBOLICS.COM
2. 24-Apr-1985 BBN.COM
3. 24-May-1985 THINK.COM
4. 11-Jul-1985 MCC.COM
5. 30-Sep-1985 DEC.COM
6. 07-Nov-1985 NORTHROP.COM
7. 09-Jan-1986 XEROX.COM
8. 17-Jan-1986 SRI.COM
9. 03-Mar-1986 HP.COM
10. 05-Mar-1986 BELLCORE.COM
11. 19-Mar-1986 IBM.COM
11. 19-Mar-1986 SUN.COM
13. 25-Mar-1986 INTEL.COM
14. 25-Mar-1986 TI.COM
15. 25-Apr-1986 ATT.COM
16. 08-May-1986 GMR.COM
17. 08-May-1986 TEK.COM
18. 10-Jul-1986 FMC.COM
19. 10-Jul-1986 UB.COM
20. 05-Aug-1986 BELL-ATL.COM
21. 05-Aug-1986 GE.COM
22. 05-Aug-1986 GREBYN.COM
23. 05-Aug-1986 ISC.COM
24. 05-Aug-1986 NSC.COM
25. 05-Aug-1986 STARGATE.COM
26. 02-Sep-1986 BOEING.COM
27. 18-Sep-1986 ITCORP.COM
28. 29-Sep-1986 SIEMENS.COM
29. 18-Oct-1986 PYRAMID.COM
30. 27-Oct-1986 ALPHACDC.COM
31. 27-Oct-1986 BDM.COM
32. 27-Oct-1986 FLUKE.COM
33. 27-Oct-1986 INMET.COM
34. 27-Oct-1986 KESMAI.COM
35. 27-Oct-1986 MENTOR.COM
36. 27-Oct-1986 NEC.COM
37. 27-Oct-1986 RAY.COM
38. 27-Oct-1986 ROSEMOUNT.COM
39. 27-Oct-1986 VORTEX.COM
40. 05-Nov-1986 ALCOA.COM
41. 05-Nov-1986 GTE.COM
42. 17-Nov-1986 ADOBE.COM
43. 17-Nov-1986 AMD.COM
44. 17-Nov-1986 DAS.COM
45. 17-Nov-1986 DATA-IO.COM
46. 17-Nov-1986 OCTOPUS.COM
47. 17-Nov-1986 PORTAL.COM
48. 17-Nov-1986 TELTONE.COM
49. 11-Dec-1986 3COM.COM
50. 11-Dec-1986 AMDAHL.COM
51. 11-Dec-1986 CCUR.COM
52. 11-Dec-1986 CI.COM
53. 11-Dec-1986 CONVERGENT.COM
54. 11-Dec-1986 DG.COM
55. 11-Dec-1986 PEREGRINE.COM
56. 11-Dec-1986 QUAD.COM
57. 11-Dec-1986 SQ.COM
58. 11-Dec-1986 TANDY.COM
59. 11-Dec-1986 TTI.COM
60. 11-Dec-1986 UNISYS.COM
61. 19-Jan-1987 CGI.COM
62. 19-Jan-1987 CTS.COM
63. 19-Jan-1987 SPDCC.COM
64. 19-Feb-1987 APPLE.COM
65. 04-Mar-1987 NMA.COM
66. 04-Mar-1987 PRIME.COM
67. 04-Apr-1987 PHILIPS.COM
68. 23-Apr-1987 DATACUBE.COM
69. 23-Apr-1987 KAI.COM
70. 23-Apr-1987 TIC.COM
71. 23-Apr-1987 VINE.COM
72. 30-Apr-1987 NCR.COM
73. 14-May-1987 CISCO.COM
74. 14-May-1987 RDL.COM
75. 20-May-1987 SLB.COM
76. 27-May-1987 PARCPLACE.COM
77. 27-May-1987 UTC.COM
78. 26-Jun-1987 IDE.COM
79. 09-Jul-1987 TRW.COM
80. 13-Jul-1987 UNIPRESS.COM
81. 27-Jul-1987 DUPONT.COM
82. 27-Jul-1987 LOCKHEED.COM
83. 28-Jul-1987 ROSETTA.COM
84. 18-Aug-1987 TOAD.COM
85. 31-Aug-1987 QUICK.COM
86. 03-Sep-1987 ALLIED.COM
87. 03-Sep-1987 DSC.COM
88. 03-Sep-1987 SCO.COM
89. 22-Sep-1987 GENE.COM
90. 22-Sep-1987 KCCS.COM
91. 22-Sep-1987 SPECTRA.COM
92. 22-Sep-1987 WLK.COM
93. 30-Sep-1987 MENTAT.COM
94. 14-Oct-1987 WYSE.COM
95. 02-Nov-1987 CFG.COM
96. 09-Nov-1987 MARBLE.COM
97. 16-Nov-1987 CAYMAN.COM
98. 16-Nov-1987 ENTITY.COM
99. 24-Nov-1987 KSR.COM
100. 30-Nov-1987 NYNEXST.COM
</code></pre></div></div>
Declarative Factorial
2012-04-14T00:00:00+00:00
hhttp://okertanov.github.com//2012/04/14/declarative-factorial
<!DOCTYPE html>
<!-- Created by htmlize-1.39 in css mode. -->
<html lang="en">
<head>
<title>factorial.scm</title>
<link type="text/css" rel="stylesheet" href="/assets/lib/app/factorial.css" />
<script type="text/javascript" src="/assets/lib/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/assets/lib/app/factorial.js"></script>
</head>
<body>
<pre>
<span class="comment-delimiter">;</span><span class="comment">
</span><span class="comment-delimiter">; </span><span class="comment">@file factorial.scm
</span><span class="comment-delimiter">; </span><span class="comment">@brief Scheme language primer
</span><span class="comment-delimiter">; </span><span class="comment">@date April 2012
</span><span class="comment-delimiter">; </span><span class="comment">@copyright © 2012 <<a href="mailto:okertanov@gmail.com">okertanov@gmail.com</a>>
</span><span class="comment-delimiter">;</span><span class="comment">
</span>
<span class="comment-delimiter">;</span><span class="comment">
</span><span class="comment-delimiter">; </span><span class="comment">Language
</span><span class="comment-delimiter">;</span><span class="comment">
</span>#lang scheme
<span class="comment-delimiter">;</span><span class="comment">
</span><span class="comment-delimiter">; </span><span class="comment">Declarative factorial function in Scheme
</span><span class="comment-delimiter">;</span><span class="comment">
</span>
<span class="obscured definition" id="definition-0"><span class="obscure yes"><span class="comment-delimiter">;</span><span class="comment"></span></span>
<span class="obscure yes"><span class="comment-delimiter">; </span><span class="comment">Syntactic sugar</span></span>
<span class="obscure yes"><span class="comment-delimiter">;</span><span class="comment"></span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span>define-syntax-rule <span class="rainbow-delimiters-depth-2">(</span></span>the a b<span class="obscure yes"><span class="rainbow-delimiters-depth-2">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-2">(</span><span class="keyword">begin</span> <span class="rainbow-delimiters-depth-3">(</span><span
class="keyword">define</span> <span class="function-name">a</span> b<span class="rainbow-delimiters-depth-3">)</span> a<span class="rainbow-delimiters-depth-2">)</span><span class="rainbow-delimiters-depth-1">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span>define-syntax-rule <span class="rainbow-delimiters-depth-2">(</span></span>is e<span class="obscure yes"><span class="rainbow-delimiters-depth-2">)</span> e<span class="rainbow-delimiters-depth-1">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span>define-syntax-rule <span class="rainbow-delimiters-depth-2">(</span></span>to e<span class="obscure yes"><span class="rainbow-delimiters-depth-2">)</span> e<span class="rainbow-delimiters-depth-1">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span><span class="keyword">define</span></span> <span class="function-name">less/than?</span> <span class="obscure yes"><span class="rainbow-delimiters-depth-2">(</span>λ <span class="rainbow-delimiters-depth-3">(</span>a b<span class="rainbow-delimiters-depth-3">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-3">(</span>< a b<span class="rainbow-delimiters-depth-3">)</span><span class="rainbow-delimiters-depth-2">)</span><span class="rainbow-delimiters-depth-1">)</span></span>
</span> <!-- /definition-0 -->
<span class="comment-delimiter">;</span><span class="comment">
</span><span class="comment-delimiter">; </span><span class="comment">Formal description
</span><span class="comment-delimiter">;</span><span class="comment">
</span>
<span class="comment description" id="description-1">#|
<a href="http://en.wikipedia.org/wiki/Factorial">http://en.wikipedia.org/wiki/Factorial</a>
<span class="descr-i" data-for="l1">The</span> <span class="descr-i" data-for="l2">factorial</span> <span class="descr-i" data-for="l3">of</span> <span class="descr-i" data-for="l4">a</span> <span class="descr-i" data-for="l5-1">non</span>-<span class="descr-i" data-for="l5-2">negative</span> <span class="descr-i" data-for="l6">integer</span> <span class="descr-i" data-for="l7-1 l7-2">n</span>, <span class="descr-i" data-for="l8">denoted by n!</span>,
<span class="descr-i" data-for="l9">is</span> <span class="descr-i" data-for="l10">the</span> <span class="descr-i" data-for="l11">product</span> <span class="descr-i" data-for="l12">of</span> <span class="descr-i" data-for="l13">all</span> <span class="descr-i" data-for="l14">positive</span> <span class="descr-i" data-for="l15">integers</span> <span class="descr-i" data-for="l16">less</span> <span class="descr-i" data-for="l17">than</span> <span class="descr-i" data-for="l18">or</span> <span class="descr-i" data-for="l19">equal</span> <span class="descr-i" data-for="l20">to</span> <span class="descr-i" data-for="l21">n</span>.
<span class="descr-i" data-for="l22">The value of 0! is 1</span>.
|#</span>
<span class="obscured definition" id="definition-1"><span class="obscure yes"><span class="comment-delimiter">;</span><span class="comment"></span></span>
<span class="obscure yes"><span class="comment-delimiter">; </span><span class="comment">Definition</span></span>
<span class="obscure yes"><span class="comment-delimiter">;</span><span class="comment"></span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span></span><span id="l1">the</span> <span id="l2">factorial</span>/<span id="l3">of</span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-2">(</span>λ <span class="rainbow-delimiters-depth-3">(</span></span><span id="l4">a</span><span class="obscure yes"><span class="rainbow-delimiters-depth-3">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-3">(</span><span class="keyword">let</span> <span class="rainbow-delimiters-depth-4">(</span><span class="rainbow-delimiters-depth-5">(</span>n a<span class="rainbow-delimiters-depth-5">)</span><span class="rainbow-delimiters-depth-4">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-4">(</span><span class="keyword">cond</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-5">(</span><span class="rainbow-delimiters-depth-6">(</span><span class="keyword">and</span> <span class="rainbow-delimiters-depth-7">(</span></span><span id="l5-1">not</span> <span class="obscure yes"><span class="rainbow-delimiters-depth-8">(</span></span><span id="l5-2">negative</span><span class="obscure yes">?</span> <span id="l7-1">n</span><span class="obscure yes"><span class="rainbow-delimiters-depth-8">)</span><span class="rainbow-delimiters-depth-7">)</span> <span class="rainbow-delimiters-depth-7">(</span></span><span id="l6">integer</span><span class="obscure yes">?</span> <span id="l7-2">n</span><span class="obscure yes"><span class="rainbow-delimiters-depth-7">)</span><span class="rainbow-delimiters-depth-6">)</span></span>
<span class="string"><span class="obscure yes">"</span><span id="l8">denoted by n!</span><span class="obscure yes">"</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-6">(</span></span><span id="l9">is</span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-7">(</span></span><span id="l10">the</span> <span id="l12">of</span>/<span id="l13">all</span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-8">(</span></span><span class="obscure yes">for/</span><span id="l11">product</span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-9">(</span><span class="rainbow-delimiters-depth-1">(</span>i <span class="rainbow-delimiters-depth-2">(</span><span class="rainbow-delimiters-depth-3">(</span>λ <span class="rainbow-delimiters-depth-4">(</span>s<span class="rainbow-delimiters-depth-4">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-4">(</span>stop-before</span><span class="obscure yes"> <span class="rainbow-delimiters-depth-5">(</span>in-naturals<span class="rainbow-delimiters-depth-5">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-5">(</span>λ <span class="rainbow-delimiters-depth-6">(</span>i<span class="rainbow-delimiters-depth-6">)</span></span><span class="obscure yes"><span class="rainbow-delimiters-depth-6">(</span>not <span class="rainbow-delimiters-depth-7">(</span></span><span class="keyword"><span id="l18">or</span></span> <span class="obscure yes"><span class="rainbow-delimiters-depth-8">(</span></span><span id="l16">less</span>/<span id="l17">than</span><span class="obscure yes">?</span><span class="obscure yes"> i s</span><span class="obscure yes"><span class="rainbow-delimiters-depth-8">)</span></span> <span class="obscure yes"><span class="rainbow-delimiters-depth-8">(</span></span><span id="l19">equal</span><span class="obscure yes">?</span><span class="obscure yes"> i s</span><span class="obscure yes"><span class="rainbow-delimiters-depth-8">)</span><span class="rainbow-delimiters-depth-7">)</span><span class="rainbow-delimiters-depth-6">)</span></span><span class="obscure yes"><span class="rainbow-delimiters-depth-5">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-4">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-3">)</span><span class="rainbow-delimiters-depth-3">(</span></span><span id="l20">to</span> <span id="l21">n</span><span class="obscure yes"><span class="rainbow-delimiters-depth-3">)</span><span class="rainbow-delimiters-depth-2">)</span><span class="rainbow-delimiters-depth-1">)</span><span class="rainbow-delimiters-depth-9">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-9">(</span><span class="keyword">cond</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span><span class="rainbow-delimiters-depth-2">(</span><span class="keyword">and</span> <span class="rainbow-delimiters-depth-3">(</span></span><span id="l14">positive</span><span class="obscure yes">?</span><span class="obscure yes"> i</span><span class="obscure yes"><span class="rainbow-delimiters-depth-3">)</span></span> <span class="obscure yes"><span class="rainbow-delimiters-depth-3">(</span></span><span id="l15">integer</span><span class="obscure yes">?</span><span class="obscure yes"> i</span><span class="obscure yes"><span class="rainbow-delimiters-depth-3">)</span><span class="rainbow-delimiters-depth-2">)</span> i<span class="rainbow-delimiters-depth-1">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span><span class="rainbow-delimiters-depth-2">(</span>zero? i<span class="rainbow-delimiters-depth-2">)</span> </span><span class="string"><span class="obscure yes">"</span><span id="l22">the value of 0! is 1</span><span class="obscure yes">"</span></span><span class="obscure yes"> 1<span class="rainbow-delimiters-depth-1">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">(</span><span class="keyword">else</span> -inf.0<span class="rainbow-delimiters-depth-1">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-9">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-8">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-7">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-6">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-5">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-4">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-3">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-2">)</span></span>
<span class="obscure yes"><span class="rainbow-delimiters-depth-1">)</span></span>
</span> <!-- /definition-1 -->
<span class="comment-delimiter">;</span><span class="comment">
</span><span class="comment-delimiter">; </span><span class="comment">Application
</span><span class="comment-delimiter">;</span><span class="comment">
</span><span class="rainbow-delimiters-depth-1">(</span>factorial/of 5<span class="rainbow-delimiters-depth-1">)</span>
<span class="comment-delimiter">;</span><span class="comment">
</span><span class="comment-delimiter">; </span><span class="comment">Result
</span><span class="comment-delimiter">;</span><span class="comment">
</span>
<span class="comment">#|
#<procedure:factorial/of>
120
|#</span>
</pre>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2131934-17']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>
Browsers' JavaScript performance benchmarking
2012-04-11T00:00:00+00:00
hhttp://okertanov.github.com//dev/2012/04/11/js-tests
<h2 id="browsermark--sunspider-tests">BrowserMark & Sunspider tests</h2>
<table>
<thead>
<tr>
<th style="text-align: left">Platform</th>
<th style="text-align: right">BrowserMark (pt)</th>
<th style="text-align: right">Sunspider (ms)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">Galaxy S2 2.3</td>
<td style="text-align: right">53838</td>
<td style="text-align: right"><em>3817.2</em></td>
</tr>
<tr>
<td style="text-align: left">Galaxy S2 ICS</td>
<td style="text-align: right">99473</td>
<td style="text-align: right">2011.7</td>
</tr>
<tr>
<td style="text-align: left">iPhone 4 5.1</td>
<td style="text-align: right"><em>52676</em></td>
<td style="text-align: right">3583.5</td>
</tr>
<tr>
<td style="text-align: left">iPhone 4S 5.01</td>
<td style="text-align: right">87631</td>
<td style="text-align: right">2240.3</td>
</tr>
<tr>
<td style="text-align: left">iPad 2 32Gb</td>
<td style="text-align: right">100977</td>
<td style="text-align: right">1821.8</td>
</tr>
<tr>
<td style="text-align: left">MBP13” 2010 SL (Chrome)</td>
<td style="text-align: right">530332</td>
<td style="text-align: right">339.5</td>
</tr>
<tr>
<td style="text-align: left">iMac 2008 Lion (Chrome)</td>
<td style="text-align: right"><strong>611486</strong></td>
<td style="text-align: right">299.2</td>
</tr>
<tr>
<td style="text-align: left">X86-64 PC Win7 (Chrome)</td>
<td style="text-align: right">594360</td>
<td style="text-align: right"><strong>283.4</strong></td>
</tr>
</tbody>
</table>
Interesting and promising technologies, links, etc.
2012-04-03T00:00:00+00:00
hhttp://okertanov.github.com//links/2012/04/03/links-todo
<h2 id="todo">Todo</h2>
<p><a href="http://jobs.thenextweb.com/">jobs.thenextweb.com</a><br />
<a href="http://themeforest.net/">themeforest.net</a><br />
<a href="http://www.scriptlance.com/">scriptlance.com</a><br />
<a href="http://hnhiring.me/">hnhiring.me</a><br />
<a href="http://www.google.com/reader/shared/okertanov">my google reader shared items</a><br />
<a href="http://www.google.com/trends/correlate/draw">google correlate</a><br />
<a href="http://esquire.ru/stuff/">esquire.ru stuff</a><br />
<a href="http://numbersapi.com/">NumbersAPI - Bring your metrics and dates to life</a><br />
<a href="http://www.smartappchallenge.com/eng/main.do">Samsung Smart app challenge</a><br />
<a href="http://code.google.com/p/chromiumembedded/">Chromium embedded</a><br />
<a href="http://interneturok.ru/">interneturok.ru</a><br />
<a href="http://spoon.com.ua/2012/03/evropa-istoriya-kontinenta-video/">Видео-история европейского континента</a><br />
<a href="http://synergy-foss.org/">Synergy lets you easily share your mouse and keyboard between multiple computers on your desk</a><br />
<a href="http://duartes.org/gustavo/blog/best-of">Gustavo Duarte: the best of</a><br />
<a href="http://ditaa.org/ditaa/">Create a diagram from ASCII using ditaa</a><br />
<a href="http://demonstrations.wolfram.com/">demonstrations at wolfram.com</a><br />
<a href="http://ditaa.sourceforge.net/">DIagrams Through Ascii Art</a><br />
<a href="http://www.latextemplates.com/">Latex templates</a><br />
<a href="http://www.noexcuselist.com/">No Eexcuse list</a><br />
<a href="http://visitmix.com/labs/ai2canvas/">Ai->Canvas</a><br />
<a href="http://html5sec.org/">HTML5 Security Cheatsheet</a></p>
<h2 id="nodejs">Node.js</h2>
<p><a href="https://github.com/mape/node-express-boilerplate">node express boilerplate</a><br />
<a href="http://toolbox.no.de/">Node Toolbox</a><br />
<a href="https://github.com/chriso/node.io">node.io - a data scraping and processing framework</a><br />
<a href="http://nowjs.com/">NowJS creates a magic namespace “now”, accessible by server and client</a><br />
<a href="http://www.senchalabs.org/connect/">Connect2</a><br />
<a href="http://expressjs.com/">expressjs.com - High performance, high class web development for Node.js</a><br />
<a href="https://github.com/hookio/hook.io">hook.io</a><br />
<a href="http://calip.so/">calip.so</a><br />
<a href="https://github.com/nodejitsu/forever">nodejitsu/forever</a><br />
<a href="http://habrahabr.ru/post/138071/">Разработка WEB-проекта на Node.JS: Часть 1</a><br />
<a href="http://habrahabr.ru/post/138629/">Разработка WEB-проекта на Node.JS: Часть 2</a><br />
<a href="http://habrahabr.ru/post/133363/">Шпаргалка по пакетному менеджеру NPM</a><br />
<a href="http://socket.io/">Socket.IO - realtime apps in every browser and mobile device</a></p>
<h2 id="webdev--javascript">Webdev & JavaScript</h2>
<p><a href="http://isotope.metafizzy.co">Isotope: An exquisite jQuery plugin for magical layouts - isotope.metafizzy.co</a><br />
<a href="http://bost.ocks.org/mike/d3/workshop/">D3 Workshop</a><br />
<a href="http://mbostock.github.com/d3/">D3.js - Data-Driven Documents</a><br />
<a href="http://jterrace.github.com/js.js/">js.js A JavaScript JavaScript interpreter</a><br />
<a href="http://microjs.com/">microjs.com</a><br />
<a href="https://wiki.mozilla.org/WebAPI">Mozilla wiki: WebAPI</a><br />
<a href="http://bonsaiden.github.com/JavaScript-Garden/">JavaScript Garden</a><br />
<a href="https://github.com/bebraw/jswiki/wiki">jswiki - This wiki indexes libraries and resources available for JavaScript.</a><br />
<a href="http://dochub.io/">dochub.io</a><br />
<a href="http://andrewplummer.github.com/APIConnect/">APIConnect is a Javascript class that provides a simple way to interact with APIs</a><br />
<a href="http://mbostock.github.com/d3/">A JavaScript visualization library for HTML and SVG</a><br />
<a href="http://habrahabr.ru/post/79960/">Список Javascript библиотек для рисования графиков и диаграмм</a><br />
<a href="http://habrahabr.ru/post/80027/">Список Javascript библиотек для рисования графиков и диаграмм 2</a><br />
<a href="http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books">List of freely available programming books</a><br />
<a href="https://developers.google.com/discovery/">Google APIs Discovery Service</a><br />
<a href="https://github.com/mbostock/d3/wiki/Gallery">github.com/mbostock/d3/wiki/Gallery</a><br />
<a href="http://backbone-patterns.heroku.com/">Backbone patterns</a><br />
<a href="http://javascriptplayground.com/blog/2012/04/backbone-js-tutorial-1">Exploring Backbone: Part 1</a><br />
<a href="http://blog.newsinapp.io/2012/03/15/how-build-news-aggregator-backbonejs-part-1/">How to build a news aggregator with backbone.js - Part 1</a><br />
<a href="http://codingcookies.com/2012/05/01/real-time-applications-with-node-js-and-socket-io/">Real-time Applications With Node.js and Socket.IO</a><br />
<a href="http://subtlepatterns.com/">Image patterns for your site</a><br />
<a href="http://shichuan.github.com/javascript-patterns/">JavaScript Patterns Collection</a><br />
<a href="https://github.com/kripken/emscripten">Emscripten: An LLVM-to-JavaScript Compiler</a><br />
<a href="http://gruntjs.com/">Grunt: a task-based command line build tool for JavaScript projects</a><br />
<a href="http://html5please.com/">html5please.com - the browser support story</a><br />
<a href="http://createjs.com">createjs.com</a><br />
<a href="http://dmitrysoshnikov.com/">ECMA-262 by Dmitry Soshnikov</a><br />
<a href="http://blogs.adobe.com/cantrell/archives/2012/03/accessing-the-accelerometer-and-gyroscope-in-javascript.html">Accessing the Accelerometer and Gyroscope in JavaScript</a><br />
<a href="http://dmitrysoshnikov.com/">ECMA-262 by Dmitry Soshnikov</a><br />
<a href="http://addyosmani.com/resources/essentialjsdesignpatterns/book/">Learning JavaScript Design Patterns A book by Addy Osmani</a><br />
<a href="http://smoothiecharts.org/">Smoothie Charts</a><br />
<a href="http://jquerypp.com/">jQuery++</a><br />
<a href="http://gridster.net/">gridster - Plug in to the grid</a><br />
<a href="http://livetools.uiparade.com/form-builder.html">Form builder</a><br />
<a href="http://brad.is/coding/BigScreen/">BigScreen is a simple library for using the JavaScript Full Screen API</a><br />
<a href="http://duri.me/">duri.me - a super simple dataURI tool</a><br />
<a href="http://prag.ma/code/sparky/">prag.ma/code/sparky</a><br />
<a href="http://jeromeetienne.github.com/tquery/">tQuery API : three.js + jQuery</a><br />
<a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills">HTML5 Cross Browser Polyfills</a><br />
<a href="http://tympanus.net/codrops/2012/09/12/creative-web-typography-styles/">Creative web typography styles</a><br />
<a href="http://fontello.com/">Fontello - icon fonts generator</a><br />
<a href="https://github.com/blueimp/jQuery-File-Upload">github.com/blueimp/jQuery-File-Upload</a><br />
<a href="http://fineuploader.com/">Fine Uploader</a></p>
<h3 id="js--date">JS & Date</h3>
<p><a href="http://arshaw.com/xdate/">XDate - A Modern JavaScript Date Library</a><br />
<a href="http://www.datejs.com/">Datejs is an open-source JavaScript Date Library</a><br />
<a href="http://momentjs.com/">Moment.js - A 5kb javascript date library for parsing, validating, manipulating, and formatting dates.</a></p>
<h3 id="js--charts">JS & Charts</h3>
<p><a href="https://github.com/tenXer/xcharts/">github.com/tenXer/xcharts</a></p>
<h2 id="mobile-html5-frameworks">Mobile html5 frameworks</h2>
<p><a href="http://jqtouch.com/">jQTouch</a><br />
<a href="http://jquerymobile.com/">jQuery Mobile</a><br />
<a href="http://www.sencha.com/products/touch">Sencha Touch</a><br />
<a href="http://www.appcelerator.com/platform/titanium-sdk">Titanium Mobile SDK</a><br />
<a href="http://incubator.apache.org/cordova/">Apache Cordova</a><br />
<a href="http://phonegap.com/">PhoneGap HTML5 platform</a><br />
<a href="https://trigger.io/">trigger.io - Mobile engine for web devs</a><br />
<a href="http://bradfrost.github.com/this-is-responsive/patterns.html">A collection of patterns and modules for responsive designs</a></p>
<h2 id="backbone">Backbone</h2>
<p><a href="http://addyosmani.github.com/backbone-fundamentals/">Developing Backbone.js Applications</a><br />
<a href="http://www.ofbrooklyn.com/2012/11/13/backbonification-migrating-javascript-to-backbone/">Backbonification: migrating a large JavaScript project from DOM spaghetti to Backbone.js</a><br />
<a href="http://floatleft.com/notebook/backbone-has-made-me-a-better-programmer">Backbone has made me a better programmer</a><br />
<a href="http://habrahabr.ru/post/149626/">Пишем реализацию MVC для Backbone</a><br />
<a href="http://www.mikkolehtinen.com/blog/2012/08/03/structuring-complex-backbone-dot-js-apps/">Structuring Complex Backbone.js Apps</a><br />
<a href="http://ianstormtaylor.com/rendering-views-in-backbonejs-isnt-always-simple/">Rendering Views in Backbone.js Isn’t Always Simple</a><br />
<a href="http://dailyjs.com/2012/07/19/mvstar-2/">Backbone.js: Hacker’s Guide</a><br />
<a href="http://dailyjs.com/2012/07/26/mvstar-3/">Backbone.js: Hacker’s Guide Part 2</a><br />
<a href="http://dailyjs.com/2012/08/02/mvstar-4/">Backbone.js: Hacker’s Guide Part 3</a></p>
<h2 id="sencha">Sencha</h2>
<p><a href="http://habrahabr.ru/post/132978/">Обзор ExtJS 4. Опыт портирования со старой версии</a><br />
<a href="http://habrahabr.ru/post/132923/">20 правил, которым стоит следовать, когда начинаете работать с EXT JS & Sencha Touch</a><br />
<a href="http://habrahabr.ru/post/132145/">Руководство по мелочам в Ext JS</a><br />
<a href="http://habrahabr.ru/post/129080/">Cоздание прототипа социальной сети на ExtJS</a><br />
<a href="http://habrahabr.ru/post/138054/">Пишем MVC приложение на Ext JS 4 с возможностью офлайн работы</a></p>
<h2 id="twitter-bootstrap">Twitter Bootstrap</h2>
<p><a href="http://stylebootstrap.info/">stylebootstrap.info</a><br />
<a href="http://wrapbootstrap.com/">WrapBootstrap is a marketplace for premium Bootstrap themes</a><br />
<a href="http://bootswatch.com/">Bootswatch</a><br />
<a href="http://builtwithbootstrap.com/">Built With Bootstrap</a><br />
<a href="http://fortawesome.github.com/Font-Awesome/">Font Awesome</a><br />
<a href="http://addyosmani.github.com/jquery-ui-bootstrap/">jQuery UI Bootstrap</a><br />
<a href="http://www.eyecon.ro/colorpicker-and-datepicker-for-twitter-bootstrap.htm">Colorpicker and Datepicker for Twitter Bootstrap</a><br />
<a href="The Interface Builder for Web Apps">divshot.com - The Interface Builder for Web Apps</a><br />
<a href="http://jetstrap.com/">Jetstrap is the premier interface-building tool for Bootstrap.</a><br />
<a href="http://nijikokun.github.com/bootstrap-notify/">Twitter Bootstrap Extensions: Notifications</a><br />
<a href="http://bootsnipp.com/">Bootsnipp - Design elements and code snippets for Bootstrap HTML/CSS/JS framework</a><br />
<a href="http://vitalets.github.com/bootstrap-editable/">Editable for Bootstrap</a><br />
<a href="http://vitalets.github.com/x-editable/">X-editable - In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery</a><br />
<a href="http://www.bootstraphero.com/the-big-badass-list-of-twitter-bootstrap-resources">LIST OF 210 USEFUL TWITTER BOOTSTRAP RESOURCES</a></p>
<h2 id="unix">Unix</h2>
<p><a href="https://github.com/Eugeny/ajenti">Web-panel Ajenti</a><br />
<a href="http://www.makelinux.net/kernel_map/">Linux kernel map</a></p>
<h2 id="apple-dev">Apple Dev</h2>
<p><a href="http://stackoverflow.com/questions/640805/open-source-ios-components-reusable-views-controllers-buttons-table-cells-e">Open source iOS components? Reusable views, controllers, buttons, table cells, etc? </a>
<a href="http://cocoadevcentral.com/d/learn_objectivec/">Learn Objective-C</a><br />
<a href="https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/Introduction/Introduction.html">Apple Developer: Start Developing iOS Apps Today</a><br />
<a href="http://code.google.com/p/google-toolbox-for-mac/">Google Toolbox for Mac</a><br />
<a href="http://kapeli.com/dash/">Dash – Snippet Manager, Documentation Browser</a><br />
<a href="https://github.com/kolinkrewinkel/KKGridView">KKGridView - Gridview for iOS. </a><br />
<a href="https://github.com/bdewey/ios-minimalist">Minimal iOS boilerplate – rationalized file names, Google Toolbox for Mac, TestFlight</a><br />
<a href="http://iosboilerplate.com/">iOS Boilerplate</a><br />
<a href="http://www.mockko.com/">mockko.com - iPhone UI Design</a><br />
<a href="http://writings.withoutfriction.com/the-complete-guide-for-starting-iphone-and-io">The Complete Guide for Starting iPhone and iOS Development</a><br />
<a href="https://github.com/AFNetworking/AFNetworking/">github.com/AFNetworking</a><br />
<a href="https://trigger.io/">trigger.io - Mobile engine for web devs</a><br />
<a href="http://www.mockup.io/">mockup.io - The showcase for your iOS mockups</a><br />
<a href="https://www.parse.com/">Parse - The Mobile App Platform for Developers</a><br />
<a href="http://iosboilerplate.com/">iOS-app template with lots of common tasks solved — Read more</a><br />
<a href="http://webappkit.org/">A framework for creating web applications using Cocoa and Objective-C, running on Mac OS X</a><br />
<a href="http://mobile-patterns.com/">Mobile UI Patterns</a><br />
<a href="http://pttrns.com/">Mobile Patterns via pttrns.com</a><br />
<a href="http://labs.ideeinc.com/multicolr/">labs.ideeinc.com/multicolr</a><br />
<a href="https://github.com/eaigner/DataKit/">DataKit makes it easy to add web backends to your apps</a><br />
<a href="https://github.com/onegray/UITableKit">iPhone UITableView wrapper</a><br />
<a href="https://github.com/charlesmchen/WeViews">WeViews - A set of iOS classes for laying out UIViews.</a><br />
<a href="http://osxbook.com/book/bonus/ancient/whatismacosx/arch_xnu.html">XNU: The Kernel</a><br />
<a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html">llvm.org/docs/AutomaticReferenceCounting.html</a><br />
<a href="http://appicontemplate.com/">iOS App Icon Template</a><br />
<a href="http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/Introduction/Introduction.html">iOS Human Interface Guidelines</a><br />
<a href="https://github.com/twitter/twui">A UI framework for Mac based on Core Animation</a><br />
<a href="https://github.com/robb/Underscore.m">Underscore.m - A port of underscore.js to Objective-C</a><br />
<a href="http://www.cocoacontrols.com/controls">Custom UI Controls for iOS and Mac OS X</a><br />
<a href="http://iosmix.com/">iosmix - Components for iOS</a><br />
<a href="http://www.cocoacontrols.com/">Custom UI Controls for iOS and Mac OS X</a><br />
<a href="http://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002051">iOS Developer Library: Developing Web Content for Safari</a><br />
<a href="http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ErrorHandlingCocoa/ErrorHandling/ErrorHandling.html#//apple_ref/doc/uid/TP40001806">iOS Developer Library: Introduction to Error Handling Programming Guide For Cocoa</a><br />
<a href="http://nathanbarry.com/25-free-ios-design-resources/">25 Free iOS Design Resources</a><br />
<a href="https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html">Bundle Programming Guide: Bundle Structures</a><br />
<a href="http://www.raywenderlich.com/1669/how-to-host-a-beta-test-for-your-ios-app">How To Host a Beta Test for your iOS App</a><br />
<a href="http://blog.denivip.ru/index.php/2012/07/handling-camera-in-ios-applications/?lang=en">Handling Camera in iOS Applications</a><br />
<a href="http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/BSD/BSD.html#//apple_ref/doc/uid/TP30000905-CH214-TPXREF101">Kernel Programming Guide</a><br />
<a href="http://developer.apple.com/library/ios/#technotes/tn2250/_index.html">iOS Code Signing Troubleshooting</a><br />
<a href="http://nscookbook.com/2013/01/ios-programming-recipe-11-using-the-uitableview-part-i/">iOS Programming Recipe 11: Using The UITableView Part I</a></p>
<h2 id="airplay-protocol">AirPlay protocol</h2>
<p><a href="http://code.google.com/p/open-airplay/">open airplay</a></p>
<h3 id="open-source">Open Source</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PascalWAirplayer - A Python based library
Play2Wifi - An AirPlay server also in Python
Totem Plugin AirPlay - Plugin enabling AirPlay video playback in the Totem media player (Python)
elcuervo/airplay - Airplay bindings to Ruby
Airstream Media Player - C# based AirPlay screen for windows and AirPlay server source code
xmms2-plugin-airplay - Debian AirPlay library
AirPlay NMW - AirPlay plugin for Network Media Tank written in C
AirMac - Turns you Macintosh into an Airplay receiver (Objective C)
AP4J - Java AirPlay video client ### Applications
Beamer - Send any video to an AppleTV
AirParrot - Send the screen of your Mac to an AppleTV (AirPlay Mirroring)
AirServer - The best app for turning your Mac into an AirPlay screen.
Reflection - Turn your Mac into an AirPlay screen.
Banana TV - Another app to turn your Mac into and AirPlay screen
Erica's Air Play Utilities - A collection of Mac utilities for streaming video and photos (not open source)
doubleTwist AirSync - Stream music/videos from your Android phone over AirPlay ### Websites
Stream DVDs - Stream DVD's from a Mac using Erica's AirFlick and VLC
Stream Desktop - Stream your Mac's desktop using Erica's AirFlick and VLC (Audio not supported due to limitations in VLC)
lifehacker - Make your entire home AirPlay compatible
</code></pre></div></div>
<h2 id="cc">C/C++</h2>
<p><a href="http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/sp_techniques.html">Smart Pointer Programming Techniques</a><br />
<a href="https://github.com/thrust/thrust">Thrust: Code at the speed of light (stl-like with GPU)</a><br />
<a href="http://wiki.osdev.org/Bare_bones">Bare Bones</a><br />
<a href="http://himmele.blogspot.com/2011/07/build-your-own-operating-system.html">Build your own operating system</a><br />
<a href="http://stxxl.sourceforge.net/">STXXL: Standard Template Library for Extra Large Data Sets</a><br />
<a href="http://clubs.ya.ru/company/replies.xml?item_no=25068">Материалы с семинаров Андреаса Раубера и Александра Степанова</a><br />
<a href="http://bojan-komazec.blogspot.com/2011/10/32-bit-and-64-bit-versions-of-windows-c.html">32-bit and 64-bit versions of Windows C++ application</a><br />
<a href="http://libcinder.org/about/">Cinder is a peer-reviewed, free, open source C++ library for creative coding</a><br />
<a href="http://clang-analyzer.llvm.org/index.html">Clang Static Analyzer</a><br />
<a href="http://insidecpp.ru">insidecpp.ru</a><br />
<a href="http://aggregate.org/MAGIC/">The Aggregate Magic Algorithms</a><br />
<a href="http://e-maxx.ru/algo/">145 алгоритмов на C++.</a><br />
<a href="http://sites.google.com/site/indy256/algo_cpp">Список алгоритмов и структур данных на C++</a><br />
<a href="http://hyperpolyglot.org/">Hyperpolyglot</a></p>
<h2 id="python">Python</h2>
<p><a href="http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html">Code Like a Pythonista: Idiomatic Python</a><br />
<a href="http://www.rafekettler.com/magicmethods.html">A Guide to Python’s Magic Methods</a><br />
<a href="http://mirnazim.org/writings/python-ecosystem-introduction/">Python Ecosystem - An Introduction</a><br />
<a href="http://stephensugden.com/crash_into_python/">Crash into Python</a><br />
<a href="http://www.antoarts.com/pythonic-coding-techniques-for-idiomatic-python-code">Techniques for idiomatic Python code</a><br />
<a href="http://docs.python.org/howto/functional.html">Functional Programming HOWTO</a></p>
<h2 id="lua">Lua</h2>
<h2 id="tools">Tools</h2>
<p><a href="http://alblue.bandlem.com/2011/12/git-tip-of-week-finale.html">Git Tip of the Week: Finale</a><br />
<a href="http://dotfiles.github.com/">dotfiles.github.com</a></p>
<h2 id="other">Other</h2>
<p><a href="http://rosettacode.org/wiki/Welcome_to_Rosetta_Code">Rosetta Code</a><br />
<a href="http://www.quora.com/TED-Talks/What-are-some-must-see-TED-talks">Lists of must see TED-talks</a><br />
<a href="http://processing.org/">processing.org</a><br />
<a href="http://processingjs.org/">processingjs.org</a><br />
<a href="http://demo.fluent.io/">demo.fluent.io</a><br />
<a href="http://hyperpolyglot.org/">hyperpolyglot.org</a><br />
<a href="http://www.visualland.net/">visualland.net</a><br />
<a href="http://algoviz.org">The Algorithm Visualization Portal</a><br />
<a href="http://bonsaiden.github.com/JavaScript-Garden/">bonsaiden.github.com/JavaScript-Garden</a><br />
<a href="http://150.203.48.55/index.php">ANU Quantum Random Numbers Server</a><br />
<a href="http://www.maxmasnick.com/guides/jobs/">Top software dev job boards </a><br />
<a href="http://www.eventhelix.com/realtimemantra/networking/">TCP/IP and IMS Sequence Diagrams</a><br />
<a href="http://www.theatlantic.com/technology/archive/2011/11/video-perhaps-the-best-hd-view-of-earth-from-space-ever/248395/">Perhaps the Best HD View of Earth from Space Ever</a><br />
<a href="http://camerasim.com/camera-simulator/">The SLR Camera Simulator</a><br />
<a href="http://www.html5rocks.com/en/tutorials/internals/howbrowserswork/">html5rocks.com How Browsers work</a><br />
<a href="http://recursivedrawing.com/">Recursive Drawing</a><br />
<a href="">The Ai->Canvas plug-in enables Adobe® Illustrator® to export vector and bitmap artwork directly to an HTML5</a></p>
<h2 id="message-passing">Message Passing</h2>
<p><a href="http://www.rabbitmq.com/">RabbitMQ - Messaging that just works</a><br />
<a href="http://www.zeromq.org/">ØMQ</a><br />
<a href="http://kr.github.com/beanstalkd/">Beanstalk is a simple, fast work queue</a><br />
<a href="http://www.amqp.org/">amqp.org</a></p>
Sun Solaris Derivatives
2012-03-31T00:00:00+00:00
hhttp://okertanov.github.com//os/2012/03/31/solaris-derivatives
<h2 id="sun-microsystems">Sun Microsystems</h2>
<h3 id="sunos">SunOS</h3>
<p>First BSD-based version of the Unix operating system developed by Sun Microsystems.</p>
<h3 id="solaris">Solaris</h3>
<p>Modern System V based, SUS compatible Unix operating system.</p>
<h3 id="trusted-solaris">Trusted Solaris</h3>
<p>Solaris Trusted Extensions is a set of security extensions incorporated in the Solaris 10.</p>
<h3 id="solaris-express">Solaris Express</h3>
<p>Pre-open source version released between Solaris 10 & OpenSolaris.</p>
<h3 id="osnet-on-core-os">OS/Net (ON) Core OS</h3>
<p>The core Operating System and Networking components of Solaris.</p>
<h3 id="opensolaris">OpenSolaris</h3>
<p>An open source computer operating system based on Solaris created by Sun.</p>
<h3 id="project-indiana">Project Indiana</h3>
<p>Sun’s effort in turning OpenSolaris into a practical open source platform.</p>
<h2 id="oracle">Oracle</h2>
<h3 id="oracle-solaris">Oracle Solaris</h3>
<p>Owned by Oracle since Oracle’s acquisition of Sun in January 2010.</p>
<h2 id="open-source">Open Source</h2>
<h3 id="illumos">Illumos</h3>
<p>Is a derivative of OS/Net.</p>
<h3 id="openindiana">OpenIndiana</h3>
<p>It forked from OpenSolaris after the discontinuation of that project by Oracle.
The project operates under the umbrella of the Illumos Foundation.
OpenIndiana is a robust enterprise operating system, based on the illumos kernel.</p>
<h3 id="illumian">Illumian</h3>
<p>It is a new distro project, using the Debian package manager (dpkg/apt-get)
to deliver the same binaries on the system as OpenIndiana.
It is meant as a collaborative effort between Nexenta, OpenIndiana and others.</p>
<h3 id="nexenta-os">Nexenta OS</h3>
<p>Nexenta OS, officially known as the Nexenta Core Platform,
was a computer operating system based on OpenSolaris and Ubuntu.
Deprecated by Illumian project.</p>
<h3 id="nexentastor">NexentaStor</h3>
<p>NexentaStor is a proprietary operating system built by Nexenta Systems
on top of the Nexenta Core Platform.
It is optimized for use in virtualized server environments including
NAS, iSCSI, and Fibre Channel applications, and is built around the ZFS file system.</p>
<h3 id="smartos">SmartOS</h3>
<p>SmartOS incorporates the four most revolutionary OS technologies of the past decade —
Zones, ZFS, DTrace and KVM — into a single operating system,
providing an arbitrarily observable, highly multi-tenant environment built on a reliable,
enterprise-grade storage stack. SmartOS powers SmartDataCenter, Joyent’s commercial cloud.</p>
<h2 id="other">Other</h2>
<h3 id="embedded-operating-systemnetworking-eon">Embedded Operating system/Networking (EON)</h3>
<h3 id="belenix">BeleniX</h3>
<h3 id="schillix">SchilliX</h3>
<h3 id="jaris-os">Jaris OS</h3>
<h3 id="milax">MilaX</h3>
<h3 id="stormos">StormOS</h3>
<h3 id="omnios">OmniOS</h3>
<h2 id="supported-platforms">Supported platforms</h2>
<ul>
<li>SPARC</li>
<li>IA-32</li>
<li>x86-64</li>
<li>PowerPC</li>
<li>z/VM</li>
<li>ARM</li>
</ul>
Event-driven asynchronous I/O systems
2012-03-31T00:00:00+00:00
hhttp://okertanov.github.com//dev/2012/03/31/async-io-systems
<h3 id="nodejs">Node.js</h3>
<p><a href="http://nodejs.org/">nodejs.org</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>require('http').createServer(function (req, res){
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World');
}).listen(8080, '0.0.0.0', function (){
console.log('Server listening on http://0.0.0.0:8080/');
});
</code></pre></div></div>
<h3 id="aleph">Aleph</h3>
<p><a href="https://github.com/ztellman/aleph">github.com/ztellman/aleph</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(use 'lamina.core 'aleph.http)
(defn hello-world [channel request]
(enqueue channel
{:status 200
:headers {"content-type" "text/html"}
:body "Hello World!"}))
(start-http-server hello-world {:port 8080})
</code></pre></div></div>
<h3 id="luvit">Luvit</h3>
<p><a href="http://luvit.io/">luvit.io</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>local http = require("http")
http.createServer(function (req, res)
local body = "Hello world\n"
res:writeHead(200, {
["Content-Type"] = "text/plain",
["Content-Length"] = #body
})
res:finish(body)
end):listen(8080)
print("Server listening at http://localhost:8080/")
</code></pre></div></div>
<h3 id="nodenative">node.native</h3>
<p><a href="https://github.com/d5/node.native">github.com/d5/node.native</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#include <iostream>
#include <native/native.h>
using namespace native::http;
int main() {
http server;
if(!server.listen("0.0.0.0", 8080, [](request& req, response& res) {
res.set_status(200);
res.set_header("Content-Type", "text/plain");
res.end("C++ FTW\n");
})) return 1; // Failed to run server.
std::cout << "Server running at http://0.0.0.0:8080/" << std::endl;
return native::run();
}
</code></pre></div></div>
<h3 id="nodenet">Node.net</h3>
<p><a href="https://github.com/dnewcome/Node.net">github.com/dnewcome/Node.net</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>var sys = require( 'sys' ), http = require( 'http' );
http.createServer( function( request, response ) {
request.addListener( 'data', function( data ) {
sys.puts( data );
});
request.addListener( 'end', function() {
response.write( '<html><body><p>All finished!<p></body></html>' );
response.end();
});
}).listen( 9981, 'localhost' );
</code></pre></div></div>
<h3 id="nodecs">Node.cs</h3>
<p><a href="https://github.com/Rduerden/Node.cs">github.com/Rduerden/Node.cs</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>public class Webserver : INodeProgram
{
public int Main( string[] args )
{
new HttpServer( ( IHttpTransaction t ) =>
{
Console.WriteLine( "got connection {0}", t.Request.Path );
t.Response.Write( "<H1>Hello World!</H1>" );
t.Response.End();
}, IOLoop.Instance ).Listen( "10.0.2.15", 8080 );
Console.WriteLine( "listening on 8080" );
return 0;
}
}
</code></pre></div></div>
<h3 id="jetty">Jetty</h3>
<p><a href="http://wiki.eclipse.org/Jetty/">eclipse.org/Jetty</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
public class HelloWorld extends AbstractHandler
{
public void handle(String target,
Request baseRequest,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>Hello World</h1>");
}
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
server.setHandler(new HelloWorld());
server.start();
server.join();
}
}
</code></pre></div></div>
<h3 id="netty">Netty</h3>
<p><a href="http://netty.io/">netty.io</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.socket.nio.NioServerSocketChannelFactory;
public class HttpStaticFileServer {
private final int port;
public HttpStaticFileServer(int port) { this.port = port; }
public void run() {
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool()));
bootstrap.setPipelineFactory(new HttpStaticFileServerPipelineFactory());
bootstrap.bind(new InetSocketAddress(port));
}
public static void main(String[] args) {
int port = 8080;
new HttpStaticFileServer(port).run();
}
}
</code></pre></div></div>
<h3 id="tornado">Tornado</h3>
<p><a href="http://www.tornadoweb.org/">tornadoweb.org</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
</code></pre></div></div>
<h3 id="twisted">Twisted</h3>
<p><a href="http://twistedmatrix.com/">twistedmatrix.com</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>from twisted.web import server, resource
from twisted.internet import reactor
class HelloResource(resource.Resource):
isLeaf = True
numberRequests = 0
def render_GET(self, request):
self.numberRequests += 1
request.setHeader("content-type", "text/plain")
return "I am request #" + str(self.numberRequests) + "\n"
reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()
</code></pre></div></div>
<h3 id="eventlet">Eventlet</h3>
<p><a href="http://eventlet.net/">eventlet.net</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>import eventlet
def handle(client):
while True:
c = client.recv(1)
if not c: break
client.sendall(c)
server = eventlet.listen(('0.0.0.0', 6000))
pool = eventlet.GreenPool(10000)
while True:
new_sock, address = server.accept()
pool.spawn_n(handle, new_sock)
</code></pre></div></div>
<h3 id="eventmachine">EventMachine</h3>
<p><a href="http://rubyeventmachine.com/">rubyeventmachine.com</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>require 'rubygems'
require 'eventmachine'
require 'evma_httpserver'
class Handler < EventMachine::Connection
include EventMachine::HttpServer
def process_http_request
resp = EventMachine::DelegatedHttpResponse.new( self )
sleep 2 # Simulate a long running request
resp.status = 200
resp.content = "Hello World!"
resp.send_response
end
end
EventMachine::run {
EventMachine::start_server("0.0.0.0", 8080, Handler)
puts "Listening..."
}
</code></pre></div></div>
<h3 id="other">Other</h3>
<ul>
<li>Apache MINA (Java)</li>
<li>Goliath (Ruby 1.9)</li>
<li>vertx.io</li>
<li>hinge</li>
</ul>
Apple's hidden domains
2012-03-31T00:00:00+00:00
hhttp://okertanov.github.com//links/2012/03/31/apple-domains
<h2 id="apples-hidden-domains-have-been-stolen-via-ipodcominit">Apple’s hidden domains have been stolen via ipod.com/init</h2>
<p><a href="http://pastebin.com/yZxWJD9n">ipod.com/init</a></p>
<p><a href="http://pastebin.com/HSagC973">appl.com/init</a></p>
<h3 id="some-of-them-are-really-interesting">Some of them are really interesting</h3>
<ul>
<li>apple.co</li>
<li>apple.cm</li>
<li>apple.bo</li>
<li>apple.us</li>
<li>aple.com</li>
<li>appl.com</li>
<li>appple.us</li>
<li>appl3e.com</li>
<li>apple.hn</li>
<li>apple.pr</li>
<li>apple.ca</li>
<li>apple.cl</li>
<li>me.com</li>
<li>macintosh.co</li>
<li>wwwapple.com</li>
<li>apple-oem.com</li>
<li>lionserver.com</li>
<li>rememberingsteve.com</li>
<li>rememberingstevejobs.com</li>
<li>imac.com</li>
<li>macbookair.com</li>
<li>macbookpro.com</li>
<li>iphone.com</li>
<li>macmini.com</li>
<li>airport.com</li>
<li>siri.com</li>
<li>ipod.com</li>
<li>ipod.ca</li>
<li>applejava.apple.com</li>
<li>servers.apple.com</li>
<li>apple.tv</li>
<li>applestore.org</li>
<li>icloud.org</li>
<li>lojaiphone.com.br</li>
</ul>
The realtime dashboards collection
2012-03-30T00:00:00+00:00
hhttp://okertanov.github.com//links/2012/03/30/realtime-dashboards
<h2 id="realtime-dashboards-and-monitoring-software">Realtime dashboards and monitoring software</h2>
<p><a href="http://jondot.github.com/graphene/">A D3.js, Backbone.js based Graphite Dashboard Toolkit</a></p>
<p><a href="http://console-demo.typesafe.com">Typesafe Console</a></p>
<p><a href="https://demo.geckoboard.com/dashboard/B6782E562794C2F2/">geckoboard.com</a></p>
<p><a href="http://culturedcode.com/status/">culturedcode.com/status</a></p>
<p><a href="http://www.panic.com/blog/2010/03/the-panic-status-board/">The Panic Status Board</a></p>
<p><a href="http://amon.cx/">Amon is a self-hosted, lightweight web application and server monitoring toolkit.</a></p>
<p><a href="http://www.stashboard.org/">Stashboard is a status dashboard for APIs and software services</a></p>
<p><a href="https://github.com/anchepiece/statuspanic">github.com/anchepiece/statuspanic</a></p>
<p><a href="http://status2k.com/">Status2K Server Dashboard</a></p>
<p><a href="http://servermonitoringhq.com/">ServerMonitoringHQ</a></p>
<p><a href="http://wrapbootstrap.com/preview/WB0PHMG9K">Perfectum Dashboard - Admin Template</a></p>
<p><a href="http://www.graphdat.com/">Troubleshoot application and server performance</a></p>
<p><a href="http://lookingglass.unfiniti.com/">lookingglass.unfiniti.com</a></p>
<p><a href="http://tweetping.net/#">tweetping.net</a></p>
<p><a href="http://chartbeat.com/">Real-time data for front-line doers</a></p>
<p><a href="http://dashes.com/anil/2013/01/all-dashboards-should-be-feeds.html">All Dashboards Should be Feeds</a></p>
<p><a href="http://fnordmetric.io/">FnordMetric powers highly customizable real-time analytics dashboards</a></p>
<p><a href="https://github.com/afaqurk/linux-dash">linux-dash – A drop-in, low-overhead monitoring web dashboard for a linux machine.</a></p>
How to build the boost library
2012-03-24T00:00:00+00:00
hhttp://okertanov.github.com//dev/2012/03/24/build-boost
<h2 id="building-win32-boost">Building Win32 boost</h2>
<h3 id="1-magic-with-cmd--vcvars">1. Magic with cmd & vcvars:</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
</code></pre></div></div>
<h3 id="2-bootstrapping-boost-build-system">2. Bootstrapping boost build system</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bootstrap.bat
</code></pre></div></div>
<h3 id="3-clean-rebuild">3. Clean rebuild</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bjam --clean-all
bjam --build-type=complete --layout=versioned --without-python --without-mpi toolset=msvc runtime-link=shared link=static threading=multi stage
</code></pre></div></div>
Hown to generate a directory index for the images preview like a true vimmer.
2012-03-23T00:00:00+00:00
hhttp://okertanov.github.com//vim/2012/03/23/vim-gen-index
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd dir-with-images
vim index.html
:r!ls
:%s/^\(.+\)$/<img src"\1">/g
</code></pre></div></div>