<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>planetOzh</title>
	<atom:link href="https://planetozh.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://planetozh.com/blog</link>
	<description>Life, thoughts and code by Ozh</description>
	<lastBuildDate>Tue, 23 Jun 2026 09:10:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>Allowing weird characters in YOURLS short URLs</title>
		<link>https://planetozh.com/blog/2026/06/allowing-weird-characters-in-yourls-short-urls/</link>
					<comments>https://planetozh.com/blog/2026/06/allowing-weird-characters-in-yourls-short-urls/#respond</comments>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Tue, 23 Jun 2026 09:10:00 +0000</pubDate>
				<category><![CDATA[YOURLS]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3945</guid>

					<description><![CDATA[One of the most recurring support requests we get for YOURLS goes like this: &#34;How do I get a - (or a /, or a :) into my keywords?&#34; People want pretty customshort URLs like sho.rt/my-talk or sho.rt/v2:final, and by default YOURLS won&#39;t let them. The short answer is &#34;use the get_shorturl_charset filter.&#34; The long answer is that, depending on…]]></description>
										<content:encoded><![CDATA[<p>One of the most recurring support requests we get for YOURLS goes like this: &quot;How do I get a <tt>-</tt> (or a <tt>/</tt>, or a <tt>:</tt>) into my keywords?&quot; People want pretty customshort URLs like <tt>sho.rt/my-talk</tt> or <tt>sho.rt/v2:final</tt>, and by default YOURLS won&#39;t let them.</p>
<p>The short answer is &quot;use the <tt>get_shorturl_charset</tt> filter.&quot; The long answer is that, depending on the character, that filter is either the whole solution or just the start of one. Here&#39;s why, with the colon as the interesting case.</p>
<h2>The easy case: the hyphen</h2>
<p>YOURLS ships with a bundled core plugin for the hyphen, and it&#39;s trivial code: basically add <tt>-</tt> to the allowed character set.</p>
<div id="ig-sh-1" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">php</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="php" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">// Add hyphen to the allowed character set</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">yourls_add_filter( 'get_shorturl_charset', 'ozh_hyphen_in_charset' );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">// Unless we are crafting a random keyword</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">yourls_add_action( 'add_new_link_create_keyword', function() {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; yourls_remove_filter( 'get_shorturl_charset', 'ozh_hyphen_in_charset' );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">} );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">function ozh_hyphen_in_charset( $in ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; return $in . '-';</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">}</div></li>
</ol>	</div>

</div>

<p>So, a lot of people starting to build on this, to add any custom char. The thing is a bit more complicated.</p>
<h2>Then someone asks for a colon</h2>
<p>When YOURLS instantiates, amongst first things it evaluates the &quot;request&quot;, ie the <tt>abc</tt> part in <tt>sho.rt/abc</tt>.</p>
<p>One of the handy bookmarklets YOURLS has is the &quot;Prefix-n-Shorten&quot; mechanism: just prepend your YOURLS URL to a long URL and shorten it on the fly. So the request can be a full URL, such as <tt>sho.rt/https://longurl.com/</tt>. When abc is a non ambiguous request, now having a colon becomes ambiguous because it looks like a URL:</p>
<div id="ig-sh-2" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">php</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="php" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">$request = yourls_get_request();</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">// if request has a scheme : send to bookmarklet</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">if ( yourls_get_protocol( $keyword ) ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; // ... redirect to /admin/index.php?...</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; yourls_redirect( /* admin */, 302 );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; exit;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">}</div></li>
</ol>	</div>

</div>

<h2>The plugin to allow colon</h2>
<p>Because everything funnels through <tt>yourls_get_protocol()</tt>, and because that function is filterable (it ends with <tt>yourls_apply_filter( 'get_protocol', ... ))</tt>, one filter fixes the whole chain. The trick is to teach <tt>get_protocol</tt> to recognize our own keywords and refuse to treat their colon as a scheme.</p>
<div id="ig-sh-3" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">php</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="php" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">// Add the colon to the allowed short URL character set...</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">yourls_add_filter( 'get_shorturl_charset', 'ozh_colon_in_charset' );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">function ozh_colon_in_charset( $charset ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; return $charset . ':';</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">}</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">// ...unless we are crafting a random keyword, to keep auto-generated keywords colon-free</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">yourls_add_action( 'add_new_link_create_keyword', function() {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; yourls_remove_filter( 'get_shorturl_charset', 'ozh_colon_in_charset' );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">} );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">// Don't let a keyword that contains a colon be mistaken for a URI scheme</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">yourls_add_filter( 'get_protocol', 'ozh_colon_get_protocol', 10, 2 );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">function ozh_colon_get_protocol( $protocol, $url ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; // Nothing was detected as a protocol: leave as is</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; if ( $protocol === '' ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; &nbsp; &nbsp; return $protocol;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; }</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; // A genuine &quot;scheme://...&quot; URL (eg a bookmarklet target): leave as is</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; if ( str_contains( $protocol, '/' ) ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; &nbsp; &nbsp; return $protocol;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; }</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; // Here $protocol is a bare &quot;scheme:&quot; with no slashes. If the whole candidate</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; // string consists only of valid short URL charset characters, it's one of our</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; // keywords (eg &quot;foo:bar&quot;), not a URL: don't treat the colon as a scheme.</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; $pattern = yourls_make_regexp_pattern( yourls_get_shorturl_charset() );</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; if ( ! preg_match( '@[^' . $pattern . ']@', $url ) ) {</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; &nbsp; &nbsp; return '';</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; }</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; return $protocol;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">}</div></li>
</ol>	</div>

</div>

<p>The logic of the get_protocol filter, in plain English:</p>
<ul>
<li>No scheme detected? Leave it alone.</li>
<li>The detected scheme contains a slash (<tt>http://</tt>)? That&#39;s a real URL, leave it alone.</li>
<li>A bare scheme: with no slashes, and the entire candidate string is made only of charset characters? That&#39;s one of our keywords &#8211; return <tt>''</tt> so the colon stops being read as a scheme.</li>
</ul>
<p>Real URLs survive because they contain a <tt>/</tt>, a <tt>.</tt>, an <tt>@</tt>, or some other character outside the keyword charset, so they fail that last test and keep their protocol. The bookmarklet still works.</p>
<p>The colon plugin is available here if you want to drop it into <tt>user/plugins/</tt> and go: <a href="https://gist.github.com/ozh/ff7c454ce3fa9ce8ffeaba07f8324caa">Allow Colon in YOURLS short URL</a>.</p>
<h2>The one limitation</h2>
<p>If you try to shorten a URL whose entire string fits inside the keyword charset plus the colon &#8211; think <tt>tel:123</tt> or <tt>urn:isbn</tt> &#8211; the plugin will neutralize its scheme and treat it as a keyword. In practice this should not happen, as any realistic URL you&#39;d shorten contains a <tt>/</tt>, or a <tt>.</tt> somewhere, which puts it safely outside the charset. But it&#39;s worth knowing it&#39;s there.</p>
<h2>Bonus: which other characters will make tricky keywords?</h2>
<p>A few chars will be reinterpreted somewhere down the pipeline starting at <tt>yourls-loader.php</tt> in the root: <tt>?</tt>, <tt>+</tt> and <tt>/</tt> will be special cases to handle differently.</p>
<p>Some are modified, or destroyed by the browser, or at the HTTP layer before they reach YOURLS: <tt>#</tt>, spaces, <tt>\</tt>, <tt>%</tt>, so they should never be used at all in keywords.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://planetozh.com/blog/2026/06/allowing-weird-characters-in-yourls-short-urls/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>My favorite Git alias</title>
		<link>https://planetozh.com/blog/2026/06/my-favorite-git-alias/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 17:44:25 +0000</pubDate>
				<category><![CDATA[Git]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3934</guid>

					<description><![CDATA[My favorite git alias: gcm to git checkout main&#124;master, fetch, and pull &#60; View plain text &#62; bash # checkout to default branch gcm&#040;&#041; &#123; &#160; &#160; git fetch &#38;&#38; git checkout $&#040;git remote show origin &#124; sed -n '/HEAD branch/s/.*: //p'&#041; &#125; (Put this in your .bashrc or something)]]></description>
										<content:encoded><![CDATA[<p>My favorite <tt>git</tt> alias: <tt>gcm</tt> to <tt>git checkout main|master, fetch, and pull</tt></p>
<div id="ig-sh-4" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">bash</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="bash" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #666666;font-style: italic"># checkout to default branch</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">gcm<span style="color: #7a0874;font-weight: bold">&#040;</span><span style="color: #7a0874;font-weight: bold">&#041;</span> <span style="color: #7a0874;font-weight: bold">&#123;</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; <span style="color: #c20cb9;font-weight: bold">git fetch</span> <span style="color: #000000;font-weight: bold">&amp;&amp;</span> <span style="color: #c20cb9;font-weight: bold">git checkout</span> $<span style="color: #7a0874;font-weight: bold">&#040;</span><span style="color: #c20cb9;font-weight: bold">git remote</span> show origin <span style="color: #000000;font-weight: bold">|</span> <span style="color: #c20cb9;font-weight: bold">sed</span> <span style="color: #660033">-n</span> <span style="color: #ff0000">'/HEAD branch/s/.*: //p'</span><span style="color: #7a0874;font-weight: bold">&#041;</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #7a0874;font-weight: bold">&#125;</span></div></li>
</ol>	</div>

</div>

<p>(Put this in your <tt>.bashrc</tt> or something)</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Open PHP files in the right editor, automatically.</title>
		<link>https://planetozh.com/blog/2026/05/open-php-files-in-the-right-editor-automatically/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Sat, 30 May 2026 17:22:25 +0000</pubDate>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Geany]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PhpStorm]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3928</guid>

					<description><![CDATA[This is one of those cases when, viewing a file in your window manager, you see a .php file you want to quickly inspect. You double click on it, and&#8230; It quickly opens Geany, or your default quick file editor, but PHPStorm is already running right there&#8230; Or the opposite: you just want a quick peak for a single little…]]></description>
										<content:encoded><![CDATA[<p>This is one of those cases when, viewing a file in your window manager, you see a <tt>.php</tt> file you want to quickly inspect. You double click on it, and&#8230;</p>
<ul>
<li>It quickly opens Geany, or your default quick file editor, but PHPStorm is already running <em>right there</em>&#8230;</li>
<li>Or the opposite: you just want a quick peak for a single little file, but it slowly cold starts your 4 GB IDE :x</li>
</ul>
<p>What if your file manager just knew? That&#39;s the idea of the following bash script that acts as the default handler for <tt>.php</tt> files:</p>
<ul>
<li>PhpStorm is running? Open the file there, in the existing instance.</li>
<li>PhpStorm is not running? Open in Geany &#8211; fast, lightweight, no wait for a quick glance.</li>
</ul>
<h2>The script</h2>
<p>Drop this in <tt>~/.local/bin/open-php</tt>:</p>
<div id="ig-sh-5" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">bash</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="bash" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #666666;font-style: italic">#!/bin/bash</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #666666;font-style: italic"># Open .php files: use PhpStorm if running, otherwise Geany</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000000;font-weight: bold">if</span> pgrep <span style="color: #660033">-x</span> <span style="color: #ff0000">&quot;phpstorm&quot;</span> <span style="color: #000000;font-weight: bold">&gt;</span> <span style="color: #000000;font-weight: bold">/</span>dev<span style="color: #000000;font-weight: bold">/</span>null <span style="color: #000000;font-weight: bold">||</span> pgrep <span style="color: #660033">-f</span> <span style="color: #ff0000">&quot;phpstorm&quot;</span> <span style="color: #000000;font-weight: bold">&gt;</span> <span style="color: #000000;font-weight: bold">/</span>dev<span style="color: #000000;font-weight: bold">/</span>null; <span style="color: #000000;font-weight: bold">then</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; <span style="color: #666666;font-style: italic"># PhpStorm is running - open file in existing instance</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; phpstorm <span style="color: #ff0000">&quot;$@&quot;</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000000;font-weight: bold">else</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp; &nbsp; geany <span style="color: #ff0000">&quot;$@&quot;</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000000;font-weight: bold">fi</span></div></li>
</ol>	</div>

</div>

<p>Then <tt>chmod</tt> it <tt>+x</tt>. Also make sure obviously that your IDE and light editor binaries are in the path. To find the exact name of your IDE process, you can use <tt>pgrep -a -f [Pp]hp[Ss]torm</tt> for example.</p>
<h2>The setup</h2>
<p>Set <tt>open-php</tt> as the default application for <tt>.php</tt> files. Right-click any <tt>.php</tt> in your file manager, pick &quot;Open With Other Application&quot;, point to <tt>~/.local/bin/open-php</tt>, and set it as default.</p>
<p>Alternatively, at least if using Nemo (Linux Mint for instance), you can create <tt>~/.local/share/applications/open-php.desktop</tt> with the following:</p>
<div id="ig-sh-6" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">ini</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="ini" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000066;font-weight:bold"><span>&#091;</span>Desktop Entry<span>&#093;</span></span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000099">Name</span><span style="color: #000066;font-weight:bold">=</span><span style="color: #660066">Open PHP File</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000099">Exec</span><span style="color: #000066;font-weight:bold">=</span><span style="color: #660066">/home/YOUR_USERNAME/.local/bin/open-php %F</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000099">Type</span><span style="color: #000066;font-weight:bold">=</span><span style="color: #660066">Application</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000099">NoDisplay</span><span style="color: #000066;font-weight:bold">=</span><span style="color: #660066">true</span></div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top"><span style="color: #000099">MimeType</span><span style="color: #000066;font-weight:bold">=</span><span style="color: #660066">application/x-php</span><span style="color: #666666;font-style: italic">;text/x-php;</span></div></li>
</ol>	</div>

</div>

<p>Replace YOUR_USERNAME with your own user name, then register it as the new handler:</p>
<div id="ig-sh-7" class="syntax_hilite">

		<div class="toolbar">

		<div class="view-different-container">
						<a href="#" class="view-different">&lt; View <span>plain text</span> &gt;</a>
					</div>

		<div class="language-name">bash</div>

		
		<br clear="both">

	</div>
	
	<div class="code">
		<ol class="bash" style="font-family:monospace"><li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">update-desktop-database ~<span style="color: #000000;font-weight: bold">/</span>.local<span style="color: #000000;font-weight: bold">/</span>share<span style="color: #000000;font-weight: bold">/</span>applications</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">&nbsp;</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">xdg-mime default open-php.desktop application<span style="color: #000000;font-weight: bold">/</span>x-php</div></li>
<li style="font-weight: normal;vertical-align:top"><div style="font: normal normal 1em/1.2em monospace;margin:0;padding:0;background:none;vertical-align:top">xdg-mime default open-php.desktop text<span style="color: #000000;font-weight: bold">/</span>x-php</div></li>
</ol>	</div>

</div>

<p>From now on, double-clicking a PHP file does the right thing automatically. Heavy tooling when it&#39;s already warm, or the lightweight editor when it&#39;s not. Best of both worlds!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>YOURLS now speaks PostgreSQL</title>
		<link>https://planetozh.com/blog/2026/05/yourls-now-speaks-postgresql/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Sun, 17 May 2026 18:17:54 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[YOURLS]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3921</guid>

					<description><![CDATA[YOURLS is my cherished project: I&#39;m proud of it, and I&#39;m also clear-eyed about its limitations. For instance, PostgreSQL support has been one of the frequently requested features for at least six years. There have been a few YOURLS PostgreSQL forks that tried to address this, but keeping a fork in sync is quite a task and they didn&#39;t keep…]]></description>
										<content:encoded><![CDATA[<p>YOURLS is my cherished project: I&#39;m proud of it, and I&#39;m also clear-eyed about its limitations. For instance, <a href="https://www.postgresql.org/">PostgreSQL</a> support has been one of the frequently requested features for at least six years. There have been a few YOURLS PostgreSQL forks that tried to address this, but keeping a fork in sync is quite a task and they didn&#39;t keep up with YOURLS (albeit rather modest) development pace. Today I&#39;m happy to say: <strong>the wait is over</strong>.</p>
<p><img decoding="async" src="https://planetozh.com/blog/wp-content/uploads/2026/05/592502543-96e844c8-100e-4b56-9cd7-e256d0d2d458-300x90.png" alt="" width="300" height="90" class="aligncenter size-medium wp-image-3924" srcset="https://planetozh.com/blog/wp-content/uploads/2026/05/592502543-96e844c8-100e-4b56-9cd7-e256d0d2d458-300x90.png 300w, https://planetozh.com/blog/wp-content/uploads/2026/05/592502543-96e844c8-100e-4b56-9cd7-e256d0d2d458-768x230.png 768w, https://planetozh.com/blog/wp-content/uploads/2026/05/592502543-96e844c8-100e-4b56-9cd7-e256d0d2d458.png 913w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<h2>PostgreSQL support via plugin</h2>
<p>PostgreSQL support comes as a <a href="https://github.com/ozh/yourls-postgresql/">drop-in plugin</a> rather than a core feature: we like to keep YOURLS core light and let people add features only if they need it. This plugin intercepts database queries at runtime and translates MySQL to PostgreSQL syntax on the fly &#8211; backtick quoting, <tt>AUTO_INCREMENT</tt> ? <tt>SERIAL</tt>, <tt>RAND()</tt> ? <tt>RANDOM()</tt>, and so on. Obviously this is all transparent to the user and the application.</p>
<h2>What will work, what won&#39;t</h2>
<p>Everything core does, <em>ie</em> shortening URLs, tracking clicks, letting you add or edit short URLs, will work. The vast majority of existing YOURLS plugins will work. The drop-in plugin sits at the <a href="https://github.com/YOURLS/YOURLS/blob/c3fc8e2370d240403c17c2e4a70e1e234759a5b3/includes/Config/Init.php#L148">database layer</a> and catches everything that flows through it.</p>
<p>To make sure everything core works perfectly, I&#39;ve made sure YOURLS passes all its unit tests <a href="https://github.com/ozh/yourls-postgresql/actions/runs/25998559751">with the PostgreSQL plugin activated</a>, under 3 latest versions of PostgreSQL and latest PHP. This will be easy to check with all future YOURLS releases.</p>
<p>The edge cases would be plugins that execute raw MySQL-flavored SQL directly, bypassing <a href="https://yourls.org/docs/development/database-queries#the-ydb-object">YOURLS&#39; own database methods</a>, won&#39;t be translated. I haven&#39;t encountered such plugin in the wild but if you have made custom query code, that would be something to fix.</p>
<h2>Requirements</h2>
<p>You&#39;ll need YOURLS 1.10.4, which is coming soon-<em>ish</em> or the current <a href="https://github.com/YOURLS/YOURLS/archive/refs/heads/master.zip">master</a> branch (which is always stable and passing all unit tests). Drop in the plugin, configure your PostgreSQL DSN, and you&#39;re good to go. There is even a migration script to transfer everything from MySQL (or MariaDB) to PostgreSQL.</p>
<p>If you&#39;ve been waiting for this &#8211; and I know some of you have been waiting for a long time &#8211; it&#39;s finally here :)</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The most beautiful song known to man</title>
		<link>https://planetozh.com/blog/2026/05/the-most-beautiful-song-known-to-man/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Wed, 13 May 2026 18:30:21 +0000</pubDate>
				<category><![CDATA[Be'Lakor]]></category>
		<category><![CDATA[Music]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3917</guid>

					<description><![CDATA[I genuinely think this is the most beautiful song ever composed. Your typical Be&#39;Lakor song: enough parts and melodies to make 5 different songs, yet all united in one harmonious masterpiece. I *LOVE* Be&#39;Lakor.]]></description>
										<content:encoded><![CDATA[<p>I genuinely think this is the most beautiful song ever composed.</p>
<p><iframe title="Be&#039;lakor - Countless Skies" width="500" height="281" src="https://www.youtube.com/embed/WpnGs11vf-0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>Your typical Be&#39;Lakor song: enough parts and melodies to make 5 different songs, yet all united in one harmonious masterpiece. I *LOVE* Be&#39;Lakor.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Linux productivity</title>
		<link>https://planetozh.com/blog/2026/05/linux-productivity/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Tue, 05 May 2026 18:41:15 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shorties]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3901</guid>

					<description><![CDATA[Migrated to Linux and still under the process of recreating an enviro where I&#39;m as productive as I was on Windows. Almost there with Git. Still got to find a simple yet rather complete graphic editing tool to replace a SUPER old version of Paint Shop Pro. So far my go-to solution is photopea.com]]></description>
										<content:encoded><![CDATA[<p>Migrated to Linux and still under the process of recreating an enviro where I&#39;m as productive as I was on Windows. Almost there with Git. Still got to find a simple yet rather complete graphic editing tool to replace a SUPER old version of Paint Shop Pro. So far my go-to solution is <a href="https://photopea.com/">photopea.com</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reboot</title>
		<link>https://planetozh.com/blog/2026/05/reboot/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Sun, 03 May 2026 19:21:38 +0000</pubDate>
				<category><![CDATA[planetOzh]]></category>
		<category><![CDATA[Shorties]]></category>
		<guid isPermaLink="false">https://planetozh.com/blog/?p=3896</guid>

					<description><![CDATA[So, after a 10 year hiatus (ten years !!), I&#39;m rebooting this blog. New WP theme, no new topics except less (much less) WordPress. Cya soon :)]]></description>
										<content:encoded><![CDATA[<p>So, after a 10 year hiatus (<em>ten years !!</em>), I&#39;m rebooting this blog. New WP theme, no new topics except less (much less) WordPress. Cya soon :)</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordCamp Paris slides: Unit Tests for WordPress plugins</title>
		<link>https://planetozh.com/blog/2015/01/wordcamp-paris-slides-unit-tests-for-wordpress-plugins/</link>
					<comments>https://planetozh.com/blog/2015/01/wordcamp-paris-slides-unit-tests-for-wordpress-plugins/#comments</comments>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Mon, 26 Jan 2015 15:01:09 +0000</pubDate>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[unit tests]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://planetozh.com/blog/?p=3452</guid>

					<description><![CDATA[Last week-end I gave a talk at WordCamp Paris, about the exciting topic of Unit Tests for WordPress plugins (are you excited already?). I think I&#39;ll write a short blog post about it in the next few days ; I&#39;ll also write a series of post about unit testing, because that subject is so exciting :) In the meantime, here…]]></description>
										<content:encoded><![CDATA[<p>Last week-end I gave a talk at WordCamp Paris, about the exciting topic of Unit Tests for WordPress plugins (are you excited already?). I think I&#39;ll write a short blog post about it in the next few days ;  I&#39;ll also write a series of post about unit testing, because that subject is so exciting :)</p>
<p>In the meantime, here are my slides (in French) :</p>
<p>Plain old downloadable PDF: <a href="https://planetozh.com/blog/wp-content/uploads/2015/01/WordPress-Plugin-Unit-Tests.pdf">WordPress Plugin Unit Tests</a>, or <a href="http://www.slideshare.net/ozh/wordpress-plugin-unit-tests-fr-wordcamp-paris-2015">Slideshare</a> stuff below.</p>
<p>The demo plugin and all its tests are on Github: <a href="https://github.com/ozh/plugin-unit-test-demo">ozh/plugin-unit-test-demo</a>.</p>
<p><iframe title="WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)" src="https://www.slideshare.net/slideshow/embed_code/key/ALhcKqjOrkSfg7" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> </p>
<div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/ozh/wordpress-plugin-unit-tests-fr-wordcamp-paris-2015" title="WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)" target="_blank">WordPress Plugin Unit Tests (FR &#8211; WordCamp Paris 2015)</a> </strong> from <strong><a href="https://www.slideshare.net/ozh" target="_blank">Ozh </a></strong> </div>
]]></content:encoded>
					
					<wfw:commentRss>https://planetozh.com/blog/2015/01/wordcamp-paris-slides-unit-tests-for-wordpress-plugins/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Revisiting WordPress smilies in a pure CSS way</title>
		<link>https://planetozh.com/blog/2014/12/revisiting-wordpress-smilies-in-a-pure-css-way/</link>
					<comments>https://planetozh.com/blog/2014/12/revisiting-wordpress-smilies-in-a-pure-css-way/#comments</comments>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Sat, 20 Dec 2014 17:32:28 +0000</pubDate>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Smiley]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://planetozh.com/blog/?p=3439</guid>

					<description><![CDATA[Last night I was reading something interesting then stumbled, in the comments, on a WordPress smiley. Bleeeh. There&#39;s a reason one of the first things I do when I setup a new site is uncheck &#34;Convert emoticons like :-) and :-P to graphics on display&#34;: 90&#39;s phpBB&#39;esque blocky gifs are *ugly*. WordPress 4.2 Roadmap Wish: update those ugly smilies that…]]></description>
										<content:encoded><![CDATA[<p>Last night I was <a href="http://krogsgard.com/2014/following-dream/">reading something interesting</a> then stumbled, in the comments, on a WordPress smiley. Bleeeh. There&#39;s a reason one of the first things I do when I setup a new site is uncheck &quot;Convert emoticons like <tt>:-)</tt> and <tt>:-P</tt> to graphics on display&quot;: 90&#39;s phpBB&#39;esque blocky gifs are *ugly*.</p>
<blockquote class="twitter-tweet" data-width="500" data-dnt="true">
<p lang="en" dir="ltr">WordPress 4.2 Roadmap Wish: update those ugly smilies that have not changed since, wait for it, EVER (for real)</p>
<p>&mdash; Ozh Richard (@ozh) <a href="https://twitter.com/ozh/status/546055415461863424?ref_src=twsrc%5Etfw">December 19, 2014</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>In my opinion those smileys are super outdated (they haven&#39;t changed since the very beginning of WordPress which, in internet times, is the equivalent of Pleistocene) and they suck for three reasons:</p>
<ul>
<li>they&#39;re ugly. Did I already mention that? :)</li>
<li>they&#39;re too old to live on retina screens</li>
<li>it&#39;s very inefficient to load one image for each and every emoticon, as <a href="https://twitter.com/BoiteAWeb/status/546079350291177473">Julio points out</a></li>
</ul>
<p>Over the years a few people have proposed alternatives for core but this is unlikely to happen, as very nicely <a href="http://wptavern.com/wordpress-smiley-wars-will-core-adopt-new-emoticons" title="Otto does not like new smilies :)">summed up by WP Tavern</a>. You can find several alternative as plugins, like <a href="https://github.com/avryl/new-smileys">New Smileys</a>, but they&#39;re just another batch of images.</p>
<p>In the short discussion my tweet sparked, <a href="https://twitter.com/ScreenFeedFr">Greg</a> pointed me to <a href="http://www.screenfeed.fr/blog/i-see-dead-people-02184/comment-page-1/#comment-1795">his way of doing it</a> and I thought it was <strong>wonderful</strong>: 100% CSS, no image loaded, ideally tuned and adapted for his theme.</p>
<p>https://twitter.com/ScreenFeedFr/status/546148719092314113</p>
<p>A coffee break later*, here is a sample plugin that replaces your smilies with pure and simple HTML markup that you can then easily style: <a href="https://github.com/ozh/ozh-css-smilies">Ozh&#39; CSS Smilies</a>. Hooo those super <del datetime="2014-12-20T16:21:56+00:00">annoying</del> cute animated little ghosts!</p>
<p><a href="https://github.com/ozh/ozh-css-smilies"><img loading="lazy" decoding="async" src="https://planetozh.com/blog/wp-content/uploads/2014/12/ghosts_smiley.gif" alt="ghosts_smiley" width="523" height="352" class="aligncenter size-full wp-image-3448" /></a></p>
<p>The plugin is just meant to be a start for those who&#39;ll want to style their own smilies. Feel free to use and modify to match your theme!</p>
<p><small>* yeah right. I took me like 90 minutes just to get that half ugly CSS working :/</small></p>
]]></content:encoded>
					
					<wfw:commentRss>https://planetozh.com/blog/2014/12/revisiting-wordpress-smilies-in-a-pure-css-way/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress plugin banner as a .PSD</title>
		<link>https://planetozh.com/blog/2014/09/wordpress-plugin-banner-as-a-psd/</link>
		
		<dc:creator><![CDATA[Ozh]]></dc:creator>
		<pubDate>Sun, 14 Sep 2014 16:19:21 +0000</pubDate>
				<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Plugins]]></category>
		<guid isPermaLink="false">http://planetozh.com/blog/?p=3298</guid>

					<description><![CDATA[I recently felt like making a few banners for my plugins. First questions that came to mind: &#34;what&#39;s the name of the file again? what dimensions?&#34;. And then, while making stuff: &#34;will this be hidden by the plugin&#39;s title?&#34; So, I made this simple banner template as a Photoshop PSD file. Nothing genius but feel free to use. No excuse…]]></description>
										<content:encoded><![CDATA[<p>I recently felt like making <a href="http://wordpress.org/plugins/ozh-simpler-login-url/">a</a> <a href="http://wordpress.org/plugins/always-remember-me/">few</a> <a href="http://wordpress.org/plugins/no-login/">banners</a> for my plugins. First questions that came to mind: &quot;what&#39;s the name of the file again? what dimensions?&quot;. And then, while making stuff: &quot;will this be hidden by the plugin&#39;s title?&quot;</p>
<p>So, I made this simple <a href="https://planetozh.com/blog/wp-content/uploads/2014/09/banner-772x250.zip">banner template</a> as a Photoshop PSD file. Nothing genius but feel free to use. No excuse not to add some fancy eye candy to your best plugins!</p>
<p><a href="https://planetozh.com/blog/wp-content/uploads/2014/09/banner-772x250.zip"><img loading="lazy" decoding="async" src="https://planetozh.com/blog/wp-content/uploads/2014/09/banner-template.png" alt="banner-template" width="547" height="207" class="aligncenter size-full wp-image-3299" srcset="https://planetozh.com/blog/wp-content/uploads/2014/09/banner-template.png 547w, https://planetozh.com/blog/wp-content/uploads/2014/09/banner-template-300x113.png 300w" sizes="auto, (max-width: 547px) 100vw, 547px" /></a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
