{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Заметочки Когута: заметки с тегом программирование",
    "_rss_description": "Культурные заметки о русской литературе, культуре, языке",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "http:\/\/kkos.ru\/blog\/tags\/programming\/",
    "feed_url": "http:\/\/kkos.ru\/blog\/tags\/programming\/json\/",
    "icon": "http:\/\/kkos.ru\/blog\/pictures\/userpic\/userpic@2x.jpg?1773501260",
    "authors": [
        {
            "name": "Константин Когут",
            "url": "http:\/\/kkos.ru\/blog\/",
            "avatar": "http:\/\/kkos.ru\/blog\/pictures\/userpic\/userpic@2x.jpg?1773501260"
        }
    ],
    "items": [
        {
            "id": "76",
            "url": "http:\/\/kkos.ru\/blog\/all\/turbopascal\/",
            "title": "Паскаль, или пара воспоминаний из детства",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"http:\/\/kkos.ru\/blog\/pictures\/pascal.jpg\" width=\"1280\" height=\"720\" alt=\"\" \/>\n<\/div>\n<p>Язык программирования Паскаль появился в 80-е годы. Мое школьное детство прошло в увлечении этим новым и сложным делом. Уроки информатики, на которых нас учили писать простые программы на Паскале, превратились в то время для меня в первооткрытие.<\/p>\n<p>Почему так? Вся суть состояла в том, что тогда ни у кого дома еще не было компьютера. У меня он появился только в 6 классе (интернет появится только спустя еще 7 лет). Но несмотря на это, на нем не был установлен Паскаль, взять его было неоткуда: ведь не было интернета, в редких магазинах с пиратскими CD-дисками можно было найти сборники программ с Паскалем. (Да и сами CD-диски только входили в оборот: все тогда пользовались дискетами на 3,5 дюйма.) Поэтому изучать, писать, пробовать можно было только в школе, а 40 минут урока, выделенные на самостоятельное составление простой программы, казались крайне малым промежутком. Поэтому зачастую мы договаривались с учителем информатики о том, чтобы после уроков он разрешил нам поработать в Паскале в пустом кабинете информатики. Условие было одно: только не в игрушки играть. Я даже в школьной библиотеке книжку брал, по ней дополнительно изучал непростой для меня язык. Во многом это увлечение помогло в освоении азов языка Делфи. Но всерьез взяться за него, конечно, так и не вышло.<\/p>\n<p>Воспоминания местами настолько отчетливые, что при мысли о Паскале или при виде его синего интерфейса, пальцы правой руки сами тянутся нажать комбинацию Ctrl + F9 — самую частонажимаемую при написании программы, поскольку она запускала написанный код. Этот момент всегда был самым волнительным, потому что перед запуском кода Паскаль проверял его на наличие ошибок. Достаточно было одной (например, незакрытого условия if или неправильного знака присваивания значения переменной, или отсутствия точки с запятой в конце выражения), чтобы программа не запустилась и выдала печальное сообщение об ошибке. Но каково было ликование тех «счастливцев», которые осилили программу, и сумели запустить ее. Например, так было с кодом калькулятора. Помню, кто-то даже подскакивал от радости и что-то выкрикивал. А наш учитель понимающе улыбался.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"http:\/\/kkos.ru\/blog\/pictures\/pascal-error.jpg\" width=\"720\" height=\"360\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Так выглядит ошибка после попытки запуска программы<\/div>\n<\/div>\n<p>Сейчас к воспоминаниям о собственных увлечениях прибавляется также ощущение ностальгии. Конец 90-х — начало 2000-х в моем детстве были удивительными временами, наполненными восторгом перед миром, одним из проявлений которого было первооткрытие — реальное первооткрытие, ведь компьютеры только появлялись. Тогда мы были полны радости перед этим «новым». Кажется, даже к лучшему, что в те времена никто из нас не подозревал, во что выльется технический «прогресс».<\/p>\n<p>А что у вас связано с уроками информатики из детства? С Паскалем? Приглашаю поделиться в комментариях.<\/p>\n",
            "summary": "Язык программирования Паскаль появился в 80-е годы. Мое школьное детство прошло в увлечении этим новым и сложным делом...",
            "date_published": "2015-04-20T16:40:33+05:00",
            "date_modified": "2016-12-03T19:10:09+05:00",
            "tags": [
                "детство",
                "ностальгия",
                "программирование"
            ],
            "image": "http:\/\/kkos.ru\/blog\/pictures\/pascal.jpg",
            "_date_published_rfc2822": "Mon, 20 Apr 2015 16:40:33 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "76",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "http:\/\/kkos.ru\/blog\/pictures\/pascal.jpg",
                    "http:\/\/kkos.ru\/blog\/pictures\/pascal-error.jpg"
                ]
            }
        },
        {
            "id": "65",
            "url": "http:\/\/kkos.ru\/blog\/all\/sovoteka-counter\/",
            "title": "Счетчик просмотров в Совотеке",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"http:\/\/kkos.ru\/blog\/pictures\/sovoteka-chislo.png\" width=\"670\" height=\"241\" alt=\"\" \/>\n<\/div>\n<p>В <a href=\"http:\/\/sovoteka.ru\">Совотеке<\/a> используется такой вот скрипт для склонения счетчика сов вверху страницы. Можно ли его как-то упростить? Напишите, пожалуйста.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?php\nfunction pluralForm($chislo, $form1, $form2, $form5)\n{\n    $chislo = abs($chislo) % 100;\n    $chislo1 = $chislo % 10;\n    if ($chislo &gt; 10 &amp;&amp; $chislo &lt; 20) return $form5;\n    if ($chislo1 &gt; 1 &amp;&amp; $chislo1 &lt; 5) return $form2;\n    if ($chislo1 == 1) return $form1;\n    return $form5;\n}\necho &#039;У&amp;nbsp;нас уже &#039;.$chislo.&#039; &lt;a href=&quot;\/about&quot;&gt;&#039;.pluralForm($chislo, &#039;сова&#039;, &#039;совы&#039;, &#039;сов&#039;).&#039;&lt;\/a&gt;.\nМожно выбрать &lt;a href=&quot;\/&quot; title=&quot;Все совы&quot;&gt;из&amp;nbsp;всех&lt;\/a&gt;, указать нужную\nили&amp;nbsp;взять &lt;a href=&quot;\/random&quot; title=&quot;Случайная сова&quot;&gt;случайную&lt;\/a&gt;.&lt;br \/&gt;\nА еще можно &lt;a href=&quot;\/memory&quot;&gt;поиграть&lt;\/a&gt; с совами или посмотреть &lt;a href=&quot;\/video&quot;&gt;видео&lt;\/a&gt; с их участием.&#039;;\n?&gt;<\/code><\/pre><h2>Обновление<\/h2>\n<p>Z6a в комментариях подсказал правильную функцию. Спасибо. Теперь всё работает, кажется, даже быстрее. Привожу новый код здесь.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?php\necho plural_form(42, array(&#039;арбуз&#039;, &#039;арбуза&#039;, &#039;арбузов&#039;));\nfunction plural_form($n, $forms) {\nreturn $n%10==1&amp;&amp;$n%100!=11?$forms[0]:($n%10&gt;=2&amp;&amp;$n%10&lt;=4&amp;&amp;($n%100&lt;10||$n%100&gt;=20)?$forms[1]:$forms[2]);\n}\n?&gt;<\/code><\/pre>",
            "summary": "В Совотеке используется такой вот скрипт для склонения счетчика сов вверху страницы. Можно ли его как-то упростить?",
            "date_published": "2014-09-18T12:57:43+05:00",
            "date_modified": "2014-09-19T19:40:07+05:00",
            "tags": [
                "вопрос",
                "программирование",
                "совы"
            ],
            "image": "http:\/\/kkos.ru\/blog\/pictures\/sovoteka-chislo.png",
            "_date_published_rfc2822": "Thu, 18 Sep 2014 12:57:43 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "65",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "http:\/\/kkos.ru\/blog\/pictures\/sovoteka-chislo.png"
                ]
            }
        },
        {
            "id": "36",
            "url": "http:\/\/kkos.ru\/blog\/all\/sovoteka-admin\/",
            "title": "Как устроена Совотека",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"http:\/\/kkos.ru\/blog\/pictures\/fonsov.jpg\" width=\"1472\" height=\"1352\" alt=\"\" \/>\n<div class=\"e2-text-caption\">О том, что у «Совотеки» под <s>капотом<\/s> перьями.<\/div>\n<\/div>\n<p>У <a href=\"http:\/\/sovoteka.ru\">Совотеки<\/a> все картинки-миниатюры генерируются и хранятся в отдельной папке по адресу:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sovoteka.ru\/i\/s\/<\/code><\/pre><p>Большие версии тех же картинок хранятся отдельно по адресу:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sovoteka.ru\/i\/<\/code><\/pre><p>Всего в «Совотеке» сейчас 903 совы и для удобства каждая картинка подписывается автоматически.<\/p>\n<p>Например, 100-я сова в миниатюрке имеет адрес: <a href=\"http:\/\/sovoteka.ru\/i\/s\/sovoteka_100_s.jpg\">sovoteka.ru\/i\/s\/sovoteka_100_s.jpg<\/a>. У нее всегда размер 95×95 пикселей. Ее увеличенная копия имеет адрес: <a href=\"http:\/\/sovoteka.ru\/i\/sovoteka_100.jpg\">sovoteka.ru\/i\/sovoteka_100.jpg<\/a>. Размер у нее непредсказуем.<\/p>\n<p>Нужно написать такой скрипт на PHP, чтобы он смог проделать следующее:<\/p>\n<ul>\n<li>автоматом подсчитать, сколько сов уже есть на сайте (я это делал через переменную, которая считает количество файлов, например, в папке \/i\/s\/. Сколько уменьшенных копий — столько сов на сайте);<\/li>\n<li>из множества сов выбрать 50 случайных и вывести их на экран (это можно через генерацию случайных чисел сделать, я их подставлял в имена файлов, ведь в них меняется только число — sovoteka_$chislo_s.jpg, к примеру). Важно, чтобы эти 50 сов не были повторяющимися — с этим проблемы. Случайные совы генерируются каждый раз при обновлении страницы — каждый раз разные картинки.<\/li>\n<\/ul>\n<p>Результат выполнения PHP-скрипта — HTML-код вида:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;a href=&quot;\/i\/sovoteka_518.jpg&quot;&gt;&lt;img src=&quot;\/i\/s\/sovoteka_518_s.jpg&quot; width=&quot;95&quot; height=&quot;95&quot;&gt;&lt;\/a&gt;\n&lt;a href=&quot;\/i\/sovoteka_431.jpg&quot;&gt;&lt;img src=&quot;\/i\/s\/sovoteka_431_s.jpg&quot; width=&quot;95&quot; height=&quot;95&quot;&gt;&lt;\/a&gt;<\/code><\/pre><p>Сейчас у меня такой код вышел:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$chislo = sizeof(glob(&#039;i\/*.*&#039;));\n\/\/ Подсчитываю, сколько картинок в папке, следовательно столько сов на сайте\n\n$arr = range(1, $chislo);\n\/\/ Делаю случайное число от 1 до числа сов на сайте\n\nshuffle($arr);\n\/\/ Мешаю числа\n\nfor ($i=0; $i &lt; count($arr); $i+=11) { \n\/\/ Зацикливаю вывод\n\necho &#039;&lt;a class=&quot;imgs_group&quot; rel=&quot;gal&quot; href=&quot;\/i\/sovoteka_&#039;.$arr[$i].&#039;.jpg&quot;&gt;\n&lt;img src=&quot;\/i\/s\/sovoteka_&#039;.$arr[$i].&#039;_s.jpg&quot; width=&quot;95&quot; height=&quot;95&quot; class=&quot;ingal&quot;&gt;&lt;\/a&gt;&#039;;\n\/\/ Подставляю созданные номера в HTML — костыль, в общем.\n}<\/code><\/pre><p>С наибольшей степенью вероятности могу утверждать, что этот код — костыль. Если у вас есть предложения по решению данной задачи, отпишитесь в комментариях.<\/p>\n<h2>Обновление<\/h2>\n<p>Спасибо Антону Сюваеву за помощь в коде. Теперь совы генерируются как надо — с выборкой из массива и проверкой на повторы.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$files = glob(&#039;i\/s\/*.jpg&#039;);\n$rand_keys = array_rand($files, 50); \/\/ 50 случайных ключей из массива\n\nforeach ($rand_keys as $pos) {\n$thumb_name = $files[$pos];\n$full_name = str_replace(array(&#039;\/s&#039;,&#039;_s&#039;),&#039;&#039;,$thumb_name);\n\necho &#039;{$thumb_name}\\n&#039;; \/\/ url мелкого файла\necho &#039;{$full_name}\\n\\n&#039;; \/\/ url крупного файла\n}<\/code><\/pre>",
            "summary": "У Совотеки все картинки-миниатюры генерируются и хранятся в отдельной папке по адресу",
            "date_published": "2014-05-20T22:34:26+05:00",
            "date_modified": "2018-05-14T00:22:11+05:00",
            "tags": [
                "вопрос",
                "интернет",
                "программирование",
                "совы"
            ],
            "image": "http:\/\/kkos.ru\/blog\/pictures\/fonsov.jpg",
            "_date_published_rfc2822": "Tue, 20 May 2014 22:34:26 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "36",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "http:\/\/kkos.ru\/blog\/pictures\/fonsov.jpg"
                ]
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199)"
}