<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Parser 3 forum</title>
<link>http://www.parser.ru/forum/</link>
<description>Parser 3. Обсуждение.</description>
<generator>Parser 3.5.0 (compiled on x86_64-unknown-linux-gnu) (http://www.parser.ru/)</generator>
<webMaster>mailbox@parser.ru</webMaster>
<lastBuildDate>Fri, 17 Jul 2026 12:03:50 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<item>
<title>Ответ</title>
<description><![CDATA[Если судить по 3.4.4, то получается, что парсер остался тот же, что был на старом хостинге? Тогда при корректном переносе файлов сайта и базы данных все должно работать, как и раньше. Чудес не бывает, надо проверять корректность переноса. Есть конечно небольшая вероятность, что дело в изменении версии сервера БД, но очень небольшая. Если с файлами/БД сами проблем не найдете, логичнее обратиться к разработчику сайта, но если он недоступен - можете послать SSH доступ и URL сайта на mailbox@parser.ru, посмотрю в воскресенье.]]></description>
<author>moko</author>
<pubDate>Fri, 17 Jul 2026 12:03:50 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87162</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87162</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Здесь https://www.parser.ru/download/linux/ есть 3.4.6 смотрите внизу. В сравнении с 3.4.4 там не много изменилось — попробуйте]]></description>
<author>Spearance</author>
<pubDate>Fri, 17 Jul 2026 06:41:25 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87161</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87161</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Добрый день,
Parser/3.4.4 (compiled on x86_64-unknown-linux-gnu)

Где можно скачать старые версии парсера и как перейти на новую?]]></description>
<author>vasya99</author>
<pubDate>Fri, 17 Jul 2026 05:49:23 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87160</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87160</guid>
</item>
<item>
<title>Версия парсера?</title>
<description><![CDATA[Надо посмотреть, какая версия парсера была раньше (показывается при запуске parser3.cgi из консоли или обращении к /cgi-bin/parser3.cgi из браузера) и в идеале поставить такую же (можно попробовать просто взять бинарник парсера со старого хостинга).]]></description>
<author>moko</author>
<pubDate>Tue, 14 Jul 2026 13:44:02 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87159</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87159</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Спасибо за ответ, в коде проблем нет, у нас на VDS все работало, видимо проблемы с версией базы данных и движка, подскажите пожалуйста где можно скачать старые версии движка, сайт делали еще в конце 2000х.]]></description>
<author>vasya99</author>
<pubDate>Tue, 14 Jul 2026 11:32:51 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87158</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87158</guid>
</item>
<item>
<title>id=?</title>
<description><![CDATA[Проблема в вашем коде. Где-то не проставилось значение id в sql-запрос]]></description>
<author>[father_gorry]</author>
<pubDate>Tue, 14 Jul 2026 10:41:19 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87157</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87157</guid>
</item>
<item>
<title>Установка parser3 на хостинг</title>
<description><![CDATA[Добрый день, у нас есть сайт на parser3, раньше он был на VDS и работал

Решили перенести сайт на виртуальный хостинг
Мы распаковали файлы сайта и загрузили дамп базы данных в новую базу на хостинге 

В каталог cgi-bin был скачан parser. Мы перенесли и отредактировали файл auto.p таким образом, чтобы пути к файлам и базе данных соответствовали нашему хостингу.

Сайт проходит все проверки через _test.html:  который используется для диагностики https://www.parser.ru/utils/

Однако при входе на сам сайт мы получаем ошибку:
========
sele ct * from en_tree where lang=&apos;&apos;&apos;&apos; and cluster = &quot;&quot; and id= and (attrib=1 or attrib=0) and ( (begin is null) or (begin &lt;= now()) ) and ( (stop is null) or (stop &gt; now()) )

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near &apos;&apos;and (attrib=1 or attrib=0)
and
( (begin is null) or (begin &lt;= now()) ...&apos;&apos; at line 1
=======

Скажите пожалуйста как можно заставить работать сайт на хостинге?
Какие требования к базе данных по версии, есть ли требования к версии PHP или какие-то другие специфические требования?]]></description>
<author>vasya99</author>
<pubDate>Tue, 14 Jul 2026 09:10:01 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87156</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87156</guid>
</item>
<item>
<title>Класс для работы с телефонными номерами</title>
<description><![CDATA[<b>Parser3 Phone Number</b>

Сделал отдельный Parser-класс для разбора, нормализации, форматирования и валидации телефонных номеров разных стран.

Git: <a href="https://github.com/mryasov-als/parser3-phone-number">mryasov-als/parser3-phone-number</a>

<b>Что умеет</b>

- принимает любую строку с номером: пробелы, скобки, дефисы, плюс;
- нормализует номер в E.164;
- возвращает страну, country calling code, национальную часть, international/national формат;
- определяет тип номера: MOBILE, FIXED_LINE, TOLL_FREE и т.п.;
- умеет работать без defaultCountry, если страна определяется однозначно;
- если номер подходит нескольким странам, возвращает валидный результат с предупреждением ambiguous_country;
- runtime полностью на Parser3: без JS, Node.js, HTTP API и shell-команд при разборе.

<b>Пример использования</b>

<pre>
@USE
PhoneNumber.p

$phone[^PhoneNumber:parse[9990000000][
	$.defaultCountry[ru]
]]
</pre>

Можно создать экземпляр с настройками по умолчанию:

<pre>
$PhoneParser[^PhoneNumber::create[
	$.defaultCountry[ru]
]]
$phone[^PhoneParser.parse[9990000000]]
</pre>

<b>Пример результата</b>

<pre>
$phone[
	$.ok(true)
	$.valid(true)
	$.possible(true)
	$.ambiguous(false)
	$.warning[]
	$.country[ru]
	$.countryCallingCode[7]
	$.e164[+79990000000]
	$.digits[79990000000]
	$.nationalDigits[9990000000]
	$.international[+7 999 000 00-00]
	$.national[8 (999) 000-00-00]
	$.type[MOBILE]
	$.error[]
	$.candidates[^table::create{country
	}]
]
</pre>

<b>Неоднозначный пример без defaultCountry</b>

<pre>
$phone[^PhoneNumber:parse[8 800 555-55-50]]
</pre>

Такой номер валиден, но без страны неоднозначен:

<pre>
$phone[
	$.ok(true)
	$.valid(true)
	$.possible(true)
	$.ambiguous(true)
	$.warning[ambiguous_country]
	$.country[]
	$.countryCallingCode[375]
	$.e164[+3758005555550]
	$.digits[3758005555550]
	$.nationalDigits[8005555550]
	$.international[+375 800 555 5550]
	$.national[8 800 555 5550]
	$.type[TOLL_FREE]
	$.error[]
	$.candidates[^table::create{country
by
de
id
kz
lu
ru}]
]
</pre>

Если нужен именно российский вариант, нужно передать defaultCountry[ru].

<b>Данные</b>

Справочник генерируется из metadata libphonenumber-js / Google libphonenumber и сохраняется сразу в Parser3-файл PhoneNumberMetadata.p. В runtime ничего внешнего не вызывается.

В репозитории есть тесты и fixture-примеры по странам.]]></description>
<author>[mryasov]</author>
<pubDate>Mon, 29 Jun 2026 17:00:07 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87153</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87153</guid>
</item>
<item>
<title>скилл Parser 3 для ИИ-агентов</title>
<description><![CDATA[https://github.com/artlebedev/parser3-skills/

Наш разработчик Артем Галоян сделал скилл Parser 3 для ИИ-агентов. Работает с Claude Code и Codex, чтобы они лучше понимали язык при написании и проверке кода. Инструкции по установке и использованию в README.]]></description>
<author>moko</author>
<pubDate>Fri, 19 Jun 2026 01:16:46 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87152</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87152</guid>
</item>
<item>
<title>наверное рано</title>
<description><![CDATA[если файлом.
предполагается еще обновить.
если ссылкой на https://github.com/mryasov-als/parser3-intellij-plugin/releases/latest то можно]]></description>
<author>[mryasov]</author>
<pubDate>Fri, 08 May 2026 13:39:05 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87150</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87150</guid>
</item>
<item>
<title>Cool</title>
<description><![CDATA[На https://www.parser.ru/utils/ еще рано добавлять или уже можно? :)]]></description>
<author>moko</author>
<pubDate>Fri, 08 May 2026 11:30:00 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87149</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87149</guid>
</item>
<item>
<title>Плагин Parser3 для IntelliJ IDEA 2026.1</title>
<description><![CDATA[99% кода написано ИИ.

Скачать ZIP для установки: https://github.com/mryasov-als/parser3-intellij-plugin/releases/tag/v0.7.39

Видео с установкой и кратким обзором возможностей: https://disk.yandex.ru/i/wuDDEb5vGbZ3JQ]]></description>
<author>[mryasov]</author>
<pubDate>Fri, 08 May 2026 08:08:19 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87148</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87148</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[xdoc@yandex.ru]]></description>
<author>xdoc</author>
<pubDate>Tue, 05 May 2026 13:40:38 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87147</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87147</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Оставьте контакты, пожалуйста]]></description>
<pubDate>Tue, 05 May 2026 10:43:56 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87146</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87146</guid>
</item>
<item>
<title>Требуется разработчик на Parser</title>
<description><![CDATA[Работа над разработкой helpdesk. Оплачиваемая.]]></description>
<author>xdoc</author>
<pubDate>Tue, 05 May 2026 04:40:35 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87145</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87145</guid>
</item>
<item>
<title>Еще была мысль HTML преобразовывать XSL-ем</title>
<description><![CDATA[Но как всегда упираемся в невалидный HTML, отсутствие `/&gt;` в одиночных тегах, т.е. сперва нужно нормализовывать HTML до XHTML, чтобы он хотя бы не падал.

Итак уже пришлось таблицу мнемоников для реплейса подготовить, чтобы они в Word нормально отображались.]]></description>
<author>Spearance</author>
<pubDate>Fri, 24 Apr 2026 11:47:56 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87124</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87124</guid>
</item>
<item>
<title>Это совсем хорошо, подсмотрю как другие делали</title>
<description><![CDATA[Потому что базовое понятно и без чужих библиотек. Непонятно как организовать стили общие <pre>styles.xml</pre> и инлайновые внутри <pre>document.xml</pre> как сделать их слияние и прочую оформительскую чепуху. А заодно и потестировать, может Parser окажется не так уж плох.

Опять же класс в копилку примеров и на GitHub будет не лишним :)]]></description>
<author>Spearance</author>
<pubDate>Fri, 24 Apr 2026 11:39:44 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87123</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87123</guid>
</item>
<item>
<title>html4docx сделан поверх python-docx…</title>
<description><![CDATA[https://python-docx.readthedocs.io/en/latest/index.html

Вокруг которой можно построить что угодно своё.

Я для эксельек сделал миниязык на джисоне и уже из него формирю эксельку из sql-запросов.]]></description>
<author>Sumo</author>
<pubDate>Fri, 24 Apr 2026 10:56:07 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87122</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87122</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Формулу работоспособности на разных офисах я практически вычислил (ну или кажется что так). По крайней мере не лагает и +/- везде одинаково.

Почему хочется именно самостоятельно генерить? Появляется определенный контроль над происходящим, не просто сунул HTML-ку и он как-то перевел. Хочется получать ожидаемый результат. Особенно это важно, когда делаешь это под ГОСТ, где от этого зависит аккредитация компании.

Согласен, большие документы будет непросто парсить, но документы на десяток страниц — вполне себе.

p.s. спасибо за ссылки, посмотрю, очень интересно]]></description>
<author>Spearance</author>
<pubDate>Fri, 24 Apr 2026 10:07:45 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87121</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87121</guid>
</item>
<item>
<title>Можно глянуть в сторону Питона…</title>
<description><![CDATA[Например, взять https://github.com/dfop02/html4docx и если он не подходит на 100% форкнуть и допилить как нужно.

На Парсере это почти бесполезно делать — на больших и сложных документах производительность будет плохой, да и отлаживать совместимость с офисными пакетами замучаешься самостоятельно.

Я генерирую только эксельки и использую питоновский https://xlsxwriter.readthedocs.io/. Причем либа эта есть еще и для Си и Раста.]]></description>
<author>Sumo</author>
<pubDate>Fri, 24 Apr 2026 09:18:12 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87120</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87120</guid>
</item>
<item>
<title>Про OpenXML или .docx и .xlsx</title>
<description><![CDATA[Пока вопрос на уровне дискуссии.

Есть необходимость делать .docx и .xslt в работе. Причем они должны быть четко сверстаны по ГОСТ, чтобы на печати было один в один.

Сразу оговорюсь, pdf не подходит, это было бы слишком просто.

Если вы решаете подобные задачи, чем пользуетесь?

Пишу сейчас свой OpenXML класс для Parser, скачал спеку в 3 томах, на 6+ тысяч страниц (которая, кстати, нифига не соответствует реальному положению вещей).

Какая задача:
- собирать docx из ( текст | html | markdown );
- иметь возможность легко настраивать стили а-ля css;
— собирать xslt из итерируемых данных;
— докидывать шапки таблиц, оформление.

Что есть:
— собирается docx: текст полностью, html, markdown на уровне заголовков, абзацев.

Понимаю что работа сумасшедшая и возможно, кроме меня никому не нужная, но вдруг.]]></description>
<author>Spearance</author>
<pubDate>Fri, 24 Apr 2026 07:29:34 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87119</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87119</guid>
</item>
<item>
<title>Можем. Уже пилим и много чего запилили - только пока не публиковали широкой общественности. Возможно даже и разорвем :)</title>
<description><![CDATA[Есть уже даже несколько проектов в продакшене. Анти-битрикс в действии - по скорости работы и гибкости битрикс и рядом не стоял. Да и по скорости кодинга (даже скорее конфигурирования, а не программирования) бекенд очень быстро делается.]]></description>
<author>sergei v.2</author>
<pubDate>Fri, 27 Mar 2026 13:56:04 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87118</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87118</guid>
</item>
<item>
<title>В реестре российского ПО полно CMS…</title>
<description><![CDATA[https://reestr.digital.gov.ru/search/?q=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%BE%D0%BC

Можете запилить свою и разорвать рынок. Пусть Битрикс рыдает.]]></description>
<author>Sumo</author>
<pubDate>Tue, 24 Mar 2026 17:45:38 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87117</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87117</guid>
</item>
<item>
<title>CMS</title>
<description><![CDATA[Здравствуйте! Whatsapp отъехал Телега на подходе, с 31.03.2026 отъедет из РФ cPanel так глядишь и CMSки полетят. Parser3 не планирует свою CMS для сайтов?]]></description>
<author>[Серж]</author>
<pubDate>Tue, 24 Mar 2026 07:26:50 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87116</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87116</guid>
</item>
<item>
<title>Спасибо</title>
<description><![CDATA[Добавил ссылку на https://www.parser.ru/docs/]]></description>
<author>moko</author>
<pubDate>Fri, 20 Mar 2026 14:59:16 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87115</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87115</guid>
</item>
<item>
<title>там в конце про sql syntax error (-)</title>
<author>AK666</author>
<pubDate>Wed, 18 Mar 2026 02:00:05 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87114</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87114</guid>
</item>
<item>
<title>Ну так добавьте try и запишите например в файл, чтобы не обрезалось</title>
<description><![CDATA[Но суть примерно понятна, произошло исключение при INSERT INTO log_exception]]></description>
<author>moko</author>
<pubDate>Wed, 18 Mar 2026 01:58:35 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87113</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87113</guid>
</item>
<item>
<title>никагда такого не бьіло и вот - опять:</title>
<description><![CDATA[пробую сохранять exeption в базу:

<pre> $lMessage[EXCEPTION: ^if(def $aMessage){${aMessage}^#0A}^if(def $lException ){^json:string[$lException]}^if($lStack){^#0AStack:^#0A^lStack.menu{ $lStack.name : $lStack.file ($lStack.lineno) }[^#0A]}]
</pre>
строго по Вашему шаблону:

<pre>    ^connect[$lLogger.db]{
      $query[^apply-taint[sql][
        INSERT INTO $lLogger.table
          SET
            Session = &apos;${status:pid}/$status:tid&apos;
            ^if(def $lLevel){   ,Level = ^lLevel.int(-1) }
            ^if(def $lSection){ ,Section = _utf8&apos;^lSection.left(250)&apos;}
           ,Message = _utf8&apos;^taint[$lMessage]&apos;
           ,Host    = _utf8&apos;$env:REMOTE_ADDR ^if($env:HTTP_X_REAL_IP ne $env:REMOTE_ADDR || def $env:HTTP_CF_IPCOUNTRY){($env:HTTP_X_REAL_IP $env:HTTP_CF_IPCOUNTRY)} -&gt; $env:SERVER_ADDR&apos;
           ,Domain  = _utf8&apos;$env:HTTP_HOST / $env:SERVER_NAME&apos;
           ,URI     = _utf8&apos;$env:REQUEST_URI -&gt; $env:PATH_TRANSLATED&apos;
           ,ENV     = _utf8&apos;^taint[^json:string[$env:fields]]&apos;
           ,Forms   = ^if(def $form:fields){_utf8&apos;^taint[^json:string[$form:fields]]&apos;}{NULL}
      ]]
      ^void:sql{$query}
    }
</pre>

не пишет в базу, пишет в лог парсера:

<blockquote>Unhandled exception in eLogger.p(87:13): &apos;\n        INSERT INTO log_exception\n          SET\n            Session = &apos;58979/58979&apos;\n               ,Level = 65535 \n             ,Section = _utf8&apos;UNHANDLED&apos;\n           ,Message = _utf8&apos;EXCEPTION: type: sql.execute\\nsource: \\n        INSERT INTO log_exception\\n          SET\\n            Session = \\&apos;58979/58979\\&apos;\\n               ,Level = 65535 \\n             ,Section = _utf8\\&apos;db\\&apos;\\n           ,Message = _utf8\\&apos;EXCEPTION: type: sql.execute\\\\nsource: UPDATE email SET StatusID = 200 WHERE ID = 102970\\\\nfile: /ext.bounce.p\\\\nlineno: 72\\\\ncolno: 13\\\\ncomment: UPDATE command denied to user \\\\\\&apos;API\\\\\\&apos;@\\\\\\&apos;10.0.0.22\\\\\\&apos; for table \\\\\\&apos;email\\\\\\&apos;\\\\nhandled: 0\\&apos;\\n           ,Host    = _utf8\\&apos;10.0.0.60 ( ) -&gt; 10.0.0.22\\&apos;\\n           ,Domain  = _utf8\\&apos;t.local / t.local\\&apos;\\n           ,URI     = _utf8\\&apos;/?bounce -&gt; /EXT.local/index.p3h\\&apos;\\n          &quot;</blockquote>]]></description>
<author>AK666</author>
<pubDate>Wed, 18 Mar 2026 01:09:29 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87112</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87112</guid>
</item>
<item>
<title>Наконец-то народ допер до решения, которое мы использовали 20 лет назад. :) (-)</title>
<author>Sumo</author>
<pubDate>Thu, 12 Mar 2026 16:54:19 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87111</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87111</guid>
</item>
<item>
<title>Не хватает…</title>
<description><![CDATA[Парсер все равно работает в режиме запрос-ответ. Для вебсокетов и sse нужны долгоживущие процессы, которые могут отвечать через одно соединение на кучу запросов. Поэтому спокойно берем aiohttp для Питона или пишем на Го отдельный демон для чатов и всяких прокси во внешние сервисы. Пытаться все сделать на одном языке могут только программисты на Яве. :))))]]></description>
<author>Sumo</author>
<pubDate>Thu, 12 Mar 2026 16:53:00 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87110</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87110</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Теперь когда парсер умеет в демона - это возможно, или концептуально все равно чего-нибудь не хватает?]]></description>
<pubDate>Thu, 12 Mar 2026 11:06:40 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87109</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87109</guid>
</item>
<item>
<title>3.4.5 (-)</title>
<author>[Андрей]</author>
<pubDate>Wed, 11 Mar 2026 15:35:16 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87108</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87108</guid>
</item>
<item>
<title>Спасибо, увидел. В 3.4.6 не было. (-)</title>
<author>[Андрей]</author>
<pubDate>Wed, 11 Mar 2026 15:31:44 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87107</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87107</guid>
</item>
<item>
<title>Ответ</title>
<description><![CDATA[Честно говоря не очень хочется использовать готовое там где можно сделать свое. Сейчас к учетной системе сервера по работе с ТСД для склада, в итоге все равно прихожу к тому что лишний сервер это непонятные глюки, сюрпризы и зачастую невозможность получить тот функционал который нужен, сейчас переходим на другую программу которая не использует сторонние серверы и просто работает с файлами которые получает из моей системы. Да и не попался мне продукт который бы устроил в плане коммуникаций и тикетов, если у вас есть на слуху удачные решения прошу поделиться.]]></description>
<author>[Андрей]</author>
<pubDate>Wed, 11 Mar 2026 15:28:44 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87106</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87106</guid>
</item>
<item>
<title>Зоопарк - мейнстрим последних лет</title>
<description><![CDATA[Логичнее взять готовое решение для коммуникаций/тикетов и интегрировать его по API (которое написать на парсере). Да, получается некоторый зоопарк, но так теперь принято: не делать один монолит “на все”, а подключать специализированные сервисы там, где они есть.]]></description>
<author>moko</author>
<pubDate>Wed, 11 Mar 2026 13:11:45 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87105</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87105</guid>
</item>
<item>
<title>Сомневаюсь что готовые решения найдете</title>
<description><![CDATA[Но можно написать всё что угодно, в том числе и перечисленное вами.

Как принимать почту с помощью Parser есть в описании.]]></description>
<author>Spearance</author>
<pubDate>Wed, 11 Mar 2026 12:39:54 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87104</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87104</guid>
</item>
<item>
<title>Месенджер, email-клиент, crm на парсер. Возможно?</title>
<description><![CDATA[Уважаемые гуру и монстры парсера! Подскажите куда копать, на что обратить внимание и какие инструменты использовать. 
Существует написанная на парсере система куда входит товароучетная система типа 1с для работы офиса, терминал для работы менеджеров в магазине, b2b-портал для оптовиков и сайт для розничных покупателей. 
Есть необходимость прикрутить туда же внутренний мессенджер, он же тикет-система с задачами внутри компании, он же простейшая crm система для работы с клиентами. 
Из вопросов: как организовать получение и отправку почты (что-то типа простого email клиента), как организовать работу месенджера. Если кто-то решал подобные задачи буду признателен за любую информацию.]]></description>
<author>[Андрей]</author>
<pubDate>Wed, 11 Mar 2026 10:33:35 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87103</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87103</guid>
</item>
<item>
<title>Свежее прочтение документации Parser 3</title>
<description><![CDATA[Предыдущий пост был не просто так, он был и остается обособленной частью проекта о котором речь пойдет ниже.

Я решил переосмыслить документацию Parser и написать свой вариант, основываясь на формате Markdown. Ссылка на <a href="https://meenga.ru/doc/">документацию</a> (временная).

Что изменилось в документации по Parser?

<b>1. Структура</b>

Классы вынесены на первое место, потому что являются более актуальными в поиске.

Некоторые разделы переставлены, например, «Комментарии к частям выражения» переехал в ветку «Условных операторов».

Упрощено обращение через адресную строку браузера. Ссылки теперь выглядят так <i>/class/имя_класса/[method|field|option]/имя_метода_поля_или_опции/</i>, например:
<i>URL/class/table/method/count/</i>.

Единая структура для всех страниц с описанием.

Внутри страниц описания код с примерами подсвечивается и получил возможность копирования. Из-за этого пришлось отказаться от прямых ссылок из кода на перекрестные страницы, по крайней мере пока.

Все параметры внутри кода описаны через snake_case. Это сделано для удобства дальнейшего исправления после копирования в свой код.

<b>2. Поиск</b>

Вынесен на все страницы. В целом поиск теперь более практичное решение чем искать по структуре разделов.

Два поиска:
- по заголовкам
- по ключевым словам

<b>3. Горячие клавиши</b>

Поиск активируется горячей клавишей /. Стрелки вверх/вниз перемещения по результатам поиска, отмена поиска (ESC) и подтверждение (Enter).
Клавиша возврата к оглавлению раздела Alt + ← (Win) или ⌘ + ← (Мас) из страницы с описанием.

<b>4. Оформление</b>

Добавлена тёмная тема.
Птиц немного анимирован и добавлен в сноски.

<b>5. Версия для печати</b>

Любую страницу можно напечатать и она будет хорошо свёрстана. Ссылки и аббревиатуры отображаются текстом.

<b>Версия для смартфонов.</b>

<b>6. Прочее</b>

Улучшены семантика и типографика.

В примерах символы табуляции, например в таблицах, стоят правильными знаками и не требуют замены при копировании.

Добавлены аббревиатуры.

---

Сразу скажу что не стоит задача переплюнуть старую версию документации, они немного разные в силу излишней простоты Markdown, но эта же простота, с другой стороны, позволяет легко добавлять новые главы или создавать новые разделы, что может пригодиться в будущем.

Если этот формат приживется, готов предложить его для замены текущей документации на сайте <b>parser.ru</b>, но это должно решить сообщество.]]></description>
<author>Spearance</author>
<pubDate>Tue, 10 Mar 2026 16:05:20 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87102</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87102</guid>
</item>
<item>
<title>Документация Parser 3 в Markdown на GitHub</title>
<description><![CDATA[В продолжении тестирования класса <a href="https://github.com/Spearance/markdown-p3">makdown.p</a> решил замахнуться на святое и переверстал всю документацию Parser 3 в Markdown.

На сегодня — это практически копия исходной документации, лишь в некоторых местах совсем чуть-чуть подправлены описания, примеры, добавлены картинки в класс <b>image</b> и прочие мелочи.

Вся структура приведена к единому стилю, но со своими особенностями.

Маркдаун моего класса работает более логично (правильно, если хотите), поэтому некоторые конструкции не очень хорошо читаются в GitHub. Например ссылки внутри бэктиков GitHub обрабатывать не умеет, или не позволяет эскейпить сами бэктики.

Структура разделов документации изменилась, теперь классы вынесены на первое место, а всё остальное, наоборот, убрано подальше. Почему так случилось — напишу чуть позже, а сейчас, у всех есть возможность использовать документацию как опенсорс.

Ссылка на <a href="https://github.com/Spearance/Parser-3-Documentation/">документацию</a>.

Как всегда приветствуются ишьи, советы, комментарии.]]></description>
<author>Spearance</author>
<pubDate>Tue, 10 Mar 2026 05:02:15 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87101</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87101</guid>
</item>
<item>
<title>Размышления Страуструпа про защищенные члены…</title>
<description><![CDATA[Из очень хорошей книги «Дизайн и эволюция языка C++

~~~~~~~~~~~

13.9. Защищенные члены

Простая модель сокрытия данных на основе закрытых и открытых секций класса прекрасно работала в C++, пока он использовался в основном как язык для абстрагирования данных. Данная модель была вполне пригодна и для большого
класса задач, где наследование применялось для объектноориентированного программирования. Однако, когда речь заходит о классах, выясняется, что к любому
из них обращаются либо производные от него классы, либо прочие классы и функции. Функциичлены и дружественные функции, реализующие операции с классом, воздействуют на его объекты от имени одного из этих «пользователей». Механизм открытых и закрытых членов позволяет четко различать автора класса и т.п., но не дает возможности приспособить поведение к нуждам производных классов.

Вскоре после выхода версии 1.0 ко мне в кабинет заглянул Марк Линтон и умолял добавить третий уровень контроля доступа, который напрямую поддержал бы стиль, применяемый в библиотеке Interviews (см. раздел 8.4.1). Она разрабатывалась в Стэнфорде. Мы выбрали слово protected для обозначения членов класса, которые вели себя как «открытые» для прочих членов самого этого класса и производных от него, но как «закрытые» для всех остальных «пользователей».

Марк был главным создателем библиотеки Interviews. Основываясь на опыте
и примерах из настоящих программ, он убедительно доказывал, что защищенные
данные абсолютно необходимы при проектировании эффективной и расширяемой инструментальной библиотеки для X Windows. Альтернативой защищенным
данным, по его словам, были неприемлемо низкая эффективность, неуправляемое
распространение встраиваемых интерфейсных функций или глобальные данные.
Защищенные данные и, в более широком смысле, защищенные члены казались
меньшим злом. Кроме того, так называемые чистые языки вроде Smalltalk поддерживали именно такую – довольно слабую – защиту вместо более сильной защиты C++, основанной на концепции private. Мне самому приходилось писать код, в котором данные были объявлены как public просто для того, чтобы ими можно было пользоваться в производных классах. Видел я также и программы, в которых концепция friend использовалась неудачно и лишь ради того, чтобы дать доступ явно поименованным производным классам.

Это были веские аргументы, убедившие меня в том, что защищенные члены надо разрешить. Однако «веские аргументы» могут найтись для каждого мысли
мого языкового средства и для любого возможного его использования. Нам же
нужны факты. Не имея фактов и должным образом осознанного опыта, мы уподобляемся греческим философам, которые на протяжении нескольких веков велиблистательные дискуссии, но так и не смогли договориться, из каких же четырех (а может, пяти) основных субстанций состоит Вселенная.

Примерно через пять лет Марк запретил использование защищенных членов
данных в Interviews, поскольку они стали источником ошибок и серьезно усложнили сопровождение. В пленарном докладе Барбары Лисков (Barbara Liskov) на
конференции OOPSLA [Liskov, 1987] достаточно подробно описываются теоретические и практические проблемы, связанные с контролем доступа на основе
концепции protected. Мой опыт показывает, что всегда существовали альтернативы размещению информации в общем базовом классе, где она была бы доступной производным классам. Я сомневался по поводу protected еще и потому, что
при небрежном программировании общий базовый класс слишком уж легко использовать как разновидность глобальных данных.

К счастью, вас никто не принуждает пользоваться защищенными данными в C++. По умолчанию члены класса имеют атрибут private, и обычно такой выбор лучше. Замечу, впрочем, что ни одно из этих возражений не относится к защищенным членамфункциям. Убежден, что protected прекрасно подходит для специфицирования операций, которыми можно пользоваться в производных классах.

Защищенные члены появились в версии 1.2. Защищенные базовые классы были впервые описаны в ARM и включены в версию 2.1. Оглядываясь назад, я думаю, что protected– это тот случай, когда «веские аргументы» и мода сбили меня с пути истинного и заставили отказаться от своих убеждений ради новых
возможностей.

~~~~~~~~~~~

Дополню разработчика самого универсального языка программирования… Чем меньше мы мешаем программистам пользоваться нашими объектами, тем лучше. Чем больше я программирую тем чаще делаю все переменные публичными. :)]]></description>
<author>Sumo</author>
<pubDate>Wed, 04 Mar 2026 20:03:03 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87100</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87100</guid>
</item>
<item>
<title>Нет. Куча лишних вызовов функций для обрашения к полям</title>
<description><![CDATA[Да и вся эта возня с разделением на приватные и публичные поля и методы прекрасно решается на уровне соглашений об именах. Жесткий контроль не требуется нигде. А в языках с динамической типизацией и подавно.]]></description>
<author>Sumo</author>
<pubDate>Wed, 04 Mar 2026 19:23:20 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87099</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87099</guid>
</item>
<item>
<title>Написал тестовый пример для переменных private</title>
<description><![CDATA[<b>test.p:</b>
<pre>@CLASS
test

@OPTIONS
locals

@create[]

@getPrivate[]
	$result[$self.vars.private]

@GET_DEFAULT[sFieldName]
	^if(^self.privateVarNames.contains[$sFieldName]){
		^return[PRIVATE]
	}
	$result[$self.vars.[$sFieldName]]

@GET_vars[]
	^if(^reflection:uid[$self] ne ^reflection:uid[$caller.self]){
		^return[PRIVATE]
	}
	$result[
		$.public[777]
		$.private[666]
	]

@GET_privateVarNames[]
	^if(^reflection:uid[$self] ne ^reflection:uid[$caller.self]){
		^return[PRIVATE]
	}
	$result[
		$.private[]
	]</pre>

<b>index.html:</b>
<pre>	^use[test.p]
	$oTest[^test::create[]]
	public=$oTest.public&lt;br /&gt;
	private=$oTest.private&lt;br /&gt;
	private_by_method=^oTest.getPrivate[]&lt;br /&gt;
	vars=^json:string[$oTest.vars]&lt;br /&gt;
	privateVarNames=^json:string[$oTest.privateVarNames]</pre>

На выходе получаем:
<blockquote>public=777
private=PRIVATE
private_by_method=666
vars=&quot;PRIVATE&quot;
privateVarNames=&quot;PRIVATE&quot;</blockquote>

Наверняка что-то не учел.)
Есть ли смысл копать в этом же направлении?]]></description>
<author>virusav</author>
<pubDate>Wed, 04 Mar 2026 19:08:10 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87098</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87098</guid>
</item>
<item>
<title>Только на уровне соглашения…</title>
<description><![CDATA[Обычно делают как в Питоне — начинают приватные поля со знака подчеркивания. В коде прекрасно видно, если появляется обращение объект._член и это не self._член. Значит в этом месте делается какая-то ерунда.

В питоне отлично работает — https://docs.python.org/3/tutorial/classes.html#private-variables]]></description>
<author>Sumo</author>
<pubDate>Wed, 04 Mar 2026 18:12:32 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87097</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87097</guid>
</item>
<item>
<title>Разделение переменных и методов класса на public/protected/private</title>
<description><![CDATA[Добрый день.
Как я понял, сейчас все переменные и методы класса по умолчанию <b>public</b>.

Есть ли стандартный способ сделать переменную/метод <b>protected/private</b>?]]></description>
<author>virusav</author>
<pubDate>Wed, 04 Mar 2026 18:05:16 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87096</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87096</guid>
</item>
<item>
<title>В качестве обходного решения можно использовать разные пути для одного и того же файла.</title>
<description><![CDATA[Такое подключение уже использованного класса не поместит его в конец списка:
<pre>	^use[class1.p;
		$.replace(true)
	]</pre>

А такое - поместит:
<pre>	^use[../test/class1.p;
		$.replace(true)
	]</pre>

Если уж для оптимизации уже подключенные файлы заново не подключаются, то, может, стоит их подключать по абсолютному пути (от корня веб-пространства или диска)?
Или это тоже фича, чтобы можно было повторно использовать один и тот же файл?)]]></description>
<author>virusav</author>
<pubDate>Tue, 03 Mar 2026 17:21:39 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87095</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87095</guid>
</item>
<item>
<title>Такое возможно реализовать самостоятельно</title>
<description><![CDATA[В парсер это добавляться не будет, поскольку это лишние действия.]]></description>
<author>moko</author>
<pubDate>Tue, 03 Mar 2026 17:13:52 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87094</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87094</guid>
</item>
<item>
<title>В теории возможен вариант</title>
<description><![CDATA[Если был какой-нибудь хеш, который хранил бы соответствие <b>путь к файлу - название класса</b>, то при повторном подключении можно было бы взять название класса из этого хеша и сделать, как уже сейчас в ночных сборках.

<pre>$USED.$filename[название класса и, возможно, еще какие-нибудь параметры]</pre>

При повторном подключении не нужно загружать файл, т.к. название класса в нем будет прежним, поэтому просто взять из уже полученных ранее данных.

Такое возможно?]]></description>
<author>virusav</author>
<pubDate>Tue, 03 Mar 2026 17:09:59 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87093</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87093</guid>
</item>
<item>
<title>Так не получится</title>
<description><![CDATA[Если файл не грузится/не компилируется, то и класс не подключается, а значит и список классов не может поменяться.]]></description>
<author>moko</author>
<pubDate>Tue, 03 Mar 2026 15:59:45 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87092</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87092</guid>
</item>
<item>
<title>Повторная обработка не нужна</title>
<description><![CDATA[Но при этом нужно, чтобы название подключенного класса было последним в списке.)

Если переопределить <b>^use[]</b>, то будет повторное подключение, а это не нужно.]]></description>
<author>virusav</author>
<pubDate>Tue, 03 Mar 2026 14:00:23 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87091</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87091</guid>
</item>
<item>
<title>Это фича</title>
<description><![CDATA[В документации правда не очень однозначно написано:

<blockquote>попытки подключить уже подключенные ранее модули не приводят к повторному считыванию файлов с диска.</blockquote>

Если вам нужна повторная обработка - используйте ^process[], как в реализации ^use[] на парсере (но понятно без $USED):

https://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/tests/366.html?view=markup]]></description>
<author>moko</author>
<pubDate>Mon, 02 Mar 2026 19:38:59 GMT</pubDate>
<link>http://www.parser.ru/forum/?id=87090</link>
<guid isPermaLink="true">http://www.parser.ru/forum/?id=87090</guid>
</item>
</channel>
</rss>