<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Программирование on Atrax Tech</title><link>http://flow.salpagarov.com/categories/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/</link><description>Recent content in Программирование on Atrax Tech</description><generator>Hugo</generator><language>ru</language><lastBuildDate>Wed, 08 Apr 2026 18:06:44 +0300</lastBuildDate><atom:link href="http://flow.salpagarov.com/categories/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/index.xml" rel="self" type="application/rss+xml"/><item><title>Best Practice</title><link>http://flow.salpagarov.com/posts/2022/Best-Practice/</link><pubDate>Wed, 03 Aug 2022 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2022/Best-Practice/</guid><description>&lt;p&gt;Если решение найдено, оно применяется, если нет - готовые рецепты не помогут. Потому, что они решают другие задачи.&lt;/p&gt;
&lt;p&gt;Миф о повторяемости решений - не более, чем миф.&lt;/p&gt;</description></item><item><title>Конечные автоматы</title><link>http://flow.salpagarov.com/posts/2021/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5-%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B/</link><pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2021/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B5-%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D1%8B/</guid><description>&lt;p&gt;Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы.&lt;/p&gt;</description></item><item><title>Пропитон</title><link>http://flow.salpagarov.com/posts/2021/%D0%9F%D1%80%D0%BE%D0%BF%D0%B8%D1%82%D0%BE%D0%BD/</link><pubDate>Tue, 30 Mar 2021 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2021/%D0%9F%D1%80%D0%BE%D0%BF%D0%B8%D1%82%D0%BE%D0%BD/</guid><description>&lt;p&gt;Есть несколько вещей, о которых авторы учебных пособий почти не говорят. Они как миссионеры, вопрос &amp;ldquo;зачем?&amp;rdquo; для них сродни посягательству на догмат веры. Но ведь это&amp;hellip; нечестно, да? О проблемах лучше говорить &amp;ldquo;на берегу&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Python в качестве первого языка - самый худший выбор. Дело не в том, что он сложен, просто многие сложные концепции вроде сборщика мусора, объектной модели и шаблонов проектирования встретятся вам раньше, чем инструкции условного выполнения и циклы. Если вы уже знаете C, Go или, скажем, Lua - вам будет легче. Изучая Python без подготовки, вы получите искаженное представление классических понятий, потому что здесь - и только здесь! - они реализованы не так, как у Вирта, Кнута, Дейкстры, Тьюринга. Здесь весело и за веселье это надо платить.&lt;/p&gt;</description></item><item><title>Генератор паролей</title><link>http://flow.salpagarov.com/posts/2020/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9/</link><pubDate>Thu, 03 Sep 2020 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2020/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D0%B5%D0%B9/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;head /dev/urandom | tr -dc A-Za-z0-9 | head -c &lt;span style="color:#ff9f43"&gt;16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Цифры, большие и малые латинские буквы. 16 символов.&lt;/p&gt;</description></item><item><title>Ископаемое</title><link>http://flow.salpagarov.com/posts/2020/%D0%98%D1%81%D0%BA%D0%BE%D0%BF%D0%B0%D0%B5%D0%BC%D0%BE%D0%B5/</link><pubDate>Wed, 26 Aug 2020 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2020/%D0%98%D1%81%D0%BA%D0%BE%D0%BF%D0%B0%D0%B5%D0%BC%D0%BE%D0%B5/</guid><description>&lt;p&gt;Давным-давно, когда компьютеры были большими, программы были маленькими и состояли из пронумерованных инструкций, которые компьютер понимал и выполнял. Потом этим инструкциям придумали короткие мнемонические обозначения и появился ассемблер. И с тех пор ничего не изменилось - ассемблер до сих пор является самым лучшим языком программирования, равноудаленным от машинного языка и языка человеческого.&lt;/p&gt;
&lt;p&gt;Однако, этого оказалось мало. Стали появляться языки программирования более высокого уровня - ближе к человеческому, дальше от машинного - и наступило время нового Вавилонского столпотворения. Сегодня существует более двух тысяч языков программирования - универсальных, специальных, экзотических. Какие-то умерли не родившись, какие-то здравствуют и поныне, а какие-то пережили восход и падение, оставшись в истории. Одни языки лучше, другие хуже, про третьи до сих пор спорят - хороши они или плохи.&lt;/p&gt;</description></item><item><title>Бейсик XXI века</title><link>http://flow.salpagarov.com/posts/2019/%D0%91%D0%B5%D0%B9%D1%81%D0%B8%D0%BA-XXI-%D0%B2%D0%B5%D0%BA%D0%B0/</link><pubDate>Tue, 19 Nov 2019 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2019/%D0%91%D0%B5%D0%B9%D1%81%D0%B8%D0%BA-XXI-%D0%B2%D0%B5%D0%BA%D0%B0/</guid><description>&lt;p&gt;Да, это Python. Подобно тому, как пост-бейсиковая эпоха оставила после себя &amp;ldquo;проклятие GOTO&amp;rdquo; и &amp;ldquo;макаронное программирование&amp;rdquo;, пост-пайтоновые времена обещают нам кризис посерьезней.&lt;/p&gt;
&lt;p&gt;Будет аллергия на &amp;ldquo;сахар&amp;rdquo;, будет конфликт &amp;ldquo;концептуалистов&amp;rdquo; с &amp;ldquo;практиками&amp;rdquo;, будет массовая миграция на пост-пайтоновские языки и другие беды, доселе неведомые.&lt;/p&gt;
&lt;p&gt;И его начнут стыдиться и избегать, точно так же, как сейчас стыдятся и избегают BASIC и PHP. Но это будет потом. Подождем&amp;hellip;&lt;/p&gt;</description></item><item><title>Очистить историю GIT</title><link>http://flow.salpagarov.com/posts/2019/%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D1%8C-%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8E-GIT/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2019/%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D1%8C-%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8E-GIT/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git reset --soft &lt;span style="color:#ff6ac1"&gt;$(&lt;/span&gt;git log --reverse --format&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;%H | head -n 1&lt;span style="color:#ff6ac1"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git commit --amend
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git push -f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Только коллеги по проекту вам за это спасибо не скажут, имейте в виду&amp;hellip;&lt;/p&gt;</description></item><item><title>Программирование</title><link>http://flow.salpagarov.com/posts/2019/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/</link><pubDate>Sun, 14 Apr 2019 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2019/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/</guid><description>&lt;p&gt;Ты строишь дом из кирпичей разного материала, размера, цвета и формы. На песке.&lt;/p&gt;</description></item><item><title>Кошка программиста</title><link>http://flow.salpagarov.com/posts/2019/%D0%9A%D0%BE%D1%88%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0/</link><pubDate>Wed, 30 Jan 2019 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2019/%D0%9A%D0%BE%D1%88%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0/</guid><description>&lt;p&gt;Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей и все становится понятно.&lt;/p&gt;</description></item><item><title>Про SQL</title><link>http://flow.salpagarov.com/posts/2017/%D0%9F%D1%80%D0%BE-SQL/</link><pubDate>Wed, 22 Nov 2017 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2017/%D0%9F%D1%80%D0%BE-SQL/</guid><description>&lt;p&gt;В запросах полям можно назначать синонимы. Но по ним нельзя сортировать.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-SQL" data-lang="SQL"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff6ac1"&gt;select&lt;/span&gt; name &lt;span style="color:#ff6ac1"&gt;as&lt;/span&gt; username &lt;span style="color:#ff6ac1"&gt;from&lt;/span&gt; users &lt;span style="color:#ff6ac1"&gt;order&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;by&lt;/span&gt; username&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Стандарт говорит нам &amp;ldquo;используйте реальные имена полей, потому что на момент сортировки синонимы еще не определены&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Ладно, пример не показателен. Но если одна и та же таблица используется несколько раз, то использование реальных имен вызывает путаницу - из какой именно части запроса это поле?&lt;/p&gt;
&lt;p&gt;Выход я, конечно, нашел. Если использовать синонимы для таблиц, то в сочетании с реальными полями неоднозначность исчезает. То есть для таблиц синонимы определяются до сортировки, а для полей - после. Странная какая-то логика.&lt;/p&gt;</description></item><item><title>Lua</title><link>http://flow.salpagarov.com/posts/2013/Lua/</link><pubDate>Mon, 22 Jul 2013 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2013/Lua/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Католицизм - это круто&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Кевин Смит, &amp;ldquo;Догма&amp;rdquo;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Lua - это язык программирования, написанный подразделением технологий компьютерной графики Папского Католического университета Рио-Де-Жанейро. Все-таки католики знают толк в миссионерстве - о языке Lua нет даже нейтральных отзывов, только восторженные. И восторг этот, как оказалось, вполне оправдан.&lt;/p&gt;
&lt;p&gt;Lua (&amp;ldquo;луна&amp;rdquo; по-португальски) проектировался - и до сих пор является непревзойденным в этом своем качестве - как встраиваемый язык сценариев. Он компактен; он прост - изучается без преувеличения &lt;a href="https://zserge.wordpress.com/2012/02/23/lua-%d0%b7%d0%b0-60-%d0%bc%d0%b8%d0%bd%d1%83%d1%82/"&gt;за час&lt;/a&gt;; однако простота не синоним ограниченности, он мощен - поддерживает императивный, функциональный, объектно-ориентированный подходы, в нем даже есть многопоточность.&lt;/p&gt;</description></item><item><title>PHP это джинн</title><link>http://flow.salpagarov.com/posts/2013/PHP-%D1%8D%D1%82%D0%BE-%D0%B4%D0%B6%D0%B8%D0%BD%D0%BD/</link><pubDate>Tue, 25 Jun 2013 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2013/PHP-%D1%8D%D1%82%D0%BE-%D0%B4%D0%B6%D0%B8%D0%BD%D0%BD/</guid><description>&lt;p&gt;&amp;hellip;а джинн не должен покидать лампы.&lt;/p&gt;
&lt;p&gt;Всякое использование PHP вне LAMP - это попытка устроить грузчика на работу в детский сад воспитателем. Или наоборот.&lt;/p&gt;</description></item><item><title>6 закон программирования</title><link>http://flow.salpagarov.com/posts/2013/6-%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F/</link><pubDate>Fri, 22 Feb 2013 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2013/6-%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F/</guid><description>&lt;p&gt;Сложность программы растет до тех пор, пока не превысит способности программиста.&lt;/p&gt;</description></item><item><title>GIT deployment</title><link>http://flow.salpagarov.com/posts/2010/GIT-deployment/</link><pubDate>Thu, 30 Dec 2010 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2010/GIT-deployment/</guid><description>&lt;p&gt;&amp;hellip; или &amp;ldquo;нестандартное использование системы управления версиями&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Возможности GIT выходят за пределы управления версиями. Я использую его в качестве инструмента для развертывания проекта на сервере. Требуется: идентичные настройки среды проекта на рабочей станции (или испытательном стенде) и &amp;ldquo;боевом&amp;rdquo; сервере, GIT на клиенте, SSH на сервере и два простеньких скрипта.&lt;/p&gt;
&lt;p&gt;Прежде всего создайте GIT-репозиторий в своей рабочей директории и поместите в него исходный код.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git init
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git commit -m &lt;span style="color:#5af78e"&gt;&amp;#34;Let there be light!&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Потом создайте GIT-репозиторий на боевом сервере.&lt;/p&gt;</description></item><item><title>Открытые лицензии</title><link>http://flow.salpagarov.com/posts/2010/open-source/</link><pubDate>Sun, 21 Nov 2010 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2010/open-source/</guid><description>&lt;p&gt;&amp;hellip; или &amp;ldquo;Сложные пути OpenSource&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Я программист. Убежденный сторонник OpenSource, считающий, что деньги зарабатываются продажей решений, а не разработкой инструментария для них. Все, что я пишу, в полном соответствии с лучшими практиками программирования должно быть повторно используемым, то есть решать не одну конкретную задачу, а быть достаточно универсальным для решения класса таких задач. &amp;ldquo;Universe&amp;rdquo; означает &amp;ldquo;Вселенная&amp;rdquo; и поэтому я считаю не только возможным, но и необходимым предоставление результатов своего труда в качестве &amp;ldquo;кубиков&amp;rdquo; для разработки как можно большего числа решений. На собственных решениях я зарабатываю непосредственно деньги, на чужих - репутацию, известность и прочие нематериальные вещи, которые в перспективе тоже неплохо монетизируются. Даже не считая моральных плюсов в виде благодарности неизвестных мне коллег со всего мира - я получаю возможность облегчить свою жизнь, используя результаты труда других OSS-разработчиков.&lt;/p&gt;</description></item><item><title>Оказывается</title><link>http://flow.salpagarov.com/posts/2006/cron/</link><pubDate>Wed, 20 Dec 2006 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2006/cron/</guid><description>&lt;p&gt;&amp;hellip;буквы &lt;strong&gt;E&lt;/strong&gt; и &lt;strong&gt;R&lt;/strong&gt; на клавиатуре находятся рядом.&lt;/p&gt;
&lt;p&gt;Особенно печально это событие в контексте &lt;strong&gt;crontab&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Рекурсия</title><link>http://flow.salpagarov.com/posts/2006/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F/</link><pubDate>Wed, 13 Dec 2006 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2006/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F/</guid><description>&lt;p&gt;Чтобы понять рекурсию, надо сначала понять рекурсию.&lt;/p&gt;</description></item><item><title>Perl</title><link>http://flow.salpagarov.com/posts/2006/Perl/</link><pubDate>Wed, 29 Nov 2006 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2006/Perl/</guid><description>&lt;pre tabindex="0"&gt;&lt;code&gt;perl -wle &amp;#39;(1 x $_) !~ /^(11+)\1+$/ &amp;amp;&amp;amp; print while ++ $_&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Программа для вывода простых чисел. Вот это я понимаю, &amp;ldquo;магия слова&amp;rdquo;.&lt;/p&gt;</description></item><item><title>RTFM</title><link>http://flow.salpagarov.com/posts/2006/RTFM/</link><pubDate>Mon, 20 Nov 2006 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2006/RTFM/</guid><description>&lt;p&gt;&amp;ldquo;Кто с вопросом к нам придет &amp;ndash; тот на Google и уйдет&amp;rdquo; (с)&lt;/p&gt;</description></item><item><title>XP</title><link>http://flow.salpagarov.com/posts/2006/XP/</link><pubDate>Sat, 04 Nov 2006 00:00:00 +0000</pubDate><guid>http://flow.salpagarov.com/posts/2006/XP/</guid><description>&lt;blockquote class='book-hint '&gt;
&lt;p&gt;Экстремальное программирование (&amp;ldquo;Extreme Programming&amp;rdquo;) это дисциплина разработки программного обеспечения и ведения бизнеса в этой области, которая фокусирует усилия обеих сторон (программистов и бизнесменов) на общих целях. Команды, использующие ХР, производят качественное программное обеспечение с весьма большой скоростью.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Не в этом ли причина всеобщей болезни сорванных сроков &amp;ndash; Doom 3, Half-Life 2, Need4Speed Carbon? Не могло это быть простым совпадением, что-то одновременно повлияло на монстров игрового рынка. Теперь понятно &amp;ndash; &amp;ldquo;модная болезнь&amp;rdquo; ударила по связке &amp;ldquo;цена-время-качество&amp;rdquo;, закона сохранения энергии ведь никто не отменял.&lt;/p&gt;</description></item></channel></rss>