<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Golang on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/golang/</link>
		<description>Recent content in Golang on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Mon, 17 May 2021 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/golang/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>オープンソースプロジェクト内のTODO個数調査</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/</link>
				<pubDate>Mon, 17 May 2021 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/</guid>
				<description>&lt;p&gt;マーティン・シュライスさん(Martin Schleiss)がブログで公開したのが、Linux をはじめとする巨大オープンソースプロジェクトのソースコードにおける「やらないといけない」あるいは「後で考える」マークである&lt;a href=&#34;https://schleiss.io/plotting-source-code-todos-for-open-source-projects&#34;&gt;&amp;ldquo;TODO&amp;quot;の個数の移り変わりをグラフ化したもの&lt;/a&gt;です。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-php.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-php_hu_42d471dbed994217.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-php_hu_d84bf66808deea28.webp 724w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-php.png&#34; width=&#34;724&#34; height=&#34;413&#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;基本的には、プロジェクトの年月が重なるほど、コードに書かれた TODO の個数は増えていくようです。上の PHP のグラフでは、メジャーリリースや通常リリースの時期の少し前に TODO が増えているようにも見えます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-rust.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-rust_hu_e9989cc2ecec201c.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-rust_hu_f765e8e3ecc8e856.webp 720w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-rust.png&#34; width=&#34;720&#34; height=&#34;409&#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;プロジェクトによっては単調増加ではないものも。Rust は TODO の個数自体が少ないように見えるし、途中で数個まで減っている時期もあるので、意識的に TODO の解消を目指したりしていたのかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-nextjs.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-nextjs_hu_341bde9c23ce6f9f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-nextjs_hu_e416def6916be00e.webp 718w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2021/05/count-todos-in-oss-repositories/todos-chart-nextjs.png&#34; width=&#34;718&#34; height=&#34;422&#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;Next.js 、version 10 と 10.1 のどちらのリリース時期でもなく、突然増えています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://schleiss.io/plotting-source-code-todos-for-open-source-projects&#34;&gt;ブログ記事&lt;/a&gt;では言語処理系やライブラリなど、有名なもの20個弱についてグラフ化されています。&lt;/p&gt;&#xA;&lt;p&gt;プロジェクトの規模、歴史の長さによってもTODO の個数は変わりますが、規模や歴史と無関係に多い少ないもあったりもします。シュライスさんはTODO が有ることはどのオープンソースプロジェクトにおいても貢献をする余地があるということだ、と言っています。あなたが良く使っているツール/ライブラリのTODO は増えているでしょうか?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Gamedetect.io - ゲーム画面の画像からゲーム名を当てるサービス</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/03/gamedetect-io-tells-you-which-game-from-screenshot/</link>
				<pubDate>Mon, 11 Mar 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/03/gamedetect-io-tells-you-which-game-from-screenshot/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://gamedetect.io/&#34;&gt;GameDetect.io&lt;/a&gt; のフォームにビデオゲームの画面写真を与えると、JSON でそれがどのゲームに似ているかを返してくれます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2019/03/gamedetect-io-tells-you-which-game-from-screenshot/gamedetect.io_.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2019/03/gamedetect-io-tells-you-which-game-from-screenshot/gamedetect.io__hu_ee516843d699f3f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2019/03/gamedetect-io-tells-you-which-game-from-screenshot/gamedetect.io__hu_40ad5a1dcc6efa19.webp 638w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2019/03/gamedetect-io-tells-you-which-game-from-screenshot/gamedetect.io_.png&#34; width=&#34;638&#34; height=&#34;772&#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;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;{ &amp;quot;filename&amp;quot;:&amp;quot;dragonquest5.jpg&amp;quot;, &amp;quot;predictions&amp;quot;:[ { &amp;quot;label&amp;quot;:&amp;quot;stardew valley&amp;quot;, &amp;quot;probability&amp;quot;:0.568226 }, { &amp;quot;label&amp;quot;:&amp;quot;the legend of zelda a link to the past&amp;quot;, &amp;quot;probability&amp;quot;:0.15813187 }, { &amp;quot;label&amp;quot;:&amp;quot;super mario maker&amp;quot;, &amp;quot;probability&amp;quot;:0.031073814 }, { &amp;quot;label&amp;quot;:&amp;quot;factorio&amp;quot;, &amp;quot;probability&amp;quot;:0.027034273 }, { &amp;quot;label&amp;quot;:&amp;quot;don t starve together&amp;quot;, &amp;quot;probability&amp;quot;:0.020903632 } ], &amp;quot;speed_ms&amp;quot;:1113 }&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Tensorflow と Golang によって&lt;a href=&#34;https://github.com/s32x/gamedetect&#34;&gt;実装されて&lt;/a&gt;おり、学習データとしてはTwitch のゲーム配信画面をスクレイプしたものを使っています。ゲーム実況にはゲームのタイトル情報とゲーム画面があるので、これを正答として学習させ、モデルを作っているのですね。&lt;/p&gt;&#xA;&lt;p&gt;そのような作りなので、回答で出てくる候補のゲームは&lt;a href=&#34;https://github.com/s32x/gamedetect/blob/master/graph/output_labels.txt&#34;&gt;Twitch で今最も多く中継されているゲームトップ100&lt;/a&gt; からだけとなっています。(冒頭で試したドラクエ5 の画面では、Stardew Valley やゼルダなど画面の似ているものが出てしまっていますね。)&lt;/p&gt;</description>
			</item>
			<item>
				<title>go-license-detector - オープンソースのライセンスを判定してくれるツール</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/01/go-license-detector-tells-you-license-from-source-codes/</link>
				<pubDate>Thu, 31 Jan 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/01/go-license-detector-tells-you-license-from-source-codes/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/src-d/go-license-detector&#34;&gt;go-license-detector&lt;/a&gt; は、プロジェクトのドキュメントファイルをスキャンして、そのプロジェクトがどんなライセンスかを推定するというツールです。&lt;a href=&#34;https://spdx.org/licenses/&#34;&gt;SPDX&lt;/a&gt; で400種類近くに分類されている多種多様なライセンスの分類名(identifier)の形でライセンス情報を返します。&lt;/p&gt;&#xA;&lt;h3 id=&#34;従来のツール&#34;&gt;従来のツール&lt;/h3&gt;&#xA;&lt;p&gt;Ruby製の&lt;a href=&#34;http://ben.balter.com/licensee/&#34;&gt;Licensee&lt;/a&gt;では、ライセンスファイルの存在や、既知のライセンスファイルとの一致度を見て、オープンソースのライセンスが何かを判定しています。GitHub 自身も、各リポジトリのライセンスを判定するのに利用しているそうです。&lt;/p&gt;&#xA;&lt;p&gt;他にもいくつか、Google の licenseclassifier などライセンスを推定するツールはあるのですが、go-license-detector は以下の特徴があるそうです。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;誤判定があっても、「不明」という結果を少なくする方向の検出&lt;/li&gt;&#xA;&lt;li&gt;Golang による高速な処理&lt;/li&gt;&#xA;&lt;li&gt;GitHub の人気トップ1000リポジトリ(手動でライセンスが判定されている)をできるだけ当てられることを目指す&lt;/li&gt;&#xA;&lt;li&gt;SPDX の分類に従う&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;精度比較&#34;&gt;精度比較&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.sourced.tech/post/gld/&#34;&gt;ブログ記事では&lt;/a&gt;、既存の各ツールとの判定精度の比較をしています。902のソースコードを判定し、ライセンスがあるものに関して99%という高率の判定結果、また、判定の速度もとても優秀ということ。&lt;/p&gt;&#xA;&lt;p&gt;現在は LICENSE や READEME など、一定の種類の名前でライセンス情報を探そうとしていますが、それらのファイルについて既存のライセンス文書との一致をみるにしても、単なる一致ではなく単語のゆらぎやミススペルなどまでケアしているようです。&lt;/p&gt;&#xA;&lt;p&gt;何か一つオープンソースのプロジェクトが有ったとして、そのライセンスが何であるかを当て、それを信じて利用するというよりは、多数のリポジトリをまとめて分析するような用途に向いているのかなと思いました。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://blog.sourced.tech/post/gld/&#34;&gt;Detecting licenses in code with Go and ML · source{d} blog&lt;/a&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
