<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/fil/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя fil]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 28 Apr 2026 13:13:13 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Разбираем самый маленький JPEG в мире]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/791302/</guid>
      <link>https://habr.com/ru/articles/791302/?utm_campaign=791302&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/vi/np/2v/vinp2vt1y11yzde9fkf3cei3vyi.png" /><p>Недавно на Хабре была опубликована статья <a href="https://habr.com/ru/companies/ruvds/articles/787302/" rel="noopener noreferrer nofollow">Разбираем самый маленький PNG в мире</a>. Интересно, а какой самый маленький файл JPEG? В ответах на <a href="https://stackoverflow.com/questions/2253404/what-is-the-smallest-valid-jpeg-file-size-in-bytes" rel="noopener noreferrer nofollow">StackOverflow</a> и <a href="https://www.reddit.com/r/programming/comments/4tqtva/comment/d5jm1vj/" rel="noopener noreferrer nofollow">Reddit</a> можно встретить размеры 107, 119, 125, 134, 141, 160 байтов. Все они представляют серый прямоугольник 1 на 1. И кто прав? Все правы, просто такая разница объясняется различными режимами кодирования и степенью строгости соответствия стандарту. Описание всех нюансов разрослось до целой статьи cо всеми необходимыми подробностями для более-менее хорошего знакомства с самыми маленькими jpeg-ами. После краткой теории разберем 159-байтный файл на КДПВ, а затем рассмотрим способы его уменьшения.</p><p></p> <a href="https://habr.com/ru/articles/791302/?utm_campaign=791302&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 08 Feb 2024 13:28:18 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category><category><![CDATA[Обработка изображений]]></category><category><![CDATA[Сжатие данных]]></category>
      <category><![CDATA[jpeg]]></category><category><![CDATA[хаффман]]></category><category><![CDATA[dct]]></category><category><![CDATA[квантование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Земля круглая, вода мокрая, JPEG шакалит, небо голубое… Или нет?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/704750/</guid>
      <link>https://habr.com/ru/articles/704750/?utm_campaign=704750&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/85e/960/bf2/85e960bf216c4c3be389c28fbd0963f6.jpg" /><p>Вы можете сказать, что один факт выбивается из этого ряда в заголовке, потому что он не так очевиден, как остальные. Еще лет 10-15 назад я бы никогда не подумал, что тут могут быть возражения, а сейчас уже и не удивляюсь, что приходится объяснять простые истины: дело в том, что планеты обладают очень большой массой, поэтому гравитация стремится придать им форму шара. Вот и все! Хотел бы на этом закончить статью и поблагодарить за внимание.</p><p></p> <a href="https://habr.com/ru/articles/704750/?utm_campaign=704750&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 12 Dec 2022 11:01:00 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Алгоритмы]]></category><category><![CDATA[Обработка изображений]]></category><category><![CDATA[Математика]]></category>
      <category><![CDATA[jpeg]]></category><category><![CDATA[dct]]></category><category><![CDATA[rgb]]></category><category><![CDATA[ycb]]></category><category><![CDATA[квантование]]></category><category><![CDATA[линейные преобразования]]></category><category><![CDATA[сжатие]]></category><category><![CDATA[сжатие изображений]]></category><category><![CDATA[сжатие без потерь]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[JPEG, который можно посмотреть в блокноте]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/572352/</guid>
      <link>https://habr.com/ru/articles/572352/?utm_campaign=572352&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/51b/bb8/fb0/51bbb8fb0e9c21159ab067003dc30a1f.png" /><p>Если открыть произвольный JPEG-файл в блокноте, то можно увидеть лишь хаотичный набор символов. Отсюда вопрос: возможно ли закодировать изображение так, чтобы его было можно просмотреть не только обычным способом, но и в обычном блокноте, в виде ASCII-графики.</p> <a href="https://habr.com/ru/articles/572352/?utm_campaign=572352&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 11 Aug 2021 13:24:28 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Open source]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Алгоритмы]]></category><category><![CDATA[Обработка изображений]]></category>
      <category><![CDATA[jpeg]]></category><category><![CDATA[ascii]]></category><category><![CDATA[ascii-art]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[ReeePlayer – интервальное повторение фрагментов видео для изучения иностранных языков]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/557212/</guid>
      <link>https://habr.com/ru/articles/557212/?utm_campaign=557212&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/b24/afc/373/b24afc3735b6d20774fa6d8e6b2fdc9a.png" /><p>Начать смотреть видео на иностранном языке не просто. Этим объясняется большое количество статей с самыми разными советами:</p><p>• Смотреть с русскими субтитрами и не париться.</p><p>• Смотреть с иностранными субтитрами и переводить на паузе, если не понятно.</p><p>• Пересматривать многократно, комбинируя различные подходы.</p><p>По моему мнению, такие способы либо малоэффективные, либо выматывающие. Поэтому за несколько лет у меня выработался свой подход. Как и многие, при просмотре стараюсь понять на слух, контролируя себя английскими субтитрами. Но все непонятные места, содержащие в том числе незнакомые слова, сохраняю в виде фрагментов (клипов), которые тренирую впоследствии с помощью интервального повторения. Это помогает не только восприятию, но и заучиванию новых слов в контексте, причем вместе с их произношением. Побочным положительным эффектом является запоминание различных фактов, если смотреть образовательные видео.</p> <a href="https://habr.com/ru/articles/557212/?utm_campaign=557212&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 13 May 2021 11:22:45 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Qt]]></category><category><![CDATA[Изучение языков]]></category>
      <category><![CDATA[изучение языков]]></category><category><![CDATA[c++]]></category><category><![CDATA[qt]]></category><category><![CDATA[интервальное повторение]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Исследование многократного перезалива JPEG]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/473544/</guid>
      <link>https://habr.com/ru/articles/473544/?utm_campaign=473544&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>В VK есть <a href="https://vk.com/putineveryday">группа</a> со следующим описанием:</p><br/>
<blockquote>Одна и та же фотография каждый день вручную сохраняется на компьютер и снова заливается, постепенно теряя в качестве.</blockquote><p>Слева исходная картинка, загруженная 7 июня 2012, справа — какая она сейчас.</p><br/>
<p><img src="https://habrastorage.org/webt/k1/nd/gc/k1ndgcipxujc4rl7mplffliy3ae.jpeg" alt="КДПВ"/></p><br/>
<div class="spoiler" role="button" tabindex="0">
                        <b class="spoiler_title">Видео</b>
                        <div class="spoiler_text"><div class="oembed"><div><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 75.0019%;"><iframe src="https://www.youtube.com/embed/Ymca5aWPurM?rel=0&amp;showinfo=1&amp;hl=en-US" style="border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;" allowfullscreen scrolling="no"></iframe></div></div></div></div>
                    </div><br/>
<p>Такая разница очень подозрительна. Попробуем разобраться, что происходило в течение этих 7 лет. Для ознакомления есть <a href="https://meduza.io/shapito/2019/08/09/hudozhnik-iz-moskvy-uzhe-sem-let-vykladyvaet-odno-i-to-zhe-foto-putina-luchshe-ne-stanovitsya">статья</a> на Медузе про эту группу, но нас будет интересовать только техническая сторона.</p> <a href="https://habr.com/ru/articles/473544/?utm_campaign=473544&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Tue, 29 Oct 2019 10:22:40 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category><category><![CDATA[Обработка изображений]]></category>
      <category><![CDATA[jpeg]]></category><category><![CDATA[ycbcr]]></category><category><![CDATA[rgb]]></category><category><![CDATA[dct]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[[CppCon 2017] Matt Godbolt: Что мой компилятор сделал для меня?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/339962/</guid>
      <link>https://habr.com/ru/articles/339962/?utm_campaign=339962&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Продолжение цикла обзорных статей с конференции CppCon 2017.</p><br/>
<div class="spoiler" role="button" tabindex="0">
                        <b class="spoiler_title">Содержание цикла</b>
                        <div class="spoiler_text"><ul>
<li><a href="https://habrahabr.ru/post/339036/">Бьёрн Страуструп: Изучение и преподавание современного C++</a></li>
<li><a href="https://habrahabr.ru/post/339180/">Ларс Кнолл: C++ фреймворк Qt: История, Настоящее и Будущее</a></li>
<li><a href="https://habrahabr.ru/post/339186/">Herb Sutter: Метапрограммирование и кодогенерация в C++</a></li>
<li>Matt Godbolt: Что мой компилятор сделал для меня?</li>
</ul></div>
                    </div><br/>
<p>На этот раз очень интересное выступление от автора Compiler Explorer (<a href="http://godbolt.org">godbolt.org</a>). Обязательно читать всем, кто для быстроты умножает на 2 с помощью сдвига (по крайней мере, на x86-64). Если вы знакомы с ассемблером x86-64, то можете перемотать до разделов с примерами (&quot;Умножение&quot;, &quot;Деление&quot; и т.д). Далее слова автора. Мои комментарии в квадратных скобках курсивом.</p><br/>
<p>Моя цель сделать так, чтобы вы не боялись ассемблер, это полезная вещь. И использовали его. Не обязательно все время. И я не говорю, что вы должны все бросить и учить ассемблер. Но вы должны уметь просмотреть результат работы компилятора. И когда вы это сделаете, то оцените, как много работы проделал компилятор, и какой он умный.</p><br/>
<div class="oembed"><div><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;"><iframe src="https://www.youtube.com/embed/bSkpMdDe4g4?rel=0&amp;showinfo=1&amp;start=3497" style="border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;" allowfullscreen scrolling="no"></iframe></div></div></div> <a href="https://habr.com/ru/articles/339962/?utm_campaign=339962&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Thu, 12 Oct 2017 12:46:02 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Компиляторы]]></category><category><![CDATA[Отладка]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[cppcon]]></category><category><![CDATA[c++]]></category><category><![CDATA[godbolt]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[ассемблер]]></category><category><![CDATA[x86_64]]></category><category><![CDATA[gcc]]></category><category><![CDATA[clang]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[[CppCon 2017] Ларс Кнолл: C++ фреймворк Qt: История, Настоящее и Будущее]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/339180/</guid>
      <link>https://habr.com/ru/articles/339180/?utm_campaign=339180&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Содержание цикла обзора выступлений CppCon 2017:</p><br/>
<ul>
<li><a href="https://habrahabr.ru/post/339036/">Бьёрн Страуструп: Изучение и преподавание современного C++</a></li>
<li>Ларс Кнолл: C++ фреймворк Qt: История, Настоящее и Будущее</li>
<li><em>(в процессе)</em></li>
</ul><br/>
<p>Обзор выступления Ларса Кнолла (Lars Knoll), являющегося техническим директором Qt Company. Не ждите от этого выступления слишком многого. В квадратных скобках курсивом мои примечания.</p><br/>
<div class="oembed"><div><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;"><iframe src="https://www.youtube.com/embed/YWiAUUblD34?rel=0&amp;showinfo=1" style="border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;" allowfullscreen scrolling="no"></iframe></div></div></div> <a href="https://habr.com/ru/articles/339180/?utm_campaign=339180&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Mon, 02 Oct 2017 18:38:05 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Qt]]></category>
      <category><![CDATA[cppcon]]></category><category><![CDATA[c++]]></category><category><![CDATA[qt]]></category><category><![CDATA[qml]]></category><category><![CDATA[qt quick]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[[CppCon 2017] Бьёрн Страуструп: Изучение и преподавание современного C++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/339036/</guid>
      <link>https://habr.com/ru/articles/339036/?utm_campaign=339036&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Сейчас проходит конференция CppCon 2017, и на их youtube-канале уже стали появляться видео оттуда. И я подумал, почему бы не попробовать сделать конспекты интересных лекций. Конечно, не очень уверен, надолго ли меня хватит, зависит от того насколько вам это понравится.</p><br/>
<p>Это первое вступительное видео. Оно не такое интересное для меня, но пропустить тоже не мог, это же Страуструп. Далее, текст от его лица. Заголовки взяты из слайдов.</p><br/>
<div class="oembed"><div><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;"><iframe src="https://www.youtube.com/embed/fX2W3nNjJIo?rel=0&amp;showinfo=1" style="border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;" allowfullscreen scrolling="no"></iframe></div></div></div> <a href="https://habr.com/ru/articles/339036/?utm_campaign=339036&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Sat, 30 Sep 2017 16:13:51 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[c++]]></category><category><![CDATA[c++17]]></category><category><![CDATA[cppcon]]></category><category><![CDATA[изучение программирования]]></category><category><![CDATA[страуструп]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Основные концепции библиотеки chrono (C++)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/324984/</guid>
      <link>https://habr.com/ru/articles/324984/?utm_campaign=324984&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Работа со временем как с безразмерной величиной может приводить к недоразумениям и ошибкам конвертации временных единиц измерения:</p><br>
<blockquote><em>– Слушай, ты не помнишь, мы в sleep передаем секунды или миллисекунды?</em><br>
<br>
<em>– Блин, оказывается у меня в часе 360 секунд, ноль пропустил.</em></blockquote><p>Для избежания таких ошибок предусмотрена библиотека chrono (namespace std::chrono). Она была добавлена в C++11 и дорабатывалась в поздних стандартах. Теперь все логично:</p><br>
<pre><code class="cpp">using namespace std::chrono;

int find_answer_to_the_ultimate_question_of_life()
{
    //Поиск ответа
    std::this_thread::sleep_for(5s); //5 секунд
    return 42;
}

std::future&lt;int&gt; f = std::async(find_answer_to_the_ultimate_question_of_life);

//Ждем максимум 2.5 секунд
if (f.wait_for(2500ms) == std::future_status::ready)
    std::cout &lt;&lt; &quot;Answer is: &quot; &lt;&lt; f.get() &lt;&lt; &quot;\n&quot;;
else
    std::cout &lt;&lt; &quot;Can't wait anymore\n&quot;;</code></pre><br>
<p>Библиотека реализует следующие концепции:</p><br>
<ul>
<li>интервалы времени – <code>duration</code>;</li>
<li>моменты времени – <code>time_point</code>;</li>
<li>таймеры – <code>clock</code>.</li>
</ul> <a href="https://habr.com/ru/articles/324984/?utm_campaign=324984&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 29 Mar 2017 09:44:56 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[std]]></category><category><![CDATA[chrono]]></category><category><![CDATA[время]]></category><category><![CDATA[таймер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Ненормальное программирование: макрос-интерпретатор в Notepad++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/324314/</guid>
      <link>https://habr.com/ru/articles/324314/?utm_campaign=324314&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p><img src="https://habrastorage.org/files/683/224/06a/68322406acab4e3cab1f8577203f0d2e.png" alt="swap"/></p><br/>
<p><em>Обмен значений. Исходный текст и текст после 1-го, 2-го и 3-го выполнения макроса. Далее будут примеры посложнее.</em></p><br/>
<p>Идея приспособить макрос для примитивного программирования появлялась у меня несколько раз. То есть, сделать так, чтобы макрос при запуске &quot;читал&quot; строчку с операцией, интерпретировал ее, что-то делал с данными и переходил к следующей строчке.</p><br/>
<p>На всякий случай напомню: макрос в Notepad++ и в других текстовых редакторах – записанная последовательность действий пользователя над текстом. Макрос можно запускать многократно для быстрого выполнения рутинных операций. Макрос &quot;запоминает&quot; нажатия клавиш и может воспроизводить, например, такие действия:</p><br/>
<ul>
<li>Ввод и удаление символов</li>
<li>Перемещение курсора</li>
<li>Копирование и вставка</li>
<li>Поиск в тексте</li>
</ul><br/>
<p>Сначала это казалось невозможным, ведь макрос слишком &quot;глуп&quot; и прямолинеен:</p><br/>
<ul>
<li>Нельзя менять последовательность действий во время выполнения макроса.</li>
<li>Искомая строка фиксирована — никакой вставки из буфера обмена.</li>
<li>Нельзя выполнить действие переменное количество раз, а также пропустить действие в зависимости от какого-либо условия.</li>
</ul> <a href="https://habr.com/ru/articles/324314/?utm_campaign=324314&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 20 Mar 2017 14:30:50 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[notepad++]]></category><category><![CDATA[макросы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Эксперимент: ищем int i = 0xDEADBEEF в дампе физической памяти]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/322636/</guid>
      <link>https://habr.com/ru/articles/322636/?utm_campaign=322636&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p><img src="https://habrastorage.org/files/0b8/375/1bb/0b83751bb3be4ac98f43a02d62af12a9.png" alt="КДПВ"/></p><br/>
<p>Изучение виртуального адресного пространства и алгоритма преобразования адресов заметно упростится, если начать с несложного практического примера. Для этого напишем простую программу, выводящую адрес локальной переменной:</p><br/>
<pre><code class="cpp">int main()
{
    unsigned i = 0xDEADBEEF;
    std::cout &lt;&lt; &quot;address of i is &quot; &lt;&lt; std::hex &lt;&lt; &amp;i;
    std::cin.get(); //Чтобы процесс не завершился
    return 0;
}</code></pre><br/>
<p>Затем попробуем найти физический адрес и просмотреть значение по этому адресу.</p><br/>
 <a href="https://habr.com/ru/articles/322636/?utm_campaign=322636&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 27 Feb 2017 10:17:26 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Отладка]]></category><category><![CDATA[Системное программирование]]></category><category><![CDATA[Windows]]></category>
      <category><![CDATA[адресация]]></category><category><![CDATA[виртуальная память]]></category><category><![CDATA[windbg]]></category><category><![CDATA[kd]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Подробное введение в rvalue-ссылки для тех, кому не хватило краткого]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/322132/</guid>
      <link>https://habr.com/ru/articles/322132/?utm_campaign=322132&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Вместо КДПВ — короткая драма для привлечения внимания, основанная на реальных событиях. Ее можно смело пропустить и перейти к статье, которая поможет вам разобраться в rvalue-ссылках, конструкторах перемещения, универсальных ссылках, идеальной передаче (perfect forwarding) и т. д.</p><br>
<h1 id="drama-v-treh-deystviyah">Драма в трех действиях</h1><br>
<p><strong>Действие первое</strong></p><br>
<p><em>Компилятор</em>. Локальный объект x типа T, проживающий на стеке, вы приговариваетесь к изъятию у вас всего имущества в связи с тем, что не будете пользоваться им до конца своей жизни.</p><br>
<p><em>Объект x</em>. Что? Я не какой-то там временный объект, у меня постоянная регистрация, вы не имеете права!</p><br>
<p><em>Компилятор</em>. Никто вас не выселяет. Но согласно одиннадцатой редакции стандартного кодекса, все ваши вещи будут переданы другому объекту, которому они нужны больше.</p><br>
<p><em>Объект x</em>. И как вы это сделаете? Все мои данные надежно инкапсулированы, я не позволю никому бесцеремонно обращаться с ними. Если уж они так вам нужны, то пусть приходит конструктор копирования со своей флешкой, я ему скопирую.</p> <a href="https://habr.com/ru/articles/322132/?utm_campaign=322132&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 20 Feb 2017 10:08:08 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Visual Studio]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[rvalue]]></category><category><![CDATA[rvalue reference]]></category><category><![CDATA[move]]></category><category><![CDATA[forward]]></category><category><![CDATA[конструктор перемещения]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Изобретаем JPEG]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/206264/</guid>
      <link>https://habr.com/ru/articles/206264/?utm_campaign=206264&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/post_images/a78/291/807/a7829180746c99c987384e4b2b6df7b8.png" align="right"><br>
Вы правильно поняли из названия, что это не совсем обычное описание алгоритма JPEG (формат файла я подробно описывал в статье <a href="http://habrahabr.ru/post/102521/" rel="nofollow">«Декодирование JPEG для чайников»</a>). В первую очередь, выбранный способ подачи материала предполагает, что мы ничего не знаем не только о JPEG, но и о преобразовании Фурье, и кодировании Хаффмана. И вообще, мало что помним из лекций. Просто взяли картинку и стали думать как же ее можно сжать. Поэтому я попытался доступно выразить только суть, но при которой у читателя будет выработано достаточно глубокое и, главное, интуитивное понимание алгоритма. Формулы и математические выкладки — по самому минимуму, только те, которые важны для понимания происходящего.<br>
<br>
Знание алгоритма JPEG очень полезно не только для сжатия изображений. В нем используется теория из цифровой обработки сигналов, математического анализа, линейной алгебры, теории информации, в частности, преобразование Фурье, кодирование без потерь и др. Поэтому полученные знания могут пригодиться где угодно.<br>
<br>
Если есть желание, то предлагаю пройти те же этапы самостоятельно параллельно со статьей. Проверить, насколько приведенные рассуждения подходят для разных изображений, попытаться внести свои модификации в алгоритм. Это очень интересно. В качестве инструмента могу порекомендовать замечательную связку Python + NumPy + Matplotlib + PIL(Pillow). Почти вся моя работа (в т. ч. графики и анимация), была произведена с помощью них.<br>
<br>
Внимание, трафик! Много иллюстраций, графиков и анимаций (~ 10Мб). По иронии судьбы, в статье про JPEG всего 2 изображения с этим форматом из полусотни.<br> <a href="https://habr.com/ru/articles/206264/?utm_campaign=206264&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Tue, 17 Dec 2013 10:09:33 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category><category><![CDATA[Обработка изображений]]></category>
      <category><![CDATA[jpeg]]></category><category><![CDATA[dct]]></category><category><![CDATA[dft]]></category><category><![CDATA[фурье]]></category><category><![CDATA[хаффман]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Тонкости оператора switch]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/174065/</guid>
      <link>https://habr.com/ru/articles/174065/?utm_campaign=174065&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Да, это целая статья по самому обычному switch в JDK 7. Бывает так, что накопленный материал кажется интересным и малоизвестным, а потом оказывается, что любая бабка у подъезда уже 50 лет знает об особенностях реализации switch. Но я попробую. Для затравки, предлагаю 3 вопроса:<br/>
<br/>
<ol>
<li>(Простой) Каков результат работы этого кода?<br/>
<pre><code class="java">switch(5){
default: System.out.print(0);
case 1: System.out.print(1); break;
case 4: System.out.print(4);
case 2: System.out.print(2);
}</code></pre><br/>
 </li>
<li>Следующие 2 варианта практически одинаковы. Немного отличаются литералами.<br/>
<table>
<tr>
<td><pre><code class="java">//Вариант 1
switch(&quot;BBBBBB&quot;){
case &quot;AaAaAa&quot;: break; 
case &quot;AaAaBB&quot;: break;
case &quot;AaBBAa&quot;: break;
case &quot;AaBBBB&quot;: break;
case &quot;BBAaAa&quot;: break;
case &quot;BBAaBB&quot;: break;
case &quot;BBBBAa&quot;: break;
case &quot;BBBBBB&quot;: break;
}</code></pre></td>
<td><pre><code class="java">//Вариант 2
switch(&quot;BBBBBB_8&quot;){
case &quot;AaAaAa_1&quot;: break;
case &quot;AaAaBB_2&quot;: break;
case &quot;AaBBAa_3&quot;: break;
case &quot;AaBBBB_4&quot;: break;
case &quot;BBAaAa_5&quot;: break;
case &quot;BBAaBB_6&quot;: break;
case &quot;BBBBAa_7&quot;: break;
case &quot;BBBBBB_8&quot;: break;
}</code></pre></td>
</tr>
</table>Почему первый switch выполняется в несколько раз медленнее, по крайней мере, с отключенным JIT <nobr>(-Djava.compiler=NONE)? Сами проверьте в цикле! </nobr>JIT таким кодом не проведешь, но если немного пошаманить, то небольшая разница будет заметна.</li>
<li>Какова вычислительная сложность алгоритма нахождения совпадающего значения среди n case-ов (по крайней мере, в JDK 7)?<br/>
</li>
</ol> <a href="https://habr.com/ru/articles/174065/?utm_campaign=174065&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать ответы и статью</a>]]></description>
      
      <pubDate>Tue, 26 Mar 2013 08:07:55 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[java]]></category><category><![CDATA[switch]]></category><category><![CDATA[jdk]]></category><category><![CDATA[performance]]></category><category><![CDATA[jit]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Жонглирование. Теория. Практика]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/148940/</guid>
      <link>https://habr.com/ru/articles/148940/?utm_campaign=148940&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Настороженно отношусь к непрофильным топикам, но решил написать этот по следующим причинам:<br>
<ul>
<li>У жонглирования есть своя теория — стройная и математически привлекательная!</li>
<li>Мы живем не только работой. Жонглирование — отличное развлечение и разминка после долгого сидения за компом.</li>
<li>В пятницу приятно немного расслабиться и почитать не очень серьезные статьи. К тому же, будет чем заняться на выходные, особенно если у вас не было определенных планов.</li>
</ul><br>
<h4>Теория</h4><br>
Утверждать, что жонглирование — это последовательность бросков, все равно, что сказать, что музыка — это просто последовательность нот. Нельзя назвать это неправдой, но любой, хоть немного знакомый с музыкальной теорией, возмутится последним определением — столь поверхностным и недалеким. <br> <a href="https://habr.com/ru/articles/148940/?utm_campaign=148940&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Fri, 03 Aug 2012 10:13:21 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Научно-популярное]]></category>
      <category><![CDATA[жонглирование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Декодирование GIF]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/127083/</guid>
      <link>https://habr.com/ru/articles/127083/?utm_campaign=127083&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[В прошлый раз мы разобрались как устроен JPEG (<a href="http://habrahabr.ru/blogs/algorithm/102521/">Декодирование JPEG для чайников</a>). Вполне логично, что следующим форматом стал GIF. Кстати, он гораздо проще. Его, в отличии от JPEG, можно декодировать имея только ручку с бумажкой. Сначала, продолжая традицию, я захотел закодировать в GIF favicon Гугла, но потом решил, что лучше расписать процесс декодирования всего файла на маленьком изображении. Без всяких «а дальше по аналогии...». Пришлось долго экспериментировать, и картинка получилась неказистой, зато вполне наглядной для изучения.<br/>
<br/>
Итак, мы будем ковырять вот эту картинку <img src="https://habrastorage.org/storage1/fde408e9/bf079078/689be284/680f35a7.gif"/>. Видите? :) Тогда она же, увеличенная в 10 раз:<br/>
<img src="https://habrastorage.org/storage1/a09e3d0b/23cbbbda/dfde4235/9fc99301.png"/><br/>
<br/>
Внутренности в hex-редакторе:<br/>
<img src="https://habrastorage.org/storage1/47cedbb6/0a393993/ad1edf5f/89ec5b5a.png"/><br/>
 <a href="https://habr.com/ru/articles/127083/?utm_campaign=127083&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 26 Aug 2011 10:08:11 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category>
      <category><![CDATA[gif]]></category><category><![CDATA[декодирование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Декодирование JPEG для чайников]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/102521/</guid>
      <link>https://habr.com/ru/articles/102521/?utm_campaign=102521&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p><strong>[FF D8]</strong></p><br>
<p>Вам когда-нибудь хотелось узнать как устроен jpg-файл? Сейчас разберемся! Прогревайте ваш любимый компилятор и hex-редактор, будем декодировать это:</p><br>
<p><img src="https://habrastorage.org/getpro/habr/post_images/9e2/b7d/292/9e2b7d2925a3de56b18b089d9e99ed8b.png" alt="Jpeg file in hex editor"></p><br>
<p>Специально взял рисунок поменьше. Это знакомый, но сильно пережатый favicon Гугла: <img src="https://habrastorage.org/getpro/habr/post_images/606/696/104/60669610479084c8ecd776f5a2acd10c.jpg" alt="Google favicon"></p><br>
<p>Последующее описание упрощено, и приведенная информация не полная, но зато потом будет легко понять спецификацию.</p><br>
<p>Даже не зная, как происходит кодирование, мы уже можем кое-что извлечь из файла.</p><br>
<p><strong>[FF D8]</strong> — маркер начала. Он всегда находится в начале всех jpg-файлов.</p><br>
<p>Следом идут байты <strong>[FF FE]</strong>. Это маркер, означающий начало секции с комментарием. Следующие 2 байта <strong>[00 04]</strong> — длина секции (включая эти 2 байта). Значит в следующих двух <strong>[3A 29]</strong> — сам комментарий. Это коды символов &quot;:&quot; и &quot;)&quot;, т.е. обычного смайлика. Вы можете увидеть его в первой строке правой части hex-редактора.</p> <a href="https://habr.com/ru/articles/102521/?utm_campaign=102521&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Tue, 31 Aug 2010 15:23:13 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Алгоритмы]]></category><category><![CDATA[Обработка изображений]]></category>
      <category><![CDATA[jpeg]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Функция без явного определения]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/71234/</guid>
      <link>https://habr.com/ru/articles/71234/?utm_campaign=71234&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Изучаю C++. Балуясь с указателями придумал интересный для себя пример. Вероятно, опытных людей он не заинтересует, но я все же рискну.<br/>
<blockquote><code><a href="http://virtser.net/blog/post/source-code-highlighter.aspx"></a><font color="black"><font color="#0000ff">typedef int</font> (*pf)(<font color="#0000ff">int</font>, <font color="#0000ff">int</font>);<br/>
<font color="#0000ff">char</font> c[] = {85,-119,-27,-117,69,12,3,69,8,93,-61,-112};<br/>
pf sum = (pf)c; <font color="#008000">//reinterpret_cast здесь не работает.</font><br/>
cout &lt;&lt; sum(2,3); <font color="#008000">//Вывод 5.</font></font><br/>
<br/>
<font color="gray">* This source code was highlighted with <font color="gray">Source Code Highlighter</font>.</font></code></blockquote>Теперь sum — функция сложения, являющаяся аналогом этой:<br/>
<code>int sum(int a, int b){return a+b;}</code><br/>
<br/>
Единственное полезное применение которое я могу придумать — пугать опасностью подобных приведений.<br/>
<br/>
<b>UPD</b>. Как мне подсказал <a href="https://habrahabr.ru/users/iley/" class="user_link">iley</a>, это в общем-то относится к C.<br/>
<br/>
<b>UPD</b>. Одной строкой:<br/>
<code>cout &lt;&lt; ((int (*)(int, int))&quot;\x55\x89\xE5\x8B\x45\x0C\x03\x45\x08\x5D\xC3&quot;)(2,3)</code><br/>
(спасибо <a href="https://habrahabr.ru/users/0lympian/" class="user_link">0lympian</a> за мысль и <a href="https://habrahabr.ru/users/halyavin/" class="user_link">halyavin</a> за поправку) <a href="https://habr.com/ru/articles/71234/?utm_campaign=71234&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Thu, 01 Oct 2009 17:29:11 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[c++]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Детская Википедия. Нужна?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/62308/</guid>
      <link>https://habr.com/ru/articles/62308/?utm_campaign=62308&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<blockquote><b>«Почему небо голубое?»</b><ul>
<li>Как объяснить это трехлетнему ребенку? Про спектр&nbsp;— еще непонятно. Самое простое объяснение, которое я&nbsp;нашла, подходит для младшего школьного возраста.</li>
<li>А&nbsp;если глобально: кто знает подходящую литературу или интернет-порталы? Ответы на&nbsp;детские почемучки о&nbsp;природе, но&nbsp;для 3-4-летних. Или я&nbsp;слишком много хочу?</li>
<li>Энциклопедий у&nbsp;нас много, хороших и&nbsp;разных. Но&nbsp;не&nbsp;всегда они помогают. Например, с&nbsp;тем&nbsp;же небом.</li>
</ul><i>Ветка форума.</i></blockquote><br/>
В&nbsp;детстве у&nbsp;меня была такая книга.<br/>
<img src="https://habrastorage.org/getpro/megamozg/post_images/785/dc3/7f2/785dc37f2f34a0a916b1427a51e04e69.jpg"/><br/>
Для тех, кто вдруг не&nbsp;знает&nbsp;— книга для самых маленьких любопытных исследователей, которые только научились читать. Не&nbsp;буду долго расхваливать, но&nbsp;могу смело сказать&nbsp;— для меня, в&nbsp;свое время, она была как Википедия сейчас. Оттуда я&nbsp;узнал основы нашего мироздания. Очень доступным языком объяснялись сложные вопросы, даже термоядерные реакции в&nbsp;звездах.<br/>
<br/>
Но&nbsp;эта статья не&nbsp;о&nbsp;книжке. Стало интересно, существует&nbsp;ли в&nbsp;Интернете похожий сборник ответов для детей. Оказывается с&nbsp;этим все не&nbsp;очень здорово. Долгий поиск выявил всего 2&nbsp;вроде&nbsp;бы подходящих сайта: potomy.ru и&nbsp;children.claw.ru. Посмотрим, что они представляют…<br/>
 <a href="https://habr.com/ru/articles/62308/?utm_campaign=62308&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 17 Jun 2009 14:48:34 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Учебный процесс в IT]]></category>
      <category><![CDATA[детская википедия]]></category><category><![CDATA[коты]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Раскладка клавиатуры с AltGr]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/46621/</guid>
      <link>https://habr.com/ru/articles/46621/?utm_campaign=46621&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Мне, как обычному пользователю, надоело каждый раз переключать русскую раскладку для набора символов типа: [ ] { } &lt; &gt;, одного-двух символов латиницы и т. п. Мне кажется, что в этом я не одинок, и решил поделиться достаточно простым способом (для Windows).</p><br/>
<p>На Хабре <a href="http://habrahabr.ru/blogs/typography/25158">упоминалась</a> клавиша AltGr и о том, что с ее помощью можно вводить различные спецсимволы. Ничего создавать я не хочу, поэтому качаем <a href="http://genphys.phys.msu.ru/~acrush/RuAltGr.zip"><del>готовую раскладку</del></a>(UPD: 404, см. ниже), устанавливаем, и добавляем раскладку «Русская (AltGr)» (Язык и региональные стандарты &gt; Языки &gt; Подробнее)</p><br/>
<p>Все, теперь вместо Ctrl + Shift (или Alt + Shift) можно удерживать AltGr. Надеюсь, кому-нибудь будет полезно.</p> <a href="https://habr.com/ru/articles/46621/?utm_campaign=46621&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 10 Dec 2008 09:42:00 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Типографика]]></category>
      <category><![CDATA[Alt]]></category><category><![CDATA[AltGr]]></category><category><![CDATA[раскладка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[О математике]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/24213/</guid>
      <link>https://habr.com/ru/articles/24213/?utm_campaign=24213&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<i>Несколько лет назад одна моя знакомая с гуманитарным образованием сказала: «Да что у вас в математике, все строго, все открыто, 2+2 всегда равно 4, скукота». К сожалению я еще был школьником и достойно ответить не смог.<br/>
</i><br/>
<br/>
Сколько же раз, во время подготовки к экзамену, я ворчал: «Ну Коши, блин, напридумывал тут, ничего не понятно, ему делать что ли нечего было». Разумеется, я понимал, что все это не просто так, но порой, от обилия различных абстрактных теорем мне начинало казаться, что это все придумано только чтобы загрузить студентов.<br/>
<br/>
Людям, использующим математику на практике, понятно, что это не так. Они представляют, зачем может понадобиться то или иное. Но что делать другим? Вот, например, урок в обычной школе:<br/>
<br/>
«Сегодня мы узнаем, что такое синус угла. Синус — это отношение длины противоположного катета к длине гипотенузы… Что, Иванов, у тебя вопрос?… Зачем это нужно? Понимаешь, это основа тригонометрии, которая используется в частности в аналитической геометрии… Иванов! Да ты спишь что ли?»<br/>
<br/>
В это время Иванову снился сон, в котором он был великим математиком давних времен:<br/>
 <a href="https://habr.com/ru/articles/24213/?utm_campaign=24213&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Fri, 25 Apr 2008 12:38:21 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Математика]]></category>
      <category><![CDATA[математика]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Пару слов о программировании и непрограммистах]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/23782/</guid>
      <link>https://habr.com/ru/articles/23782/?utm_campaign=23782&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[А также о тех, кто хочет научиться этому искусству. Очень субьективно.<br>
<br>
Я горжусь своей профессией, но очень не люблю говорить людям мало сведущим в программировании и в ИТ в частности, кем я работаю. <br>
Люди сходятся во мнении, что программист — это тот, кто связан с компьютерами. На этом сходства заканчиваются. Один думает, что я печатаю бумажки в Ворде, другой то, что ремонтирую компьютеры и прочую периферию. Я это не придумываю. Вот случай произошедший как-то в нашем замечательном военкомате. Узнав род деятельности, прапорщик обрадовался:<br>
 — О, а у нас принтер не печатает!<br>
 — Какой принтер?<br>
 — Ну такой, с лентой.<br> <a href="https://habr.com/ru/articles/23782/?utm_campaign=23782&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше →</a>]]></description>
      
      <pubDate>Fri, 18 Apr 2008 14:30:48 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Программирование]]></category>
      <category><![CDATA[программирование]]></category><category><![CDATA[программисты]]></category><category><![CDATA[непрограммисты]]></category><category><![CDATA[hello world.]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Задача про самолет]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/19658/</guid>
      <link>https://habr.com/ru/articles/19658/?utm_campaign=19658&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Не знаю насколько эта задача известна, но думаю, тем, кто о ней вдруг не знал, она понравится.<br/>
<br/>
<em>«Самолет пролетел 100 км строго на юг, затем 100 км на запад и 100 км на север, после чего оказался в исходной точке. Откуда он вылетел?»</em><br/>
<br/>
Решение <strong>не одно!</strong><br/>
<br/>
Землю рассматривать как идеальную сферу, высотой полета самолета пренебречь. <a href="https://habr.com/ru/articles/19658/?utm_campaign=19658&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut"></a>]]></description>
      
      <pubDate>Fri, 01 Feb 2008 19:10:59 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Занимательные задачки]]></category>
      <category><![CDATA[задача]]></category><category><![CDATA[самолет]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Прохождение сапера. Часть 2.]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/14923/</guid>
      <link>https://habr.com/ru/articles/14923/?utm_campaign=14923&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[После публикации <a href="http://fil.habrahabr.ru/blog/26937.html">топика</a> было получено немало интересных, полезных, и приятных комментариев. Благодаря этому, я продолжил изучение вопроса, переделал алгоритм расчета и получил некоторые любопытные факты (в том числе вероятности выигрыша при различном количестве мин), которые, я думаю, заинтересуют вас.<br/>
 <a href="https://habr.com/ru/articles/14923/?utm_campaign=14923&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 10 Oct 2007 22:24:25 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Чулан]]></category>
      <category><![CDATA[сапер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Прохождение сапера на поле 9x9 с 32-мя минами]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/14792/</guid>
      <link>https://habr.com/ru/articles/14792/?utm_campaign=14792&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[Вот до чего иногда доводят безобидные развлечения. 2 месяца назад я неожиданно увлекся игрой в сапера. Особенно мне было интересно побить рекорд не по времени, а по количеству мин на поле. На уровне игры «новичок» дается поле 9x9 и 10 мин. Разумеется, это было очень просто, и я стал наращивать количество мин. 12, 15, 20 штук, это была простая разминка. Затем прошел 25 после большого числа попыток. Игра с 27-ю минами (каждая 3-я клетка заминирована) отняла у меня несколько часов. Не остановившись на достигнутом, я выставил сразу 30 штук. Выиграл спустя полторы недели, играя по часу в день.<br/>
<br/>
Более месяца пытался разминировать 32 мины, причем даже в лучших попытках оставалось найти около 10 мин, затем подрывался. А мне очень хотелось победы, и решил, что без радикальных мер могу затратить еще пару лет. Пришла мысль написать программу подсчета вероятности нахождения мины в каждой клетке, в любой момент игры.<br/>
 <a href="https://habr.com/ru/articles/14792/?utm_campaign=14792&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Sat, 06 Oct 2007 20:59:43 GMT</pubDate>
      <dc:creator><![CDATA[Fil]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category>
      <category><![CDATA[сапер]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
