<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Python on akky@サイボウズラボ・ブログ</title>
		<link>https://labs.cybozu.co.jp/blog/akky/tags/python/</link>
		<description>Recent content in Python on akky@サイボウズラボ・ブログ</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Thu, 01 Dec 2022 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://labs.cybozu.co.jp/blog/akky/tags/python/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>OpenAIとStreamlitを使ったAIツイート自動生成サイト with ソースコード</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/12/ai-tweets-generator-with-openai-and-streamlit/</link>
				<pubDate>Thu, 01 Dec 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/12/ai-tweets-generator-with-openai-and-streamlit/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://openai.com/api/&#34;&gt;OpenAI GPT-3 API&lt;/a&gt;を呼び出して、お題に沿った適当なツイートを生成するwebサイトが、ソースと共に公開されています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://tweets.streamlit.app/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/12/ai-tweets-generator-with-openai-and-streamlit/streamlit-tweet-generator-jashin-chan_hu_663cc8de58e2bcc8.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/12/ai-tweets-generator-with-openai-and-streamlit/streamlit-tweet-generator-jashin-chan_hu_2fa08170c16b0447.webp 734w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/12/ai-tweets-generator-with-openai-and-streamlit/streamlit-tweet-generator-jashin-chan.jpg&#34; width=&#34;734&#34; height=&#34;735&#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;指定するのは3つ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Topic: 語らせたい話題 Mood: どんなムードで語らせるか ([使える形容詞の一覧)](https://github.com/kinosal/tweet/blob/main/moods.txt) Twitterアカウント名: 既存のtwitterユーザーの最近のツイートを真似させる&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Mood と twitterユーザーはオプションなので、topic だけでも何かしら作ってくれます。&lt;/p&gt;&#xA;&lt;p&gt;例えばで以下のように入力してみました&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Topic: Dropkick on my devil Mood: dreamy, happy, relaxed, tender Twitter: イーロン・マスク(elonmusk)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;で、生成されたのがこれ&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Just watched an episode of #DropkickOnMyDevil and it made me feel so relaxed and happy - it&amp;rsquo;s the perfect way to end the day 🌃✨ (邪神ちゃんドロップキックを観たとこ。とてもリラックスしてハッピーな気分になった。パーフェクトな一日の締めくくりだ)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;模倣対象とムードを変えると、まったく違うツイートが出来上がってきます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Topic: Dropkick on my devil Mood: inspirational, thoughtful, dignified Twitter: アメリカ大統領(potus)&lt;/code&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>バスケットボール中継のハイライト動画をPythonで作る</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/08/generate-nba-highlights-with-python/</link>
				<pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/08/generate-nba-highlights-with-python/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://betterprogramming.pub/automatically-creating-nba-highlights-in-5-minutes-7f90bfedd775&#34;&gt;Python で NBAハイライト動画を自動生成する&lt;/a&gt;という記事が面白かったのでご紹介。&lt;/p&gt;&#xA;&lt;p&gt;ゲームをまるごと観戦する暇がない時、ハイライト動画を見て済ますスポーツファンは多いでしょう。ハイライト動画は球団やテレビ局などが編集して出してきますが、必ず見られるわけでも、自分が見たい粒度のハイライト動画が必ずあるわけでもないかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;ノーム・エフラットさん(Noam Ephrat)が自分だけのハイライト動画を自動で作るために使ったのは、Python、NBA公式のAPI、録画したゲーム動画、OCRライブラリ。&lt;/p&gt;&#xA;&lt;p&gt;NBAのAPI&lt;a href=&#34;https://github.com/kshvmdn/nba.js/blob/master/docs/api/DATA.md&#34;&gt;(参考)&lt;/a&gt; では何分何秒にどちらのチームの誰がどういうプレイをして、シュートが入ったとか外れたとかいうプレイバイプレイ(play-by-play, PBP)の情報が公開されています。日付、ゲームID、ピリオド(クオーター)を指定するとJSONが返ってきます。これが一つ目の要素。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://data.nba.net/data/10s/prod/v1/20220201/0022100784_pbp_1.json&#34;&gt;https://data.nba.net/data/10s/prod/v1/20220201/0022100784_pbp_1.json&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;そして、録画した動画をフレームごとに切り出して、中継中に表示されたゲーム時計の部分を &lt;a href=&#34;https://github.com/tesseract-ocr/tesseract&#34;&gt;OCR ライブラリの Tesseract&lt;/a&gt; でピリオドやゲーム時間を抽出します。これが二つ目の要素&lt;/p&gt;&#xA;&lt;p&gt;あとは、プレイバイプレイの重要シーンの発生した時刻に合わせて、動画のフレームを切り出し、切り出したところをつなげていくと、&lt;a href=&#34;https://www.youtube.com/watch?v=pTmcIf_Zqo4&#34;&gt;ゲームが動いたところだけがまとまったハイライト動画&lt;/a&gt;を作ることができたということ。&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;&#x9;&#x9;&#x9;&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/pTmcIf_Zqo4?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;&#x9;&#x9;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;ざっと見てみて、プレイバイプレイのデータにあるところだけだと、どうしても点が増えたシュート成功の場面が多くなるのかな、とも思いましたが、人間が編集したハイライト動画でも成功シーンが多いので気のせいかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;作ったハイライト動画を公開するのは著作権的にだめだと思いますが、個人でハイライトを作って観るのは問題なさそうでは。&lt;/p&gt;&#xA;&lt;p&gt;自分の基準で抜き出すところを選べるからには、&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ひいきチームの得点シーンばかりを集めたり&lt;/li&gt;&#xA;&lt;li&gt;応援する特定の選手の絡むシーンだけを集めたり&lt;/li&gt;&#xA;&lt;li&gt;点差や時間を考えて、より劇的にゲームが動いたシーンだけを集めたり(これは人が編集する時と似た結果になるかも)&lt;/li&gt;&#xA;&lt;li&gt;自分の使える時間に応じてハイライト動画の長さを指定して変えたり&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;など、よりパーソナライズされたハイライト動画を作れる可能性もありますね。&lt;/p&gt;&#xA;&lt;p&gt;バスケットボールという競技が特に時計が重要で、常時正確な時刻が中継に表示されていることや、APIで提供されるゲームログにも時刻情報がふんだんに含まれているという点も、うまく自動生成にマッチしているというのもありそうですね。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Load of the Codes - プログラマ向けテキストアドベンチャーゲーム(序章)</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/</link>
				<pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.lordofthecodes.com/&#34;&gt;Lord Of The Codes&lt;/a&gt; は、RPG風の中世世界を舞台にしたテキストアドベンチャーゲーム。パズルを解くことで先へと進むゲームです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lordofthecodes.com/&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/lordofthecodes-top_hu_23b11493fa669569.webp 466w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/lordofthecodes-top.png&#34; width=&#34;466&#34; height=&#34;214&#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;偉大な魔術師コナルド・ドゥヌース(Konald Dnuth。どっかで聞いたような名前)と組んで迷宮を進むあなたは、物語の中に出てくるヒントから、謎を解いて入力し、正解することで先へ進むことができます。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/lordofthecodes-level0.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/lordofthecodes-level0_hu_570446062db097c3.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/lordofthecodes-level0_hu_92f89bbb815fdf93.webp 754w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/load-of-the-codes/lordofthecodes-level0.png&#34; width=&#34;754&#34; height=&#34;687&#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://replit.com/&#34;&gt;Replit&lt;/a&gt;による Python インタプリタ環境が埋め込まれていて、これを使って謎を解いても構いません。手元で他の言語で解いても、あるいは暗算(!)で解いても、正答さえ入れれば先へ進むことができます。&lt;/p&gt;&#xA;&lt;p&gt;現在、2問答えるともうゲームは行き止まりで、メール登録フォームが案内されます。登録すると完全版が公開された際に優先で案内されるみたいです。&lt;/p&gt;&#xA;&lt;p&gt;ずいぶん初期の段階で公開したものだな、と思いますが、反響があればこの先が作られやすいかもしれませんね。&lt;/p&gt;&#xA;&lt;p&gt;via reddit&lt;/p&gt;</description>
			</item>
			<item>
				<title>Wordle(ワードル)必勝法</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/</link>
				<pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/</guid>
				<description>&lt;p&gt;twitter など SNS での拡散力が強くて&lt;a href=&#34;https://japan.cnet.com/article/35182012/&#34;&gt;急速&lt;/a&gt;に&lt;a href=&#34;https://www.famitsu.com/news/202201/07247076.html&#34;&gt;話題&lt;/a&gt;となってきた&lt;a href=&#34;https://www.powerlanguage.co.uk/wordle/&#34;&gt;英単語当てゲーム Wordle(ワードル)&lt;/a&gt; 、もう遊びましたか?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-top.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-top_hu_4834c8e0f4798973.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-top_hu_b90e1168189ad635.webp 548w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-top.png&#34; width=&#34;548&#34; height=&#34;515&#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;6回の試行から回答の単語に含まれるアルファベットの種類と位置を絞っていくというクイズゲームですが、「英単語」という片寄りのあるデータ群から推測するというゲームの性質から、どのようにすればより早く答えにたどり着けるかということを考える人も多いようです。&lt;/p&gt;&#xA;&lt;p&gt;カリフォルニア大アーバイン校でCSを学ぶ&lt;a href=&#34;https://slc.is/&#34;&gt;スペンサー・チャーチル氏(Spencer Churchill)&lt;/a&gt;は、Wordle で使われる&lt;a href=&#34;https://slc.is/data/wordles.txt&#34;&gt;すべての英単語のリスト&lt;/a&gt;と Python スクリプトによって、できるだけ早く Wordle の正解にたどり着きたい人のための&lt;a href=&#34;https://slc.is/#Best%20Wordle%20Strategy%20%E2%80%94%20Explore%20or%20Exploit&#34;&gt;最善初手・二手&lt;/a&gt;を絞り込んでいます。&lt;/p&gt;&#xA;&lt;p&gt;使われている文字を特定するほど次の回での絞り込みが進むのですから、できるだけ早い段階で多くの文字を試すのが有効かと思われます。&lt;/p&gt;&#xA;&lt;p&gt;英単語には良く出てくる文字、あまり出てこない文字があるのですから、良く出てくる文字を5文字使った単語が、一番絞り込みができる良い初手ということになります。&lt;/p&gt;&#xA;&lt;p&gt;チャーチルさんはまず、すべての対象単語を集計し、最も出現頻度の高い方からのアルファベット・リストを得ました。&lt;/p&gt;&#xA;&lt;p&gt;次に、頻度の高い方から5文字ずつを選び、その5文字で構成される単語をスクリプトに出させます。&lt;/p&gt;&#xA;&lt;p&gt;最速のための5文字の単語が複数あったため、こんどはそれらの中でもっとも有利な単語はどれか考えます。アルファベットの登場の有無だけでなく、アルファベットの正しい位置がわかる方が正解に近づくため、こんどは位置を含めて最も出現頻度が高いものを抽出すれば、これが最も有利な初手となるというわけです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-best-start-aeros-unlit.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-best-start-aeros-unlit_hu_2acdd0f34429e4e7.webp 480w, https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-best-start-aeros-unlit_hu_524800e8ccd56913.webp 541w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2022/01/wordle-best-starting-move/wordle-best-start-aeros-unlit.png&#34; width=&#34;541&#34; height=&#34;745&#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://slc.is/#Best%20Wordle%20Strategy%20%E2%80%94%20Explore%20or%20Exploit&#34;&gt;ブログで提示された&lt;/a&gt;最善の初手・二手を使って今日のWordle を解いてみたところ、2段目にしてかなりの絞り込みができ、4回目で正当にたどり着くことができました。&lt;/p&gt;&#xA;&lt;p&gt;このブログ記事を紹介する&lt;a href=&#34;https://news.ycombinator.com/item?id=29928263&#34;&gt;Hacker News&lt;/a&gt;の掲示板では、他にも理想の初手を考えていたいろいろな人たちからのコメントが集まっています。ORATE(演説する), SLATE(粘土板), SAUTE(炒める), AESIR(アース神族) などなど各自の考えるベスト・オープニングが紹介されていました。&lt;/p&gt;&#xA;&lt;p&gt;また、人力であれば今回のような初手・二手目を覚えておくぐらいが関の山ですが、その場でプログラム的に解くのであれば当然、初手の結果を見てベストな二手目は変化しうるはずです。これを含めてのソルバー作りもプログラミングの課題として面白いのではないでしょうか。(&lt;a href=&#34;https://github.com/jkatzur/wordle-solver&#34;&gt;ソルバー&lt;/a&gt;を&lt;a href=&#34;https://github.com/nikitaborisov/autowordl&#34;&gt;作ってる&lt;/a&gt;人も当然いますね)&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=29928263&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<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>Pythonによる自動化の結果、ニューヨーク中でタダメシが食えるようになったエンジニアの話</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2019/04/free-dish-by-python-automation/</link>
				<pubDate>Fri, 26 Apr 2019 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2019/04/free-dish-by-python-automation/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://medium.com/@chrisbuetti/how-i-eat-for-free-in-nyc-using-python-automation-artificial-intelligence-and-instagram-a5ed8a1e2a10&#34;&gt;いかにして私はPython/自動化/AI/インスタグラムを使いニューヨーク市で無料の食事をできるようになったか(How I Eat For Free in NYC Using Python, Automation, Artificial Intelligence, and Instagram)&lt;/a&gt;という記事が面白かったのでご紹介。&lt;/p&gt;&#xA;&lt;p&gt;ニューヨーク在住のデータサイエンティスト、クリス・ブエッティさん(Chris Buetti)が明かした、3万フォロワー超の人気アカウントを育てた秘密。&lt;/p&gt;&#xA;&lt;blockquote&#xA;&#x9;class=&#34;instagram-media&#34;&#xA;&#x9;data-instgrm-captioned&#xA;&#x9;data-instgrm-permalink=&#34;https://www.instagram.com/p/BwCUjL6FnFX&#34;&#xA;&#x9;data-instgrm-version=&#34;14&#34;&#xA;&#x9;style=&#34;&#xA;&#x9;background: #fff;&#xA;&#x9;border: 0;&#xA;&#x9;border-radius: 3px;&#xA;&#x9;box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.5), 0 1px 10px 0 rgba(0, 0, 0, 0.15);&#xA;&#x9;margin: 1px;&#xA;&#x9;max-width: 540px;&#xA;&#x9;min-width: 326px;&#xA;&#x9;padding: 0;&#xA;&#x9;width: 99.375%;&#xA;&#x9;width: -webkit-calc(100% - 2px);&#xA;&#x9;width: calc(100% - 2px);&#xA;&#x9;&#34;&#xA;&gt;&#xA;&#x9;&lt;div style=&#34;padding: 16px&#34;&gt;&#xA;&#x9;&#x9;&lt;a&#xA;&#x9;&#x9;&#x9;href=&#34;https://www.instagram.com/p/BwCUjL6FnFX&#34;&#xA;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;background: #ffffff;&#xA;&#x9;&#x9;&#x9;line-height: 0;&#xA;&#x9;&#x9;&#x9;padding: 0 0;&#xA;&#x9;&#x9;&#x9;text-align: center;&#xA;&#x9;&#x9;&#x9;text-decoration: none;&#xA;&#x9;&#x9;&#x9;width: 100%;&#xA;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;target=&#34;_blank&#34;&#xA;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&lt;div style=&#34;display: flex; flex-direction: row; align-items: center&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 50%;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;height: 40px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;margin-right: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;width: 40px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;display: flex;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;flex-direction: column;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 1;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;justify-content: center;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 4px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;margin-bottom: 6px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 100px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 4px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 60px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;div style=&#34;padding: 19% 0&#34;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;style=&#34;display: block; height: 50px; margin: 0 auto 12px; width: 50px&#34;&#xA;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;svg&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;width=&#34;50px&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;height=&#34;50px&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;viewBox=&#34;0 0 60 60&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;version=&#34;1.1&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;xmlns=&#34;https://www.w3.org/2000/svg&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;xmlns:xlink=&#34;https://www.w3.org/1999/xlink&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;g stroke=&#34;none&#34; stroke-width=&#34;1&#34; fill=&#34;none&#34; fill-rule=&#34;evenodd&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;g transform=&#34;translate(-511.000000, -20.000000)&#34; fill=&#34;#000000&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;g&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;path&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;d=&#34;M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/path&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;/g&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;/g&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;/g&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/svg&gt;&#xA;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;div style=&#34;padding-top: 8px&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;color: #3897f0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;font-family: Arial, sans-serif;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;font-size: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;font-style: normal;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;font-weight: 550;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;line-height: 18px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;View this post on Instagram&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;div style=&#34;padding: 12.5% 0&#34;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;display: flex;&#xA;&#x9;&#x9;&#x9;&#x9;flex-direction: row;&#xA;&#x9;&#x9;&#x9;&#x9;margin-bottom: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;align-items: center;&#xA;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 50%;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 12.5px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 12.5px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: translateX(0px) translateY(7px);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 12.5px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: rotate(-45deg) translateX(3px) translateY(1px);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 12.5px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;margin-right: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;margin-left: 2px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 50%;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 12.5px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 12.5px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: translateX(9px) translateY(-18px);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div style=&#34;margin-left: 8px&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 50%;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 20px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 20px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-top: 2px solid transparent;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-left: 6px solid #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-bottom: 2px solid transparent;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: translateX(16px) translateY(-4px) rotate(30deg);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div style=&#34;margin-left: auto&#34;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 0px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-top: 8px solid #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-right: 8px solid transparent;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: translateY(16px);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 12px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 16px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: translateY(-4px);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;width: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;height: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-top: 8px solid #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;border-left: 8px solid transparent;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;transform: translateY(-4px) translateX(8px);&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;display: flex;&#xA;&#x9;&#x9;&#x9;&#x9;flex-direction: column;&#xA;&#x9;&#x9;&#x9;&#x9;flex-grow: 1;&#xA;&#x9;&#x9;&#x9;&#x9;justify-content: center;&#xA;&#x9;&#x9;&#x9;&#x9;margin-bottom: 24px;&#xA;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 4px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;height: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;margin-bottom: 6px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;width: 224px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&lt;div&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;style=&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;background-color: #f4f4f4;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;border-radius: 4px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;flex-grow: 0;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;height: 14px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;width: 144px;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#34;&#xA;&#x9;&#x9;&#x9;&#x9;&gt;&lt;/div&gt;&lt;/div&#xA;&#x9;&#x9;&#x9;&gt;&#xA;&#x9;&#x9;&lt;/a&gt;&#xA;&#x9;&lt;/div&gt;&#xA;&lt;/blockquote&gt;&lt;script async src=&#34;https://www.instagram.com/embed.js&#34;&gt;&lt;/script&gt;&#xA;&lt;p&gt;データサイエンス/ソフトウェア開発の知識、自由な時間とインスタグラムの知識があれば再現可能だといいます。&lt;/p&gt;</description>
			</item>
			<item>
				<title>トップ100万ウェブサイトのrobots.txtを解析した人とその結果</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2017/11/one-million-robots-txt-analyzed/</link>
				<pubDate>Fri, 24 Nov 2017 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2017/11/one-million-robots-txt-analyzed/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://www.benfrederickson.com/robots-txt-analysis/&#34;&gt;An Analysis of the World&amp;rsquo;s Leading robots.txt Files&lt;/a&gt;(世界のリーダーたちの robots.txt ファイル)というブログで、世界の上位100万サイトの robots.txt を解析したベン・フレデリクソンさん(Ben Frederickson)の話が出ていました。&lt;/p&gt;&#xA;&lt;p&gt;フレデリクソンさんは、解析結果から、3つの面白い気づきを紹介してくれています。&lt;/p&gt;&#xA;&lt;h3 id=&#34;googlebot-にしか見せないサイト&#34;&gt;Googlebot にしか見せないサイト&lt;/h3&gt;&#xA;&lt;p&gt;Googleボット以外のすべてのボットを拒否する、という設定のサイトは意外に多いそうです。&lt;/p&gt;&#xA;&lt;p&gt;大手サイトでは例えば、フェイスブック(&lt;a href=&#34;https://facebook.com/robots.txt&#34;&gt;robots.txt&lt;/a&gt;)が厳しいということ。実際に見ると Apple や Baidu など有名どころのクローラーはいくつか受け付けているのですが、基本的には「その他は不許可」という指定をしています。&lt;/p&gt;&#xA;&lt;p&gt;アメリカ国勢調査のサイトも、Google, Yahoo, Microsoft の3社のbotしか受け付けておらず、例えば真剣にGoogle の対抗馬を目指しているような DuckDuckGo の bot はアクセスできません。&lt;/p&gt;&#xA;&lt;p&gt;記事中に、主要言語ごとの人気サイトで DuckDuckGo のクローラを許すかどうかの表があるのですが、かなり多くのサイトがアクセスを禁止しています。DuckDuckGo を排除しているというわけではなく、よく知らないものやマイナーなものはすべて不許可、という態勢ですね。&lt;/p&gt;&#xA;&lt;p&gt;今後、新しい検索エンジンや、その他のクローラーを使ったサービスが出てきても、多くのサイトはアクセスが禁止されているのが現状ということですね。&lt;/p&gt;&#xA;&lt;h3 id=&#34;みんながブロックするクローラー上位ランキング&#34;&gt;みんながブロックするクローラー上位ランキング&lt;/h3&gt;&#xA;&lt;p&gt;より多くのドメインで拒否されているクローラーは何だろう? という集計もしています。一番人気は MJ12bot 。続いて AhrefsBot, Baiduspider, Nutch… と続きます。&lt;/p&gt;&#xA;&lt;p&gt;日本語のブログでも、このあたりの bot を止めたい、アクセスが多すぎて困る、という記事を見かけるので、いろいろなサイトの運営者が迷惑と思っているのでしょう。Google bot なら見に来ればその後の実ユーザーの来訪も見込めますが、ユーザーを連れてこないのにボットに絨毯爆撃のようにアクセスされても困るだけですからね。&lt;/p&gt;&#xA;&lt;p&gt;サイトを丸ごとダウンロードするようなツールの bot も、禁止リストに入っていることが多いそうです。&lt;/p&gt;&#xA;&lt;h3 id=&#34;robotstxt-で求人&#34;&gt;robots.txt で求人&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.pinterest.jp/robots.txt&#34;&gt;Pinterest&lt;/a&gt;など、robots.txt のコメントで人間向けの勧誘をしているサイトも多いようです。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;ピンタレストは採用中!(&lt;a href=&#34;https://www.pinterest.jp/robots.txt&#34;&gt;Pinterest is hiring!&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.digitalocean.com/robots.txt&#34;&gt;ロボット用のファイルを読んでいるあなたがもし人間なら、デジタルオーシャンで働くべきだ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://angel.co/robots.txt&#34;&gt;私たちもロボットは好き。私たちとボットについて語り合いましょう(Angel.co)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;HTMLのコメントにもこういうのありますが、実際これで採用につながることってあるんですかね?&lt;/p&gt;&#xA;&lt;h3 id=&#34;ソースコード&#34;&gt;ソースコード&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/benfred/bens-blog-code/tree/master/robots.txt-analysis&#34;&gt;Pythonで書かれた robots.txt クローラのコードは Github で&lt;/a&gt;公開されています。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=15513708&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Baby Buddy - オープンソースの赤ちゃん管理システム</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/</link>
				<pubDate>Fri, 27 Oct 2017 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://github.com/cdubz/babybuddy&#34;&gt;Baby Buddy&lt;/a&gt; は、Python で書かれた、乳児の世話に関する事柄を記録・管理できるwebベースのツールです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-screenshot.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-screenshot_hu_c62ad7ee79fb80ef.webp 480w, https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-screenshot_hu_fec6a45933eb054c.webp 768w, https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-screenshot_hu_7de15558bbe4c5f2.webp 1026w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-screenshot.png&#34; width=&#34;1026&#34; height=&#34;997&#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://babybuddy.herokuapp.com/children/tim-powell/dashboard/&#34;&gt;デモサイト&lt;/a&gt;を見る感じでは、「授乳」「睡眠」「おむつ交換」「腹ばい練習(tummy time)」について、それぞれやった時に記録を取り、その結果を参照できるようです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-diaper-change-form.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-diaper-change-form_hu_72b1b7ccca60e28c.webp 480w, https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-diaper-change-form_hu_51d8f7dd0bed70cd.webp 510w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2017/10/baby-buddy-open-source-baby-caring-system/baby-buddy-diaper-change-form.png&#34; width=&#34;510&#34; height=&#34;556&#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;一人ですべての面倒を見ているような、いわゆるワンオペ育児ではそれほど記録の必要もないかもしれませんが、うちのように夫婦で時間をずらしてカバーするとか、ベビーシッター等を含めて複数人で面倒を見ているところだと、誰がみても直近の過去の状態がまとまって見られるというのはいいことだと思います。多数の子供を登録して、保育園のような事業者が使うというのも考えられるでしょうね。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=15558057&#34;&gt;Hacker News&lt;/a&gt;のコメントによれば、この手のアプリとしてはスマートフォンアプリの &lt;a href=&#34;https://itunes.apple.com/jp/app/%E8%B5%A4%E3%81%A1%E3%82%83%E3%82%93%E6%97%A5%E8%A8%98-baby-connect/id326574411?mt=8&#34;&gt;Baby Connect&lt;/a&gt; が有名なようです。こちらは日本円だと600円の有料アプリで、さすがに機能も多く、UIもこなれているようです。&lt;/p&gt;&#xA;&lt;p&gt;そういう市販のアプリを使うのでもいいのですが、オープンソースでコードがGithub に上がっていることから、自分と家族に特有の何かを追加で記録したいとか、欲しい機能を自分で追加提案できるという点で、この Baby Buddy も面白いかもしれません。&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=15558057&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>マジック・ザ・GIFニング - 面白動画を載せたMtGのカードを生成するプログラム</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2017/10/magic-the-gifening-generate-mtg-card-with-funny-gif/</link>
				<pubDate>Fri, 13 Oct 2017 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2017/10/magic-the-gifening-generate-mtg-card-with-funny-gif/</guid>
				<description>&lt;p&gt;カードゲーム「&lt;a href=&#34;http://mtg-jp.com/&#34;&gt;マジック・ザ・ギャザリング(MtG)&lt;/a&gt;」のデータを使ったネタプログラミングが Hacker News で話題となっていました。&lt;/p&gt;&#xA;&lt;p&gt;Pythonで書かれ、&lt;a href=&#34;https://github.com/minimaxir/magic-the-gifening&#34;&gt;GitHubで公開されている&lt;/a&gt;このツールは、MtGのカードのタイトルに合った内容のアニメーションGIFを埋め込んで、MtGのパロディカードを生成するというプログラム。&lt;/p&gt;&#xA;&lt;p&gt;生成したカードを定期的にツイッターにつぶやく bot 機能も持っていて、&lt;a href=&#34;https://twitter.com/MTGIFening&#34;&gt;作者自身によるデモアカウント@MTGIFening&lt;/a&gt; では、6時間おきに一枚、新作カードが自動投稿されています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://mtgwiki.com/wiki/%E5%BD%BC%E6%96%B9%E3%81%8B%E3%82%89%E3%81%AE%E9%9B%84%E5%8F%AB%E3%81%B3/Howl_from_Beyond&#34;&gt;ハウル・フロム・ビヨンド(彼方からの雄叫び)&lt;/a&gt;というカード名から生成されたのが、こちらのカード&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;zxx&#34; dir=&#34;ltr&#34;&gt;&lt;a href=&#34;https://t.co/sxqKUYHmfv&#34;&gt;pic.twitter.com/sxqKUYHmfv&lt;/a&gt;&lt;/p&gt;&amp;mdash; Magic: The GIFening (@MTGIFening) &lt;a href=&#34;https://x.com/MTGIFening/status/913993793052880897?ref_src=twsrc%5Etfw&#34;&gt;September 30, 2017&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;h3 id=&#34;仕組み&#34;&gt;仕組み&lt;/h3&gt;&#xA;&lt;p&gt;Readme/ソースによれば、このツールの仕組みはこんな感じ。&lt;/p&gt;&#xA;&lt;h4 id=&#34;カードデータの入手&#34;&gt;カードデータの入手&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mtgjson.com/&#34;&gt;MTG JSON&lt;/a&gt;で提供されている、全カードのJSONデータを取得する。そんなデータが有志によって管理されているんですね。これも&lt;a href=&#34;https://github.com/mtgjson/mtgjson&#34;&gt;GitHub上で管理更新されている&lt;/a&gt;ようです。&lt;a href=&#34;https://github.com/mtgjson/mtgjson/blob/master/json/10E.jp.json&#34;&gt;日本語データファイル&lt;/a&gt;もありました&lt;/p&gt;&#xA;&lt;p&gt;ここからJSONファイルをダウンロードし、それを前処理のスクリプトで必要なレコードのみのcsvを作り、それを使って動いています。&lt;/p&gt;&#xA;&lt;h4 id=&#34;ネタになるアニメーションgifの入手&#34;&gt;ネタになるアニメーションGIFの入手&lt;/h4&gt;&#xA;&lt;p&gt;アニメーションGIF版 YouTube、みたいなサイト&lt;a href=&#34;https://giphy.com/&#34;&gt;GIPHY&lt;/a&gt;に&lt;a href=&#34;https://developers.giphy.com/&#34;&gt;API&lt;/a&gt;が提供されていて、その中にキーワード検索APIもあるので、ランダムに選んだMtGのカードのタイトルを食わせています。タイトルによってはGIFが見つからない場合もあるみたいですが、その時は見つかるまで繰り返しています。&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;MtG&amp;quot;で検索して最初にでてきたのがこれ。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://media.giphy.com/media/s0FsE5TsEF8g8/giphy.gif&#34; alt=&#34;Giphy sample&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;オリジナルのカード画像にgifをはめ込む&#34;&gt;オリジナルのカード画像に、GIFをはめ込む&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://gatherer.wizards.com/Pages/Default.aspx&#34;&gt;MtG公式からカード画像を取得&lt;/a&gt;し、&lt;a href=&#34;https://github.com/Zulko/moviepy/&#34;&gt;MoviePy&lt;/a&gt;ライブラリで、動画の各フレームを書き換えているようです。カードの世代によって画像の位置やサイズが違うので、世代にあわせて埋め込み座標を変えたりもしています。&lt;/p&gt;&#xA;&lt;h4 id=&#34;ツイートする&#34;&gt;ツイートする&lt;/h4&gt;&#xA;&lt;p&gt;PythonでTwitterを読み書きする&lt;a href=&#34;https://github.com/ryanmcgrath/twython&#34;&gt;Twython&lt;/a&gt;を使い、生成されたGIFをツイッターに投稿させています。&lt;/p&gt;&#xA;&lt;p&gt;これらをパッケージする Docker ファイルも置いてあり、自分の環境で簡単に再現できます。ツイッターに投稿するところは動かしませんでしたが、ローカルで動かしてみてできた画像がこちら。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs-staging.31tools.com/blog/akky/wp-content/uploads/2017/10/mtg_gif.mp4&#34;&gt;https://labs-staging.31tools.com/blog/akky/wp-content/uploads/2017/10/mtg_gif.mp4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;コードも完結で短く、データやAPIを組み合わせてうまく作ってるなと思いました。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;https://news.ycombinator.com/item?id=15449955&#34;&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Anyprint - いろんな言語のprint命令がPythonで使えるライブラリ</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2017/07/anyprint-supports-multilanguage-print/</link>
				<pubDate>Fri, 21 Jul 2017 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2017/07/anyprint-supports-multilanguage-print/</guid>
				<description>&lt;p&gt;ライブラリ &lt;a href=&#34;https://github.com/kragniz/anyprint&#34;&gt;anyprint&lt;/a&gt; をインポートするだけで、Python で以下のような出力文が書けるようになります。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;printf(&amp;quot;printf %d\n&amp;quot;, 10);  fmt.Println(&amp;quot;hello&amp;quot;)  cout &amp;lt;&amp;lt; &amp;quot;Hello, C++!&amp;quot; &amp;lt;&amp;lt; endl;  Print[&amp;quot;Hello from Mathematica!&amp;quot;]  console.log(&amp;quot;yes&amp;quot;);  io.write(&amp;quot;lua land&amp;quot;)  System.out.printf(&amp;quot;java stuff\n&amp;quot;);  System.Console.WriteLine(&amp;quot;C# looks awkard&amp;quot;);  Ada.Text_IO.Put_Line(&amp;quot;Ada is cool&amp;quot;)  IO.puts(&amp;quot;elixir&amp;quot;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;現在サポートされている他言語は、go, Java, VB .NET, C(とその類似言語), ActionScript, Ada, &lt;a href=&#34;https://en.wikipedia.org/wiki/Amiga_E&#34;&gt;Amiga E&lt;/a&gt;, ASP, B, D, &lt;a href=&#34;https://en.wikipedia.org/wiki/PureBasic&#34;&gt;PureBasic&lt;/a&gt;, Clipper, C++, C#, Delphi, JavaScript, Lua, Mathematica, matlab, nim, Pascal, Pike, Elixir のようです。&lt;/p&gt;&#xA;&lt;p&gt;Objective-C の NSLog, Ruby のp は&lt;a href=&#34;https://github.com/kragniz/anyprint/pull/12&#34;&gt;プルリクエスト&lt;/a&gt;が出ています。Closure風 と Rust風は Python の中では難しいと作者が答えていますが、誰か解決できる人がいたら挑戦してみてはどうでしょうか。&lt;/p&gt;&#xA;&lt;p&gt;Pythonがメインの言語でない人でも、これを入れておけば自分の慣れた方法でprintできますね。&lt;/p&gt;&#xA;&lt;p&gt;利用者からの推薦文が載ってますが、味わい深いです。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;「おかしいよあんた」&lt;/li&gt;&#xA;&lt;li&gt;「馬鹿馬鹿しいし役立たずだ」&lt;/li&gt;&#xA;&lt;li&gt;「僕の推薦文を追加してよ『なんて正確な推薦文たち』」&lt;/li&gt;&#xA;&lt;li&gt;「kragniz, おかしなPythonのメタモジュールばっかり公開するのはよせよ」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;via Hacker News&lt;/p&gt;</description>
			</item>
			<item>
				<title>Pokémap - Pokemon Goのポケモン・ジム・ポケストップを可視化する勝手ツール</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2016/07/pokemap-pokemon-go-tool/</link>
				<pubDate>Wed, 20 Jul 2016 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2016/07/pokemap-pokemon-go-tool/</guid>
				<description>&lt;p&gt;アメリカ人をトリコにし、任天堂の株価を倍に押し上げた位置情報ゲーム「ポケモンGo」、日本での今日のリリースが2ちゃんねる経由マクドナルドからの&lt;a href=&#34;http://imgur.com/iNXZeBa&#34;&gt;リーク&lt;/a&gt;で延期になった、とかいう話も(本当かどうかわかりませんが)流れて来たりと、これから日本でも熱くなりそうなところです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jz6.github.io/PoGoMap/&#34;&gt;Pokémap&lt;/a&gt;は、&lt;a href=&#34;https://github.com/AHAAAAAAA&#34;&gt;Ahmed Almutawa&lt;/a&gt;が始めたばかりのツール開発プロジェクトで、ポケモンGo に出てくるポケモン達、アイテムを得られるポケストップ、奪いあうポケジムなどゲームを簡単に進められるようにする重要情報を、Google Mapベースの地図に表示してしまうというPython製ツールです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/pokemap-pokemon-go-tool/pokemap-top.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/pokemap-pokemon-go-tool/pokemap-top_hu_fb4745103cb8f398.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/07/pokemap-pokemon-go-tool/pokemap-top_hu_7faa571aa278f46b.webp 768w, https://labs.cybozu.co.jp/blog/akky/2016/07/pokemap-pokemon-go-tool/pokemap-top_hu_e516142aaa57828b.webp 777w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/07/pokemap-pokemon-go-tool/pokemap-top.png&#34; width=&#34;777&#34; height=&#34;985&#34; alt=&#34;pokemap-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;現在のツールはプログラマでないと&lt;a href=&#34;https://www.reddit.com/r/pokemongodev/comments/4t80df/wip_pokemon_go_map_visualization_google_maps_view/d5feu2f?st=iqtsngmd&amp;amp;sh=1a3e519e&#34;&gt;セットアップがたいへんそう&lt;/a&gt;な作りになっていますが、こんなツールで地図が見えてしまうと、一般のユーザーとの競争はかなり簡単になってしまうのではという心配もあります。&lt;/p&gt;&#xA;&lt;p&gt;各データは Niantec 社のサーバとの通信を見て取得しているようなので、早晩、通信方法が変更されたり、暗号化されたりするのではと思いますが、熱心なユーザー&amp;amp;開発者が2日間で50人近く contributor として集まったそうで、&lt;a href=&#34;https://github.com/AHAAAAAAA/PokemonGo-Map&#34;&gt;GitHub 上のプロジェクトページ&lt;/a&gt;では一時的にプルリクエストを受け付けませんという表示がされています。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;http://www.theverge.com/tldr/2016/7/19/12226958/pokemon-go-google-map-display&#34;&gt;The Verge&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>プログラミング言語TrumpScript</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/</link>
				<pubDate>Fri, 22 Jan 2016 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://samshadwell.me/TrumpScript/&#34;&gt;TrumpScript&lt;/a&gt; は、高名なドナルド・トランプ氏を基にした新たなプログラミング言語です。現在のプログラミング言語の中に、トランプ氏の豪華な金髪バーコードヘアにも気に入られるような言語が無いことから制作されました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/80038275@N00/17008571157/&#34;&gt;https://www.flickr.com/photos/80038275@N00/17008571157/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;特徴&#34;&gt;特徴&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;浮動小数点数無しで整数のみ。アメリカに中途半端はありません&lt;/li&gt;&#xA;&lt;li&gt;数は100万以上に限ります。それ以下の数字は取るに足らないからです&lt;/li&gt;&#xA;&lt;li&gt;import はできません。すべてのコードはアメリカで作った国産でなければなりません&lt;/li&gt;&#xA;&lt;li&gt;True/False(真/偽)ではなくfact/lie(事実/嘘)を使います&lt;/li&gt;&#xA;&lt;li&gt;良く知られた、トランプ氏の好きな&lt;a href=&#34;https://github.com/samshadwell/TrumpScript/blob/5a354880ec11146c4069af221a7456cde1e4e30e/src/trumpscript/allowed_words.py&#34;&gt;(2000個ちょっとの)英単語&lt;/a&gt;のみ。立候補者の名前は変数として使えます&lt;/li&gt;&#xA;&lt;li&gt;ほとんどのエラーメッセージはトランプ語録から採用されました&lt;/li&gt;&#xA;&lt;li&gt;プログラムは「アメリカは偉大だ(&amp;ldquo;America is great.&amp;quot;)」で終了しなければなりません&lt;/li&gt;&#xA;&lt;li&gt;TrumpScriptはそのままではWindowsで動きません。なぜならトランプ氏はPCを信じるような男ではないからです(註: PC=パソコン、と、PC=政治的正しさ、をかけてます)&lt;/li&gt;&#xA;&lt;li&gt;大文字小文字は完全に無視します&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;文法&#34;&gt;文法&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/samshadwell/TrumpScript&#34;&gt;文法の方&lt;/a&gt;はというと、演算や条件文についてはおおむね普通のものが用意されていて、TSの記法を覚えればすぐ書けるでしょう。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is や are は代入。?で終われば比較になります&lt;/li&gt;&#xA;&lt;li&gt;make America great で、America に great を代入できます&lt;/li&gt;&#xA;&lt;li&gt;tell や say で出力できます&lt;/li&gt;&#xA;&lt;li&gt;as long as でループします&lt;/li&gt;&#xA;&lt;li&gt;不要な単語は全部無視されるので、うまく使えばかなり自然な演説文と両立させられます&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;トランプ氏が失敗について語りたがらないのと同様に、プログラムは多くの場合静かに失敗します。デバッグをゲーム的に楽しんでください。&lt;/p&gt;&#xA;&lt;h3 id=&#34;実行&#34;&gt;実行&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/samshadwell/TrumpScript/tree/master/test/test_files&#34;&gt;テストファイルがいくつかあるので&lt;/a&gt;、まずはこれを試してみるのがいいかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/samshadwell/TrumpScript/blob/master/test/test_files/debate_vs_hillary.txt&#34;&gt;ヒラリー・クリントン氏とのディベートを再現したスクリプト&lt;/a&gt;を動かすと、こうなりました。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-hilary.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-hilary_hu_f273f2e6fa845599.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-hilary_hu_d3a87d103954399f.webp 637w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-hilary.png&#34; width=&#34;637&#34; height=&#34;238&#34; alt=&#34;trumpscript-hilary&#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://ifunny.co/fun/TPDki4SO3&#34;&gt;元ネタがわかりません&lt;/a&gt;。まだ直接対決はないと思うので、コメントか何かで応酬した時のものでしょうか。&lt;/p&gt;&#xA;&lt;p&gt;テストスクリプトには手元ではエラーになるものも多いです。&lt;/p&gt;&#xA;&lt;p&gt;また、エラーになるのが正しいものも。not_english.txt では、スペイン語で書かれたスクリプトに対して、&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-not-english.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-not-english_hu_de637ddc743a9a1b.webp 480w, https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-not-english_hu_683d3e80ef13f268.webp 636w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2016/01/programming-language-donald-trump/trumpscript-not-english.png&#34; width=&#34;636&#34; height=&#34;393&#34; alt=&#34;trumpscript-not-english&#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;This is a country where we speak English&amp;rdquo;)」という例外が発生してます。&lt;/p&gt;</description>
			</item>
			<item>
				<title>懸賞ツイートをプログラムで自動リツイートさせて、1000個の賞品を獲得した話</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2015/08/retweet-bot-gains-1000-rewards/</link>
				<pubDate>Wed, 05 Aug 2015 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2015/08/retweet-bot-gains-1000-rewards/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://www.hscott.net/&#34;&gt;ハンター・スコット(Hunter Scott)さん&lt;/a&gt;は、「ツイッターでリツイートしてくれたら抽選でプレゼントしますよ」という、いわゆるリツイート懸賞がツイッターに多数流れていることに気づき、自動でそのようなツイートをリツイートするスクリプト(ボット)を開発、走らせ続けることで1000個近い賞品に当選しました。&lt;/p&gt;&#xA;&lt;p&gt;その経緯は&lt;a href=&#34;http://www.hscott.net/twitter-contest-winning-as-a-service/&#34;&gt;&amp;ldquo;Twitter Contest Winning as a Service&amp;rdquo;(サービスとしてのツイッターコンテスト当選)というブログ記事&lt;/a&gt;でまとめられています。&lt;/p&gt;&#xA;&lt;h3 id=&#34;リツイート懸賞の勝率は&#34;&gt;リツイート懸賞の勝率は?&lt;/h3&gt;&#xA;&lt;p&gt;9ヶ月間走らせていたこのPythonスクリプト、結果的には165,000件の懸賞ツイートをリツイートしたそうですが、当選したのが約1000件。当選率は0.6%、165回リツイートして一つ当たるぐらいということになります。&lt;/p&gt;&#xA;&lt;p&gt;せっせと見つけては手動で応募している人も同じような確率だとすると、さてリツイート懸賞は労力に見合うものなんでしょうかね。&lt;/p&gt;&#xA;&lt;p&gt;スコットさんが指摘するように、この当選の中には「あなた向けにカスタマイズしたTwitter用ロゴ」や「壁紙」「電子書籍」などデジタルのものも多数含まれるので、価値の高い賞品が貰える率となるとさらに低くなることでしょう。&lt;/p&gt;&#xA;&lt;h3 id=&#34;気になる約1000件の獲得賞品リスト&#34;&gt;気になる約1000件の獲得賞品リスト&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.hscott.net/winnings.txt&#34;&gt;獲得賞品のリストはこちらで紹介されています&lt;/a&gt;。「約1000件」と書かれていますが正確な行数では984行。&lt;/p&gt;&#xA;&lt;p&gt;ロゴなどのデジタルデータ、オンラインゲームの仮想ポイント、など以外に賞品リストに多く出て来るのが「チケット」。映画やコンサートなどのチケットですが、その多くが外国のもの等だったということで、当たっても行けていないそうです。&lt;/p&gt;&#xA;&lt;p&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/2015/08/retweet-bot-gains-1000-rewards/rewards-retweet-bot-won_hu_e134a990a6e19a7.webp 480w, https://labs.cybozu.co.jp/blog/akky/2015/08/retweet-bot-gains-1000-rewards/rewards-retweet-bot-won_hu_40073df6d9cdbb93.webp 620w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2015/08/retweet-bot-gains-1000-rewards/rewards-retweet-bot-won.png&#34; width=&#34;620&#34; height=&#34;422&#34; alt=&#34;(credit: Hunter Scott)&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/p&gt;&#xA;&lt;p&gt;(credit: Hunter Scott)&lt;/p&gt;&#xA;&lt;p&gt;この中での一番のお気に入りは、聞いた事も無いメキシコのスターのサインが入ったカウボーイハットなんだとか。&lt;/p&gt;&#xA;&lt;p&gt;もっとも高額なプレゼントはニューヨークでのリムジン・観劇・ペアで $1000 のおこづかいを含む $4000 のパックでしたが、ニューヨークの近くに住んでないことと、 $4000 を収入として申告したくなかったことから、受け取らなかったそうです。&lt;/p&gt;&#xA;&lt;h3 id=&#34;これからやる人のためのコツ&#34;&gt;これからやる人のためのコツ&lt;/h3&gt;&#xA;&lt;p&gt;スコットさんはPythonスクリプト自体は公開していないものの、試行錯誤した経験から気をつけるべきところを教えてくれています。&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;リツイートやフォローの頻度が上がるとbanされるので間隔を調整すること&lt;/li&gt;&#xA;&lt;li&gt;一般的なフォロー上限の2000を超えないように、FIFOで昔フォローしたものから外すこと&lt;/li&gt;&#xA;&lt;li&gt;当選の連絡はDM(ダイレクトメッセージ)で来ることが多いが、DMにはスパムも多数来るようになったので、当選したものを探す作業はそれなりに大変&lt;/li&gt;&#xA;&lt;li&gt;単にフォロワーを増やしたいとかで、嘘の懸賞をでっちあげるアカウントもいる。でも気にすんな!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;この方針で、APIから見つけたすべてのリツイート懸賞に応募(フォロー&amp;amp;リツイート)することが出来たということです。&lt;/p&gt;&#xA;&lt;h3 id=&#34;感想&#34;&gt;感想&lt;/h3&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;ですが、スクリプトを流しておくだけなら電気代ぐらいしか掛かりませんし、たとえ今回の0.6% が0.06%になろうとも、やるだけやってみても損はしないんでしょうね。&lt;/p&gt;&#xA;&lt;p&gt;via Hacker News&lt;/p&gt;</description>
			</item>
			<item>
				<title>Skypeチャットの履歴を保存する</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/</link>
				<pubDate>Thu, 05 Feb 2015 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/</guid>
				<description>&lt;p&gt;Skypeといえば、元々のコンセプトである&lt;a href=&#34;https://support.skype.com/ja/faq/FA10042/&#34;&gt;P2P方式から、中央サーバ型への移行が少しずつ進んでいる&lt;/a&gt;みたいですね。&lt;/p&gt;&#xA;&lt;p&gt;昔はSkypeを始めた頃まで無限にチャットログを遡れたのですが、ある時点からはこちらも制限が掛かり、大昔のチャットログにはアクセスできなくなってしまいました。&lt;/p&gt;&#xA;&lt;p&gt;さて今回、スカイプのチャットルームの過去の発言からちょっと複雑な検索をしようとして、準備として「全選択→コピー→エディタに貼り付け」しようとしたのですが、どうしても発言一個分しかコピーされてきません。昔はできたと思うので、Windows版クライアントの仕様が変わったんでしょうか。不便です。&lt;/p&gt;&#xA;&lt;p&gt;クライアントからチャット履歴が取れないとなると、他の方法を使わないといけません。&lt;a href=&#34;https://support.skype.com/ja/faq/FA413/&#34;&gt;チャットログのファイルはディスク上にあり&lt;/a&gt;、sqlite形式のファイルみたいなので、sqliteのDBが開けるツールなら何でも使えば開くことはできます。&lt;/p&gt;&#xA;&lt;p&gt;汎用のsqliteクライアントでもいいのですが、&lt;a href=&#34;http://suurjaak.github.io/Skyperious/&#34;&gt;Skyperious&lt;/a&gt;は、スカイプのチャットログに特化した、過去ログを閲覧・加工するためのツールです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious_hu_d7f86fb5f6bd5ac8.webp 480w, https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious_hu_839feeb9513113ae.webp 768w, https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious_hu_7d1d0153ca901e58.webp 1080w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious.png&#34; width=&#34;1080&#34; height=&#34;710&#34; alt=&#34;skyperious&#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/2015/02/save-chatlog-from-windows-skype/skyperious-stats.png&#34;&gt;&lt;picture&gt;&#xA;  &lt;source type=&#34;image/webp&#34; srcset=&#34;https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious-stats_hu_9218b7faa74940d9.webp 480w, https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious-stats_hu_45c39357789f135e.webp 678w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2015/02/save-chatlog-from-windows-skype/skyperious-stats.png&#34; width=&#34;678&#34; height=&#34;522&#34; alt=&#34;skyperious-stats&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;緑のiマークを押すと、チャットの統計情報も出してくれます。グループチャットで良く発言している人の発言の数や割合、ファイルの送受信数、良く使われている単語、などが見られます。&lt;/p&gt;&#xA;&lt;p&gt;Githubには&lt;a href=&#34;https://github.com/suurjaak/Skyperious/&#34;&gt;Pythonのソースコードも公開されており&lt;/a&gt;、一応ツールのソースを確認することができます。(とはいえ、配布されているバイナリだけに何か入ってても責任取れないので、利用は自己責任でよろしく)&lt;/p&gt;&#xA;&lt;p&gt;マイクロソフトがSkypeクライアントの機能を削ったのにも彼らなりの理由は何かしらあるのでしょうけど、TwitterやFacebookなどでも自分のデータは書き出せるように(いろいろなユーザーが要望したのが効いて)なっていますし、自分のチャットログは自分のものだ、というのはそんなに不思議な感覚ではないと思うんですよね。できればこういったツールに頼らなくても自由に使えるように、公式クライアントが改善されるといいのですが。&lt;/p&gt;&#xA;&lt;p&gt;via &lt;a href=&#34;http://askubuntu.com/questions/149214/copy-skype-chat-history-to-text-files&#34;&gt;Ask Ubuntu&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>自前のメールサーバーを使っていても多くのメールはGmailユーザーの友人経由でGoogleに捕捉されている、という話</title>
				<link>https://labs.cybozu.co.jp/blog/akky/2014/05/most-mail-are-known-by-google-anyway/</link>
				<pubDate>Tue, 13 May 2014 00:00:00 +0000</pubDate>
				<guid>https://labs.cybozu.co.jp/blog/akky/2014/05/most-mail-are-known-by-google-anyway/</guid>
				<description>&lt;p&gt;自分の電子メールは自分のサーバで管理し、プライバシーを守りたいとしてきた ベンジャミン・ヒル(Benjamin Marko Hill)さんが、Gmailのサービスが開始した2004年からの10年間の自分のプライベート用メールアドレスのメールボックスを解析してみたところ、&lt;a href=&#34;http://mako.cc/copyrighteous/google-has-most-of-my-email-because-it-has-all-of-yours&#34;&gt;近年では1/3から半分近くのメールがGmailのサービスにも知られている、という結果が出た&lt;/a&gt;そうです。&lt;/p&gt;&#xA;&lt;p&gt;ヒルさんは、ネットの検閲に反対するなどの活動で知られる電子フロンティア財団(EFF)のディレクターでもある友人の&lt;a href=&#34;https://www.eff.org/about/staff/peter-eckersley&#34;&gt;ピーター・エカーズリーさん&lt;/a&gt;がGmailを使っていることを知って驚き、「Googleにすべてのメールデータを持たれていてもいいのか?」と尋ねたところ、エカーズリーさんが「友人が全員Gmailユーザーなら、結局自分のメールもGmailに把握されてしまっているから」と答えたことをきっかけに、自分の過去のメールがはたしてGmailを経由しているかどうかを調べる気になったということです。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://projects.mako.cc/source/?p=gmail-maildir-counter&#34;&gt;メールボックス内のメールのFromやToを解析し可視化するPythonとRのコード&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/2014/05/most-mail-are-known-by-google-anyway/emails_gmail_over_time_hu_1a9eaeff30a0582f.webp 480w, https://labs.cybozu.co.jp/blog/akky/2014/05/most-mail-are-known-by-google-anyway/emails_gmail_over_time_hu_b20b3f66d441d76b.webp 720w&#34; sizes=&#34;(max-width: 56rem) 100vw, 54rem&#34;&gt;&#xA;  &lt;img src=&#34;https://labs.cybozu.co.jp/blog/akky/2014/05/most-mail-are-known-by-google-anyway/emails_gmail_over_time.png&#34; width=&#34;720&#34; height=&#34;432&#34; alt=&#34;emails_gmail_over_time&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&lt;/p&gt;&#xA;&lt;p&gt;毎週受け取ったメールの総数(赤)と、そのうちヘッダからGoogleのサーバーを経由していたとわかったメールの総数(青)をプロットしたものが上のグラフです。毎週の変動が多いですが、グレイでプロットされた移動平均を見ると、Googleに知られているメールの割合が年を追うごとに少しずつ増えて、最近では1/3のメールがGmailに絡んでいることがわかります。銀行やオンラインショップからの案内メール等はGmailから発信されていないことが多いだろうことを考えると、それ以外の普通のメールではGmailから発信されている割合はさらに高くなるのではということ。&lt;/p&gt;&#xA;&lt;p&gt;また、自分が返答したメールについて、返答した元のメールの発信がGmailからであれば、返事もGmailを経由して返っていると仮定してカウントしたところ、今は半数ぐらいのメールはGmailのサーバに向けて送っている = 自分の返事したメールの半数はGoogleに読まれ得る、という数字が出たとのこと。ヒルさんがGmailを選んだのは彼の周囲でGmailユーザーが多いだろうと考えてのことで、HotmailやYahoo! Mailなど他のメールサービスでも同じような話はありますし、それらのどこからも見えていないメールの割合はだいぶ小さくなるのかもしれません。&lt;/p&gt;&#xA;&lt;p&gt;メールがソーシャルなコミュニケーションのツールである限り、自分が自前のメールサーバーを建てたところで、友達がみんな大企業のメールサービスを使えば、自分のメールの多くも大企業の入手するところとなってしまうわけですね。以前ご紹介した、&lt;a href=&#34;http://developer.cybozu.co.jp/akky/2012/05/post-93ac/&#34;&gt;友達が多数ソーシャルネットワークに参加していると、参加していなくても自分の交友関係が把握され得る&lt;/a&gt;、という研究と通じるところがありますね。&lt;/p&gt;&#xA;&lt;p&gt;自分も私用のメールではGmailを重用していますし、このような状況で手間を掛けて自前メールサーバーを構築・維持したいとも思わないので、これらの大手の業者が自分のメールの中身を万が一にも悪用しないことを期待するしかないですが。&lt;/p&gt;&#xA;&lt;p&gt;via @HackerNews&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
