{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Математик среди биологов: заметки с тегом прием",
    "_rss_description": "Я немного умею складывать, но от вычитания у меня всегда кружится голова",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/antonlyakh.ru\/blog\/tags\/priem\/",
    "feed_url": "https:\/\/antonlyakh.ru\/blog\/tags\/priem\/json\/",
    "icon": false,
    "author": {
        "name": "Антон Лях",
        "url": "https:\/\/antonlyakh.ru\/blog\/",
        "avatar": false
    },
    "items": [
        {
            "id": "480",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/deyast-principov-artema-gorbunova\/",
            "title": "Десять принципов Артема Горбунова",
            "content_html": "<p>Артем Горбунов — дизайнер, основатель и руководитель <a href=\"https:\/\/bureau.ru\/\">Бюро Горбунова<\/a>.<\/p>\n<p>Вот его жизненные принципы.<\/p>\n<ol start=\"1\">\n<li><i><b>Прямо сейчас.<\/b><\/i> Если перед вами стоит сложная задача и вы не знаете, как к ней подступиться, задайте себе вопрос: Что мне мешает достичь цели прямо сейчас? При таком подходе вы начинаете думать о главной проблеме, которая мешает добиться результата.<\/li>\n<li><b>Не авось.<\/b> Если сделать что-то на авось, есть два варианта развития событий. Старший товарищ заметит вашу ошибку и наругает вас. Или, что ещё хуже, вы сделаете проект, запустите его, он начнёт работать и что-то в нём пойдёт не так. Поэтому не полагайтесь на авось.<\/li>\n<li><b>Я виноват.<\/b> Когда что-то идёт не так, хочется обвинять других. Но в этом случае вы перекладываете ответственность на обстоятельства. Если вы признаёте вину, то можете влиять ни происходящее.<\/li>\n<li><i><b>Не ной.<\/b><\/i> Нытьё дискредитирует вас в глазах окружающих, и они будут считать, что на вас нельзя положиться.<\/li>\n<li><b>Не бери деньги у мудаков.<\/b> Деньги всегда связаны с доверием и создают ожидания. Поэтому не берите деньги у клиентов, которым вы не доверяете.<\/li>\n<li><b>Учись.<\/b><\/li>\n<li><i><b>Не ссы.<\/b><\/i> Меняйте профессию, открывайте собственный бизнес и заводите детей даже тогда, когда кажется, что уже слишком поздно<\/li>\n<li><b>Путешествуй.<\/b><\/li>\n<li><b>Помни.<\/b> Человеческая память ограничена, поэтому чтобы сохранить воспоминания, используйте подручные приспособления. Например, ведите записи, сохраняйте важную переписку, переносите данные из старого компьютера на новый<\/li>\n<li><i><b>Мечтай.<\/b><\/i> Делите свои мечты с другими людьми: путешествуйте с ними, делайте совместные проекты. Тогда ваша мечта станет мечтой тех, с кем вы ею поделились.<\/li>\n<\/ol>\n<p>Это <a href=\"https:\/\/www.youtube.com\/watch?v=ZMeWeU1Y6PI\">полная запись выступления<\/a>.<\/p>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/ZMeWeU1Y6PI\" frameborder=\"0\" allowfullscreen><\/iframe><\/div>\n",
            "date_published": "2023-11-12T15:35:24+03:00",
            "date_modified": "2023-11-22T12:16:19+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/remote\/youtube-ZMeWeU1Y6PI-cover.jpg",
            "_date_published_rfc2822": "Sun, 12 Nov 2023 15:35:24 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "480",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/remote\/youtube-ZMeWeU1Y6PI-cover.jpg"
                ]
            }
        },
        {
            "id": "473",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/pokazat-uluchshenie-gradientom\/",
            "title": "Покажите улучшение градиентом",
            "content_html": "<p>Градиент цветов традиционно используют для изображения плавных отличий каких-либо признаков.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Cooney-et-al-(2002)-Fig-2---Avian-color-latitudinal-gradient.png\" width=\"1000\" height=\"625\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Широтный градиент распределения окраски птиц. <a href=\"https:\/\/www.nature.com\/articles\/s41559-022-01714-1\/figures\/2\">Cooney et al., 2002, fig. 2<\/a><\/div>\n<\/div>\n<p>Он хорошо отображает динамику распределения значений. Но с его помощью также можно показать какое-то улучшение. Для этого объекты с начальными (худшими) параметрами отметьте самым тусклым цветом. Далее постепенно повышайте насыщенность цветов. Наилучший результат покажите самым насыщенным цветом.<\/p>\n<p>Для примера на рисунке ниже ↓ изображено, как улучшается форма биологических объектов при использовании все большего и большего числа параметров — гармоник эллиптического преобразования Фурье.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Kontury-(gotovye)---vosstanovlenie-po-garmonikam.png\" width=\"1000\" height=\"687\" alt=\"\" \/>\n<\/div>\n<p>Самый светлый серый цвет раскрашивает примитивные эллиптические формы, восстановленные из одной гармоники (второй ряд), а насыщенный черный (последний ряд) — наилучшие формы, восстановленные из 32 гармоник, которые практически не отличаются от исходных. Градиент серого иллюстрирует поэтапное восстановление исходных форм.<\/p>\n<p>А на следующем рисунке ↓ изображен тот же процесс, но без использования градиента.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Kontury-(gotovye)---vosstanovlenie-po-garmonikam-cvet.png\" width=\"1000\" height=\"687\" alt=\"\" \/>\n<\/div>\n<p>Очевидно, что градиент лучше передает динамику процесса.<\/p>\n",
            "date_published": "2023-08-07T15:30:08+03:00",
            "date_modified": "2023-08-07T15:40:52+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/Cooney-et-al-(2002)-Fig-2---Avian-color-latitudinal-gradient.png",
            "_date_published_rfc2822": "Mon, 07 Aug 2023 15:30:08 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "473",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Cooney-et-al-(2002)-Fig-2---Avian-color-latitudinal-gradient.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Kontury-(gotovye)---vosstanovlenie-po-garmonikam.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Kontury-(gotovye)---vosstanovlenie-po-garmonikam-cvet.png"
                ]
            }
        },
        {
            "id": "462",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/podpisyvayte-masshtabnye-otrezki\/",
            "title": "Подписывайте масштабные отрезки",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/vdnh-motivator-a.png\" width=\"800\" height=\"576\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Держите строй. <a href=\"https:\/\/vdnh.ru\/news\/4231\/\">Правила поведения на ВДНХ<\/a>. 2020 год<\/div>\n<\/div>\n<p>Изучим обозначения масштаба на рисунках и фотографиях микроводорослей, случайно выбранных из статей 1950-2020-х годов.<\/p>\n<h2>Увеличено в × раз<\/h2>\n<p>Когда автор четко понимал, какого размера будет иллюстрация после печати, под ней писали, во сколько раз увеличен тот или иной объект.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Knudson_(1952)_fig_1.png\" width=\"600\" height=\"705\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/doi.org\/10.1093\/oxfordjournals.aob.a083325\">Knudson, 1952<\/a><\/div>\n<\/div>\n<p>Для понимания истинного размера, необходимо было измерить объект линейкой и разделить на приведенное число. То есть авторы связывали масштаб объекта с конкретным размером иллюстрации.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Koppen_(1975)_figs_11-17.png\" width=\"800\" height=\"710\" alt=\"\" \/>\n<div class=\"e2-text-caption\">У каждого рисунка свое увеличение. <a href=\"https:\/\/doi.org\/10.1111\/j.1529-8817.1975.tb02774.x\">Koppen, 1975<\/a><\/div>\n<\/div>\n<p>В цифровую эпоху, когда размер оцифрованного листа может быть любым, а его реальный размер в миллиметрах не известен, такой прием позволяет только приблизительно оценить истинные размеры изображенных организмов.<\/p>\n<p>Сейчас подобный способ обозначения масштаба — моветон.<\/p>\n<h2>Масштаб 10 мкм<\/h2>\n<p>По мнению Платона эйдосы существуют вне времени, но приходят в свое время. Поэтому со временем иллюстраторы поняли, что вместо увеличения лучше нарисовать масштабный отрезок известной длины.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Florin_(1975)_fig-22.png\" width=\"600\" height=\"602\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Длины отрезков подписаны рядом. Florin, 1957. <a href=\"https:\/\/www.diva-portal.org\/smash\/get\/diva2:565461\/FULLTEXT01.pdf\"><tt>ПДФ<\/tt><\/a><\/div>\n<\/div>\n<p>Однако, по требованиям редакций, из-за технических сложностей или по иным причинам, но длину масштабного отрезка стали писать в легенде.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Sterrenburg_(1991)_figs_11-19.png\" width=\"800\" height=\"828\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Много масштабных отрезков, но все имеют одинаковую длину — 10 мкм. <a href=\"https:\/\/doi.org\/10.1080\/0269249X.1991.9705182\">Sterrenburg, 1991<\/a><\/div>\n<\/div>\n<p>Удобство чтения рисунка от этого сильно пострадало.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Geisen_(2003)_plate-6.png\" width=\"800\" height=\"529\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/doi.org\/10.1007\/978-3-662-06278-4_13\">Geisen et al., 2003<\/a>. Plate 6.<\/div>\n<\/div>\n<p>Потому что для определения масштаба приходится переводить взгляд с фотографии на легенду и там выискивать, какой масштаб соответствует фото с заданным номером, а затем — возвращаться назад.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Benico_et_al_(2019)_figs_1-6.png\" width=\"800\" height=\"730\" alt=\"\" \/>\n<div class=\"e2-text-caption\">У каждого рисунок свой отрезок и отдельная подпись в легенде. <a href=\"https:\/\/doi.org\/10.1080\/00318884.2019.1601948\">Benico et al., 2019<\/a><\/div>\n<\/div>\n<p>Когда масштабных отрезков много, они отличаются длинной и в их расположении нет порядка — поиск в легенде нужной длины превращается в мучение.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Almeida_et_al_(2016)_figs_73-84.png\" width=\"800\" height=\"616\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Легенда содержит шесть длин масштабных отрезков. <a href=\"https:\/\/doi.org\/10.11646\/phytotaxa.246.3.1\">Almeida et al., 2016<\/a><\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Genkal_Yarushina_(2018)_table.png\" width=\"800\" height=\"668\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Здесь пять длин масштабов, но разобраться где-какая — очень сложно. <a href=\"https:\/\/elibrary.ru\/item.asp?id=37077346\">Генкал и Ярушина, 2018<\/a><\/div>\n<\/div>\n<p>Не делайте так.<\/p>\n<h2>Пишите длину около масшабного отрезка<\/h2>\n<p>Авторы и редакции журналов, которые заботятся о читателе, подписывают длину рядом с отрезком.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Lai_et_al_(2019)_fig_3.png\" width=\"800\" height=\"622\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/doi.org\/10.7717\/peerj.7238\">Lai et al., 2019<\/a>. Fig. 3<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Wetzel_et_al_(2017)_figs_97-108.png\" width=\"800\" height=\"740\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/doi.org\/10.1127\/1438-9134\/2017\/209\">Wetzel et al., 2017<\/a><\/div>\n<\/div>\n<p>Поступайте также.<\/p>\n<h2>Выводы<\/h2>\n<p>Масштабный отрезок — самое важное обозначение на изображениях микроорганизмов. Только он позволяет понять истинный размер бактерии, водоросли, клетки или простейшего. Поэтому длину масштабного отрезка читатель должен считывать мгновенно, сразу, с листа. Позаботьтесь о читателе — укажите размер рядом с отрезком.<\/p>\n<p>Если вы полагаете, что требования редакции так делать не позволяют, все равно сделайте удобно читателю наперекор требованиям. Редактор тоже человек. Увидев, что такой прием лучше принятого в редакции, скорее всего он его пропустит.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/vdnh-motivator-b.png\" width=\"800\" height=\"533\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Выровнять шеренги. <a href=\"https:\/\/vdnh.ru\/news\/4231\/\">Правила поведения на ВДНХ<\/a>. 2020<\/div>\n<\/div>\n",
            "date_published": "2022-11-05T23:27:27+03:00",
            "date_modified": "2022-11-05T23:43:15+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/vdnh-motivator-a.png",
            "_date_published_rfc2822": "Sat, 05 Nov 2022 23:27:27 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "462",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/vdnh-motivator-a.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Knudson_(1952)_fig_1.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Koppen_(1975)_figs_11-17.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Florin_(1975)_fig-22.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Sterrenburg_(1991)_figs_11-19.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Geisen_(2003)_plate-6.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Benico_et_al_(2019)_figs_1-6.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Almeida_et_al_(2016)_figs_73-84.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Genkal_Yarushina_(2018)_table.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Lai_et_al_(2019)_fig_3.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Wetzel_et_al_(2017)_figs_97-108.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/vdnh-motivator-b.png"
                ]
            }
        },
        {
            "id": "460",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/sdelay-sam\/",
            "title": "Сделай сам",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Sdelay-sam.png\" width=\"800\" height=\"569\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Повторное использование чужих приемов — это нормально<\/div>\n<\/div>\n<p>Я сам пишу большинство программ с использованием своих библиотек. То есть, конечно, у меня есть некие базовые библиотеки, однажды найденные на просторах сети, но этим дело и ограничивается.<\/p>\n<p>Когда у меня есть задача написать программу, я сажусь и пишу ее сам: продумываю алгоритм, интерфейс, пишу код, тестирую, правлю, опять тестирую и выпускаю релиз.<\/p>\n<p>Я не люблю ковыряться в чужом коде или разбираться в документации чьей-то библиотеки, так как при этом ничего не получаю взамен, кроме усталости и отупения.<\/p>\n<p><i>Дополнено через пару месяцев.<\/i><br \/>\nОднако мой подход старомоден и в будущем перейду на повторное использование чужих приемов. Ибо любой код когда-нибудь кем-нибудь будет написан, будет написан хорошо и будет доступен всем. Незачем отвергать хорошие вещи.<\/p>\n",
            "date_published": "2022-10-18T16:40:00+03:00",
            "date_modified": "2022-10-18T20:59:05+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/Sdelay-sam.png",
            "_date_published_rfc2822": "Tue, 18 Oct 2022 16:40:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "460",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Sdelay-sam.png"
                ]
            }
        },
        {
            "id": "438",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/priem-programmirovaniya-vovremya-ostanovitsya\/",
            "title": "Прием программирования: Вовремя остановиться",
            "content_html": "<p>Иногда я пишу одноразовый код, который, например, что-то переносит из файла в базу данных. Этот код мне понадобиться один раз, но удалять его после использования жалко.<\/p>\n<p>Для того, чтобы код нельзя было больше выполнить, я внедряю в него оператор die().<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/program-die.png\" width=\"800\" height=\"361\" alt=\"\" \/>\n<\/div>\n<p>Главное — вовремя остановиться.<\/p>\n",
            "date_published": "2021-08-31T22:13:58+03:00",
            "date_modified": "2021-08-31T22:13:45+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/program-die.png",
            "_date_published_rfc2822": "Tue, 31 Aug 2021 22:13:58 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "438",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/program-die.png"
                ]
            }
        },
        {
            "id": "436",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/budu-s-lekciey-na-17-y-diatomovoy-shkole-v-minske-23-28-avgusta\/",
            "title": "Буду в Минске 23-28 августа на 17-й Диатомовой школе с лекцией об оформлении биологических иллюстраций",
            "content_html": "<p>23 августа буду выступать в Минске на Диатомовой школе. Буду рассказывать о правилах оформления биологических иллюстраций.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Ris---Nadpisi-na-foto-(rus-i-angl).png\" width=\"2000\" height=\"1300\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Обычно делают как слева, а надо — как справа<\/div>\n<\/div>\n<p>Так, на любой биологической иллюстрации, где есть масштабный отрезок, длина отрезка должна быть написана рядом с ним.<\/p>\n<p>Запомнить это простое правило поможет картинка-мотиватор, которую выпустили работники ВДНХ. На ней четко прописана необходимая дистанция.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/Motivator-VDNH---1.5-m.png\" width=\"800\" height=\"533\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Правила поведения на ВДНХ во время карантина. <a href=\"https:\/\/worldpodium.ru\/news\/vdnh-vypustila-motivator-o-pravilah-povedeniya-vo-vremya-karantina\">Волдподиум<\/a><\/div>\n<\/div>\n<p>О прочих правилах расскажу на лекции. Презентацию лекции планирую выложить в онлайн. Кому интересно, ставьте лайки или пишите комментарии.<\/p>\n<hr \/>\n<p>Первая часть серии заметок:<br \/>\n<a href=\"http:\/\/antonlyakh.ru\/blog\/all\/podpisyvayte-masshtabnye-otrezki\/\">Подписывайте масштабные отрезки<\/a><\/p>\n<hr \/>\n",
            "date_published": "2021-08-18T22:55:54+03:00",
            "date_modified": "2022-11-05T23:56:22+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/Ris---Nadpisi-na-foto-(rus-i-angl).png",
            "_date_published_rfc2822": "Wed, 18 Aug 2021 22:55:54 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "436",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Ris---Nadpisi-na-foto-(rus-i-angl).png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/Motivator-VDNH---1.5-m.png"
                ]
            }
        },
        {
            "id": "391",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/priemy-programmirovaniya-vernut-vektor\/",
            "title": "Приемы программирования. Вернуть вектор",
            "content_html": "<p>Иногда функция должна вернуть не одно, а несколько значений. Например флаг успеха или неудачи, несколько найденных параметров и массив. Фактически она возвращает векторный результат.<\/p>\n<p>Раньше для получения векторного результата я передавал несколько переменных по ссылке и ждал булево значение функции.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Здесь ожидаю два параметра и двумерный массив, а функция возвращает флаг успеха-неудачи.\r\nfunction navalniy( \r\n    source_data : TVector; var temperature : real; var blood_pressure : real; var spy_data : TVector\r\n) : boolean;<\/code><\/pre><p>Теперь я просто получаю один векторный результат.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">function navalniy( source_data : TVector ) : TVector;<\/code><\/pre><p>Первый компонент вектора содержит флаг успеха и вычисленные скалярные параметры, остальные — заполненный массив.<\/p>\n<pre class=\"e2-text-code\"><code class=\"cpp\">\r\nspy_data = navalniy( source_data );\r\nif (spy_data[0][0] == 0) {\r\n  alert(‘Явка провалена. Немедленно уходить!’);\r\n  exit();\r\n} else {\r\n  temperature = spy_data[0][1];\r\n  blood_pressure = spy_data[0][2];\r\n  list_of_comrades = (spy_data[1], …, spy_data[M]);\r\n  \/\/ Все в порядке, продолжаем готовить революцию\r\n  \/\/ …\r\n}\r\n<\/code>\n<\/pre>\n<p>Единственное, при таком подходе нужно следить, чтобы размерность второй координаты массива (resulted_array[•][×]) была не меньше размерности ожидаемых дополнительных параметров (param{i}). В противном случае параметры следует вернуть в нескольких начальных  компонентах ветора-результата.<\/p>\n<pre class=\"e2-text-code\"><code class=\"cpp\">\r\nspy_data = navalniy( source_data );\r\nif (spy_dat[0][0] > 0) {\r\n  temperature =spy_dat[0][1];\r\n  blood_pressure = spy_dat[0][2];\r\n  leukocytes = spy_datt[1][0];\r\n  hemoglobin = spy_dat[1][1];\r\n  erythrocytes = spy_dat[1][2];\r\n  \/\/ Возвращенный массив начинается с N-ой компоненты вектора-результата\r\n  list_of_comrades = (spy_dat[N], …, spy_dat[M]);\r\n  \/\/ …\r\n}\r\n<\/code>\n<\/pre>\n<p>Векторы — это сила.<\/p>\n",
            "date_published": "2020-09-16T18:29:33+03:00",
            "date_modified": "2020-09-16T18:29:20+03:00",
            "_date_published_rfc2822": "Wed, 16 Sep 2020 18:29:33 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "391",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "385",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/priemy-veb-programmirovaniya-razreshit-apachu-snachala-iskat-fay\/",
            "title": "Приемы веб-программирования. Разрешить Апачу сначала искать файлы в текущем каталоге",
            "content_html": "<p>Памятка тем, кто (до сих пор) руками пишет веб-движки на ПХП.<\/p>\n<p>У вас есть два файла с одинаковым названием ’konstituciya.php’ в текущем и каком-то системном каталоге. Файл в системном каталоге делает основную работу, например, выводит перечень статей конституции. Файл в текущем каталоге устанавливает локальные настройки, например, вносит в конституцию поправки, а потом вызывает файл из системного каталога. Чтобы поправки вступили в силу, необходимо, чтобы первым был вызван файл из текущего каталога. Вот так:<\/p>\n<blockquote>\n<p>konstituciya.php → .\/system\/konstituciya.php<\/p>\n<\/blockquote>\n<p>Чтобы установить такую последовательность вызовов, в .htaccess в списке путей первой поставьте точку, а потом перечислите прочие каталоги:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">php_value include_path &quot;.:\/home\/system&quot;<\/code><\/pre><p>Тогда код выполнится правильно:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Сначала вызовет файл из текущего каталога с поправками, а потом системный файл с основными законами\r\n   include_once &quot;konstituciya.php&quot;;<\/code><\/pre><p>Удачи.<\/p>\n",
            "date_published": "2020-06-10T16:13:07+03:00",
            "date_modified": "2020-06-11T14:57:12+03:00",
            "_date_published_rfc2822": "Wed, 10 Jun 2020 16:13:07 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "385",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "352",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/priemy-programmirovaniya-zalit-fayly-na-server\/",
            "title": "Приемы программирования. Залить файлы на сервер",
            "content_html": "<p>Облачные сервисы предлагают загрузить файлы на виртуальный диск при помощью интерфейса. Тащишь группу файлов, бросаешь в окно и они понемногу загружаются, а сервис выдает красивые прогресс-бары. При этом внутри кипит работа: сервис проверяет формат и размер файлов, следит за устойчивой передачей и рисует прогресс-бары, по завершению выдает сообщения, заносит данные в базу данных и размещает файлы в надежном месте.<\/p>\n<p>Такой сценарий нужен, когда виртуальным диском пользуются десятки пользователей. А для тестирования небольших проектов, когда группа пользователей ограничена двумя-тремя персонами, рекомендую закачивать файлы в выделенный каталог сервера. По Эс-Эс-Аш или ФТП, например. После, специальный скрипт сканирует каталог, обрабатывает файлы, запоминает метаданные в таблицах и реализует дальнейший интерфейс.<\/p>\n<p>Именно так я тестирую «Фотосистематизатор».<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/fotosistema-screen-1.png\" width=\"800\" height=\"526\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Фотосистематизатор берет фотографии прямо из каталога, а пользователь закачивает их туда напрямую, без интерфейсных наворотов<\/div>\n<\/div>\n",
            "date_published": "2020-03-17T17:47:11+03:00",
            "date_modified": "2020-03-17T17:46:56+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/fotosistema-screen-1.png",
            "_date_published_rfc2822": "Tue, 17 Mar 2020 17:47:11 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "352",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/fotosistema-screen-1.png"
                ]
            }
        },
        {
            "id": "339",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/priemy-programmirovaniya-nenuzhny-fayl-s-kodom-srazu-ne-udalyayu\/",
            "title": "Приемы программирования. Ненужный файл с кодом не удаляю, а переименовываю",
            "content_html": "<p>Бывает, что файл с фрагментом кода уже не нужен. Например потому, что код из него переписан, усовершенствован и перенесен в другой файл. Тогда такой файл я сразу не удаляю, а приписываю к нему приставку <i>’del-’<\/i>.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/del-prefix.png\" width=\"228\" height=\"121\" alt=\"\" \/>\n<\/div>\n<p>После тестирую, нет ли ошибок и все ли работает правильно. Потом жду несколько дней и только после этого бесповоротно удаляю файл.<\/p>\n",
            "date_published": "2020-02-26T00:39:33+03:00",
            "date_modified": "2020-03-15T20:08:18+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/del-prefix.png",
            "_date_published_rfc2822": "Wed, 26 Feb 2020 00:39:33 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "339",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/del-prefix.png"
                ]
            }
        },
        {
            "id": "260",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/kak-bystro-zakommentirovat-bloki-koda\/",
            "title": "Как быстро закомментировать блоки кода",
            "content_html": "<p>Блок — это фрагмент кода заключенный в условный оператор или цикл.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">if (push_index &gt; 0 ) {\r\n  \/\/ Блок кода\r\n}\r\n\r\nfor (i=0; i &lt; row_of_areolae.length-1; i++) {\r\n  \/\/ Блок кода\r\n}\r\n\r\nwhile (level &lt; maximal_level) {\r\n  \/\/ Блок кода\r\n}<\/code><\/pre><p>Чтобы быстро исключить блок кода из потока программы, достаточно к условию дописать выражение «Ложь и».<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">if (false &amp;&amp; push_index &gt; 0 ) {\r\n  \/\/ Блок кода\r\n}\r\n\r\nfor (i=0; false &amp;&amp; i &lt; row_of_areolae.length-1; i++) {\r\n  \/\/ Блок кода\r\n}\r\n\r\nwhile (false &amp;&amp; level &lt; maximal_level) {\r\n  \/\/ Блок кода\r\n}<\/code><\/pre><p>Когда фрагмент кода не содержится в цикле или условном операторе, но его нужно то закомментировать, то оставить — принудительно заключаем его в блок. Потом меняем условие блока на «Истину» или «Ложь».<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Фрагмент выполняется\r\nif (true) {\r\n\tangle = g_sectors[i].fi[1] - ksi;\r\n\tk = new_areolae.length-2;\r\n\twhile ((k&gt;push_index) &amp;&amp; (angle&gt;=g_sectors[i].fi[0])) {\r\n\t\tnew_areolae[k][3] = angle;\r\n\t\tnew_areolae[k][0] = Math.cos(angle)*level_po;\r\n\t\tnew_areolae[k][1] = Math.sin(angle)*level_po;\r\n\t\t\/\/pivot_areola = new_areolae[k];\r\n\t\tangle -= ksi;\r\n\t\tk--;\t\t\t\t\t\r\n\t}\r\n}\r\n\r\n\/\/ Фрагмент не выполняется\r\nif (false) {\r\n\tangle = g_sectors[i].fi[1] - ksi;\r\n\tk = new_areolae.length-2;\r\n\twhile ((k&gt;push_index) &amp;&amp; (angle&gt;=g_sectors[i].fi[0])) {\r\n\t\tnew_areolae[k][3] = angle;\r\n\t\tnew_areolae[k][0] = Math.cos(angle)*level_po;\r\n\t\tnew_areolae[k][1] = Math.sin(angle)*level_po;\r\n\t\t\/\/pivot_areola = new_areolae[k];\r\n\t\tangle -= ksi;\r\n\t\tk--;\t\t\t\t\t\r\n\t}\r\n}<\/code><\/pre><p>Чтобы закомментировать тот же фрагмент кода, надо поставить символы комментария в его начале и конце.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/*\r\n\tangle = g_sectors[i].fi[1] - ksi;\r\n\tk = new_areolae.length-2;\r\n\twhile ((k&gt;push_index) &amp;&amp; (angle&gt;=g_sectors[i].fi[0])) {\r\n\t\tnew_areolae[k][3] = angle;\r\n\t\tnew_areolae[k][0] = Math.cos(angle)*level_po;\r\n\t\tnew_areolae[k][1] = Math.sin(angle)*level_po;\r\n\t\t\/\/pivot_areola = new_areolae[k];\r\n\t\tangle -= ksi;\r\n\t\tk--;\t\t\t\t\t\r\n\t}\r\n*\/<\/code><\/pre><p>Очевидно, что дописать true или false к условию быстрее и удобнее, чем окружить или освободить блок от символов комментария.<\/p>\n",
            "date_published": "2019-02-01T00:27:16+03:00",
            "date_modified": "2020-10-04T20:10:26+03:00",
            "_date_published_rfc2822": "Fri, 01 Feb 2019 00:27:16 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "260",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "169",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/bystro-tipografiruem-tekst-pered-pokazom-na-stranice\/",
            "title": "Быстро типографируем текст перед показом на странице",
            "content_html": "<p>Перед показом текста на странице его надо обработать по правилам типографики. Это может сделать «<a href=\"https:\/\/www.artlebedev.ru\/typograf\/\">Типограф<\/a>» Студии Лебедева, «<a href=\"https:\/\/github.com\/typograf\">Типограф<\/a>» Дениса Селезнева или свой движок.<\/p>\n<p>Если текст написан и не меняется, то  его не надо все время типографить. Достаточно оттипографить один раз, сохранить результат и выводить его до тех пор, пока текст снова не изменится.<\/p>\n<p>Для этого использую такой механизм.<\/p>\n<ul>\n<li>Создаю исходный текст и сохраняют его в файле с расширением «in».<\/li>\n<li>В коде страницы вызываю функцию <nobr style=\"font-family: SegoeUI\">typo_file( ’имя_файла_с_текстом’ )<\/nobr>, которая выводит на страницу оттипографированый текст. Имя файла указывается <i>без расширения.<\/i><\/li>\n<\/ul>\n<p>Функция <nobr style=\"font-family: SegoeUI\">typo_file( $filename )<\/nobr> делает следующее:<\/p>\n<ol start=\"1\">\n<li>Ищет файл <nobr style=\"font-family: SegoeUI\">$filename<\/nobr> с расширением «in».<\/li>\n<li>Ищет файл с таким же именем и расширением «out».<\/li>\n<li>Сравнивает даты модификации файлов.<\/li>\n<li>Если «out» изменен позже, чем «in», возвращает содержимое «out».<\/li>\n<li>В противном случае типографит содержимое «in», записывает его в «out» и возвращает результат в основной поток.<\/li>\n<\/ol>\n<p>Код функции <nobr style=\"font-family: SegoeUI\"><b>typo_file<\/b><\/nobr> на ПХП:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?php\r\n\r\nfunction typo_file( $file_name, $input_extension = '.in', $output_extension = '.out' ) {\r\n   if ( !file_exists($file_name.$input_extension) )\r\n      return '';\r\n\r\n   $in_time  = filemtime($file_name.$input_extension);\r\n   $out_time = file_exists($file_name.$output_extension) ? filemtime($file_name.$output_extension) : $in_time-1;\r\n\r\n   if ($out_time &lt; $in_time) {\r\n      \/\/ типографим содержимое файла\r\n      $in_file  = file_get_contents( $file_name.$input_extension );\r\n      $out_file = typo( $in_file );\r\n      \/\/ записываем данные в новый файл\r\n      file_put_contents( $file_name.$output_extension, $out_file );\r\n   } else\r\n      $out_file = file_get_contents( $file_name.$output_extension );\r\n\r\n   return $out_file;\r\n}\r\n?&gt;<\/code><\/pre><p>Функция <nobr style=\"font-family: SegoeUI\"><b>typo<\/b><\/nobr> типографит текст удобным вам способом.<\/p>\n<p>Содержимое основной страницы выглядит так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;?php\r\n\/\/ …\r\n\r\necho typo_file( ‘page_content’ );\r\n\r\n\/\/ …\r\n?&gt;<\/code><\/pre><p>Вместо файла с результатом, можно использовать базу данных. В нее заносить оттипографированный текст и время последнего изменения. Ключ для доступа к записи — имя файла.<\/p>\n",
            "date_published": "2017-10-24T00:31:06+03:00",
            "date_modified": "2020-10-04T20:09:30+03:00",
            "_date_published_rfc2822": "Tue, 24 Oct 2017 00:31:06 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/antonlyakh.ru\/blog\/all\/bystro-tipografiruem-tekst-pered-pokazom-na-stranice\/",
            "_e2_data": {
                "is_favourite": true,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}