{
    "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\/php-2\/",
    "feed_url": "https:\/\/antonlyakh.ru\/blog\/tags\/php-2\/json\/",
    "icon": false,
    "author": {
        "name": "Антон Лях",
        "url": "https:\/\/antonlyakh.ru\/blog\/",
        "avatar": false
    },
    "items": [
        {
            "id": "522",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/singulyarnoe-razlozhenie-matricy-na-php\/",
            "title": "Сингулярное разложение матрицы на ПХП",
            "content_html": "<p>Это заметка-напоминалка о пхп-библиотеках, позволяющих найти <i>сингулярное разложение матрицы (SVD — singular value decomposition)<\/i>.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/svd-!.png\" width=\"800\" height=\"230\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Из <i>Bellegarda (2005) <a href=\"https:\/\/doi.org\/10.1109\/MSP.2005.1511825\">Latent semantic mapping<\/a><\/i><\/div>\n<\/div>\n<hr \/>\n<p class=\"foot\">Наилучший вариант ↓<\/p>\n<p><b><a href=\"https:\/\/github.com\/vladkolodka\/SVD\/tree\/master\">PHP — Singular value decomposition SVD<\/a> Влада Колодки<\/b>.<br \/>\nБез зависимостей. Один файл <kbd>svd.php<\/kbd>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">include &quot;svd.php&quot;;\r\n\r\n\/\/ Конструирую матрицу\r\n$matrix = [['0.00', '0.00', '0.56', '0.56'. '0.00', '0.00', '1.00'], \r\n           ['0.49', '0.71', '0.00', '0.00'. '0.00', '0.71', '0.00'],\r\n           ['0.49', '0.71', '0.00', '0.00'. '0.00', '0.71', '0.00'],\r\n           ['0.72', '0.00', '0.00', '0.00'. '1.00', '0.00', '0.00'],\r\n           ['0.00', '0.00', '0.83', '0.83'. '0.00', '0.00', '0.00']];\r\n\r\n\/\/ Создаю класс для работы с матрицами\r\n$matrixClass = new Matrix;\r\n\r\n\/\/ Вычисляю SVD\r\n$USV = $matrixClass-&gt;svd($matrix);\r\n\r\n\/*\r\n Получаю ассоциативный массив, в котором M = USV.\r\n ВНИМАНИЕ: матрица V уже транспонирована.\r\n\r\n $matrices['U'] = $U;\r\n $matrices['S'] = $S;\r\n $matrices['W'] = $W;\r\n $matrices['V'] = $this-&gt;matrixTranspose($V);\r\n $matrices['Rank'] = $rank;\r\n $matrices['K'] = $k;\r\n*\/\r\n\r\n\/\/ Восстанавливаю исходную матрицу\r\n$input = $matrixClass-&gt;matrixMultiplication($USV['U'] ,$matrixClass-&gt;matrixMultiplication($USV['S'], $USV['V']));\r\n$input = $matrixClass-&gt;matrixRound($input);<\/code><\/pre><hr \/>\n<p class=\"foot\">Тяжеловесная библиотека ↓<\/p>\n<p><b><a href=\"https:\/\/github.com\/markrogoyski\/math-php\">MathPHP<\/a> — Powerful modern math library for PHP<\/b><br \/>\nОгромное число разнообразных функций. Установка через композер.<\/p>\n<p><a href=\"https:\/\/github.com\/markrogoyski\/math-php?tab=readme-ov-file#linear-algebra---matrix\">Полный перечень функций для работы с матрицами<\/a>.<\/p>\n<pre class=\"e2-text-code\"><code class=\"php\">use MathPHP\\LinearAlgebra\\Matrix;\r\nuse MathPHP\\LinearAlgebra\\MatrixFactory;\r\n\r\n\/\/ Create an m × n matrix from an array of arrays\r\n$matrix = [\r\n    [1, 2, 3],\r\n    [4, 5, 6],\r\n    [7, 8, 9],\r\n];\r\n$A = MatrixFactory::create($matrix);\r\n\r\n\/\/ Basic matrix data\r\n$array = $A-&gt;getMatrix();  \/\/ Original array of arrays\r\n$rows  = $A-&gt;getM();       \/\/ number of rows\r\n$cols  = $A-&gt;getN();       \/\/ number of columns\r\n\r\n\/\/ Matrix decompositions\r\n\/\/ LU decomposition\r\n$LU = $A-&gt;luDecomposition();\r\n$L  = $LU-&gt;L;  \/\/ lower triangular matrix\r\n$U  = $LU-&gt;U;  \/\/ upper triangular matrix\r\n$P  = $LU-P;   \/\/ permutation matrix\r\n\r\n\/\/ QR decomposition\r\n$QR = $A-&gt;qrDecomposition();\r\n$Q  = $QR-&gt;Q;  \/\/ orthogonal matrix\r\n$R  = $QR-&gt;R;  \/\/ upper triangular matrix\r\n\r\n\/\/ SVD (Singular Value Decomposition)\r\n$SVD = $A-&gt;svd();\r\n$U   = $A-&gt;U;  \/\/ m x m orthogonal matrix\r\n$V   = $A-&gt;V;  \/\/ n x n orthogonal matrix\r\n$S   = $A-&gt;S;  \/\/ m x n diagonal matrix of singular values\r\n$D   = $A-&gt;D;  \/\/ Vector of diagonal elements from S\r\n\r\n\/\/ Crout decomposition\r\n$LU = $A-&gt;croutDecomposition();\r\n$L  = $LU-&gt;L;  \/\/ lower triangular matrix\r\n$U  = $LU-&gt;U;  \/\/ normalized upper triangular matrix\r\n\r\n\/\/ Cholesky decomposition\r\n$LLᵀ = $A-&gt;choleskyDecomposition();\r\n$L   = $LLᵀ-&gt;L;   \/\/ lower triangular matrix\r\n$LT  = $LLᵀ-&gt;LT;  \/\/ transpose of lower triangular matrix\r\n\r\n\/\/ Eigenvalues and eigenvectors\r\n$eigenvalues   = $A-&gt;eigenvalues();   \/\/ array of eigenvalues\r\n$eigenvecetors = $A-&gt;eigenvectors();  \/\/ Matrix of eigenvectors\r\n\r\n\/\/ Solve a linear system of equations: Ax = b\r\n$b = new Vector(1, 2, 3);\r\n$x = $A-&gt;solve($b);<\/code><\/pre><hr \/>\n<p class=\"foot\">Библиотека для машинного обучения ↓<\/p>\n<p><b><a href=\"https:\/\/php-ml.readthedocs.io\/\">PHP-ML<\/a> — Machine learning library for PHP<\/b><br \/>\nНе по теме. Не понял, есть ли SVD.<\/p>\n",
            "date_published": "2025-06-10T16:04:46+03:00",
            "date_modified": "2025-06-10T16:12:51+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/svd-!.png",
            "_date_published_rfc2822": "Tue, 10 Jun 2025 16:04:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "522",
            "_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": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/svd-!.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": "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": "332",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/oshibki-programmirovaniya-1\/",
            "title": "Ошибки программирования. Забыл про юникод",
            "content_html": "<p>В коде повторяю одни и те же ошибки. Из-за них ничего не работает. Вот одна.<\/p>\n<p><i>При сравнении строк без учета регистра забыл, что у меня юникод.<\/i><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">if (strtolower($input_name) == $name) { ... }<\/code><\/pre><p>В результате функция strtolower вместо строчных русских букв выдала мусор. Сравнение не сработало. Процесс пошел по другой ветке. Пользователь в панике.<\/p>\n<p>А правильно использовать mb_strtolower.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">if (mb_strtolower($input_name) == $name) { ... }<\/code><\/pre><p>То же самое относиться и к другим функциям работы со строками. При юникоде и других кодировках использовать функции с префиксом <i>mb_<\/i>.<\/p>\n<p>Успехов.<\/p>\n",
            "date_published": "2020-02-21T12:39:20+03:00",
            "date_modified": "2020-03-15T20:08:45+03:00",
            "_date_published_rfc2822": "Fri, 21 Feb 2020 12:39:20 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "332",
            "_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": "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": []
            }
        },
        {
            "id": "134",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/vyrezaem-pixelnuyu-grafiku-iz-vectornogo-fayla\/",
            "title": "Вырезаем растровую графику из СВГ",
            "content_html": "<p>Столкнулся с задачей.<\/p>\n<p>Есть фотография большого размера (более 4 тыс. пикселей по ширине), на которой запечатлены части живых организмов.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/big-photo-of-ligophorus-haptor.jpg\" width=\"800\" height=\"600\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Большая фотография с прикрепительными структурами плоского паразитического червя<\/div>\n<\/div>\n<p>Организмы — это паразиты. Мизерные примитивные червячки из <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%BE%D0%BD%D0%BE%D0%B3%D0%B5%D0%BD%D0%B5%D0%B8\">класса Моногеней<\/a>, живущие на жабрах рыб. К жабрам они крепятся при помощи крючков.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/ligophorus-on-liza-gills.gif\" width=\"800\" height=\"185\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Рисунок головы кефали из работы <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%90%D0%BD%D0%B0%D1%82%D0%BE%D0%BB%D0%B8%D0%B9_%D0%9D%D0%B8%D0%BA%D0%BE%D0%BB%D0%B0%D0%B5%D0%B2%D0%B8%D1%87\">Световидова<\/a> (1964); рисунок жабр и сидящего на них паразита из работы <a href=\"http:\/\/journals.plos.org\/plosone\/article?id=10.1371\/journal.pone.0142365\">Лопеса-Беленгуэра с сотоварищами (2015)<\/a><\/div>\n<\/div>\n<p>Разные виды червячков внешне очень похожи. Они отличаются только формой прикрепительных крючков. У каждого таксономического рода уникальная форма крючков, но среди видов одного рода различия форм не столь очевидны. Чтобы их обнаружить, надо использовать методы морфометрического анализа.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/diversity-of-haptoral-hooks.png\" width=\"800\" height=\"507\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Метод главных компонент описывает разнообразие форм прикрепительных крючков разных родов моногеней. График из <a href=\"http:\/\/link.springer.com\/article\/10.1007\/s11230-011-9303-1\">статьи Вигнона (2011)<\/a><\/div>\n<\/div>\n<p>Для выполнения морфометрического анализа мы оцифровываем форму крючков. Загружаем фотографию в Инскейп, обводим кривыми и сохраняем результат в СВГ.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/digitized-hooks.gif\" width=\"800\" height=\"600\" alt=\"\" \/>\n<\/div>\n<p>Проблема в том, что готовый файл слишком много «весит». Исходный джипег размером 800 Кб, после обводки и сохранения в СВГ, толстеет до 12 Мб. В результате мне присылают мегатонные свгешки с внедренной графикой, которые надо разместить на сервере, а он не резиновый.<\/p>\n<p>Я не могу выбросить фото и загрузить на сервер только векторные кривые. Потому что контуры обрисовывают несколько человек, у каждого свои особенности рисования, они ошибаются, и результаты надо перепроверять. А фотография помогает проверить правильность построения контуров.<\/p>\n<p>Я несколько часов пытался уменьшить размер свг-файла с графикой без потери качества. Попробовал уменьшить в Инскейпе, не получилось — размеры фотографии и свг-файла остались огромными. Потом разобрался с форматом и нашел решение.<\/p>\n<p>Формат СВГ поддерживает два способа хранения изображений.<\/p>\n<p>Первый, когда графический файл внедрен в СВГ. Это не оптимальный способ, потому что  файл не сжат. Изображение состоит из последовательности символов в <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Base64\">позиционной системе счисления с основанием 64<\/a> (base64). Отсюда 800 Кб превращаются в 12 Мб.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/image-embeded-in-svg.png\" width=\"800\" height=\"287\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Фотография, внедренная внутрь свг-файла, занимает очень много места<\/div>\n<\/div>\n<p>Второй, когда СВГ хранит ссылку на внешний графический файл. Тогда СВГ содержит только <a href=\"http:\/\/antonlyakh.ru\/blog\/all\/koordinaty-krivyh-iz-svg-fayla\/\">описание кривых<\/a>, а фотография хранится отдельно. Размер свг-файла становится маленьким.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/antonlyakh.ru\/blog\/pictures\/svg-jpg.png\" width=\"800\" height=\"300\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Отделил «мух» от «котлет»<\/div>\n<\/div>\n<p>Второй вариант подошел.<\/p>\n<p>Если бы файлов было мало, я бы все переконвертировал вручную. Но файлов много — несколько сотен.<\/p>\n<p>В результате написал скрипт на ПХП. Он извлекает из СВГ фотографию, сохраняет ее в виде отдельного джипега и вставляет в СВГ ссылку на этот джипег. Джипег хранится локально и называется так же, как и свг-файл.<\/p>\n<p>Скрипт умный. Если в разных файлах используется одна и та же фотография, скрипт сохранит ее всего один раз и во всех файлах будет правильно на нее ссылаться. Это экономит место.<\/p>\n<p><a href=\"https:\/\/antonlyakh.ru\/done\/extract-images-from-svg\/\"><b>Скрипт для всех<\/b><\/a>.<\/p>\n<div style=\"border: 5px solid #00ab66; padding: 6px 8px; margin-left: -14px; border-radius: 2px; margin-top: 2em\"><p>Эта заметка описывает этап создания <a href=\"http:\/\/marineparasites.org\/\">виртуальной  коллекции паразитов рыб Мирового океана<\/a><\/p>\n<\/div>",
            "date_published": "2017-02-26T11:03:37+03:00",
            "date_modified": "2021-06-10T19:08:26+03:00",
            "image": "https:\/\/antonlyakh.ru\/blog\/pictures\/big-photo-of-ligophorus-haptor.jpg",
            "_date_published_rfc2822": "Sun, 26 Feb 2017 11:03:37 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/antonlyakh.ru\/blog\/all\/vyrezaem-pixelnuyu-grafiku-iz-vectornogo-fayla\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/big-photo-of-ligophorus-haptor.jpg",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/ligophorus-on-liza-gills.gif",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/diversity-of-haptoral-hooks.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/digitized-hooks.gif",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/image-embeded-in-svg.png",
                    "https:\/\/antonlyakh.ru\/blog\/pictures\/svg-jpg.png"
                ]
            }
        },
        {
            "id": "78",
            "url": "https:\/\/antonlyakh.ru\/blog\/all\/vypolnenie-er-skriptov-na-php\/",
            "title": "Выполнение R скриптов на ПХП",
            "content_html": "<p>Надо выполнить сложные статистические вычисления с помощью ПХП. Писать свои модули сложно, долго и бессмысленно. Придумал интегрироваться с <a href=\"https:\/\/www.r-project.org\/\">Эр<\/a>.<\/p>\n<p><a href=\"https:\/\/github.com\/kachkaev\/php-r\">Библиотека <b>php-r<\/b><\/a> Александра Качкаева позволяет выполнять скрипты Эр на ПХП. Примеры убедительны, но сам еще не пробовал.<\/p>\n<p>У кого есть опыт работы с php-r?<\/p>\n<p>С какими другими модулями для выполнения многомерных статистических расчетов на ПХП вы знакомы (дискриминантный анализ, кластерный анализ, ординационный анализ)?<\/p>\n",
            "date_published": "2016-09-01T17:22:55+03:00",
            "date_modified": "2023-11-22T15:13:50+03:00",
            "_date_published_rfc2822": "Thu, 01 Sep 2016 17:22:55 +0300",
            "_rss_guid_is_permalink": "true",
            "_rss_guid": "https:\/\/antonlyakh.ru\/blog\/all\/vypolnenie-er-skriptov-na-php\/",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3559,
    "_e2_ua_string": "E2 (v3559; Aegea)"
}