<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Javascript on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/javascript/</link>
		<description>Recent content in Javascript on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Wed, 18 Jan 2023 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/javascript/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>ScrollyVideo.js - ブラウザのスクロールと動画ファイルを簡単に同期できるライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2023/01/scrollyvideo-js/</link>
				<pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2023/01/scrollyvideo-js/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://scrollyvideo.js.org/&#34;&gt;ScrollyVideo.js&lt;/a&gt; は、ブラウザの画面効果のための&lt;a href=&#34;https://github.com/dkaoster/scrolly-video&#34;&gt;ライブラリ&lt;/a&gt;で、mp4 で置いた動画ファイルをページのスクロールと連動してくれます。&lt;/p&gt;&#xA;&lt;p&gt;と、言葉で書いても伝わってる気がしません。&lt;a href=&#34;https://scrollyvideo.js.org/&#34;&gt;ScrollyVideo.js のサイトで見るのが一番わかりやすい&lt;/a&gt;と思います。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://scrollyvideo.js.org/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2023/01/scrollyvideo-js/scrolly-video-js-demo-screenshot_hu_cf9b184fd91f71a8.webp 480w, https://labs.cybozu.co.jp/blog/akky/2023/01/scrollyvideo-js/scrolly-video-js-demo-screenshot_hu_ab269cc4354afcf3.webp 627w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2023/01/scrollyvideo-js/scrolly-video-js-demo-screenshot.png&#34; width=&#34;627&#34; height=&#34;795&#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;このデモでは、サンフランシスコのゴールデン・ゲート橋をドローンで空撮した mp4 ファイルが使われています。ページを下にスクロールしていくと、動画が先に進むため、スクロールに合わせてみている自分が前に飛んでいるような感覚が得られます。&lt;/p&gt;&#xA;&lt;p&gt;デモでは単純なスクロールとの同期だけでなく、スクロールの途中でテキストボックスが流れたりもしていますが、&lt;a href=&#34;https://github.com/dkaoster/scrolly-video/blob/main/demos/html/index.html&#34;&gt;vanilla JavaScript のデモ&lt;/a&gt;(ダウンロードしてブラウザで開くだけで動きます)では、非常に短いHTMLのコードで基本的な部分が動くのがわかります。&lt;/p&gt;&#xA;&lt;p&gt;自分で撮影した mp4 ファイルでももちろん動きましたが、あまりこのライブラリで見栄えのするような動画がなく。&lt;/p&gt;&#xA;&lt;p&gt;デモのように前後に進む動画がおそらくよく合うんでしょう。部屋を360度ぐるっと回ってみる動画とかを表示してみましたがあまりいいものになりませんでした。&lt;/p&gt;&#xA;&lt;p&gt;ライブラリはプレーンなJavaScript の他、React, Svelte, Vue からも呼び出せるようになっていて、それぞれのデモファイルがあります。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://flowingdata.com/2023/01/18/scrolly-video-javascript-library/&#34;&gt;FlowingData&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<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>Google表計算でWordle</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/</link>
				<pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/</guid>
				<description>&lt;p&gt;本日のWordleクローンは、&lt;a href=&#34;https://github.com/sajadmh/google-sheets-wordle&#34;&gt;Google Spreadsheets で動く Wordle&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets.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/google-sheets-wordle-clone/wordle-on-google-sheets_hu_f8063faab0378401.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets_hu_8fe6b03a862c76f8.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets_hu_bca3315ca3b59b81.webp 1205w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets.png&#34; width=&#34;1205&#34; height=&#34;688&#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;入力こそ左外側のセルですが(下段のキーボードは入力済のキーを示す役割のみ)、5文字の単語を入れるとsubmitボタンが現れ、ボタンを押すと数秒で正解判定が返ってきます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets-data-sheet.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/google-sheets-wordle-clone/wordle-on-google-sheets-data-sheet_hu_8faba9e0af06617.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets-data-sheet_hu_1dcf3e6d4ece0d38.webp 768w, https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets-data-sheet_hu_3e7711e94202c8.webp 845w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/03/google-sheets-wordle-clone/wordle-on-google-sheets-data-sheet.png&#34; width=&#34;845&#34; height=&#34;536&#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;正答を得てもSNS共有用のダイアログは出ません。そこは本家と違うところですが。&lt;/p&gt;&#xA;&lt;p&gt;ゲーム画面の&amp;quot;PLAY&amp;quot;とは別のシート&amp;quot;SETTINGS&amp;quot;はデータ用で、現在プレイしている問題番号、マスクされた正答のリスト、利用できる英単語の辞書、が配置されています。&lt;/p&gt;&#xA;&lt;p&gt;GitHub にホストされたソースコードでは、&lt;a href=&#34;https://github.com/sajadmh/google-sheets-wordle&#34;&gt;Readme&lt;/a&gt;で詳細にスクリプトの作りについて解説があります。200行ちょっとの App Script で、解説を見ながら読み進めるとシンプルでよくできてるなと思いました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.nytimes.com/games/wordle/index.html&#34;&gt;本物のWordle&lt;/a&gt;は1日1回ですが、こちらのクローンはメニューに出た&amp;quot;Wordle&amp;quot;から&amp;quot;Start New Game&amp;quot;でいくつでも連続して遊ぶことができます。&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>Game of Codes - プログラミングツールやライブラリの勢力を表した架空の世界地図</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/</link>
				<pubDate>Fri, 21 Jan 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://gameofcodes.art/&#34;&gt;Game of Codes&lt;/a&gt; は、プログラミング技術の人気度を基に勢力争いを架空の地図に表すというプロジェクトです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gameofcodes.art/img/goc/2021.jpg&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/game-of-codes-javascript-frameworks-2021_hu_f4dd12a1b1bcca0.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/game-of-codes-javascript-frameworks-2021_hu_c6ad2386a74e2442.webp 740w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/game-of-codes-javascript-frameworks-2021.png&#34; width=&#34;740&#34; height=&#34;412&#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;フロントエンドJavaScriptライブラリ2021の勢力地図(クリックでオリジナルを表示)がこれ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ja.reactjs.org/&#34;&gt;React&lt;/a&gt; が帝国であるのに対し、&lt;a href=&#34;https://angular.io/&#34;&gt;Angular&lt;/a&gt;, &lt;a href=&#34;https://v3.ja.vuejs.org/&#34;&gt;Vue&lt;/a&gt;, jQuery が王国、&lt;a href=&#34;https://svelte.dev/&#34;&gt;Svelte&lt;/a&gt; が公国なのは「規模感」だそうなので、国名はデータからプログラムが決めているわけではないようです。&lt;/p&gt;&#xA;&lt;p&gt;各国のサイズは過去12か月間の npm でのダウンロード数をベースにしているそうです。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;What if &lt;a href=&#34;https://x.com/hashtag/javascript?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#javascript&lt;/a&gt; libraries were countries?&lt;br&gt;&lt;br&gt;Will the &lt;a href=&#34;https://x.com/hashtag/React?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#React&lt;/a&gt; Empire dominate the world? Will the Kingdom of &lt;a href=&#34;https://x.com/hashtag/Vue?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#Vue&lt;/a&gt; stop the invasion? Will Kingdom of &lt;a href=&#34;https://x.com/hashtag/Angular?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#Angular&lt;/a&gt;  regain its position?&lt;br&gt;&lt;br&gt;See Game of Codes project ⚔️&lt;a href=&#34;https://t.co/jrX3TOVMJf&#34;&gt;https://t.co/jrX3TOVMJf&lt;/a&gt; &lt;a href=&#34;https://t.co/BXz85tzXCq&#34;&gt;pic.twitter.com/BXz85tzXCq&lt;/a&gt;&lt;/p&gt;&amp;mdash; Michal Szymanski (@longevity_os) &lt;a href=&#34;https://x.com/longevity_os/status/1480456924579704833?ref_src=twsrc%5Etfw&#34;&gt;January 10, 2022&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;&lt;a href=&#34;https://gameofcodes.art/img/goc/2015.jpg&#34;&gt;2015年版の地図&lt;/a&gt; と比べると、6年間でも勢力が変化していますね。Ember とか Backbone とか、そんなのあったなあ、という感じです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gameofcodes.art/css.html&#34;&gt;CSSフレームワークについても同じような架空地図&lt;/a&gt;が公開されています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gameofcodes.art/css.html&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/game-of-codes-css-frameworks-2021_hu_e1a666c5fbf50d7c.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/game-of-codes-css-frameworks-2021_hu_2a5209a3a44b2dd0.webp 741w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/game-of-codes-programming-tools-fantasy-maps/game-of-codes-css-frameworks-2021.png&#34; width=&#34;741&#34; height=&#34;384&#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://xkcd.com/256/&#34;&gt;SNSの勢力図で似たようなもの&lt;/a&gt;がありました。地図の形にすることで詳しくない人に大雑把な関係性が伝えられる場合もあるでしょう。&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>yare.io - JavaScript で艦隊を動かし戦わせるゲーム</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/</link>
				<pubDate>Wed, 02 Jun 2021 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://yare.io/&#34;&gt;yare.io&lt;/a&gt; は、Javascriptプログラムを書いて宇宙戦を戦わせるwebサービスです。&lt;/p&gt;&#xA;&lt;p&gt;ゲームは一対一の戦い、スピリット(spirit)というユニットを操作して、自分の基地を守りつつ敵の基地を破壊することが勝利条件です。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-fleets-battle.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-fleets-battle_hu_dd1aa7d42ae137d7.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-fleets-battle_hu_301fe4486e1c951d.webp 579w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-fleets-battle.png&#34; width=&#34;579&#34; height=&#34;586&#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;操作して、と言いましたがマウスなどで直接操作するわけではなく、JavaScript でスピリットがどのように振舞うかをプログラミングし、フィールドに投入して戦わせます。&lt;/p&gt;&#xA;&lt;p&gt;チュートリアルがあるので、通しでやってみました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-attacking-enemy-baae-on-tutorial.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-attacking-enemy-baae-on-tutorial_hu_4658a29923936d47.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-attacking-enemy-baae-on-tutorial_hu_e09eb948cd09d96f.webp 768w, https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-attacking-enemy-baae-on-tutorial_hu_f9e73892f6903533.webp 1460w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-attacking-enemy-baae-on-tutorial.png&#34; width=&#34;1460&#34; height=&#34;756&#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;/p&gt;&#xA;&lt;p&gt;エネルギーをある程度運びこむと、基地から新しいユニット(スピリット)が誕生するので、自分のすべてのユニットを配列で回し、使えるユニットを増やしていきます。&lt;/p&gt;&#xA;&lt;p&gt;自給ができるようになったら、一定範囲を索敵し、攻めてきた敵のスピリッツからエネルギーを奪うことで撃破します。チュートリアルではここまで。&lt;/p&gt;&#xA;&lt;p&gt;この後は実際の戦闘フィールドに参加します。他のユーザーを待つこともできますが、相手が見つからない時や練習用に bot のプレイヤーも用意されています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-akky-vs-bot.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-akky-vs-bot_hu_17533799761d089.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-akky-vs-bot_hu_7d0ac141fdfa92d.webp 535w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/06/yare-io-space-battle-by-javascript/yare-io-akky-vs-bot.png&#34; width=&#34;535&#34; height=&#34;582&#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;/p&gt;&#xA;&lt;p&gt;ゲームシステムはまだまだ荒く、スピリットの種類やルール、使える関数もこれから増えていくそうです。Discord チャンネルで作者や他プレイヤーと雑談することができ、現在の制限事項や今後の予定などについて知ることができます。&lt;/p&gt;</description>
			</item>
			<item>
				<title>GitHub Pages で static な短縮URLサイト作成</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2020/11/gh-pages-url-shortener/</link>
				<pubDate>Tue, 17 Nov 2020 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2020/11/gh-pages-url-shortener/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/nelsontky/gh-pages-url-shortener&#34;&gt;nelsontky/gh-pages-url-shortener&lt;/a&gt; は、GitHub の静的ファイル公開機能 GitHub Pages を使った、短縮URLホスティングです。&lt;/p&gt;&#xA;&lt;p&gt;clone して自分でもホストしてみました。s.akimoto.jp の DNS が GitHub Pages を指すように設定します。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://s.akimoto.jp/&#34;&gt;https://s.akimoto.jp/&lt;/a&gt; (説明用の index.html が開きます)&lt;/p&gt;&#xA;&lt;p&gt;そして、GitHub issues に&lt;a href=&#34;https://github.com/akky/gh-pages-url-shortener/issues/1&#34;&gt;タイトルがURLになる issue を投げる&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/11/gh-pages-url-shortener/github-pages-url-shortener-sees-issue.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/11/gh-pages-url-shortener/github-pages-url-shortener-sees-issue_hu_7ee721de3e0955eb.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/11/gh-pages-url-shortener/github-pages-url-shortener-sees-issue_hu_244ae7069bfecec.webp 710w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/11/gh-pages-url-shortener/github-pages-url-shortener-sees-issue.png&#34; width=&#34;710&#34; height=&#34;408&#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;と、 issue 番号⇒URL の転送が実施されます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://s.akimoto.jp/1&#34;&gt;https://s.akimoto.jp/1&lt;/a&gt; ( issue のタイトルに書いた別のアドレスへ転送されます)&lt;/p&gt;&#xA;&lt;p&gt;その&lt;a href=&#34;https://github.com/nelsontky/gh-pages-url-shortener/issues/5#issuecomment-728040879&#34;&gt;動作原理&lt;/a&gt;は&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;CNAME で gh-pages ブランチを指させる&lt;/li&gt;&#xA;&lt;li&gt;(短縮URLのパス)すべては 404.html に渡される&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/akky/gh-pages-url-shortener/issues/1&#34;&gt;GitHub issues から JSON API&lt;/a&gt; でURL転換情報を JavaScript が取得し、(それに従って)転送&lt;/li&gt;&#xA;&lt;li&gt;役に立つ?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;ということ。なるほど。GitHub issues を、転送用の lookup table として使っているわけですね。この後転送したい短縮URLを増やすのは、issue を発行すればよいということです。更新や削除も同様。面白い事考えるなあ。&lt;/p&gt;&#xA;&lt;p&gt;# &lt;a href=&#34;https://developer.github.com/v3/#rate-limiting&#34;&gt;GitHub API の公開アクセスには60回/時間の制限が掛かっている&lt;/a&gt;ので、実用的には使えないでしょう。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=25110879&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>text-to-handwriting 手書き風ノートを生成するツール</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/</link>
				<pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/saurabhdaware/text-to-handwriting&#34;&gt;saurabhdaware/text-to-handwriting&lt;/a&gt; は、手書き風フォントを使って手書きされたかのようなノートの画像を作れるオープンソースのツールです。&lt;/p&gt;&#xA;&lt;p&gt;ローカルでサーバを立て、&lt;a href=&#34;http://www8.plala.or.jp/p_dolce/site3-7.html&#34;&gt;日本語の手書きフォント&lt;/a&gt;をアップロードすれば日本語の手書き風ノートを生成することができました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-with-japanese-font.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-with-japanese-font_hu_e372d3ee4391bd56.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-with-japanese-font_hu_ab84abcb6f015107.webp 768w, https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-with-japanese-font_hu_eb658d0a9508ebeb.webp 1076w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-with-japanese-font.png&#34; width=&#34;1076&#34; height=&#34;886&#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;ノートを撮影したように影をつけたり、スキャナで取り込んだ風に画像を加工したり、それをまとめてPDFにもしてくれます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image.jpg&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image_hu_4bb5c1718d7a3831.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image_hu_98cbed128fb4935a.webp 768w, https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image_hu_8cb7453d5fd83203.webp 800w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image.jpg&#34; width=&#34;800&#34; height=&#34;1128&#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;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image-flat-low.jpg&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image-flat-low_hu_7d72eff47358b844.webp 320w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/08/text-to-handwriting-generates-handwriting-notes/text-to-handwriting-japanese-generated-image-flat-low.jpg&#34; width=&#34;320&#34; height=&#34;451&#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;/p&gt;</description>
			</item>
			<item>
				<title>Macintosh.js - Mac OS 8 エミュレーター in JavaScript on Electron</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/</link>
				<pubDate>Thu, 30 Jul 2020 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/</guid>
				<description>&lt;p&gt;1991年発売の Macintosh Quadra 900 に載っていた Mac OS 8.1 のエミュレーターを、Electron アプリとしてパッケージし、Mac/Windows/Linux で動くようにしたプロジェクトが &lt;a href=&#34;https://github.com/felixrieseberg/macintosh.js&#34;&gt;Macintosh.js&lt;/a&gt; です。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/macintoshjs.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/macintoshjs_hu_fa3753a35873484b.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/macintoshjs_hu_91e219c80e92785f.webp 768w, https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/macintoshjs_hu_74a370a7db6eece5.webp 819w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/macintosh-js-mac-os-8-emulator/macintoshjs.png&#34; width=&#34;819&#34; height=&#34;645&#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;Mac OS 8 は Basilisk II というエミュレーターによるものということで、オリジナルの Mac OS 8 とは異なる実装なのでしょう。入っているゲーム類は 1997年の MacWorld で配布されたデモCD を取り込んだものだとか。デモCD なので配布することに問題ないということなのかな。デモCDを作った側も、20年以上経ってこんな形で使われるとは予想していなかったのでは。&lt;/p&gt;&#xA;&lt;p&gt;[訂正 7/30]&lt;/p&gt;&#xA;&lt;p&gt;Basilik II は68000系のエミュレーターで、Mac OS 8 の実装は無関係だという指摘をいただきました。&lt;a href=&#34;https://www.emaculation.com/doku.php/basiliskii_osx_setup&#34;&gt;その通りのよう&lt;/a&gt;で、確認不足でした。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;ja&#34; dir=&#34;ltr&#34;&gt;Basilisk IIはハードウェアエミュレータなのでROMとOS イメージは別途必要だった気が＞「オリジナルの Mac OS 8 とは異なる実装なのでしょう」 / &lt;a href=&#34;https://t.co/kgSoldsJvJ&#34;&gt;https://t.co/kgSoldsJvJ&lt;/a&gt;&lt;/p&gt;&amp;mdash; Kazuho Oku (@kazuho) &lt;a href=&#34;https://x.com/kazuho/status/1288628136343564295?ref_src=twsrc%5Etfw&#34;&gt;July 30, 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;Demo CD のアプリを入れて配布、とあったのでいろいろ配慮されているのかと早合点しましたが、Macintosh Quadora を持っていてMac OS 8 のライセンスもある人、とかでないと動かすのは問題あるかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;[訂正終わり]&lt;/p&gt;&#xA;&lt;p&gt;Basilisk II のC++コードを Emscripten で WebAssembly に変換し、JavaScript で動かす。バイナリファイル一つで起動できるようにそれを Electron でパッケージする。それで出来上がったのが1991年のマック環境の再現、というのが努力の無駄遣い感にあふれてていいですね。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tafels.app - 子供の算数計算を鍛えるブラウザゲーム &#43; ソースコード</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/</link>
				<pubDate>Wed, 01 Jul 2020 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://tafels.app/&#34;&gt;Tafels.app&lt;/a&gt; は、ブラウザ上で動く計算練習のアプリです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels.app-multiplications.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels.app-multiplications_hu_d727c97afc99c934.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels.app-multiplications_hu_a65a4620a71aab5a.webp 497w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels.app-multiplications.png&#34; width=&#34;497&#34; height=&#34;614&#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;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels-app-multiply-4.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels-app-multiply-4_hu_4da55920371c763a.webp 480w, https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels-app-multiply-4_hu_9b39c7035ab8e0d4.webp 510w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2020/07/tafels-app-kids-math-game-on-browser/tafels-app-multiply-4.png&#34; width=&#34;510&#34; height=&#34;612&#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;表示された計算式の答えを、9個の候補の中から時間内に選ぶというだけのゲーム。一定以上正解すると次のレベルがアンロックされて遊べるようになります。&lt;/p&gt;&#xA;&lt;p&gt;答えの数字を入力するものに比べると本当の計算力を測る力は弱いかもしれませんが、スマートフォン上のブラウザで気軽に遊べるのはこちらの選択式のインタフェースかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/vnglst/tafels.app&#34;&gt;ソースコード&lt;/a&gt;が公開されています。JavaScript をコンパイルして実行コードに自身は含まないという特徴の&lt;a href=&#34;https://svelte.dev/&#34;&gt;Svelte&lt;/a&gt;で作られたフレームワーク&lt;a href=&#34;https://sapper.svelte.dev/&#34;&gt;Sapper&lt;/a&gt;を使って作られています。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=23672149&#34;&gt;Hacker News&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>ブラウザのアドレスバーをイコライザーっぽく</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/</link>
				<pubDate>Mon, 22 Apr 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/</guid>
				<description>&lt;p&gt;URL のハッシュ部分を書き換えることで、ブラウザのアドレスバーをグラフィックイコライザーにするというアイデアです。&lt;/p&gt;&#xA;&#xA;&lt;p&gt;これのソースコードがなんと2ツイートに収まるサイズ。&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://developer.mozilla.org/ja/docs/Web/API/MediaDevices/getUserMedia&#34;&gt;MediaDevices.getUserMedia()&lt;/a&gt;でマイクからの音声を取り込み、&lt;/p&gt;&#xA;&#xA;&lt;p&gt;動いた!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer_hu_bf071593e3265d26.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer_hu_8ba6c693a291191e.webp 585w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer.png&#34; width=&#34;585&#34; height=&#34;504&#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;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer-causes-browser-history-mess.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer-causes-browser-history-mess_hu_a44c4481dffff4e3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer-causes-browser-history-mess_hu_efbe6867e424cae7.webp 768w, https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer-causes-browser-history-mess_hu_65ef4030a89664b7.webp 837w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/browser-addressbar-equalizer/address-bar-equalizer-causes-browser-history-mess.png&#34; width=&#34;837&#34; height=&#34;779&#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;replaceState()を使った、履歴が壊れないバージョンも提案されています。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;// Alternative to avoid polluting browser history:&lt;br&gt;function z() {&lt;br&gt;  setTimeout(z, 40);&lt;br&gt;  a.getByteFrequencyData(d);&lt;br&gt;  var s = [];&lt;br&gt;  d.forEach(v =&amp;gt; s.push(l[Math.floor((v / 255) * 8)]));&lt;br&gt;  var t = document.title = s.join(&amp;quot;&amp;quot;);&lt;br&gt;  history.replaceState(history.state, t, &amp;#39;#&amp;#39; + t);&lt;br&gt;}&lt;/p&gt;&amp;mdash; Spencer (@spe_) &lt;a href=&#34;https://x.com/spe_/status/1118950773889617921?ref_src=twsrc%5Etfw&#34;&gt;April 18, 2019&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;</description>
			</item>
			<item>
				<title>ブラウザのファビコンでライブストリーム</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/04/favicon-livestream/</link>
				<pubDate>Mon, 22 Apr 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/04/favicon-livestream/</guid>
				<description>&lt;p&gt;ファビコンでアニメーションとかは以前からあるネタなので、その延長にあるアイデアというか。&lt;a href=&#34;https://wybiral.github.io/code-art/projects/tiny-mirror/&#34;&gt;ファビコンでカメラが映した映像を表示させるというプログラム&lt;/a&gt;です。&lt;/p&gt;&#xA;&lt;p&gt;作者の方がツイッターに動画を上げています。&lt;/p&gt;&#xA;&#xA;&lt;p&gt;ウェブカムに向かって手を振ってる様子がわかるでしょうか?&lt;/p&gt;&#xA;&lt;p&gt;自分で試したい場合、&lt;a href=&#34;https://wybiral.github.io/code-art/projects/tiny-mirror/&#34;&gt;こちらのサイト&lt;/a&gt;をChrome/Firefoxなどで開き、カメラへのアクセスを許可する必要があります。&lt;/p&gt;&#xA;&lt;p&gt;# Safari では動かないというレポートがあります&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/favicon-livestream/favicon-livestream.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/favicon-livestream/favicon-livestream_hu_3518d778a862be7c.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/04/favicon-livestream/favicon-livestream_hu_27f05802beee25d8.webp 592w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/04/favicon-livestream/favicon-livestream.png&#34; width=&#34;592&#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;ソースコードは&lt;a href=&#34;https://wybiral.github.io/code-art/projects/tiny-mirror/index.js&#34;&gt;こちら&lt;/a&gt;。短いですね。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=19712167&#34;&gt;Hacker News&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>都市の道路が向いてる方角を調べられるインタラクティブ地図</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/</link>
				<pubDate>Wed, 18 Jul 2018 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://mourner.github.io/road-orientation-map/#12/40.734/-73.992&#34;&gt;Road Orientations Interactive Map&lt;/a&gt;は、都市の道路の方角を円形のヒストグラムにまとめたインタラクティブ地図です。&lt;/p&gt;&#xA;&lt;p&gt;360度を64分割し、それぞれの方角を向いた道路の長さをカウントしていくと、表示中の都市がどの方角に向いた道路をどれぐらい持っているか、が右上に表示されます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-tokyo.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-tokyo_hu_796e551711eaa0f8.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-tokyo_hu_62c1938bec3ec1b3.webp 768w, https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-tokyo_hu_5ce1043a2c85e2b6.webp 859w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-tokyo.png&#34; width=&#34;859&#34; height=&#34;763&#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://mourner.github.io/road-orientation-map/#12.44/35.69836/139.72867&#34;&gt;東京都心部&lt;/a&gt;を表示すると、こんな分布に。どの方角にも同じぐらいの長さの道路が存在する、つまり、特に方角など気にせず、ランダムに近い方角に道路が伸びているというのがわかります。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-kyoto.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-kyoto_hu_d7910aa27afefc4.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-kyoto_hu_b62201579fa4e440.webp 768w, https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-kyoto_hu_5549235185b1f011.webp 859w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-kyoto.png&#34; width=&#34;859&#34; height=&#34;771&#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://mourner.github.io/road-orientation-map/#13.48/35.00396/135.75999&#34;&gt;京都&lt;/a&gt;を表示してみるとこんな結果に。ほとんどの道路は東西・南北に向いていて、それ以外の方角に向いた道は非常に少なそう。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-sapporo.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-sapporo_hu_5e42761f404b0b2c.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-sapporo_hu_189bd76062ca1992.webp 768w, https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-sapporo_hu_ef1b26a9f20bb3a9.webp 852w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/07/road-orientation-interactive-map/road-orientation-map-sapporo.png&#34; width=&#34;852&#34; height=&#34;761&#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://mourner.github.io/road-orientation-map/#12.16/43.08035/141.34778&#34;&gt;札幌&lt;/a&gt;。札幌も碁盤目の街という印象でしたが、こちらは京都と違って東西南北の向きには向いてないのですね。また、場所によって四方の方角が異なっていて、集計結果としては多い方角は8つ出てくるのがわかります。&lt;/p&gt;&#xA;&lt;p&gt;右下の検索ボックスで、世界中のどの場所でも表示できるのがいいですね。&lt;/p&gt;&#xA;&lt;p&gt;この地図、&lt;a href=&#34;https://openstreetmap.jp/&#34;&gt;OpenStreetMap&lt;/a&gt; のデータを使った&lt;a href=&#34;https://www.mapbox.com/maps/&#34;&gt;Mapbox&lt;/a&gt;のサービスを使って描画されています。表示されている地図の範囲の道路データから方角と距離を取り出し、集計するのは&lt;a href=&#34;https://github.com/mourner/road-orientation-map/&#34;&gt;コンパクトな JavaScript&lt;/a&gt; で済んでいます。&lt;/p&gt;&#xA;&lt;p&gt;# 作者はMapboxの中の人のようです&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.mapbox.com/visualizing-street-orientations-on-an-interactive-map-1eefa6002afc&#34;&gt;作者のウラディミール・アガフォンキンさん(Vladimir Agafonkin)は&lt;/a&gt;、アメリカの主要都市について同様の円形ヒストグラムをまとめた&lt;a href=&#34;http://vizual-statistix.tumblr.com/post/80468941142/unlike-like-emperor-kuzco-i-was-actually-born&#34;&gt;Vizual Statistix の記事を見て&lt;/a&gt;、「地図の任意の都市について簡単に同じように調べられたらいいな」と思って今回の開発を思い立ったということ。&lt;/p&gt;</description>
			</item>
			<item>
				<title>ニュージーランドがない世界地図</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/</link>
				<pubDate>Mon, 11 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/</guid>
				<description>&lt;p&gt;blocks で公開されたスニペット&lt;a href=&#34;http://bl.ocks.org/mapsmania/d4a8e9874e1ea118a6cb5dc720882ecf&#34;&gt;Maps with New Zealand(ニュージーランドのある地図)&lt;/a&gt;は、ページの右下に常にニュージーランドを表示するというJavaScriptコードです。でもなんのために?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.reddit.com/r/MapsWithoutNZ/&#34;&gt;ニュージーランドのない地図(Maps without New Zealand on them) という名前の reddit 掲示板があり、&lt;/a&gt;ここではニュージーランドを描き忘れている世界地図の事例を、様々な人が報告しています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.reddit.com/r/MapsWithoutNZ/comments/8oc5ka/science_world_in_vancouver_both_exhibition_and/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-at-vancouver-museum_hu_58e8d390589f9535.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-at-vancouver-museum_hu_97b4cb4c3f9d0ff0.webp 768w, https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-at-vancouver-museum_hu_5caa5c71bf532513.webp 4656w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-at-vancouver-museum.jpg&#34; width=&#34;4656&#34; height=&#34;2620&#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;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-japanese-slippers.jpg&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-japanese-slippers_hu_a3cc6e2b92d61648.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-japanese-slippers_hu_65fbfbfdc88741ff.webp 534w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-japanese-slippers.jpg&#34; width=&#34;534&#34; height=&#34;949&#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.reddit.com/r/MapsWithoutNZ/comments/564xdi/shimizu_spulse_japan_football_shirt/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-shimizu-spulse-uniform_hu_c0697edcfd15782d.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-shimizu-spulse-uniform_hu_596d48347249d438.webp 700w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-on-shimizu-spulse-uniform.jpg&#34; width=&#34;700&#34; height=&#34;700&#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;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.reddit.com/r/MapsWithoutNZ/comments/68aypv/the_rare_map_without_nz_or_japan/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-no-japan_hu_d04fc170414403b6.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-no-japan_hu_a9f084c394f52470.webp 576w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/no-nz-no-japan.jpg&#34; width=&#34;576&#34; height=&#34;768&#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;/p&gt;&#xA;&lt;p&gt;この reddit グループについては&lt;a href=&#34;https://www.bbc.com/news/av/magazine-41905040/the-country-that-keeps-getting-left-off-maps&#34;&gt;BBCニュースも過去に取り上げています&lt;/a&gt;。このreddit掲示板を元ネタに、イギリスの街頭で人々に「この世界地図に欠けている国があります。さあどこでしょう?」というクイズを出す様子を伝えているのですが、とてもイギリスっぽい企画。&lt;/p&gt;&#xA;&lt;p&gt;さらには、&lt;a href=&#34;https://www.govt.nz/&#34;&gt;ニュージーランド政府自身のサイト&lt;/a&gt;で、存在しないページを表示しようとすると、エラーページとしてこんなのが表示されます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.govt.nz/404&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/map-without-new-zealand-on-new-zealand-government-site-404_hu_33357755fe033ed3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/map-without-new-zealand-on-new-zealand-government-site-404_hu_822bef8e263c8459.webp 553w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/map-with-new-zealand/map-without-new-zealand-on-new-zealand-government-site-404.png&#34; width=&#34;553&#34; height=&#34;653&#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;/p&gt;&#xA;&lt;p&gt;忘れられることが多すぎるから慣れちゃっているのか、忘れられてしまうような遠くて小さな存在であることを逆に特徴として楽しんでいるのか。やたらに怒ったり抗議したりするのとは一味違う対応ですね。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;http://googlemapsmania.blogspot.com/2018/06/maps-with-new-zealand.html&#34;&gt;Maps Mania&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>人が見ていると恥ずかしがってちゃんと動かないソート関数</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2018/06/shy-sort-function/</link>
				<pubDate>Sun, 10 Jun 2018 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2018/06/shy-sort-function/</guid>
				<description>&lt;p&gt;Lynnさん(@chordbug)がツイッターで公開した&lt;a href=&#34;https://twitter.com/chordbug/status/1005701513719754752&#34;&gt;デモ&lt;/a&gt;がこちら。&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;I wrote a sorting function that only works when you&amp;#39;re looking at it: &lt;a href=&#34;https://t.co/vNMmXW8qzL&#34;&gt;pic.twitter.com/vNMmXW8qzL&lt;/a&gt;&lt;/p&gt;&amp;mdash; Lynn (finally free) (@chordbug) &lt;a href=&#34;https://x.com/chordbug/status/1005701513719754752?ref_src=twsrc%5Etfw&#34;&gt;June 10, 2018&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;「見てる時だけちゃんと動くソート関数を書いてみた」&lt;/p&gt;&#xA;&lt;p&gt;JavaScript で書かれた sort() という関数に配列を与えて呼び出しています。&lt;/p&gt;&#xA;&lt;p&gt;カメラに正面から顔が映っている状態では正しくソートされた結果が返ってくるのに対して、横を向いたリ顔を隠したりした状態で呼んだ時には、結果は毎回異なる適当な順番になっています。&lt;/p&gt;&#xA;&lt;p&gt;もう一つの動画もあって、こちらは逆に「見ていると緊張して正しくソートできない」関数のデモ&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;I also made a version that has stage fright… the “I can&amp;#39;t do it if you&amp;#39;re looking!!” sort &lt;a href=&#34;https://t.co/hoPNLR9bbR&#34;&gt;pic.twitter.com/hoPNLR9bbR&lt;/a&gt;&lt;/p&gt;&amp;mdash; Lynn (finally free) (@chordbug) &lt;a href=&#34;https://x.com/chordbug/status/1005703638323429377?ref_src=twsrc%5Etfw&#34;&gt;June 10, 2018&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;リプライでの質問に対して、Lynnさんはこのウェブページの&lt;a href=&#34;https://gist.github.com/lynn/ffe1f2ae55732ba4cebec010758ebf51&#34;&gt;ソースコードを公開&lt;/a&gt;してくれています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://trackingjs.com/&#34;&gt;tracking.js&lt;/a&gt;という人の顔を認識するライブラリのサンプルをベースに、顔が認識されている時のフラグを用意して、フラグがオンの時だけ正しくソートし、そうでない時はランダムに並べていることがわかります。&lt;/p&gt;&#xA;&lt;p&gt;ブラウザのカメラ入力を許可し、JavaScriptコンソールで同じように sort() を呼び出すと、手元でも動かすことができました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/shy-sort-function/shy-sort.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/shy-sort-function/shy-sort_hu_46a43a2b33624198.webp 480w, https://labs.cybozu.co.jp/blog/akky/2018/06/shy-sort-function/shy-sort_hu_fe43e1494878d82c.webp 517w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2018/06/shy-sort-function/shy-sort.png&#34; width=&#34;517&#34; height=&#34;495&#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;/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>「ギャンブラーの誤謬」ダイスプログラム</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2017/07/gamblers-dice/</link>
				<pubDate>Fri, 21 Jul 2017 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2017/07/gamblers-dice/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;「ギャンブラーの誤謬(ごびゅう)」と呼ばれる言葉がある。コイン投げで表、表、表と連続して表が出ると、次は裏が出そうな気がする心理傾向である。実際は何回表が連続して出ようとも、次に表が出る確率は1/2である。なぜなら、コイン投げは、毎回独立事象(前回の結果と次のコイン投げは無関係)だからである。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://kabu.muimi.com/k/kaiji/gobyu.html&#34;&gt;ギャンブラーの誤謬 : カイジに学ぶ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;現実のサイコロをまっとうにプログラムで再現すれば、乱数を使って毎回同じ確率で出るようになりますが、あえてギャンブラーが間違うような結果を出すサイコロを書くこともできます。&lt;a href=&#34;https://github.com/xori/gamblers-dice&#34;&gt;Javascript で書かれたギャンブラーダイス&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;このダイスクラス、コンストラクタで与えた数字の面のサイコロとなります。6ならD6, 20ならD20。物理的な制約がないのでD7でもD13でも何でもできます。&lt;/p&gt;&#xA;&lt;p&gt;このダイスでは、6面サイでたとえば1が出ると、次回は1が出にくくなります。何度も1が出れば、次に1が出る確率はどんどん下がっていきます。「これだけ1が続いたから、次は1は来ないだろう」というギャンブラーの思い込みが、本当に再現してしまうわけですね。&lt;/p&gt;&#xA;&lt;p&gt;ボードゲームでこのようなダイスを用意するのは大変ですが、コンピューターゲームなら、こういった判定機を使うことで、プレイヤーがギャンブラーの誤謬のせいで「こんなはずはない」「騙されている気がする」と感じにくいようにすることもできるんでしょうね。実際やってるゲームがあるのかも。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=14805265&#34;&gt;Hacker News&lt;/a&gt; image credit: Flickr &lt;a href=&#34;https://www.flickr.com/photos/jamesrbowe/4001776922&#34;&gt;James Bowe&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>サスペンスかSF風のBGMをブラウザで作れるサイト</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/</link>
				<pubDate>Tue, 12 Jul 2016 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://codepen.io/jakealbaugh/&#34;&gt;Jake Albaugh&lt;/a&gt; さんが公開した &lt;a href=&#34;http://codepen.io/jakealbaugh/full/qNrZyw/&#34;&gt;Musical Chord Progression Arpeggiator&lt;/a&gt;は、楽譜や楽器の素養が無くても、和音の要素をばらしてそれらしく弾いてくれるというアルペジエーターを、ブラウザ上のJavaScriptで作ったというものです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/musical-chord-progression-arpeggiator.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/musical-chord-progression-arpeggiator_hu_2c794a55ac11d6c3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/musical-chord-progression-arpeggiator_hu_40b1f49729093c46.webp 768w, https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/musical-chord-progression-arpeggiator_hu_9e79b59331b139b9.webp 1015w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/browser-scifi-bgm-composer/musical-chord-progression-arpeggiator.png&#34; width=&#34;1015&#34; height=&#34;817&#34; alt=&#34;musical-chord-progression-arpeggiator&#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;/p&gt;&#xA;&lt;p&gt;自分の作った動画に他人の著作権が及ばないBGMを簡単につけたいというときなどに、こういう自動作曲のサービスは使い良いのではないでしょうか。&lt;/p&gt;&#xA;&lt;p&gt;ブラウザ上でのインタラクティブな音を扱うオープンソースライブラリ&lt;a href=&#34;https://github.com/Tonejs/Tone.js&#34;&gt;Tone.js&lt;/a&gt;を使っています。codepen.io上に置かれたソースがそのまま実行されているので、やる気があれば自分用に改造することもできるでしょう。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://www.reddit.com/r/InternetIsBeautiful/comments/4rpvd4/musical_chord_progression_arpeggiator/&#34;&gt;reddit&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>PDFで作られたブロック崩し</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/</link>
				<pubDate>Tue, 05 Jul 2016 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/</guid>
				<description>&lt;p&gt;pdfファイルといえば様々な環境でなるべく同じに見えるようにレイアウトを固定した文書を配る時のフォーマットだと思いますが、そのpdf形式で作られたブロック崩しゲームが公開されました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://rawgit.com/osnr/horrifying-pdf-experiments/master/breakout.pdf&#34;&gt;breakout.pdf&lt;/a&gt; (Chromeブラウザでのみ動作)&lt;/p&gt;&#xA;&lt;p&gt;画面下の青い部分でマウスを動かすと、自機を左右に動かすことができます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/pdf-breakout.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/pdf-breakout_hu_e1a7d7bd9232a306.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/pdf-breakout_hu_e06d1b1830ec5636.webp 768w, https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/pdf-breakout_hu_838443c1852663e6.webp 812w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/pdf-breakout/pdf-breakout.png&#34; width=&#34;812&#34; height=&#34;528&#34; alt=&#34;pdf-breakout&#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://rsnous.com/&#34;&gt;Omar Rizwanさん&lt;/a&gt;による&lt;a href=&#34;https://github.com/osnr/horrifying-pdf-experiments&#34;&gt;ソースコードおよび解説&lt;/a&gt;によると、PDFは仕様上はFlashやら音声やら動画やらJavaScriptやら、いろんなものを内蔵できるようになっているのだそうです。&lt;/p&gt;&#xA;&lt;p&gt;ただ、ほとんどのPDFビューワーでは、そういった本流でない部分の仕様は実装していません。しかし、Chromeブラウザ内蔵のpdfビューワーでは、&lt;a href=&#34;https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf#page=709&#34;&gt;pdfがサポートしているJavaScriptの仕様&lt;/a&gt;のうちのいくつかが実装されているそうです。&lt;a href=&#34;https://mariomalwareanalysis.blogspot.jp/2012/02/how-to-embed-javascript-into-pdf.html&#34;&gt;pdfからJavaScriptを呼び出せるというブログ&lt;/a&gt;を見たRizwanさんは、使えるAPIだけを使って、ブロック崩しゲームを実装してしまった、というわけです。&lt;/p&gt;&#xA;&lt;p&gt;このChrome pdfビューワの実装においても、データベースに接続するとか、接続されたモニターを検出するとか、外部リソースにアクセスするとか、そういったほとんどの機能は「サポートしない」となっていて、pdfの内部で計算をすることはできても、外部とのやりとりをする手段の多くは使えないのだとか。&lt;/p&gt;&#xA;&lt;p&gt;この限定されたAPIから、テキストの背景色を動的に変えることはできないけれど、その枠の大きさと枠のスタイルは変えられる、ということで、ブロックの表示・非表示を制御したそうです。&lt;/p&gt;&#xA;&lt;p&gt;また、マウスの正確な位置を検出する手段はないけれど、PDF作成時に配置したフィールドへのマウスカーソルの出入りは検出できるということで、これを使ってマウスの場所を取得しているそうです。&lt;/p&gt;&#xA;&lt;p&gt;フィールドも後で追加することはできず、PDFに最初から持たせておく必要があるそうで、自機、ブロック、ボール、得点、残機のそれぞれを、大量のフィールドとしてPDF上に配置するスクリプトを書き、それでゲーム画面のPDFを生成させているということ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://plus.google.com/&amp;#43;FrancoisBeaufort/posts/9wwSiWDDKKP&#34;&gt;Chromeブラウザ上のpdfビューワは、もともとGoogleがFoxitから買い取ったpdfビューワーを基にしたものらしい&lt;/a&gt;ということで、Foxitの時代にその顧客がこの小さなJavaScriptセットを使っていたのではないか、とRizwanさんは推測しています。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;http://thenextweb.com/apps/2016/07/05/know-can-play-games-pdf-files/&#34;&gt;TheNextWeb&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Alex - 政治的に正しくない英単語の利用をチェックできるツール</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2015/09/alex-tool-points-out-inconsiderate-english-words/</link>
				<pubDate>Fri, 11 Sep 2015 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2015/09/alex-tool-points-out-inconsiderate-english-words/</guid>
				<description>&lt;p&gt;Catch insensitive, inconsiderate writing (心無く、浅はかな文章を捕らえよう) というキャッチで公開されている &lt;a href=&#34;http://alexjs.com/&#34;&gt;Alex&lt;/a&gt; は、JavaScript/Node.js ベースで書かれた英文チェックツールです。いわゆる&lt;a href=&#34;https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AB%E3%83%AB%E3%83%BB%E3%82%B3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%8D%E3%82%B9&#34;&gt;ポリティカル・コレクトネス&lt;/a&gt;(PC)に反する、政治的や社会的に差別や偏見のある単語が使われていないかを見つけてくれます。&lt;/p&gt;&#xA;&lt;p&gt;ウェブですぐに動作を試せる&lt;a href=&#34;http://alexjs.com/#demo&#34;&gt;デモが公開されている&lt;/a&gt;ので、それを見てみるのが一番早いでしょう。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2015/09/alex-tool-points-out-inconsiderate-english-words/alexjs-demo.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2015/09/alex-tool-points-out-inconsiderate-english-words/alexjs-demo_hu_78dc9bdcac33b5e3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2015/09/alex-tool-points-out-inconsiderate-english-words/alexjs-demo_hu_30ef49f4f6563f9a.webp 712w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2015/09/alex-tool-points-out-inconsiderate-english-words/alexjs-demo.png&#34; width=&#34;712&#34; height=&#34;610&#34; alt=&#34;alexjs-demo&#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;ldquo;he”とか&amp;quot;she&amp;quot;とかの男女を決め打ちで書いた主語、master/slave など人種差別の時に使われる表現、などを見つけ、赤でハイライトしてくれます。&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/wooorm/alex&#34;&gt;GitHub 上でソースは公開されていて、&lt;/a&gt;修正提案や用語の追加なども受け付けています。&lt;/p&gt;&#xA;&lt;p&gt;JavaScript のソースをローカルでコマンドラインで動かすこともできるし、Atom や Sublime といった著名なテキストエディタや、gulp からマニュアルファイル等のチェックをするために呼び出すためのインテグレーションコードも紹介されています。&lt;/p&gt;&#xA;&lt;p&gt;話題になっている Hacker News でも、GitHub の Issues でも、「なぜこれがダメなのか」とか「判定がおかしい」という文句が出ていて、問題の難しさが垣間見えます。&lt;/p&gt;&#xA;&lt;p&gt;機械的に処理しているのだから誤検出も多く、指摘されたことを全部書き換える必要はない(しするべきでもない)ですが、僕ら非ネイティブからしたら「そんな問題があったのか/気にしてる人がいるのか」という情報を簡単に得られるという点で、英文のメールやリリースを書いたときに通してみる意味はあるように思います。&lt;/p&gt;&#xA;&lt;p&gt;それが配慮なのか、それとも言葉狩りになってしまっているのか、検出結果を見て判断するのもまた非英語話者にはたいへんなことではありますが。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=10199414&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;関連&#34;&gt;関連&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://developer.cybozu.co.jp/akky/2015/08/wordsafety-checks-your-naming-has-bad-meanings-in-foreign-languages/&#34;&gt;ネーミングが外国語で危ない意味になってないか調べられる WordSafety.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://developer.cybozu.co.jp/akky/2013/10/joblint-check-your-hiring-posts/&#34;&gt;joblint – 英語の求人表現をチェックしてくれるツール&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://developer.cybozu.co.jp/akky/2014/07/whichenglish-finds-your-english-dialect/&#34;&gt;あなたの英語がどの方言かを判定してくれるサイト WhichEnglish&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>ASCII Cam - カメラの画像をリアルタイムでASCII Artに変換するサービス</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/</link>
				<pubDate>Tue, 02 Dec 2014 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://escobar5.github.io/asciicam/&#34;&gt;ASCII Cam&lt;/a&gt; は、ブラウザ上でwebカメラの入力をアスキーアートに変換するサービスです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/ascii-cam-top.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/ascii-cam-top_hu_a163df5d908e2d0a.webp 480w, https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/ascii-cam-top_hu_2593425817dec88.webp 768w, https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/ascii-cam-top_hu_1b67ac74480cb3fa.webp 1000w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/ascii-cam-top.png&#34; width=&#34;1000&#34; height=&#34;937&#34; alt=&#34;ascii-cam-top&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Start cam を押すと、初回はカメラへのアクセスをしても良いかというのがブラウザから訊かれます。許可をするとウェブカムの映像がASCII文字だけで表示されます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/asciicam.gif&#34;&gt;&lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2014/12/ascii-cam-makes-realtime-ascii-art/asciicam.gif&#34; width=&#34;496&#34; height=&#34;600&#34; alt=&#34;asciicam&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ソースコードもGithubで公開されています。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Untrusted - JavaScriptをいじって先へ進むRogueライクゲーム</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/</link>
				<pubDate>Tue, 08 Apr 2014 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%82%B0%E3%83%A9%E3%82%A4%E3%82%AF%E3%82%B2%E3%83%BC%E3%83%A0&#34;&gt;ローグライクゲーム、というジャンル&lt;/a&gt;があります。Rogue(ローグ)を代表とする自動的に生成される迷路・迷宮から脱出するというゲームで、日本で有名なものでも、ネットハック、トルネコの大冒険、チョコボの不思議なダンジョンなど多数あります。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://alex.nisnevich.com/untrusted/&#34;&gt;Untrusted&lt;/a&gt; は、そのようなローグ風ゲームのバリエーションなのですが、JavaScriptのコードを操作することでパズル的な迷宮を解き、先へ進むというのが最大の特徴です。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-3.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-3_hu_e2d33f7720373311.webp 480w, https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-3_hu_e14b391d471db938.webp 768w, https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-3_hu_284f229987e9c9e3.webp 1248w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-3.png&#34; width=&#34;1248&#34; height=&#34;596&#34; alt=&#34;untrusted-3&#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;ldquo;を、階段&amp;rdquo;□&amp;ldquo;まで、カーソルキーを使って導かなければいけません。しかし、普通に上下左右に移動しただけでは、出口にたどり着くことはできなくなっています。&lt;/p&gt;&#xA;&lt;p&gt;そこで、右側のコードに書かれた、迷宮を生成するJavaScriptのコードのうち、書き換えて良いという黒地の部分を変更し、Ctrl+5 で実行するとあら不思議、壁や出口の場所を書き換えてしまうことで、次の階へと進むことができるようになるというわけです。&lt;/p&gt;&#xA;&lt;p&gt;いかだを使ったり鍵を探したりと、面ごとに違う趣向の障害が配置されています。&lt;/p&gt;&#xA;&lt;p&gt;その階がどういうトラップなのか、どんな障害が設けられているかというヒントがJavaScriptのコメントとして書かれているので、解く際の参考になるでしょう。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-2.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-2_hu_3f7c860a76ed17ec.webp 480w, https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-2_hu_2cddc30d4d526935.webp 561w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2014/04/untrusted-meta-javascript-rogue-like-game/untrusted-2.png&#34; width=&#34;561&#34; height=&#34;535&#34; alt=&#34;untrusted-2&#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;a href=&#34;http://alex.nisnevich.com/untrusted/&#34;&gt;UntrustedのソースコードはオープンソースとしてGitHub上で公開されています&lt;/a&gt;。ソースコードを見れば現在のダンジョンが何階あるかはわかってしまうのですが。&lt;/p&gt;&#xA;&lt;p&gt;# HackerNewsで紹介されたせいで、現在ゲームはちょっと重かったり、正しく動かなかったりすることがあるようです。その場合は、footerにリンクのあるミラーサイトで遊んだり、オープンソースですから自分のところで動かしたりということもできます。&lt;/p&gt;&#xA;&lt;p&gt;via HackerNews&lt;/p&gt;</description>
			</item>
			<item>
				<title>画面をスクロールするとオナラの音が出るJavaScriptライブラリfartscroll.js</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2013/05/fartscroll-js/</link>
				<pubDate>Sat, 11 May 2013 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2013/05/fartscroll-js/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://theonion.github.io/fartscroll.js/&#34;&gt;fartscroll.js&lt;/a&gt; は、画面をスクロールさせるとオナラの音が出る、というジョークライブラリです。このページをスクロールさせてみてください。&lt;/p&gt;&#xA;&lt;p&gt;どれぐらいスクロールさせた時に音が出るかも、パラメーターとして与えることができます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2013/05/fartscroll-js/fartscroll-usage.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2013/05/fartscroll-js/fartscroll-usage_hu_f6af7414259996f7.webp 480w, https://labs.cybozu.co.jp/blog/akky/2013/05/fartscroll-js/fartscroll-usage_hu_41a4d4cdaaa6b346.webp 547w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2013/05/fartscroll-js/fartscroll-usage.png&#34; width=&#34;547&#34; height=&#34;412&#34; alt=&#34;fartscroll-usage&#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;http://www.theonion.com/&#34;&gt;The Onion&lt;/a&gt; は、日本でいう &lt;a href=&#34;http://bogusne.ws/&#34;&gt;bogusnews&lt;/a&gt; みたいな、嘘ニュースで笑いを取ることで有名なサイトです。&lt;/p&gt;&#xA;&lt;p&gt;# 今bogusnewsのトップにあるのも&lt;a href=&#34;http://bogusne.ws/article/%E4%BA%BA%E6%B0%97%E3%82%A2%E3%83%8B%E3%83%A1%E3%80%8C%E9%80%B2%E6%92%83%E3%81%AE%E5%B7%A8%E4%BA%BA%E3%80%8D%E3%80%81%E3%82%B5%E3%82%B7%E3%83%A3%E3%81%AE%E6%94%BE%E5%B1%81%E3%82%B7%E3%83%BC%E3%83%B3.html&#34;&gt;屁のニュース&lt;/a&gt;ですね。流行ってるの?&lt;/p&gt;&#xA;&lt;p&gt;その The Onion 技術チームが新たにリリースしたこのライブラリは、jQueryベースで作られていて、&lt;a href=&#34;https://github.com/theonion/fartscroll.js&#34;&gt;GitHubで公開されています&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;script type=&#34;text/javascript&#34; src=&#34;https://labs-staging.31tools.com/blog/akky/wp-content/uploads/2013/05/fartscroll.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;text/javascript&#34;&gt;if (location.href.match(/http:\/\/developer.cybozu.co.jp\/akky\/2013\/05\/fartscroll-js\//)) { fartscroll(200); }&lt;/script&gt;</description>
			</item>
			<item>
				<title>slitscanner.js - 動画をスリットスキャンして一枚の画像に収めるライブラリ/ブックマークレット</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/</link>
				<pubDate>Tue, 22 Jan 2013 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/</guid>
				<description>&lt;p&gt;「スリットスキャン」とは、&lt;a href=&#34;http://www.fabloid.jp/2012/11/21/surreal-video-shows/&#34;&gt;こちらで解説されています&lt;/a&gt;が、時間軸のある動画などを、フレームを動画上の場所ごとにずらすことで作られる特殊な映像効果、のようです。&lt;/p&gt;&#xA;&lt;p&gt;アナログの時代はカメラの前に置いたスリットを動かすことで、デジタルになってからは動画編集ソフトで、こういった効果をつけているそうです。&lt;/p&gt;&#xA;&lt;p&gt;プロが人の手で編集を加えれば、独特の不思議な映像はもちろんできるのですが、VimeoやYouTubeなどの動画サービスで再生している動画を、ブラウザ上でそのままスリットスキャンしてしまおう、というのがSha Hwangさんによる&lt;a href=&#34;http://sketches.postarchitectural.com/slitscanner/&#34;&gt;slitscanner.js&lt;/a&gt;。HTML5のビデオプレイヤーで再生できる動画をスリットスキャンで一枚の画像にまとめてくれるライブラリ(とライブラリを使ったブックマークレット)です。&lt;/p&gt;&#xA;&lt;p&gt;上記ライブラリページのブックマークレットをブックマークしておいて、&lt;a href=&#34;http://vimeo.com/&#34;&gt;Vimeo&lt;/a&gt;で適当な動画を開き、右下の&amp;quot;Switch to HTML5 Player&amp;quot;で(Flashプレイヤーではなく)HTML5プレイヤーを使うようにしてから、ブックマークレットを実行すると、動画の再生にあわせてスリットスキャンした画像が作られていきます。&lt;/p&gt;&#xA;&#xA;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;iframe&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;src=&#34;https://player.vimeo.com/video/56902953?dnt=0&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allow=&#34;fullscreen&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/iframe&gt;&#xA;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;上の動画から作ってみたスリットスキャン画像がこれ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://developer.cybozu.co.jp/akky/2013/01/slitscanner-js/slitscanned-56902953/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscanned-56902953_hu_915496a98027eae3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscanned-56902953_hu_ec91a9353982f6be.webp 768w, https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscanned-56902953_hu_fb79c1291d177cd8.webp 861w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscanned-56902953.png&#34; width=&#34;861&#34; height=&#34;706&#34; alt=&#34;slitscanned-56902953&#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;/p&gt;&#xA;&#xA;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;iframe&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;src=&#34;https://player.vimeo.com/video/57463725?dnt=0&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; allow=&#34;fullscreen&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/iframe&gt;&#xA;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;もう一つためしてみました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://developer.cybozu.co.jp/akky/2013/01/slitscanner-js/slitscan-57463725/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscan-57463725_hu_b7bcd8d2d6d6b7f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscan-57463725_hu_2009f0517cb33a11.webp 768w, https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscan-57463725_hu_633e17df48776c2b.webp 876w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2013/01/slitscanner-js/slitscan-57463725.png&#34; width=&#34;876&#34; height=&#34;711&#34; alt=&#34;slitscan-57463725&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;動きの早い動画だと細切れになりすぎて、よくわからない画像ができてしまいますね。Vimeoだけじゃなく、HTML5プレイヤーを使っていればYouTubeなどでも使えるのですが、YouTubeの場合は広告がFlash Playerで再生されるので面倒なことがあるとか。&lt;/p&gt;&#xA;&lt;p&gt;うまくはまれば、長時間動画の雰囲気や盛り上がっているポイントを見つけるのに役立つかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;ブラウザで再生されている動画を、手元で加工することで面白くしたり発見したり、ということも、いろいろ出てくるのかもしれないですね。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;http://flowingdata.com/2013/01/21/slitscanning-online-videos/&#34;&gt;Slitscanning online videos&lt;/a&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
