<?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%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/</link>
		<description>Recent content in ライブラリ on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Fri, 07 Oct 2022 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Facitars! - アバターアイコン生成ライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/</link>
				<pubDate>Fri, 07 Oct 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/mugendi/facitars&#34;&gt;Facitars!&lt;/a&gt; は、一定のトーンに沿った形で与えたシードからランダムなアバターアイコンを生成してくれるライブラリです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/facitars-generated-sample-avatars_hu_b9ffec848af936bb.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/facitars-generated-sample-avatars_hu_c6e65e77813bd7ec.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/facitars-generated-sample-avatars_hu_a118ad3824ea2a5e.webp 897w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/facitars-generated-sample-avatars.png&#34; width=&#34;897&#34; height=&#34;647&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/p&gt;&#xA;&lt;p&gt;Facitars! のサンプルコードで生成したランダムなアバター群&lt;/p&gt;&#xA;&lt;p&gt;アカウント名やメールアドレスをシードにすることで、他のユーザーと形や色が同じにならないユニークなアイコンをユーザーごとに自動で作れるため、会員登録制のwebサービスのデフォルトアイコンなどに使えそうです。&lt;/p&gt;&#xA;&lt;p&gt;HTMLページに埋め込んだJavaScript から呼び出すことも、サーバーサイドから呼んで画像を作ることもできるオープンソースのライブラリの形式で提供されています。実際に作ってみました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/facitars-generated-akky-avatars_hu_8270806609c43dcc.webp 360w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/10/facitars-lib-generates-avatar-icons/facitars-generated-akky-avatars.png&#34; width=&#34;360&#34; height=&#34;151&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/p&gt;&#xA;&lt;p&gt;Facitars! で自分のアカウント名などをシードに作成したアバターアイコン&lt;/p&gt;&#xA;&lt;p&gt;ユーザー登録サービスでも自分のアイコンを登録する手間は面倒と感じる人が多いようで、ユーザーが並んでいるコメント欄などでもデフォルトのアイコンが並ぶばかり、というサービスもありますね。こういったライブラリを使ってデフォルトアイコンでも個人別に違ったものにすることはいい対策かなと思います。&lt;/p&gt;&#xA;&lt;p&gt;同様のアバタージェネレーターとしてはたとえば&lt;a href=&#34;https://boringavatars.com/&#34;&gt;Boring Avatars&lt;/a&gt;などもあります。こちらはカワイイ系のアイコンを生成できますが、色のバリエーションは手動で与えるタイプのようです。&lt;/p&gt;&#xA;&lt;p&gt;via reddit&lt;/p&gt;</description>
			</item>
			<item>
				<title>地図表示ライブラリ Leaflet がウクライナ支援を呼びかけ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/</link>
				<pubDate>Wed, 09 Mar 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/</guid>
				<description>&lt;p&gt;OpenStreetMap を使ってウェブサイトに地図を表示できる JavaScript ライブラリ &lt;a href=&#34;https://leafletjs.com/&#34;&gt;Leaflet&lt;/a&gt; のトップページがいつもと違う掲示になっています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/leaflet-top-page.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/leaflet-top-page_hu_1df7742d50391229.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/leaflet-top-page_hu_d9dd955839163a0.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/leaflet-top-page_hu_d9a8aa38f3fc6501.webp 807w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/leaflet-author-calls-for-help-ukraine/leaflet-top-page.png&#34; width=&#34;807&#34; height=&#34;818&#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;通常の&lt;a href=&#34;https://leafletjs.com/SlavaUkraini/&#34;&gt;ドキュメントやダウンロード、プラグイン情報などはこちらに退避&lt;/a&gt;され、トップページ全面にてウクライナ支援に関する作者/メンテナー一同の意見表示が行われています。&lt;/p&gt;&#xA;&lt;p&gt;Leaflet の作者はウクライナ・キエフ市民の&lt;a href=&#34;https://agafonkin.com/&#34;&gt;ウラジミル・アガフォンキン&lt;/a&gt;さん(Vladimir Agafonkin) &lt;a href=&#34;https://twitter.com/mourner&#34;&gt;@mourner&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;ロシア軍の爆弾が降り注いでいるため、家族と共にキエフは脱出したところだそうです。&lt;/p&gt;&#xA;&lt;p&gt;このページに署名している「Leaflet メインテナー一同」は、Leaflet ユーザーに対する、各国の政治家への働きかけや平和を求める活動への参加、&lt;a href=&#34;https://savelife.in.ua/en/donate/&#34;&gt;Safelife.in.ua&lt;/a&gt; や&lt;a href=&#34;https://redcross.org.ua/en/&#34;&gt;ウクライナ赤十字への寄付&lt;/a&gt;の呼びかけなどを書いた上で、&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;「人道に関する訴えがあなたに効かないのであれば、あなたの利己主義に働きかけましょう。ウクライナ市民の将来は Leaflet の将来でもあります。」&lt;/p&gt;&#xA;&lt;p&gt;If an appeal to humanity doesn’t work for you, I’ll appeal to your egoism: the future of Ukrainian citizens is the future of Leaflet.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;言いたくてこんなことを書いてるわけではないでしょう。戦争で家を追われた作者の悲痛な気持ちが伝わってきます。&lt;/p&gt;&#xA;&lt;p&gt;GitHub 上の&lt;a href=&#34;https://github.com/Leaflet/Leaflet&#34;&gt;ソースコードのReadmeも同様に書き換わっています&lt;/a&gt;。&lt;a href=&#34;https://www.itmedia.co.jp/news/articles/2203/02/news187.html&#34;&gt;GitHub はロシアからのアクセスを遮断しないことを表明&lt;/a&gt;しました。これも賛否あるかもしれませんが、ロシア国内のLeafletユーザーがこの主張を目にするだろうことを考えると、遮断で見えないよりも情報量はありますね。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Checkboxland - HTMLのチェックボックスですべてを作れるライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/</link>
				<pubDate>Tue, 12 Oct 2021 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.bryanbraun.com/checkboxland/&#34;&gt;Checkboxland&lt;/a&gt; は、HTML のチェックボックス要素を活用してしまくるための JavaScriptライブラリです。&lt;/p&gt;&#xA;&lt;p&gt;HTML のチェックボックス要素と言えばこれ↓ ですが、&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;このチェックボックスを使って様々な表現を実行できます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-top.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-top_hu_ee354db0ac712421.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-top_hu_cdc237437b1e56d2.webp 768w, https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-top_hu_9107444809916869.webp 807w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-top.png&#34; width=&#34;807&#34; height=&#34;887&#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;&lt;a href=&#34;https://www.bryanbraun.com/checkboxland/#demos&#34;&gt;デモ&lt;/a&gt;では、文字が横に流れるマーキー、デジタル時計、アニメーション、QRコード表示、ライフゲーム、動画再生(!)、など様々な表現が、すべてチェックボックスだけで実現されています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-clock.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-clock_hu_29d0a40a13cc62d5.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-clock_hu_7348d9d63161aad3.webp 542w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/10/checkboxland-all-checkbox-webdesign/checkboxland-clock.png&#34; width=&#34;542&#34; height=&#34;196&#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;API documentによれば、チェックボックスを縦横に並べたグリッド上でグリッド上の各座標を調べたり書き換えたりする&lt;a href=&#34;https://www.bryanbraun.com/checkboxland/#low-level-api&#34;&gt;低レイヤAPI&lt;/a&gt;と、文字を大きく描く、スクロールさせる、画像や動画を描写させるなどの&lt;a href=&#34;https://www.bryanbraun.com/checkboxland/#extended-api&#34;&gt;拡張API&lt;/a&gt;が用意されています。プラグイン機構も用意されているので、自分で Checkboxland に新たな機能を追加することも可能です。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;It&amp;#39;s Friday night so of course I&amp;#39;m eating cookie dough and making a QR code out of html checkboxes that always tells you the current time.&lt;a href=&#34;https://t.co/ZNjG0SWAce&#34;&gt;https://t.co/ZNjG0SWAce&lt;/a&gt; &lt;a href=&#34;https://t.co/Fywf7FZFpu&#34;&gt;pic.twitter.com/Fywf7FZFpu&lt;/a&gt;&lt;/p&gt;&amp;mdash; Bryan Braun (@BryanEBraun) &lt;a href=&#34;https://x.com/BryanEBraun/status/1264014217063149569?ref_src=twsrc%5Etfw&#34;&gt;May 23, 2020&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.x.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;p&gt;多数の要素を表示しようとするとページが重くなるのはチェックボックスであっても(当然)同じで、チェックボックスの数が1500個を超えるとチェックボックスの更新速度が問題となることから、32x32 や 64x16 といったサイズ以下のグリッドを推奨するそうです。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;I made a webcam filter out of html checkboxes.&lt;br&gt;&lt;br&gt;Try it out here: &lt;a href=&#34;https://t.co/1lBHfEgmhw&#34;&gt;https://t.co/1lBHfEgmhw&lt;/a&gt; &lt;a href=&#34;https://t.co/tZrFOg3PWl&#34;&gt;pic.twitter.com/tZrFOg3PWl&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>&#39;-&#39; という名前の、中身が無いのに70万回ダウンロードされてる謎のnpmパッケージ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/</link>
				<pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.npmjs.com/package/-&#34;&gt;-&lt;/a&gt; という名前の JavaScript/TypeScript パッケージについて&lt;a href=&#34;https://www.bleepingcomputer.com/news/software/empty-npm-package-has-over-700-000-downloads-heres-why/&#34;&gt;警告を発している記事&lt;/a&gt;が話題となっています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash_hu_ce1baa12cf39604f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash_hu_da86620fc2432bd3.webp 768w, https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash_hu_9a4b271e247a568b.webp 1014w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash.png&#34; width=&#34;1014&#34; height=&#34;857&#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;このパッケージ、中身はほとんど空で、Readme と、dev で TypeScript を動かせるようにするライブラリ群を呼ぶ箇所だけのもの。&lt;/p&gt;&#xA;&lt;p&gt;しかし、この &amp;ldquo;-&amp;rdquo; を使っている他の npm パッケージが 50個以上あり、約一年前の公開時からのトータルのダウンロード数は72万回にもなります。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash-dependents.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash-dependents_hu_afecab73bfbedefb.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash-dependents_hu_747b1ad37d1b3523.webp 768w, https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash-dependents_hu_bf259055add92301.webp 937w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/08/empty-npm-package-downloaded-sub-one-million-times/npm-package-dash-dependents.png&#34; width=&#34;937&#34; height=&#34;747&#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;しかし、&amp;quot;-&amp;quot; を読み込んでいるパッケージを見てみても、&amp;quot;-&amp;quot; が必要そうには見えません。&lt;/p&gt;&#xA;&lt;p&gt;警告記事では、この無名のパッケージが密かに使われるようになった原因が、npm コマンドのコマンドラインを打つときのミスタイプにあるのではないかとの仮説を立てています。&lt;/p&gt;&#xA;&lt;p&gt;つまり、someFlag というオプションを使い&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;npm i -someFlag somepackage&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;と打つべきところで、&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;npm i - someFlag somepackage&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;と間違ってスペースを入れて実行したことで、&amp;quot;-&amp;quot; というパッケージがインストールされてしまい、その状態からパッケージを作って公開してしまったものが(50個以上)出てしまったのでは、ということです。&lt;/p&gt;&#xA;&lt;p&gt;実際にわざと間違ってみたところ、someFlag の部分にマッチするnpmパッケージがあれば、特にエラーもなく&amp;quot;-&amp;ldquo;パッケージが入ってしまいます。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;$ npm i - O knock-knock-jokes  added 3 packages, and audited 4 packages in 1s  found 0 vulnerabilities  $ npm ls test-@ C:\work\temp ├── -@0.0.1 ├── knock-knock-jokes@1.7.0 └── O@0.0.9&lt;/code&gt;&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>
			<item>
				<title>SocialSharePrivacy - ソーシャルメディアの埋め込みボタンに訪問を追跡させないライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/09/socialshareprivacy-keep-social-button-untracked/</link>
				<pubDate>Fri, 06 Sep 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/09/socialshareprivacy-keep-social-button-untracked/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://panzi.github.io/SocialSharePrivacy/&#34;&gt;SocialSharePrivacy&lt;/a&gt; は、ウェブサイトの提供者が、利用者に対してプライバシーが保たれるソーシャルメディアボタンを提供するためのライブラリです。&lt;/p&gt;&#xA;&lt;p&gt;デモページを動かしてみました。スライダーでボタンを有効にしない限り、フェイスブックやツイッターのサーバに情報は送られません。&lt;/p&gt;&#xA;&lt;p&gt;まずボタンを有効にするアクションを起こすと、初めてメディアが提供するボタンが有効となり、この時点でそのページに訪問したことは各サービスにも伝わります。そして、有効になったボタンをクリックすると、「イイネ」等をすることができます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/panzi/SocialSharePrivacy&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/09/socialshareprivacy-keep-social-button-untracked/social-share-privacy-demo_hu_98664ebe39de0e7f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/09/socialshareprivacy-keep-social-button-untracked/social-share-privacy-demo_hu_378c6fbcd94c7332.webp 768w, https://labs.cybozu.co.jp/blog/akky/2019/09/socialshareprivacy-keep-social-button-untracked/social-share-privacy-demo_hu_f3e87c2814e67315.webp 822w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/09/socialshareprivacy-keep-social-button-untracked/social-share-privacy-demo.png&#34; width=&#34;822&#34; height=&#34;184&#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;2回クリックをしなければならなくなった代わりに、そのページに訪問したことは各ソーシャルメディアサービスには知られずに済む、ということになります。&lt;/p&gt;&#xA;&lt;p&gt;サイト訪問をしていることをソーシャルメディアから常時されるのは困る、しかし、イイネ等をしたい時にはできるようにしてほしい、という多少込み入った要件のサイトがあれば、このライブラリが一つの解決法となるでしょう。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/panzi/SocialSharePrivacy&#34;&gt;SocialSharePrivacy のコードはすべてGitHub で公開&lt;/a&gt;されています。&lt;/p&gt;</description>
			</item>
			<item>
				<title>手書き風グラフを描けるライブラリ xkcd.chart</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/08/handwriting-flavour-xkcd-chart/</link>
				<pubDate>Mon, 19 Aug 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/08/handwriting-flavour-xkcd-chart/</guid>
				<description>&lt;p&gt;英語圏でエンジニアに人気の&lt;a href=&#34;https://xkcd.com/&#34;&gt;線画コミックサイト xkcd&lt;/a&gt; には、グラフを使ったジョークネタも頻出します。こんな感じ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://xkcd.com/688/&#34;&gt;&lt;img src=&#34;https://imgs.xkcd.com/comics/self_description.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;xkcd に出てくるようなグラフは、だいたい手書き風のテイストで描かれているのですが、その手書き風グラフを再現できるグラフ描画ライブラリが &lt;a href=&#34;https://timqian.com/chart.xkcd/&#34;&gt;xkcd.chart&lt;/a&gt; です。&lt;/p&gt;&#xA;&lt;script&gt;const svgPie = document.querySelector(&#39;.pie-chart&#39;); new chartXkcd.Pie(svgPie, { title: &#39;「みんな」言ってる&#39;, data: { labels:[ &#39;知り合いの誰か&#39;, &#39;全員&#39;, ], datasets: [{ data: [ 990, 10, ], }] }, })&lt;/script&gt;&#xA;&lt;p&gt;日本語も出ますね。日本語入れると凡例の枠がはみ出てしまうので、ソースの調整が要るかもしれません。xkcd 風のフォントも同梱されていますが、日本語ではデフォルトフォントになるでしょう。&lt;/p&gt;&#xA;&lt;p&gt;円グラフ、折れ線グラフ、棒グラフ を描くことができます。&lt;/p&gt;&#xA;&lt;script&gt;const svg = document.querySelector(&#39;.bar-chart&#39;) // github stars vs patrons new chartXkcd.Bar(svg, { title: &#39;ウィンドウズ&#39;, data: { labels:[&#39;1.0&#39;, &#39;2.0&#39;, &#39;3.0&#39;, &#39;3.1&#39;, &#39;95&#39;, &#39;98&#39;, &#39;2000&#39;, &#39;7&#39;, &#39;8&#39;, &#39;8.1&#39;, &#39;10&#39;], datasets: [{ data: [ 1, 2, 3, 3.1, 95 ,95, 2000, 7, 8, 8.1, 10], }] }, });&lt;/script&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/zzap/status/996905819756212224&#34;&gt;ウィンドウズグラフの元ネタ&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>AgentMaps - 地図上で多数の人が動くシミュレーションを作るためのライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2018/09/agentmaps-social-simulator-library/</link>
				<pubDate>Fri, 07 Sep 2018 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2018/09/agentmaps-social-simulator-library/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/noncomputable/AgentMaps&#34;&gt;AgentMaps&lt;/a&gt;は、JavaScript 上で地図ベースの社会シミュレーターを作るためのライブラリです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2018/09/agentmaps-social-simulator-library/agentmaps-demo.gif&#34;&gt;&lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/09/agentmaps-social-simulator-library/agentmaps-demo.gif&#34; width=&#34;480&#34; height=&#34;348&#34; alt=&#34;&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;インタラクティブ地図作成のライブラリ &lt;a href=&#34;https://leafletjs.com/&#34;&gt;Leaflet.js&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;li&gt;エージェントの見た目を変える&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;などができるということ。町の中を行き来する住人のモデルを作って、住人間でうつる病気とその伝染率を定義すれば、伝染病がどのように広まっていくか、あるいは一定の範囲でとどまるか、といったことをシミュレーションできます。&lt;/p&gt;&#xA;&lt;p&gt;こちらの&lt;a href=&#34;https://noncomputable.github.io/AgentMaps/demos/epidemic/epidemic.html&#34;&gt;デモ&lt;/a&gt;では、人々の移動の速度や、病気の伝染しやすさのパラメーターをスライダーで変化させて、全体の様子がどうなるかを観察することができます。&lt;/p&gt;&#xA;&lt;p&gt;ツールの使い道ですが、たとえば、イベントで多数の人が集まってきた時に出店や通路を人がどう動くか、とか、ゾンビ物のお話を作る時に、感染が広まる様子をシミュレートしてそれを基に書くとリアリティが高まったりするのかなあ、とか、どうでしょうね。&lt;/p&gt;</description>
			</item>
			<item>
				<title>is-vegan 菜食主義者のための食品判定ライブラリ in JavaScript</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2018/02/javascript-library-tells-you-which-food-is-vegan/</link>
				<pubDate>Wed, 07 Feb 2018 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2018/02/javascript-library-tells-you-which-food-is-vegan/</guid>
				<description>&lt;p&gt;肉や魚だけでなく、牛乳など直接は命を奪わない食材も忌避する完全菜食主義(ヴィーガン)のためのライブラリが &lt;a href=&#34;https://github.com/hmontazeri/is-vegan&#34;&gt;is- vegan&lt;/a&gt; です。&lt;/p&gt;&#xA;&lt;p&gt;利用例はこんな感じ。牛乳はダメで、豆乳はOKと。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;import * as isVegan from &#39;is-vegan&#39;;  // example for single ingredient isVegan.isVeganIngredient(&#39;soy&#39;); // true isVegan.isVeganIngredient(&#39;milk&#39;); // false&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;作りとしては src/util/canbevegan.json と nonvegan.json に食材の名前が列挙してあるだけのシンプルなもの。これを訳せば日本語でも使えるかもしれないですね。レシピサイトの材料リストを見て、菜食主義対応かどうかを表示する、なんていう拡張を作ったりできそうです。&lt;/p&gt;&#xA;&lt;p&gt;食べ物の規制ということだとイスラム教のハラールについても is-haral 的なライブラリが有ったりするのかな、とGitHub を探してみましたが、見つかりませんでした。あちらは単純に食材の種類で決まるわけではないので同じ手は使えないのかもしれませんね。&lt;/p&gt;&#xA;&lt;p&gt;via Hacker News&lt;/p&gt;</description>
			</item>
			<item>
				<title>Anyprint - いろんな言語のprint命令がPythonで使えるライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2017/07/anyprint-supports-multilanguage-print/</link>
				<pubDate>Fri, 21 Jul 2017 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2017/07/anyprint-supports-multilanguage-print/</guid>
				<description>&lt;p&gt;ライブラリ &lt;a href=&#34;https://github.com/kragniz/anyprint&#34;&gt;anyprint&lt;/a&gt; をインポートするだけで、Python で以下のような出力文が書けるようになります。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;printf(&amp;quot;printf %d\n&amp;quot;, 10);  fmt.Println(&amp;quot;hello&amp;quot;)  cout &amp;lt;&amp;lt; &amp;quot;Hello, C++!&amp;quot; &amp;lt;&amp;lt; endl;  Print[&amp;quot;Hello from Mathematica!&amp;quot;]  console.log(&amp;quot;yes&amp;quot;);  io.write(&amp;quot;lua land&amp;quot;)  System.out.printf(&amp;quot;java stuff\n&amp;quot;);  System.Console.WriteLine(&amp;quot;C# looks awkard&amp;quot;);  Ada.Text_IO.Put_Line(&amp;quot;Ada is cool&amp;quot;)  IO.puts(&amp;quot;elixir&amp;quot;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;現在サポートされている他言語は、go, Java, VB .NET, C(とその類似言語), ActionScript, Ada, &lt;a href=&#34;https://en.wikipedia.org/wiki/Amiga_E&#34;&gt;Amiga E&lt;/a&gt;, ASP, B, D, &lt;a href=&#34;https://en.wikipedia.org/wiki/PureBasic&#34;&gt;PureBasic&lt;/a&gt;, Clipper, C++, C#, Delphi, JavaScript, Lua, Mathematica, matlab, nim, Pascal, Pike, Elixir のようです。&lt;/p&gt;&#xA;&lt;p&gt;Objective-C の NSLog, Ruby のp は&lt;a href=&#34;https://github.com/kragniz/anyprint/pull/12&#34;&gt;プルリクエスト&lt;/a&gt;が出ています。Closure風 と Rust風は Python の中では難しいと作者が答えていますが、誰か解決できる人がいたら挑戦してみてはどうでしょうか。&lt;/p&gt;&#xA;&lt;p&gt;Pythonがメインの言語でない人でも、これを入れておけば自分の慣れた方法でprintできますね。&lt;/p&gt;&#xA;&lt;p&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;li&gt;「kragniz, おかしなPythonのメタモジュールばっかり公開するのはよせよ」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;via Hacker News&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
