<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>コードゴルフ on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B4%E3%83%AB%E3%83%95/</link>
		<description>Recent content in コードゴルフ on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Mon, 17 Jan 2022 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B4%E3%83%AB%E3%83%95/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Folders.py - ディレクトリ構成(だけ)で書く変態プログラミング言語 Folders の Python 実装</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/01/folders-py-runs-file-system-folders-as-a-program/</link>
				<pubDate>Mon, 17 Jan 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/01/folders-py-runs-file-system-folders-as-a-program/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/SinaKhalili/Folders.py&#34;&gt;Folders.py&lt;/a&gt; は、難解(esoteric)プログラミング言語と言われる変わったプログラミング言語のひとつ &lt;a href=&#34;http://esolangs.org/wiki/Folders&#34;&gt;Folders&lt;/a&gt; の Python による実装です。&lt;/p&gt;&#xA;&lt;p&gt;オリジナルの Folders 処理系は 2015年に &lt;a href=&#34;https://danieltemkin.com/Esolangs/Folders/&#34;&gt;C# で書かれた&lt;/a&gt;ということです。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;プログラムはディレクトリの階層構造として記述される&lt;/li&gt;&#xA;&lt;li&gt;フォルダ内のファイルはすべて無視される&lt;/li&gt;&#xA;&lt;li&gt;文や式はフォルダ内にあるサブフォルダの個数によって定義される&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;コマンドの定義はこんな感じ。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;コマンド&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;サブフォルダの数&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;詳細(引数など)&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;if&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;0 folders&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Second sub-folder holds expression, third holds list of commands&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;while&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1 folder&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Second sub-folder holds expression, third holds list of commands&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;declare&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2 folders&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Second sub-folder holds type, third holds var name (in number of folders, ex. zero folders becomes &amp;ldquo;var_0&amp;rdquo;)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;let&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3 folders&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Second sub-folder hold variable name (in number of folders), third holds an expression&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;print&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;4 folders&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Second sub-folder holds expression&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;input&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;5 folders&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Second sub-folder holds variable name&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Expression, Type も同じような表で、サブフォルダの個数と改装で定義されます。&lt;/p&gt;</description>
			</item>
			<item>
				<title>JSONCrush - JSONをURIに圧縮して載せるためのライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/</link>
				<pubDate>Thu, 28 Nov 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/KilledByAPixel/JSONCrush&#34;&gt;KilledByAPixel/JSONCrush&lt;/a&gt; は、JSONをURLに載せやすい形に変換するライブラリです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://killedbyapixel.github.io/JSONCrush/&#34;&gt;JSONCrushのデモサイト&lt;/a&gt;。JSON形式のデータを左上に入力すると、それをテキストとして圧縮し(↓)、さらにURIとして使える文字に縁故度しています(→)。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/jsoncrush-demo-screenshot.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/jsoncrush-demo-screenshot_hu_a0e63217cdd56f7d.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/jsoncrush-demo-screenshot_hu_5d33c736709b3af6.webp 768w, https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/jsoncrush-demo-screenshot_hu_96a9ff9c1e91c5eb.webp 1184w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/11/jsoncrush-json-compresses-json-into-uri/jsoncrush-demo-screenshot.png&#34; width=&#34;1184&#34; height=&#34;833&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;今回入れてみたJSONでは、そのままURIエンコードした場合に比べて52%、約半分のサイズとなりました。&lt;/p&gt;&#xA;&lt;p&gt;URLにユーザーが入力した結果のJSONデータをなるべく小さくして載せるというのがライブラリの目的です。URLに再現のためのパラメータが全部載っていれば、結果をブックマークしてもらえばいつでも同じパラメータのページが再現できます。サーバーサイドでいろいろ面倒な処理をして覚えておく必要がありません。&lt;/p&gt;&#xA;&lt;p&gt;そのままURLEncodeする手もあるけど、URLのサイズ上限(2000バイトちょっと)に引っ掛かるのは避けたい、と。HTTPパラメータとして個別に受け取ればもっとコンパクトにできるのでしょうけど、JSONのまま渡せるのは場合によっては楽なのでしょう。作り手側に楽という意味ですが。&lt;/p&gt;&#xA;&lt;p&gt;使ってる&lt;a href=&#34;http://jquerymy.com/jscrush/&#34;&gt;JSCrush ライブラリ&lt;/a&gt;が変換部分を担っていて、これは特定の文字列内でテキストをエンコードしてくれるもののようです。&lt;a href=&#34;http://www.iteral.com/jscrush/&#34;&gt;JSCrushのデモサイト&lt;/a&gt;はこちら。&lt;/p&gt;&#xA;&lt;p&gt;JSCrush は minify したものしかないらしく、 &lt;a href=&#34;https://nikhilism.com/post/2012/demystifying-jscrush/&#34;&gt;その動作を解析してる人&lt;/a&gt;がいました。この解説によれば、JSCrushライブラリは、1KbyteのJavaScriptで何ができるか、というコードゴルフコンテストの&lt;a href=&#34;http://js1k.com/2012-love/demo/1243&#34;&gt;2012年の作品&lt;/a&gt;で使われたものだそうです。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=21641760&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
