<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Интересные ссылки</title>
    <description>Ссылки на полезные ресурсы, материалы и инструменты для программистов.</description>
    <link>https://tproger.ru/links</link>
    <atom:link href="https://tproger.ru/links/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sat, 03 Oct 2026 21:20:24 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Интересные ссылки</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Подборка интересного #1</title>
      <link>https://tproger.ru/links/2016-02-15</link>
      <comments>https://tproger.ru/links/2016-02-15?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/2016-02-15</guid>
      <description><![CDATA[<p>Ссылки дня: советы писать легко удаляемый код, разбор физики снега в мультфильме «Холодное сердце» и калькулятор в Super Mario Maker.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/2016-02-15">Подборка интересного #1</a>»</p>]]></description>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 15 Feb 2016 02:30:42 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем доброго утра, программисты!<br />Вот что интересного мы нашли для вас в Интернете на сегодня.</p><p>Не пишите легко расширяемый код, пишите код, который можно легко удалить — <a href="http://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to">советы</a> по упрощению будущей поддержки проекта.</p><p><a href="http://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to"></a></p><p>Демонстрация с пояснениями того, как работает физика снега в диснеевском мультфильме «<a href="http://www.kinopoisk.ru/film/493208/">Холодное сердце</a>» (Frozen, 2013).</p><p>«Современный веб-разработчик и старомодный системный программист заходят в бар» — <a href="http://zhen.org/blog/two-developers-walk-into-a-bar/">сравнение</a> двух подходов к задаче выяснения защищённости всех IPv4 адресов в Интернете.</p><p><a href="http://zhen.org/blog/two-developers-walk-into-a-bar/"></a></p><p>Калькулятор в <a href="http://supermariomaker.nintendo.com/">Super Mario Maker</a> — системе по созданию игр а-дя Mario, созданной Nintendo для Wii U.</p><p>Клон Space Invaders на <a href="https://ru.wikipedia.org/wiki/VHDL">VHDL</a> — языке описания аппаратуры интегральных схем. Исходный код есть на <a href="https://github.com/fabioperez/space-invaders-vhdl">GitHub</a>.</p><p><a href="http://faq.sealedabstract.com/uninterruptible_programming_supply/">Непрерывное программирование</a> — как минимизировать влияние совещаний и прочих отвлекающих факторов на написание кода.</p><p><a href="http://faq.sealedabstract.com/uninterruptible_programming_supply/#get-the-unit-tests-to-pass"></a></p><p>Создание «<a href="https://github.com/shekhargulati/52-technologies-in-2016/blob/master/07-hugo/README.md">электронной книжной полки</a>» на <a href="https://gohugo.io/">Hugo</a> — движке для генерации статического сайта, написанном на Go.</p><p><a href="https://github.com/shekhargulati/52-technologies-in-2016/blob/master/07-hugo/README.md"></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Что нейронная сеть думает о твоем #селфи?</title>
      <link>https://tproger.ru/links/what-about-selfie</link>
      <comments>https://tproger.ru/links/what-about-selfie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/what-about-selfie</guid>
      <description><![CDATA[<p>Нейронные сети становятся всё продвинутее: они пишут картины, распознают котиков, а теперь умеют оценивать и загруженное вами селфи.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/what-about-selfie">Что нейронная сеть думает о твоем #селфи?</a>»</p>]]></description>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 27 Oct 2015 13:53:51 GMT</pubDate>
      <content:encoded><![CDATA[<p>Нейронные сети становятся все более продвинутыми. Они <a href="http://www.wired.co.uk/news/archive/2015-09/01/art-algorithm-recreates-paintings">пишут картины</a>, <a href="https://googleblog.blogspot.ru/2012/06/using-large-scale-brain-simulations-for.html">распознают котиков</a>, а теперь они могут <a href="http://karpathy.github.io/2015/10/25/selfie/">оценить ваше селфи</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Десять полезных инструментов для разработки API</title>
      <link>https://tproger.ru/links/api-tools</link>
      <comments>https://tproger.ru/links/api-tools?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/api-tools</guid>
      <description><![CDATA[<p>Нейронные сети становятся всё продвинутее: они пишут картины, распознают котиков, а теперь могут оценивать и ваши селфи.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/api-tools">Десять полезных инструментов для разработки API</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 27 Oct 2015 09:06:31 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://konghq.com/blog/10-api-tools-released-this-year-2015-roundup/">Подборка полезных инструментов</a> для разработки API, создания документации, <a href="https://apitransformer.com/">конвертации</a>, <a href="https://www.blockspring.com/">экспорта</a> и многого другого.</p>]]></content:encoded>
    </item>
    <item>
      <title>Чем PostgreSQL лучше других СУБД</title>
      <link>https://tproger.ru/links/what-postgresql-has-over-other-sql-databases</link>
      <comments>https://tproger.ru/links/what-postgresql-has-over-other-sql-databases?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/what-postgresql-has-over-other-sql-databases</guid>
      <description><![CDATA[<p>Объектно-реляционная СУБД ведёт историю с 1986 года, когда в Беркли создали первую версию Postgres, и стала одной из самых продвинутых open-source.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/what-postgresql-has-over-other-sql-databases">Чем PostgreSQL лучше других СУБД</a>»</p>]]></description>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 26 Oct 2015 19:07:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>PostgreSQL — это объектно-реляционная СУБД, которая ведет свою историю с 1986 года, когда в университете Беркли была создана ее первая версия (тогда она еще называлась просто Postgres). За долгие годы эта СУБД стала одной из самых продвинутых в мире open-source. О том, что ее отличает от MySQL, MariaDB и других — читайте в <a href="https://www.compose.io/articles/what-postgresql-has-over-other-open-source-sql-databases/">этой статье</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Эффективная криптография на Java</title>
      <link>https://tproger.ru/links/effective-cryptography-in-the-jvm</link>
      <comments>https://tproger.ru/links/effective-cryptography-in-the-jvm?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/effective-cryptography-in-the-jvm</guid>
      <description><![CDATA[<p>Небольшое руководство по надёжной и эффективной реализации криптографии на Java или другом языке для JVM с помощью библиотеки Keyczar.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/effective-cryptography-in-the-jvm">Эффективная криптография на Java</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Криптография]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 26 Oct 2015 13:42:40 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://tersesystems.com/2015/10/05/effective-cryptography-in-the-jvm/">Небольшое руководство</a> по реализации эффективной и надежной реализации криптографии на Java (или любом другом языке, работающем на JVM) с помощью библиотеки <a href="https://github.com/google/keyczar">Keyczar </a></p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка видео по Python, которые стоит посмотреть</title>
      <link>https://tproger.ru/links/py-must-watch</link>
      <comments>https://tproger.ru/links/py-must-watch?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/py-must-watch</guid>
      <description><![CDATA[<p>Список видеоматериалов по языку Python размещён на GitHub, поэтому любой желающий может дополнить подборку через пулл-реквест.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/py-must-watch">Подборка видео по Python, которые стоит посмотреть</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 26 Oct 2015 05:42:50 GMT</pubDate>
      <content:encoded><![CDATA[<p>Подборка видео по Python. Список видео размещен на GitHub, поэтому пулл-реквесты всячески поддерживаются.</p><p>Но в код там лучше не заглядывать, а то найдете нечто подобное:</p>]]></content:encoded>
    </item>
    <item>
      <title>GitPass — менеджер паролей на основе Git</title>
      <link>https://tproger.ru/links/gitpass-git-based-password-manager</link>
      <comments>https://tproger.ru/links/gitpass-git-based-password-manager?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/gitpass-git-based-password-manager</guid>
      <description><![CDATA[<p>Минималистичный менеджер паролей на Python и Fernet с простым консольным интерфейсом и историей; для работы нужны Python и аккаунт на GitHub.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/gitpass-git-based-password-manager">GitPass — менеджер паролей на основе Git</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 25 Oct 2015 15:41:17 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://github.com/0x27/GitPass">GitPass</a> — минималистичный менеджер паролей на основе Git, с открытым исходным кодом, простым консольным интерфейсом и сохранением истории. Написан на Python с использованием <a href="http://cryptography.readthedocs.org/en/latest/fernet/">Fernet</a>. Для работы вам потребуется Python, аккаунт на GitHub и пароли, которые надо сохранить.</p>]]></content:encoded>
    </item>
    <item>
      <title>Насколько быстр компьютер</title>
      <link>https://tproger.ru/links/how-fast-are-computers</link>
      <comments>https://tproger.ru/links/how-fast-are-computers?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/how-fast-are-computers</guid>
      <description><![CDATA[<p>Сколько операций в секунду выполняет современный процессор? Простой тест позволяет проверить знания и интуицию, указав верный порядок величины.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/how-fast-are-computers">Насколько быстр компьютер</a>»</p>]]></description>
      <category><![CDATA[Процессор]]></category>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 25 Oct 2015 13:43:54 GMT</pubDate>
      <content:encoded><![CDATA[<p>Знаете ли вы, сколько операций в секунду способен совершить современный процессор. Много? Насколько много? Проверьте свои знания и/или интуицию с помощью <a href="http://computers-are-fast.github.io/">простого теста</a>. Вам нужно указать только правильный порядок величины.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как определить дубликат изображения с помощью Python</title>
      <link>https://tproger.ru/links/image-duplicates-detection-python</link>
      <comments>https://tproger.ru/links/image-duplicates-detection-python?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/image-duplicates-detection-python</guid>
      <description><![CDATA[<p>Обработка изображений на Python: способ выяснить, являются ли две картинки идентичными, и оценить, насколько они похожи между собой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/image-duplicates-detection-python">Как определить дубликат изображения с помощью Python</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 24 Oct 2015 19:51:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>И снова об обработке изображений в Python. На этот раз о том, как определить, являются ли два изображения идентичными и если да, то насколько они похожи.</p>]]></content:encoded>
    </item>
    <item>
      <title>Взвешиваем сливы с помощью Swift</title>
      <link>https://tproger.ru/links/weighing-plums</link>
      <comments>https://tproger.ru/links/weighing-plums?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/weighing-plums</guid>
      <description><![CDATA[<p>Apple выпустила новый iPhone с экраном ForceTouch, и язык Swift позволяет проверить его возможности на необычной задаче — взвешивании слив.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/weighing-plums">Взвешиваем сливы с помощью Swift</a>»</p>]]></description>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[iPhone]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 24 Oct 2015 18:37:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Apple представила язык программирования Swift достаточно давно — больше года назад. А совсем недавно они выпустили новый iPhone с экраном ForceTouch. Самое время посмотреть, на что он способен. Ну а для теста надо придумать задачу. Как насчёт <a href="http://flexmonkey.blogspot.com/2015/10/the-plum-o-meter-weighing-plums-using.html">взвешивания слив</a>?</p>]]></content:encoded>
    </item>
    <item>
      <title>Проблемы локализации приложений</title>
      <link>https://tproger.ru/links/localization-problems</link>
      <comments>https://tproger.ru/links/localization-problems?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/localization-problems</guid>
      <description><![CDATA[<p>Локализация требует учитывать форматы даты, времени и чисел, принятые соглашения и культурные особенности страны, а не только перевод интерфейса.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/localization-problems">Проблемы локализации приложений</a>»</p>]]></description>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 24 Oct 2015 12:53:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>Локализация приложений подразумевает не только перевод интерфейса на другой язык, но и учет таких «мелочей», как формат даты и времени, чисел, принятых соглашений и культурных особенностей страны. Хорошая локализация — это редкость. В основном из-за <a href="https://www.transifex.com/blog/2015/crazy-localization-problems/">вот-таких проблем</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как реализовать алгоритм A* для поиска пути</title>
      <link>https://tproger.ru/links/generic-astar-for-games</link>
      <comments>https://tproger.ru/links/generic-astar-for-games?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/generic-astar-for-games</guid>
      <description><![CDATA[<p>Алгоритм A* находит кратчайший путь между вершинами графа и часто применяется при программировании игрового ИИ; пример реализации на C++.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/generic-astar-for-games">Как реализовать алгоритм A* для поиска пути</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 24 Oct 2015 09:28:02 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A*">Алгоритм A*</a> — распространенный алгоритм поиска пути от одной вершины к другой с наименьшей суммой весов ребер в графе. Или, другими словами, кратчайший путь из точки A в точку B. Он часто используется для программирования ИИ в играх. В <a href="https://shanee.io/blog/2015/10/22/generic-astar-for-games/">этой статье</a> вы узнаете, как реализовать А* на C++ для игр в наиболее общем виде.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как найти прямоугольники на изображении без OpenCV</title>
      <link>https://tproger.ru/links/find-rectangles-without-opencv</link>
      <comments>https://tproger.ru/links/find-rectangles-without-opencv?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/find-rectangles-without-opencv</guid>
      <description><![CDATA[<p>Пример на Python показывает, как распознать прямоугольники на картинке, если OpenCV недоступна из-за размера, лицензии или учебных целей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/find-rectangles-without-opencv">Как найти прямоугольники на изображении без OpenCV</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 23 Oct 2015 14:48:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Обычно для распознавания деталей изображения используют известную библиотеку компьютерного зрения OpenCV. Но что, если по каким-то причинам вы не можете ее использовать: из-за большого размера, неподходящей лицензии или в учебных целях. Не беда: в <a href="http://www.homeworkhelponline.net/blog/programming/find-rectangles">этом примере</a> показано, как определить прямоугольники на картинке с помощью Python без использования OpenCV.</p>]]></content:encoded>
    </item>
    <item>
      <title>Каталог микробиблиотек для JavaScript</title>
      <link>https://tproger.ru/links/micro-js</link>
      <comments>https://tproger.ru/links/micro-js?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/micro-js</guid>
      <description><![CDATA[<p>Библиотеки для JavaScript весом меньше килобайта на любой вкус — например, для управления таймерами или для работы с HTML5-аудио.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/micro-js">Каталог микробиблиотек для JavaScript</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 23 Oct 2015 08:41:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Нужна библиотека для JavaScript, но все все ужасно тяжелые? В <a href="http://microjs.com/">этом каталоге</a> вы найдете микробиблиотеку размером меньше килобайта на любой вкус. Например, для <a href="https://github.com/gamtiq/chronoman">управления таймерами</a> или для <a href="https://github.com/jakesgordon/javascript-audio-fx">HTML5-аудио</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Реализация препроцессора для C на Python</title>
      <link>https://tproger.ru/links/c-preprocessor-in-python</link>
      <comments>https://tproger.ru/links/c-preprocessor-in-python?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/c-preprocessor-in-python</guid>
      <description><![CDATA[<p>Разобраться в работе препроцессора C помогает его версия на Python: она в 25 раз медленнее gcc, зато написана на более простом для понимания языке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/c-preprocessor-in-python">Реализация препроцессора для C на Python</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Oct 2015 15:38:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>Препроцессор C — достаточно сложная программа. Разобраться с тем, как он работает поможет <a href="https://github.com/cheery/pytci">его реализация на Python</a>. Она всего в 25 раз медленнее, чем версия gcc, но зато написана на более простом в понимании языке.</p>]]></content:encoded>
    </item>
    <item>
      <title>Решение задачи о N ферзях на Python</title>
      <link>https://tproger.ru/links/n_queens_problem</link>
      <comments>https://tproger.ru/links/n_queens_problem?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/n_queens_problem</guid>
      <description><![CDATA[<p>Классическая задача о восьми ферзях на 64-клеточной доске обобщается до N ферзей на доске NxN и решается алгоритмически на языке Python.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/n_queens_problem">Решение задачи о N ферзях на Python</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 22 Oct 2015 06:01:17 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%B2%D0%BE%D1%81%D1%8C%D0%BC%D0%B8_%D1%84%D0%B5%D1%80%D0%B7%D1%8F%D1%85">Задача о восьми ферзях</a> — известная задача, условие которой звучит так: «Расставить на стандартной 64-клеточной шахматной доске 8 ферзей так, чтобы ни один из них не находился под атакой другого». Ее можно обобщить до «Задачи о N ферзях на доске NxN». Эту задачу можно решить алгоритмически, <a href="https://web.archive.org/web/20161129132934/http://obogason.com:80/n_queens_problem/">например, на Python</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как добавить делегаты в C++</title>
      <link>https://tproger.ru/links/type-safe-delegates-in-cpp</link>
      <comments>https://tproger.ru/links/type-safe-delegates-in-cpp?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/type-safe-delegates-in-cpp</guid>
      <description><![CDATA[<p>Встроенного механизма обработки событий в C++ нет, но делегаты можно сымитировать с минимальными затратами на производительность.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/type-safe-delegates-in-cpp">Как добавить делегаты в C++</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 21 Oct 2015 14:50:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Во многих языках есть какой-либо встроенный механизм обработки событий — коллбеки, делегаты. Было бы неплохо иметь такую функцию и в C++, желательно с минимальными затратами на производительность. В <a href="http://blog.molecular-matters.com/2011/09/19/generic-type-safe-delegates-and-events-in-c/">этой статье</a> рассказывается, как можно сымитировать делегаты на C++.</p>]]></content:encoded>
    </item>
    <item>
      <title>Введение в машинное обучение для программиста</title>
      <link>https://tproger.ru/links/machine-learning-for-developers</link>
      <comments>https://tproger.ru/links/machine-learning-for-developers?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/machine-learning-for-developers</guid>
      <description><![CDATA[<p>Наука о данных требует нескольких лет изучения, но основы и отдельные алгоритмы машинного обучения полезно знать без погружения в математику.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/machine-learning-for-developers">Введение в машинное обучение для программиста</a>»</p>]]></description>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 20 Oct 2015 20:31:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Анализ данных и машинное обучение, пожалуй, одна из самых обсуждаемых тем в последнее время. Сама по себе Data Science, или «Наука о данных», достаточно сложная дисциплина, которая требует как минимум нескольких лет изучения. Тем не менее <a href="https://xyclade.github.io/MachineLearning/">программистам полезно знать основы и некоторые алгоритмы</a>, не углубляясь в математические дебри.</p>]]></content:encoded>
    </item>
    <item>
      <title>Краткое введение в tmux для программистов</title>
      <link>https://tproger.ru/links/tmux-for-developers</link>
      <comments>https://tproger.ru/links/tmux-for-developers?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/tmux-for-developers</guid>
      <description><![CDATA[<p>Менеджер терминалов tmux похож на GNU Screen и помогает управлять несколькими удалёнными машинами, а также пригодится при написании кода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/tmux-for-developers">Краткое введение в tmux для программистов</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты командной строки]]></category>
      <category><![CDATA[Инструменты терминала Linux]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 20 Oct 2015 13:50:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>tmux (TERminal MUltipleXer) — менеджер терминалов, похожий на GNU Screen. Это незаменимая для системных администраторов утилита, позволяющая с легкостью справляться с управлением одновременно несколькими удаленными машинами. Однако и программистам <a href="http://jilles.me/tmux-for-developers/">стоит изучить tmux</a>: он пригодится как для написания кода, так и для администрирования виртуальных машин.</p>]]></content:encoded>
    </item>
    <item>
      <title>Вредные, но приятные привычки программистов</title>
      <link>https://tproger.ru/links/bad-programming-habits</link>
      <comments>https://tproger.ru/links/bad-programming-habits?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/bad-programming-habits</guid>
      <description><![CDATA[<p>Привычки, которые все считают плохими: goto, отладка через printf, переопределение операторов. Они экономят время и щекочут нервы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/bad-programming-habits">Вредные, но приятные привычки программистов</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Oct 2015 20:19:09 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://tproger.ru/bad-programming-habits">Вредные привычки</a> есть у каждого: кто-то пользуется goto, кто-то отлаживает с помощью printf, а кто-то переопределяет операторы. Все знают, что это плохо, но это экономит время и щекочет нервы. А какие привычки есть у вас?</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему лучше рефакторить, вместо того, чтобы переписывать</title>
      <link>https://tproger.ru/links/do-not-rewrite-refactor</link>
      <comments>https://tproger.ru/links/do-not-rewrite-refactor?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/do-not-rewrite-refactor</guid>
      <description><![CDATA[<p>Идея переписать весь проект с нуля возникает, когда разбираться в существующем коде тяжело. Но время будет потрачено, а результат разочарует.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/do-not-rewrite-refactor">Почему лучше рефакторить, вместо того, чтобы переписывать</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Oct 2015 19:03:51 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как часто вам приходит в голову идея взять и переписать весь проект с нуля, потому что разбираться в существующем коде становится невозможно? Вопрос: стоит ли это делать? Ответ: <a href="http://www.daedtech.com/the-myth-of-the-software-rewrite">нет, не стоит</a>. Вы только потратите драгоценное время, а результат, скорее всего, вас не удовлетворит.</p>]]></content:encoded>
    </item>
    <item>
      <title>Gopher-сервер на Perl 6</title>
      <link>https://tproger.ru/links/gopher-server-perl-6</link>
      <comments>https://tproger.ru/links/gopher-server-perl-6?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/gopher-server-perl-6</guid>
      <description><![CDATA[<p>Gopher — протокол передачи гипертекста, распространённый до HTTP. Сейчас в мире работает чуть больше сотни таких серверов, и свой можно запустить на Perl 6.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/gopher-server-perl-6">Gopher-сервер на Perl 6</a>»</p>]]></description>
      <category><![CDATA[Perl]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Oct 2015 06:04:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://ru.wikipedia.org/wiki/Gopher">Gopher</a> — протокол передачи гипертекста, который был широко распространен до HTTP. Сейчас в мире работают чуть больше сотни gopher-серверов, многие из которых давно не обновляются. Но если вы хотите вспомнить старые времена или просто поддержать энтузиастов, можно поднять <a href="http://blogs.perl.org/users/aaron_baugher/2015/10/the-old-becomes-new-again-a-gopher-server-in-perl-6.html">свой gopher-сервер на Perl 6</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Исповедальня для разработчиков</title>
      <link>https://tproger.ru/links/codingconfessional</link>
      <comments>https://tproger.ru/links/codingconfessional?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/codingconfessional</guid>
      <description><![CDATA[<p>Coding Confessional — место, где разработчики делятся страшными тайнами: признаются в отладке через printf и залипании в интернете большую часть дня.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/codingconfessional">Исповедальня для разработчиков</a>»</p>]]></description>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 18 Oct 2015 18:05:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Coding Confessional — это то место, где любой программист может поделиться своими страшными тайнами. Например о том, что <a href="http://www.codingconfessional.com/comments/__Aw9BALxXqDbgjKtQn9OA">отлаживает с помощью printf-ов</a>. Или что <a href="http://www.codingconfessional.com/comments/n0Zs05yuRKw0zC6GzxCNZQ">проводят большую часть дня, залипая в интернете.</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Почему важно следить за чистотой кода</title>
      <link>https://tproger.ru/links/keep-your-kitchen-clean</link>
      <comments>https://tproger.ru/links/keep-your-kitchen-clean?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/keep-your-kitchen-clean</guid>
      <description><![CDATA[<p>Даже отличный продукт заводит команду в тупик, если код не тестируемый и не читабельный, а порядок в репозитории под контролем версий никто не поддерживает.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/keep-your-kitchen-clean">Почему важно следить за чистотой кода</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 17 Oct 2015 16:04:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>Даже если вы и ваша команда разрабатываете замечательный продукт, который радует пользователей, если вы не будете поддерживать порядок в вашем репозитории (Вы же пользуетесь системой контроля версий, правда?) и следить за тем, чтобы код был тестируемый и читабельный, рано или поздно <a href="https://medium.com/the-engineering-team/keep-your-kitchen-clean-e39d692f8015">вы зайдете в тупик</a>. Вам будет необходимо или «отмыть всю кухню», или забросить проект.</p>]]></content:encoded>
    </item>
    <item>
      <title>Лучший браузер 2015 года: сравнение Chrome, Firefox, Opera, Internet Explorer и Edge</title>
      <link>https://tproger.ru/links/best-browser-2015</link>
      <comments>https://tproger.ru/links/best-browser-2015?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/best-browser-2015</guid>
      <description><![CDATA[<p>Команда PCWorld сравнила основные браузеры года по критериям от производительности до простоты установки и оценила влияние отключения Adobe Flash Player.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/best-browser-2015">Лучший браузер 2015 года: сравнение Chrome, Firefox, Opera, Internet Explorer и Edge</a>»</p>]]></description>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[Google Chrome]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Oct 2015 21:58:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Команда ребят из PCWorld <a href="http://www.itnews.com/article/2966127/browsers/the-best-web-browser-of-2015-firefox-chrome-edge-ie-and-opera-compared.html">сравнила основные браузеры</a> этого года — Chrome от Google, Edge и Internet Explorer от Microsoft, Mozilla Firefox и Opera — по различным критериям, от производительности до простоты установки.</p><p>Среди прочего они обнаружили, что принудительное отключение Adobe Flash Player’а серьезно улучшает производительность, Microsoft Edge показывает вполне хорошие результаты, сравнимые с конкурентами — большой прогресс по сравнению с Internet Explorer, а Google Chrome все также остается отличным выбором в большинстве ситуаций: несмотря на прожорливость, он все еще самый быстрый и стабильный. Впрочем, Opera отстает ненамного.</p>]]></content:encoded>
    </item>
    <item>
      <title>Твиттер-бот на Python</title>
      <link>https://tproger.ru/links/python-twitter-bot</link>
      <comments>https://tproger.ru/links/python-twitter-bot?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/python-twitter-bot</guid>
      <description><![CDATA[<p>Пример реализации бота для Твиттера, который берёт содержимое из таблицы Google Spreadsheets. Перечислено всё, что понадобится для запуска.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/python-twitter-bot">Твиттер-бот на Python</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Oct 2015 14:26:59 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пример <a href="https://opensourcehacker.com/2015/10/14/twitter-bot-using-google-spreadsheets-in-python/">реализации бота для Твиттера</a> на Python, который использует таблицу из Google Spreadsheets в качестве источника данных.</p><p>Для запуска бота вам потребуется:</p><ul><li>Python 3.4+;</li><li>gspread — библиотека для работы с Google Spreadsheets;</li><li>tweepy — Твиттер-клиент для Python;</li><li>ZODB — транзакционная БД для Python-объектов;</li><li>зарегистрировать приложение в Google Docs и twitter.com.</li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Самые распространенные ошибки новичков в C#</title>
      <link>https://tproger.ru/links/common-c-sharp-mistakes</link>
      <comments>https://tproger.ru/links/common-c-sharp-mistakes?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/common-c-sharp-mistakes</guid>
      <description><![CDATA[<p>C# со строгой статической типизацией ловит большую часть ошибок при компиляции, но некоторые промахи компилятор не замечает — их стоит знать заранее.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/common-c-sharp-mistakes">Самые распространенные ошибки новичков в C#</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Oct 2015 07:37:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>C# — язык со строгой статической типизацией. Это значит, что большая часть возможных ошибок будет обнаружена на этапе компиляции. Тем не менее, есть множество ошибок, поймать которые компилятор не способен. Вот некоторые из них:</p><ul><li>использование ссылки как значения и наоборот;</li><li>неверное сравнение строк;</li><li>импользование императивного вместо декларативного стиля при работе с коллекциями;</li><li>путаница с методами расширений (extension methods);</li><li>использование неподходящей коллекции;</li><li>игнорирование предупреждений компилятора.</li></ul><p>В <a href="http://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make">этой статье</a> рассмотрены основные ошибки новичков в C# и то, как их избежать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Таблица для определения квалификации разработчика</title>
      <link>https://tproger.ru/links/programmer-competency-matrix</link>
      <comments>https://tproger.ru/links/programmer-competency-matrix?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артём Артемьев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/programmer-competency-matrix</guid>
      <description><![CDATA[<p>Компании указывают в вакансиях требуемый уровень кандидата. Таблица помогает оценить собственные знания в разных областях информатики и программирования.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/programmer-competency-matrix">Таблица для определения квалификации разработчика</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Карьера]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 15 Oct 2015 19:55:33 GMT</pubDate>
      <content:encoded><![CDATA[<p>При приеме на работу компании в требованиях указывают уровень квалификации, которому должен соответствовать нанимаемый разработчик. Определить ее вам поможет <a href="http://sijinjoseph.com/programmer-competency-matrix/">эта таблица</a>. По ней вы можете оценить уровень своих знаний в разных областях информатики и программирования.</p><p>UPD В комментариях скинули <a href="http://grompe.org.ru/static/prog_comp_matrix_ru.html">переведённый на русский вариант таблицы</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Бьерн Страуструп о первом компиляторе C++ и будущем языка</title>
      <link>https://tproger.ru/links/cfront-30-years</link>
      <comments>https://tproger.ru/links/cfront-30-years?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/cfront-30-years</guid>
      <description><![CDATA[<p>Бьерн Страуструп вспоминает CFront 1.0, которому исполнилось 30 лет, и объясняет, каким хотел бы видеть C++17 после заметного скачка от C++98 к C++11.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/cfront-30-years">Бьерн Страуструп о первом компиляторе C++ и будущем языка</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 15 Oct 2015 06:47:33 GMT</pubDate>
      <content:encoded><![CDATA[<p>Первому компилятору C++ — CFront 1.0 — недавно исполнилось 30 лет. В <a href="https://isocpp.org/blog/2015/10/cpp-30">этом интервью</a> Бьерн Страуструп рассказывает о том, что поменялось с тех пор, и каким он хотел бы видеть C++17.</p><blockquote>&lt;…&gt; В свое время C++11 стал серьезным скачком в развитии по сравнению с C++98. Я надеюсь, что C++17 будет настолько же сильным прорывом после C++11. Я надеюсь увидеть:концепты;модули;корутины:лучшую поддержку конкуррентного и параллельного программирования;и многое другое…</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Человекочитаемые коды ответа HTTP для Python</title>
      <link>https://tproger.ru/links/status-py</link>
      <comments>https://tproger.ru/links/status-py?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/status-py</guid>
      <description><![CDATA[<p>status.py — удивительно простая библиотека для Python (меньше 100 строк кода), добавляющая человекочитаемые статусы ответа HTTP.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/status-py">Человекочитаемые коды ответа HTTP для Python</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 14 Oct 2015 18:53:52 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://github.com/avinassh/status">status.py</a> — удивительно простая библиотека для Python (меньше 100 строк кода), добавляющая человекочитаемые статусы ответа HTTP.</p><p>Сравните сами. Вот так выглядит код без status.py:</p><p>А вот так — с ней:</p><p>Устанавливается библиотека через PIP:</p>]]></content:encoded>
    </item>
    <item>
      <title>Что должны делать юнит-тесты</title>
      <link>https://tproger.ru/links/what-unit-tests-should-answer</link>
      <comments>https://tproger.ru/links/what-unit-tests-should-answer?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/what-unit-tests-should-answer</guid>
      <description><![CDATA[<p>Написание полезных юнит-тестов требует практики. Несколько простых вопросов помогают понять, что именно проверять при тестировании приложения.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/what-unit-tests-should-answer">Что должны делать юнит-тесты</a>»</p>]]></description>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 14 Oct 2015 11:58:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Создание юнит-тестов — своего рода искусство. Для того, чтобы написать хорошие и, главное, полезные тесты, нужны годы практики.</p><p>При тестировании приложения вам помогут несколько простых вопросов:</p><ul><li>Что вы тестируете?</li><li>Что оно должно делать?</li><li>Что оно делает на самом деле?</li><li>Что должно было получиться?</li><li>Как можно добиться повторяемости результатов?</li></ul><p>В <a href="https://medium.com/javascript-scene/what-every-unit-test-needs-f6cd34d9836d">этой статье</a> рассказывается о том, как правильно ответить на эти вопросы и почему они важны.</p>]]></content:encoded>
    </item>
    <item>
      <title>Хитрости с битовыми операциями на примере языка Си</title>
      <link>https://tproger.ru/links/bitwise-tricks</link>
      <comments>https://tproger.ru/links/bitwise-tricks?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/bitwise-tricks</guid>
      <description><![CDATA[<p>Битовые операции ускоряют вычисления там, где производительность критична. Один из примеров — хранение координат плоскости в виде чисел Мортона.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/bitwise-tricks">Хитрости с битовыми операциями на примере языка Си</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 Oct 2015 21:05:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>В случае, когда производительность критична, можно использовать различные средства оптимизации вычислений. Одним из таких средств являются <a href="https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8">битовые операции</a> (если алгоритм уже не подразумевает их использование).</p><p>Например, координаты в двухмерном пространстве можно хранить в виде чисел Мортона, когда абсцисса и ордината записываются одним двоичным числом, позволяющим сравнивать расстояния между точками за одну операцию.</p><p>В <a href="https://graphics.stanford.edu/~seander/bithacks.html">этой статье</a> вы найдете больше разных «битовых трюков» на примере C.</p>]]></content:encoded>
    </item>
    <item>
      <title>Некоторые странности Python: объяснение</title>
      <link>https://tproger.ru/links/python-wats-explained</link>
      <comments>https://tproger.ru/links/python-wats-explained?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/python-wats-explained</guid>
      <description><![CDATA[<p>У неожиданного поведения языка есть причины: например, перемножение числа и строки работает потому, что оператор * перегружен и повторяет строку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/python-wats-explained">Некоторые странности Python: объяснение</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 Oct 2015 19:09:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Недавно мы публиковали <a href="https://vk.com/wall-30666517_1238558">ссылку на статью</a> о некоторых странностях Python. Но не все так просто: у этих странностей есть вполне <a href="http://www.b-list.org/weblog/2015/oct/13/wats-doc/">логичное объяснение</a>. Например, в случае с перемножением чисел и строк:</p><p>Дело в том, что оператор * в Python перегружен и требует два операнда. Если один из операндов — строка, то * считается оператором «повторения» строки.</p>]]></content:encoded>
    </item>
    <item>
      <title>Поисковик для программистов</title>
      <link>https://tproger.ru/links/searchcode</link>
      <comments>https://tproger.ru/links/searchcode?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/searchcode</guid>
      <description><![CDATA[<p>Универсальный поиск по репозиториям от Github до Fedora Project охватывает около 7 миллионов проектов и примерно 20 миллиардов строк кода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/searchcode">Поисковик для программистов</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 Oct 2015 10:17:58 GMT</pubDate>
      <content:encoded><![CDATA[<p><a href="https://searchcode.com/">Searchcode</a> — универсальный поисковик исходников по различным репозиториям от Github до Fedora Project. В базе Searchcode примерно 7 миллионов проектов, и около 20 миллиардов строк кода.</p>]]></content:encoded>
    </item>
    <item>
      <title>Структура исполняемого файла Windows</title>
      <link>https://tproger.ru/links/windows-executable-structure</link>
      <comments>https://tproger.ru/links/windows-executable-structure?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/windows-executable-structure</guid>
      <description><![CDATA[<p>Наглядная диаграмма показывает, что находится внутри бинарника программы и во что превращается исходный код после компиляции в формат PE.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/windows-executable-structure">Структура исполняемого файла Windows</a>»</p>]]></description>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 Oct 2015 20:56:51 GMT</pubDate>
      <content:encoded><![CDATA[<p>Иногда полезно знать, что находится в бинарнике вашей программы, и во что превращается исходный код во время компиляции. На <a href="http://i.imgur.com/tnUca.jpg">этой диаграмме</a> показана структура исполняемого фала Windows, также известного как Portable Executable (PE).</p>]]></content:encoded>
    </item>
    <item>
      <title>Покажи мне свой терминал</title>
      <link>https://tproger.ru/links/show-me-your-term</link>
      <comments>https://tproger.ru/links/show-me-your-term?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/show-me-your-term</guid>
      <description><![CDATA[<p>Маленькая утилита сохраняет всё происходящее в командной строке. Готовый файл занимает намного меньше места, чем видео, и не подвергается сжатию.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/show-me-your-term">Покажи мне свой терминал</a>»</p>]]></description>
      <category><![CDATA[Инструменты командной строки]]></category>
      <category><![CDATA[Инструменты терминала Linux]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 Oct 2015 18:18:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Showterm — маленькая утилита для записи всего, что происходит в терминале. Это отличная замена съемке скринкаста, если вам надо записать видеоруководство или продемонстрировать кому-либо запись своей работы с командной строкой, так как готовый файл занимает гораздо меньше места и не подвергается сжатию.</p>]]></content:encoded>
    </item>
    <item>
      <title>Большая подборка шпаргалок</title>
      <link>https://tproger.ru/links/overapi-com</link>
      <comments>https://tproger.ru/links/overapi-com?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/overapi-com</guid>
      <description><![CDATA[<p>Вспоминать конструкцию языка или имя библиотечной функции быстрее по шпаргалке, чем по документации. На сайте собраны материалы от PHP до Haskell и sed.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/overapi-com">Большая подборка шпаргалок</a>»</p>]]></description>
      <category><![CDATA[Шпаргалки]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 11 Oct 2015 19:35:47 GMT</pubDate>
      <content:encoded><![CDATA[<p>Когда надо быстро вспомнить конструкцию языка или название библиотечной функции, открывать руководство или документацию к языку или библиотеке — это лишняя трата времени.</p><p>Гораздо проще иметь под рукой шпаргалку. На сайте <a href="http://overapi.com/">OverAPI</a> вы найдете шпаргалки по различным языкам и технологиям на любой вкус: от PHP до Haskell, от HTML до sed.</p>]]></content:encoded>
    </item>
    <item>
      <title>Отлаживай программы, как настоящий сыщик</title>
      <link>https://tproger.ru/links/debug-like-holmes</link>
      <comments>https://tproger.ru/links/debug-like-holmes?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/debug-like-holmes</guid>
      <description><![CDATA[<p>Поиск ошибки похож на работу следователя: собрать косвенные улики, выдвинуть гипотезу, поставить эксперимент, доказать вину и устранить причину.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/debug-like-holmes">Отлаживай программы, как настоящий сыщик</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Отладка]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 06 Oct 2015 19:40:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы всегда мечтали стать сыщиком — искать улики, проверять гипотезы и искать виновного — но, почему-то, стали программистом — не отчаивайтесь!</p><p>Отладка программ <a href="https://www.getdonedone.com/debugging-like-a-detective/">очень похожа</a> на работу следователя. Выследить ошибку по косвенным признакам, поставить эксперимент, доказать вину и устранить. Программист — как Шерлок Холмс!</p><blockquote><i>Прим. редакции.:</i> в 2004 году вышла отличная книга Debugging by Thinking: A Multidisciplinary Approach (HP Technologies), в которой описываются этот и многие другие «стили» отладки.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Я изучаю &lt;tt&gt;%language_name%&lt;/tt&gt;. Что мне написать?</title>
      <link>https://tproger.ru/links/what-to-code</link>
      <comments>https://tproger.ru/links/what-to-code?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/what-to-code</guid>
      <description><![CDATA[<p>Практика требует небольших проектов, которые реально закончить в одиночку, а идей часто нет. Репозиторий на Github собирает такие задачи от простых к сложным.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/what-to-code">Я изучаю <tt>%language_name%</tt>. Что мне написать?</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 28 Sep 2015 18:04:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>При изучении нового (или первого) языка программирования нужна практика: маленькие программы или проекты, достаточно простые, чтобы закончить их в одиночку. Но часто бывает так, что идей совершенно нет.</p><p>В <a href="https://github.com/karan/Projects">этом репозитории</a> на Github вы найдете список небольших проектов, от самых простых до сложных, которые можно реализовать на изучаемом языке.</p>]]></content:encoded>
    </item>
    <item>
      <title>Оператор GOTO в Python</title>
      <link>https://tproger.ru/links/python-goto</link>
      <comments>https://tproger.ru/links/python-goto?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/links/python-goto</guid>
      <description><![CDATA[<p>Небольшая библиотека возвращает в язык спорную конструкцию: декоратор подменяет байт-код обращения к атрибутам label и goto безусловным переходом.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/links/python-goto">Оператор GOTO в Python</a>»</p>]]></description>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Интересные ссылки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 24 Sep 2015 18:10:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>Оператор GOTO не ругал только ленивый. Тем не менее, это инструмент, и польза или вред от него определяется только тем, как его используют.</p><p><a href="https://github.com/snoack/python-goto">Эта маленькая библиотека</a> позволяет использовать оператор GOTO в коде на Python:</p><p>Декоратор with_goto заменяет байт-код для доступа к атрибутам у объектов label и goto на безусловный переход (JUMP_ABSOLUTE). Без него такой код вызвал бы исключение NameError, поскольку переменные begin и end не инициализированны.</p><p>Идея добавить GOTO в Python не нова. В 2004 году в качестве первоапрельской шутки была написана <a href="http://entrian.com/goto/">другая библиотека</a>. Она работает через функцию trace и требует гораздо бóльших накладных расходов.</p>]]></content:encoded>
    </item>
  </channel>
</rss>