From 27660d29037ec6719a9521ff177f6f85075a0789 Mon Sep 17 00:00:00 2001 From: yggverse Date: Mon, 8 Apr 2024 08:24:14 +0300 Subject: [PATCH] add gemlog news --- ...dokuwiki-satellite-for-gemini-protocol.gmi | 60 +++++ news/index.gmi | 12 + news/release-gemini-php-0.1.0.gmi | 219 ++++++++++++++++++ news/release-gemini-php-0.2.0.gmi | 26 +++ news/release-gemini-php-0.3.0.gmi | 55 +++++ news/release-gemini-php-0.4.0.gmi | 36 +++ news/release-gemini-php-0.4.1.gmi | 14 ++ news/release-gemini-php-0.5.0.gmi | 36 +++ news/release-gemini-php-0.6.0.gmi | 28 +++ news/release-gemini-php-0.7.0.gmi | 35 +++ news/yo-search-for-gemini-protocol.gmi | 19 ++ 11 files changed, 540 insertions(+) create mode 100644 news/bdoku-dokuwiki-satellite-for-gemini-protocol.gmi create mode 100644 news/index.gmi create mode 100644 news/release-gemini-php-0.1.0.gmi create mode 100644 news/release-gemini-php-0.2.0.gmi create mode 100644 news/release-gemini-php-0.3.0.gmi create mode 100644 news/release-gemini-php-0.4.0.gmi create mode 100644 news/release-gemini-php-0.4.1.gmi create mode 100644 news/release-gemini-php-0.5.0.gmi create mode 100644 news/release-gemini-php-0.6.0.gmi create mode 100644 news/release-gemini-php-0.7.0.gmi create mode 100644 news/yo-search-for-gemini-protocol.gmi diff --git a/news/bdoku-dokuwiki-satellite-for-gemini-protocol.gmi b/news/bdoku-dokuwiki-satellite-for-gemini-protocol.gmi new file mode 100644 index 0000000..c1d42c5 --- /dev/null +++ b/news/bdoku-dokuwiki-satellite-for-gemini-protocol.gmi @@ -0,0 +1,60 @@ +# β-Doku is DokuWiki Satellite for Gemini Protocol + +Allows to launch read-only DokuWiki proxy server + +It is based on titan-II server, gemini-php to parse DokuWiki data folder, cache-php to save compiled pages in memory and Manticore for full-text search. + +## Examples + +=> gemini://betahowto.duckdns.org Clearnet instance of Yggdrasil Wiki (http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]) +=> gemini://[301:23b4:991a:634d::b] Yggdrasil mirror +=> gemini://betahowto.ygg Alfis DNS alias + +## Install + +``` +wget https://repo.manticoresearch.com/manticore-repo.noarch.deb +dpkg -i manticore-repo.noarch.deb +apt update +apt install git composer memcached manticore manticore-extra php-fpm php-memcached php-mysql php-mbstring +git clone https://github.com/YGGverse/bdoku.git +cd bdoku +composer update +``` + +## Setup + +``` +cd bdoku +mkdir host/127.0.0.1 +cp example/config.json host/127.0.0.1/config.json +cd host/127.0.0.1 +openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 365 -nodes -subj "/CN=127.0.0.1" +``` + +## Launch + +Before launch the server, copy or create alias of path/to/dokuwiki/data folder to bdoku/host/127.0.0.1 on example above. + +On every start, previous memory cache will be cleaned and new search index created. +After data folder update, you need just to restart your server with systemd or another process manager. + +When launching with systemd, just make sure that manticore server already running: + +``` +[Unit] +Wants=manticore.service +After=manticore.service +... +``` + +Then +``` +php src/server.php 127.0.0.1 +``` + +Open gemini://127.0.0.1 in your favorite Gemini browser! + +## Links + +=> https://github.com/YGGverse/bdoku β-Doku on GitHub \ No newline at end of file diff --git a/news/index.gmi b/news/index.gmi new file mode 100644 index 0000000..d9ee8e1 --- /dev/null +++ b/news/index.gmi @@ -0,0 +1,12 @@ +# YGGverse - News + +=> release-gemini-php-0.7.0.gmi 2024-04-07 Release gemini-php 0.7.0 +=> release-gemini-php-0.6.0.gmi 2024-04-06 Release gemini-php 0.6.0 +=> release-gemini-php-0.5.0.gmi 2024-04-05 Release gemini-php 0.5.0 +=> release-gemini-php-0.4.1.gmi 2024-04-05 Release gemini-php 0.4.1 +=> release-gemini-php-0.4.0.gmi 2024-04-03 Release gemini-php 0.4.0 +=> yo-search-for-gemini-protocol.gmi 2024-04-03 Yo! search branch for Gemini Protocol +=> release-gemini-php-0.3.0.gmi 2024-04-03 Release gemini-php 0.3.0 +=> release-gemini-php-0.2.0.gmi 2024-04-02 Release gemini-php 0.2.0 +=> release-gemini-php-0.1.0.gmi 2024-04-02 Release gemini-php 0.1.0 +=> bdoku-dokuwiki-satellite-for-gemini-protocol.gmi 2024-01-30 β-Doku is DokuWiki Satellite for Gemini Protocol \ No newline at end of file diff --git a/news/release-gemini-php-0.1.0.gmi b/news/release-gemini-php-0.1.0.gmi new file mode 100644 index 0000000..e7354ac --- /dev/null +++ b/news/release-gemini-php-0.1.0.gmi @@ -0,0 +1,219 @@ +# Release gemini-php 0.1.0 + +Initial release dedicated to β-Doku project + +At this point, toolkit provides DokuWiki API for Gemini protocol + +## Example + +### Reader + +Read DokuWiki and convert to Gemini + +``` php +$reader = new \Yggverse\Gemini\Dokuwiki\Reader( + // optional regex rule set array +); +``` + +Get or change existing regex rule (or just skip by using build-in set) + +``` php +echo $reader->setRule( + '/subject/ui', + 'replacement' +); +``` + +Convert DokuWiki text to Gemini markup + +As wiki has lot of inline links, to make converted document well-readable, this method does not replace links with new line => macros, but uses inline context: Name ( URL ). + +This model useful with Reader::getLinks method, that for example appends all those related links to the document footer. + +If you don't like this implementation, feel free to change it by Reader::setRule method! + +``` php +echo $reader->toGemini( + file_get_contents( + '/host/data/pages/index.txt' + ) +); +``` + +Get document title + +``` php +$gemini = $reader->toGemini( + file_get_contents( + '/host/data/pages/index.txt' + ) +); + +echo $reader->getH1( + $gemini +); +``` + +Get document links + +``` php +$gemini = $reader->toGemini( + file_get_contents( + '/host/data/pages/index.txt' + ) +); + +echo $reader->getLinks( + $gemini +); +``` + +### Filesystem + +Provides methods for simple and secure interaction with DokuWiki file storage + +``` php +$filesystem = new \Yggverse\Gemini\Dokuwiki\Filesystem( + '/host/data' // storage location +); +``` + +Return simple array of all files in storage + +``` php +var_dump ( + $filesystem->getList( + 'hello:world' + ) +); +``` + +Return all files under the storage folder in tree format + +``` php +var_dump ( + $filesystem->getTree( + 'hello:world' + ) +); +``` + +Return pages under the given data directory + +``` php +var_dump ( + $filesystem->getPagePathsByPath( + // absolute path to target data directory (e.g. Filesystem::getDirectoryPathByUri) + ) +); +``` + +Return absolute path to stored page file + +``` php +var_dump ( + $filesystem->getPagePathByUri( + 'hello:world' + ) +); +``` + +Return page URI in dokuwiki:format + +``` php +var_dump ( + $filesystem->getPageUriByPath( + '/full/path/to/page.txt' + ) +); +``` + +Return absolute path to stored media file + +``` php +var_dump ( + $filesystem->getMediaPathByUri( + 'hello:world' + ) +); +``` + +Return file MIME if path match storage item + +``` php +var_dump ( + $filesystem->getMimeByPath( + '/full/path/to/page.txt' + ) +); +``` + +Return file content if path match storage item + +``` php +var_dump ( + $filesystem->getDataByPath( + '/full/path/to/page.txt' + ) +); +``` + +Check path exist and match storage item + +``` php +var_dump ( + $filesystem->isPath( + '/full/path/to/page.txt' + ) +); +``` + +### Helper + +Useful methods to minify controller codebase + +``` php +$helper = new \Yggverse\Gemini\Dokuwiki\Helper( + new \Yggverse\Gemini\Dokuwiki\Filesystem(), + new \Yggverse\Gemini\Dokuwiki\Reader() +); +``` + +Return simple array of children section links in Gemini format + +``` php +var_dump ( + $helper->getChildrenSectionLinksByUri( + 'hello:world' + ) +); +``` + +Return simple array of children page links in Gemini format + +``` php +var_dump ( + $helper->getChildrenPageLinksByUri( + 'hello:world' + ) +); +``` + +Return page link (that contain document name) in Gemini format + +``` php +var_dump ( + $helper->getPageLinkByPath( + $filesystem->getPagePathByUri( + 'hello:world' + ) + ) +); +``` + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.1.0 Download gemini-php 0.1.0 +=> https://github.com/YGGverse/gemini-php#dokuwiki API documentation +=> bdoku-dokuwiki-satellite-for-gemini-protocol.gmi β-Doku is DokuWiki Satellite for Gemini Protocol \ No newline at end of file diff --git a/news/release-gemini-php-0.2.0.gmi b/news/release-gemini-php-0.2.0.gmi new file mode 100644 index 0000000..34d4b47 --- /dev/null +++ b/news/release-gemini-php-0.2.0.gmi @@ -0,0 +1,26 @@ +# Release gemini-php 0.2.0 + +Completed Request / Response Client + +This API make TLS socket connection simpler for PHP apps based on Composer + +## Example + +``` php +$request = new \Yggverse\Gemini\Client\Request( + 'gemini://yggverse.cities.yesterweb.org:1965/index.gmi' +); + +$response = new \Yggverse\Gemini\Client\Response( + $request->getResponse() +); + +var_dump( + $response->getBody() +); +``` + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.2.0 Download gemini-php 0.2.0 +=> https://github.com/YGGverse/Yo/blob/gemini/src/cli/document/crawl.php Feature in Yo! Crawler branch for Gemini Protocol \ No newline at end of file diff --git a/news/release-gemini-php-0.3.0.gmi b/news/release-gemini-php-0.3.0.gmi new file mode 100644 index 0000000..f7f643b --- /dev/null +++ b/news/release-gemini-php-0.3.0.gmi @@ -0,0 +1,55 @@ +# Release gemini-php 0.3.0 + +Version 0.3.0 is here! + +Includes new classes for object-oriented work with gemtext (text/gemini) + +## Example + +``` php +$request = new \Yggverse\Gemini\Client\Request( + 'gemini://yggverse.cities.yesterweb.org' +); + +$response = new \Yggverse\Gemini\Client\Response( + $request->getResponse() +); + +$body = new \Yggverse\Gemini\Gemtext\Body( + $response->getBody() +); + +var_dump( + $body->getH2() +); + +foreach ($body->getLinks() as $line) +{ + $link = new \Yggverse\Gemini\Gemtext\Link( + $line + ); + + var_dump( + $link->getAddress() + ); + + var_dump( + $link->getAlt() + ); + + var_dump( + $link->getDate( + $timestamp // get unix time from this variable + ) + ); + + var_dump( + $timestamp + ); +} +``` + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.3.0 Download gemini-php 0.3.0 +=> https://github.com/YGGverse/gemini-php?tab=readme-ov-file#gemtext Gemtext API methods diff --git a/news/release-gemini-php-0.4.0.gmi b/news/release-gemini-php-0.4.0.gmi new file mode 100644 index 0000000..ca259f0 --- /dev/null +++ b/news/release-gemini-php-0.4.0.gmi @@ -0,0 +1,36 @@ +# Release gemini-php 0.4.0 + +Includes Body::findLinks method to grab clickable links from Gemtext + +## Example + +``` php +$request = new \Yggverse\Gemini\Client\Request( + 'gemini://yggverse.cities.yesterweb.org' +); + +$response = new \Yggverse\Gemini\Client\Response( + $request->getResponse() +); + +$body = new \Yggverse\Gemini\Gemtext\Body( + $response->getBody() +); + +var_dump( + $body->findLinks() // returns array of gemini links +); + +var_dump( + $body->findLinks('http') // returns array of http links +); +``` + +## Other + +* add response setters +* reduce default chunk size + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.4.0 Download gemini-php 0.4.0 \ No newline at end of file diff --git a/news/release-gemini-php-0.4.1.gmi b/news/release-gemini-php-0.4.1.gmi new file mode 100644 index 0000000..8a5436e --- /dev/null +++ b/news/release-gemini-php-0.4.1.gmi @@ -0,0 +1,14 @@ +# Release gemini-php 0.4.1 + +Correction release + +* allow nullable $length attribute +* remove chunk settings +* remove custom length value +* allow nullable response init +* fix macros name + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.4.1 Download gemini-php 0.4.1 +=> release-gemini-php-0.4.0.gmi Major version details \ No newline at end of file diff --git a/news/release-gemini-php-0.5.0.gmi b/news/release-gemini-php-0.5.0.gmi new file mode 100644 index 0000000..e007853 --- /dev/null +++ b/news/release-gemini-php-0.5.0.gmi @@ -0,0 +1,36 @@ +# Release gemini-php 0.5.0 + +Implemented Body::skipTags filter + +## Example + +``` php +$request = new \Yggverse\Gemini\Client\Request( + 'gemini://yggverse.cities.yesterweb.org' +); + +$response = new \Yggverse\Gemini\Client\Response( + $request->getResponse() +); + +$body = new \Yggverse\Gemini\Gemtext\Body( + $response->getBody() +); + +var_dump( + $body->skipTags() // strip all tags +); + +var_dump( + $body->skipTags( + [ // strip 1- and 2- level headers only + "##", + "###" + ] + ) +); +``` + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.5.0 Download gemini-php 0.5.0 \ No newline at end of file diff --git a/news/release-gemini-php-0.6.0.gmi b/news/release-gemini-php-0.6.0.gmi new file mode 100644 index 0000000..0e6424d --- /dev/null +++ b/news/release-gemini-php-0.6.0.gmi @@ -0,0 +1,28 @@ +# Release gemini-php 0.6.0 + +Add stream context options support + +## Example + +``` php +$request = new \Yggverse\Gemini\Client\Request( + 'gemini://yggverse.cities.yesterweb.org', + '68.133.1.71' // make direct request to the resolved host +); + +$request->setOptions( + [ + 'ssl' => + [ + 'peer_name' => 'yggverse.cities.yesterweb.org', // SNI + 'verify_peer' => false, + 'verify_peer_name' => false + ] + ] +); +``` + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.6.0 Download gemini-php 0.6.0 +=> https://github.com/YGGverse/net-php Network Resolver in PHP 8 \ No newline at end of file diff --git a/news/release-gemini-php-0.7.0.gmi b/news/release-gemini-php-0.7.0.gmi new file mode 100644 index 0000000..8428ec0 --- /dev/null +++ b/news/release-gemini-php-0.7.0.gmi @@ -0,0 +1,35 @@ +# Release gemini-php 0.7.0 + +Client::Request method now supports resolved host as optional argument! + +This feature useful to + +* reduce traffic usage +* increase page loading time by DNS results cache in memory +* alternative networks resolvers, isolated of system + +Update dedicated to the Yo! crawler project + +=> https://github.com/YGGverse/Yo/tree/gemini + +## Example + +``` php +$request = new \Yggverse\Gemini\Client\Request( + 'gemini://yggverse.cities.yesterweb.org:1965/index.gmi' // target URL + '68.133.1.71' // resolved IP, skip to use system-wide resolver +); +``` + +Alternatively, use setResolvedHost method of Request object before getResponse + +``` php +$request->setResolvedHost( + '68.133.1.71' +) +``` + +## Links + +=> https://github.com/YGGverse/gemini-php/releases/tag/0.7.0 Download gemini-php 0.7.0 +=> https://github.com/YGGverse/net-php Network Resolver in PHP 8 \ No newline at end of file diff --git a/news/yo-search-for-gemini-protocol.gmi b/news/yo-search-for-gemini-protocol.gmi new file mode 100644 index 0000000..cde43b4 --- /dev/null +++ b/news/yo-search-for-gemini-protocol.gmi @@ -0,0 +1,19 @@ +# Yo! search for Gemini Protocol + +Just created Yo! branch oriented for Gemini space + +=> https://github.com/YGGverse/Yo/tree/gemini + +At this moment under development, we hope to launch online crawler soon. + +Yo! is the super thin client-server crawler based on Manticore full-text search server. + +It written in PHP 8 / Composer, includes flexible settings, page history snaps, CLI tools for administration and simple JS-less UI (in original build) + +Probably, Gemini interface will be implemented using Titan-II server fork with better IPv6 support (as we're from Yggdrasil) + +=> https://github.com/YGGverse/titan-II + +Also, working on gemini-php library as the dependency: + +=> https://github.com/YGGverse/gemini-php \ No newline at end of file