Tag Archives: OSS

AdBlock Radio – 機械学習+ユーザー投稿でラジオ番組の広告やトークを飛ばす

AdBlock Radio は、名前の通り、ラジオ広告をブロックするためのサービス/ツールです。音声データから、ラジオ番組のトーク、音楽、そして広告を判別させ、広告やトークの部分を除外することができます。

広告抜きpodcastラジオ再生ツール buffer

AdBlock Radio を使ったwebアプリ buffer の Docker 版を手元で動かしてみました。起動して localhost をブラウザで開くと、カタログから podcast ラジオ局を最大4局まで選ぶ画面になります。

4局について、「音楽を飛ばす」「トークを飛ばす」のチェックを入れて開始ボタンを押すと、サーバアプリケーションが podcast データをバッファしていきます。

バッファされたラジオ音源は上のように色分けされていきますが、青が音楽、緑がトーク、赤が広告と思われる箇所となります。トークや広告を聴かない設定にしておくと、緑や赤に再生が差し掛かったところで、次の青まで再生が飛ばされ、音楽が終わっても次の音楽がすぐに続きます。

とは言っても判定も完全ではなく、ところどころに灰色の「何かわからなかった」部分がまだらに入ったりもします。CM の一部が音楽として再生されたり、ラップなど言葉が多い音楽ではトーク(緑)や不明(灰)の細かい帯のようになったりしました。

最初、なんで4局選ばせるのかな、と思ったのですが、CMやトーク部分を飛ばしてずっと聴いていると、その局の再生が最新に追いついてしまうから、次の局、次の局へと切り替わっていく作りなんですね。4局分のデータを使って、音楽だけを途切れずに流し続ける仕組みということになります。

ラジオ局の情報はCommunity Radio Station Boardから取得したものをベースにしているようです。このサイトにはコミュニティFM局を中心に日本のラジオ局も多数載っていますが、Adblock Radio のリストには日本の局は含まれていないようです。

トークやCMの判定はスペイン語など英語以外のラジオ局でもそれなりに動いているのを確認したので、おそらく登録して試せばそこそこ動くのでしょうね。

影響

ラジオ局は広告料もテレビやネットに比べて安いそうですし、こんなadblockツールを使う人が増えたら広告料への影響が大きいでしょうね。

個人的には、ラジオにCMが入るのは昔からなので慣れているというか、ウェブ広告やYouTube の広告などに比べるとそれほど気になりません。

ウェブ広告はポップアップや全画面広告、動画広告などいろいろなヤンチャが過ぎたために、広告ブロックツールを使う人を増やしてしまった歴史がありますが、ラジオ局が無くなってしまうような影響が出るのであれば、この Adblock Radio のようなツールは少しやりすぎなのではないかなあ、とも思います。

まあ、それとは別に、放送内容を自動でカテゴライズして切り出すというアイデアは面白く、何か他にもいい応用があるかもしれません。

via Hacker News

SocialSharePrivacy – ソーシャルメディアの埋め込みボタンに訪問を追跡させないライブラリ

SocialSharePrivacy は、ウェブサイトの提供者が、利用者に対してプライバシーが保たれるソーシャルメディアボタンを提供するためのライブラリです。

デモページを動かしてみました。スライダーでボタンを有効にしない限り、フェイスブックやツイッターのサーバに情報は送られません。

まずボタンを有効にするアクションを起こすと、初めてメディアが提供するボタンが有効となり、この時点でそのページに訪問したことは各サービスにも伝わります。そして、有効になったボタンをクリックすると、「イイネ」等をすることができます。

2回クリックをしなければならなくなった代わりに、そのページに訪問したことは各ソーシャルメディアサービスには知られずに済む、ということになります。

サイト訪問をしていることをソーシャルメディアから常時されるのは困る、しかし、イイネ等をしたい時にはできるようにしてほしい、という多少込み入った要件のサイトがあれば、このライブラリが一つの解決法となるでしょう。

SocialSharePrivacy のコードはすべてGitHub で公開されています。

手書き風グラフを描けるライブラリ xkcd.chart

英語圏でエンジニアに人気の線画コミックサイト xkcd には、グラフを使ったジョークネタも頻出します。こんな感じ。

xkcd に出てくるようなグラフは、だいたい手書き風のテイストで描かれているのですが、その手書き風グラフを再現できるグラフ描画ライブラリが xkcd.chart です。


日本語も出ますね。日本語入れると凡例の枠がはみ出てしまうので、ソースの調整が要るかもしれません。xkcd 風のフォントも同梱されていますが、日本語ではデフォルトフォントになるでしょう。

円グラフ、折れ線グラフ、棒グラフ を描くことができます。


ウィンドウズグラフの元ネタ

フリーな Photoshop のライバルツール GIMP の名前の由来。そして何度も出てくる改名提案

有名オープンソースツールの名前と政治的正しさに関する揉め事です。

“gimp” は悪い言葉か?

“GIMP”という名前をより攻撃的でない(less offensive)名前に変えよう というチケットが GIMP のGitlab に投げられていました。

“gimp”という単語の意味自体を知らなかったので、まずこの人の説明する悪い意味と言うのを調べてみます。

“gimp” には「組み紐」という意味の他に「不自由な足取りの人」「役立たず」といった意味もあるそうです。なるほど。この意味で使われる時は他者を軽んじたり攻撃したりが多い、ということ。

今回は、改名を支持するコメントに10個以上の「いいね」がついているようですが、このチケットに別の掲示板からリンクが張られていて、その掲示板の読者が集団でやってきて「いいね」を押しているのではないか、という意見も出ています。普段GIMPの開発に関わったりユーザーだったりではない人々に操作されているのでは、ということですね。

チケットは短時間で「対処しない」とクローズされていますが、どうも、この改名提案は不定期にGIMPプロジェクトに寄せられ続けている、よくある提案なようです。

GIMP の名前の由来

GIMP の作者、スペンサー・キンボール氏(Spencer Kimball)とピーター・マティス氏(Peter Mattis)の1997年のインタビュー記事で、

当時、映画「パルプフィクション」が話題になってて、そこからある一つの単語が思い浮かんだんです

At the time, Pulp Fiction was the hot movie and a single word popped into my mind while we were tossing out name ideas.

と答えています。当該のシーンはこちら。全身黒の拘束具に包まれた男性を「gimp を連れてこい」と箱から出させています。(シーンの解説)

右の黒づくめの男性が “gimp”

スラング情報を集積している Urban Dictionary のサイトによると、こういった奴隷的な扱いを受ける男性のことも gimp と呼び、これが広く知られるようになったのは「パルプ・フィクション」のこのシーンによるものらしいです。

作者たち自身が「このシーンからつけた」と言っちゃってますので、「一つの単語にいろいろな意味が」とか「GNU Image Manipulation Program (画像操作プログラム)の頭文字だよ」という言い訳も今さらでしょう。

ちなみに、現在 CockroachDB の CockroachLabs社の CEOがキンボール氏、CTOがマティス氏CEO。「ゴキブリDB」ですから、ネーミングのセンスが常に逸脱気味な二人なのかもしれません。

GIMP の FAQ に「名前を変えてほしい」に対する公式回答が載っています。20年以上の歴史で、嫌になるほど問題提起されてきたんでしょうね。そして、それで改名されてないので、このままずっと GIMP は GIMP で行くのでしょう。

今後、GIMP(ツール)について人に説明する時に一緒に紹介できるような、できないような、名前の由来トリビアでした。

OpenVim – ブラウザで動く Vim 入門

OpenVim は、ブラウザ上で動く Vim のインタラクティブなチュートリアルです。

20章にわかれたチュートリアルをこなしていくことで、Vim の基本的なコマンドを一通り知ることができます。

Unix サーバの管理を初めてまかされた、どうしよう、みたいな人には、コマンド表を見て覚えるよりちょっといいかもしれません。

ソースコードも公開されていて、たくさんのバグ報告や改善案が寄せられているようです。

LockScream – MacOS X のロックスクリーンを偽装してパスワードを横取りするツール

悪用しか使い道が無いように思えますが、GitHub で公開されてて入手できるツールです。

LockScream は、Mac で動かすと本物のスクリーンロックに代わって画面をロックするツールです。

起動すると OS に設定した本物の壁紙を表示し、メニューやドックを非表示にし、いろいろなキー入力を無効にします。画面を見ていつものロック画面だと思い込んだユーザーは、ロックを解除しようとパスワードを入れるわけですが、この LockScream がその入力されたユーザー名やパスワードを横取りできてしまえるというわけです。

パスワードはこのツールの裏側で本物のOSに問い合わせられるため、ユーザー名・パスワードが合っているかどうかも正しく判定でき、でたらめなパスワードでは(本物と同じように)エラーになります。動作も本物と同じため、パスワードを奪われたこと自体に気づくこともないでしょう。

横取りしたパスワードは特定のファイルに XOR + Base64 エンコードされて保存されるので、後でこのファイルを回収すれば、所有者のユーザー名/パスワードが入手できてしまいます。

仕込む際と取得したパスワードを回収する際の2回、アンロック状態のMac にアクセスできないといけないので、うかつなユーザー相手でなければそんなに誰でもが引っ掛かるわけではない、かもしれません。

攻撃者としては、ウェブからダウンロードさせて仕込むとか、回収したパスワード情報をネット経由でどこかに送信させるとか、複数の手法を組み合わせることで盗むよう全体を設計するのでしょうね。

ここまで偽装されると、ロック画面がニセモノだと気づいて回避できるかどうか自信がありません。こういったツールが仕込まれないように、アンロック状態でPCを放置しない、がまず重要かと思います。

Never-Blink ウェブカメラ対戦型の「まばたき我慢」ゲーム

Never-Blink は、まばたきを我慢し合うゲームです。

サーバにつながった中からランダムな相手が決まり、その相手とwebカメラがついたブラウザ経由でにらめっこのように向き合います。

最初に持っているヒットポイントは、まばたきをするたびに減っていき、ゼロになると負け。

類似の先行例として、2017年にBBCが人気ドラマ「ドクター・フー」のプロモーションで短期公開した、“Don’t Blink”(まばたきするな)があるそうです。こちらは他人との対戦ではなく、ウェブカメラをみながらどれだけまばたきを我慢できるかというゲームだったよう。

ランダムにつながるというあたりは、一時期世界中で話題となった Chatroulette を思い出しますね。単にランダムにつなげるより、そこにゲームが有った方が楽しいという人はいるかもしれません。

ソースコードがGitHub に公開されていますが、今のバージョンは処理が重いそうで、どこかのサーバに載せて一般公開はできていないということ。自分でインストールした上で相手を探して遊ぶのはちょと大変かもしれませんね。

モバイルゲームとして手軽に遊べれば、そこそこ流行るかもしれません。

via Hacker News

metro-clojure – gitリポジトリで地下鉄路線図を作るClojure製ツール

gjhenrique/metro-clojure は、鉄道路線図をgitのコミット/ブランチログで再現するためのオープンソースツールです。

路線と路線に所属する駅名を並べた json ファイルが入力となります。サンプルとしてサンパウロとニューヨークのデータがついてきてるので、それを参考にします。


[
{
"name": "銀座線",
"stations": [
"渋谷",
"表参道",
"外苑前",
"青山一丁目",
"赤坂見附",
"溜池山王",
"虎ノ門",
"新橋",
"銀座",
"京橋",

データをツールに食わせると、git コマンド群を発行するシェルスクリプトを作ってくれます。


$ boot generate-git-commands -c tokyo -f tokyo.sh

大江戸線のような循環があると、git グラフが作れないためツールはエラーで止まります。そりゃそうですね。

都庁前の循環を外して再度挑戦するも、東京のいたるところの乗換駅でエラーが… あちらとこちらで乗り換えができれば、循環だらけにもなりますね。


# 渋谷 銀座線 半蔵門線 副都心線
git checkout --orphan "銀座線"
git commit --allow-empty -m "渋谷"
git branch -f "副都心線" HEAD
git branch -f "半蔵門線" HEAD
# 代々木上原 千代田線
git checkout --orphan "千代田線"
git commit --allow-empty -m "代々木上原"
# 代々木公園 千代田線
git commit --allow-empty -m "代々木公園"
# 明治神宮前 千代田線 副都心線
git merge --strategy=ours --allow-unrelated-histories --no-ff --commit -m "明治神宮前" 副都心線
git branch -f "副都心線" HEAD
# 北参道 副都心線
git checkout "副都心線"
git commit --allow-empty -m "北参道"
# 方南町 丸ノ内線分岐線
git checkout --orphan "丸ノ内線分岐線"
git commit --allow-empty -m "方南町"
# 中野富士見町 丸ノ内線分岐線
git commit --allow-empty -m "中野富士見町"
# 中野新橋 丸ノ内線分岐線

「赤坂見附-永田町」のような別名の乗換駅の同一化を諦め、さらにエラーを起こす乗換駅を同一にしないよう入力データを修正していって、やっとなんとかエラーを出さなくした結果のスクリプトを、新しい git レポジトリに突っ込むことで、部分的には正しいところもあるぐらいの、東京の地下鉄gitグラフ(東京メトロ+都営地下鉄)を作ってみました。

git log で見るとこんな感じ

東京の路線図は循環しすぎなので、使用例としてはあまり良くないかもしれませんね。

もともとパリの路線図をGitHub 上で再現した2015年の作品があり、metro-clojure はこのような作品を簡単に作れることを目指して制作されたようです。

このツールを使えば、地下鉄の路線図以外の何か身近な有向グラフを git グラフで表現することができますね。

via From metro connections to a git graph

GrandType – キータイプの間隔データを機械学習させ、ユーザーを特定するプロジェクト

GradTypeは、英文を入力する際のキータイピングの癖を使って、今誰がタイプしているのかを特定しようという実験プロジェクトです。

まず、GitHub で認証した状態で、出てくる英文を入力することを繰り返します。すべて小文字で良く、正しい文字とスペースキーを打った時しか先へは進みません。打ち間違えたとしても間違えた文字は入らないのでそのまま続けます。

この時、サービスの裏側ではキーと次のキーが打たれる間の時間を記録し、RNNで学習させているそうです。

文章のバリエーションはそれほど多くありません。数十回入力した後で、ログアウトし、ユーザーとして認識していない状態で同じように英文をタイプすると、

RNNでより「似ている」と判定されたユーザー5名が表示されます。

多数のユーザーが試しているためか、なかなか当ててくれませんでした。(一回は自分のユーザー名が当てられたのを見ましたが、スクリーンショットを撮っていませんでした)

実用的にはスペルを打ち間違えたり直したりするデータを使った方が、より個人の特定はしやすいだろうと思いますが、研究としてはキーとキーの間隔時間だけでどこまでやれるかというのを見ているようです。

匿名で入力できる、と思われているようなサイトにおいても、個人の癖を収集して人物の同定を行うなんてことも、より簡単にできるようになっていくかもしれませんね。

Hacker News では、それへの対策として、キータイプの癖を攪乱するというツールも紹介されていました。匿名個人の特定ではなく、認証にタイピングの癖を使うといった研究もあるようです。

ソースコードが公開されています。

via Hacker News

css-only-chat CSSだけで動くブラウザチャット

ケビン・クッチャさん(Kevin Kuchta)のkkuchta/css-only-chat は、JavaScript を使わない非同期ウェブチャットサーバーです。

二つ(以上)のブラウザからこのサーバに接続し、アルファベットをクリックしてメッセージを作り送信すると、同じサーバに接続した他のブラウザでも即時表示される、いわゆるブラウザチャットです。しかし面白いのは、このページで JavaScript は使われていないというところ。

送信側

CSS の :active 疑似クラスを使うことで、ある領域をクリックした際に、はじめて画像ファイルを読み込ませることができます。つまり、ボタンが押されたタイミングを画像ファイルの読み込みでサーバ側から検知できるということ。

「同じボタンが2度目押された時は(画像はもうブラウザ側にロード済なので)サーバはわからないのでは?」となりますが、たとえば “a””a” と押した時は、接続しっぱなしの状態で、元のボタンを隠し、新たに「”a”を押した」という情報を持った別の画像ファイル名を持つボタンを表示しているようです。これをすべてのボタンに対して行うことで、ボタンが持つ画像ファイルのパスが、過去のすべてのタイプ内容を保持することになります。

受信側

表示はどうやって更新してるのか、も解説されています。接続しっぱなしの状態で、これまで送った html が不要になったら、style タグを送って過去の要素を display:none で隠し、新たにページ内容を追記します。

これを、自身か他のブラウザから新たなデータが届くまで待機しながら繰り返しているということ。じゃあソースコードはとても長くなるのでは、と思って Chrome でソースを表示しようとしましたが、何も表示されません。Firefox では何千桁もある一行のソースコードを確認できました。

今のところデモサイトは用意されていないので、試すには自分で動かす必要があります。

via Hacker News