Aikの技術的な進捗部屋

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

巷で噂?のCoinhiveについて

今話題?のCoinhiveについて調べてみました

先日自分の所属するチームで『Coinhive』に関するLT(Lightning Talk)がありました。
どうやら数日前にこの話は話題に上がっていた様で、Coinhiveに関するまとめ記事が結構出てきました。

ただまぁ…うん、賛否両論あってなおかつ否定的な意見が多い話題からか、
Coinhive=害悪』という風にCoinhiveに関して碌に説明しないまま悪と決めつける記事も散見されました。

私としては、Coinhiveは良い仕組みだし、今は収益率も低いですが発展していけばそのメリットも大きくなると思っています。
というかCoinhive自体のもたらすメリットを知ってしまうと、無闇にCoinhiveが淘汰される姿を見るのは残念極まり無さすぎて…。

このため、同志を増やすという意図で、私がどうしてCoinhiveが良いと思うかとか、Coinhiveのメリットとかを述べていければなと思います。
十分に調べて記事を書いたつもりですが、もし間違った記述等あればご指摘いただけると幸いです…。

※なお、今回の記事はめちゃくちゃボリューミーです!ご注意を…。

そもそもCoinhiveとは

Coinhiveは仮想通貨マイニング手法の1つとして提供されているサービスです。
その前に『仮想通貨マイニング』に関して説明しましょう。

仮想通貨マイニングとは?

仮想通貨マイニングを説明するには、仮想通貨の仕組みを理解しなければなりません。
ただ、この辺りの説明を本気ですると、とっても長くなるので…。

今回の記事では具体的な仕組みではなく本質のみを分かりやすく説明されていた記事より引用、という形で説明させていただきます。

ビットコインを始めとする仮想通貨は、通貨の信用の基盤として計算量を利用しているものがほとんどです。
例えば日本円は、日本銀行の信用によって通貨の発行が行われているのですが、
仮想通貨の場合は通貨の発行にコンピュータの計算力が必要になり、計算力をたくさん用意した人がより多くのコインを得られる仕組みです。
簡単に言うと、CPUをたくさんぶん回すと仮想通貨が手に入ります。

例えばビットコインの採掘で収益をあげようと思うならば、電力の安い中国でビットコイン専用にチューニングされたコンピューターをブンブン回すのが一般的です。
ところが、Coinhiveは「普通のユーザーのCPUの力を利用して仮想通貨を採掘する」のが大きな違いです。

参考記事: ブラウザで仮想通貨を採掘するサービス "Coinhive" について

もちろん仮想通貨マイニング自体は個人の規模でも出来ます。
ただ、仮想通貨マイニングに必要な計算量はかなり膨大であるため…。
本気で儲けようとするなら、上記引用文の様に電気料金が安い国で、十分な性能を持ったコンピューターを使用する必要があります。

仮想通貨マイニングでググれば、実際にパソコンを仮想通貨マイニング専用にカスタマイズして運用した記事等が結構出てくるので、興味の出た方は是非。

改めてCoinhiveとは

安い電力やチューニングされたコンピュータがしのぎを削っている世界で、普通のユーザーが採掘に参加してもほとんど利益は得られず、電気代で赤字になる可能性すらあります。
しかし、大きなWebサイトの来訪者全員が僅かばかりでも採掘をしてくれれば、それをすべて合わせるとそこそこの金額になることが期待出来ます。
それを簡単に実現してくれるのが、今話題になっているCoinhiveのサービスなのです。

Coinhiveは、非常にシンプルで使いやすいAPIを提供しています。
会員登録をして数行のJavaScriptコードをWebに貼るだけで、すぐに来訪者による採掘が可能になります。
Coinhive自体は、採掘量の3割を手数料として取るビジネスモデルです。
現在JavaScriptで提供されたAPI群ばかりが話題になっていますが、この仕組みはWebサイトだけではなく、ゲームなどのアプリでも利用可能です。

参考記事: ブラウザで仮想通貨を採掘するサービス "Coinhive" について

上記引用文にもある様に、Coinhiveは一種のWebAPIです。
Coinhiveの利用者は、主にWebサイトやWebサービスの運用者となります。

このAPIを使えば、広告に頼らない新たな収益モデルを確立する事ができます。
具体的な流れとしては、

  1. 運用者が自身のWebサイト/WebサービスCoinhiveAPIを設置
  2. サイト閲覧者やサービス利用者のCPU処理能力を借りてマイニング
  3. Coinhiveから利用手数料を差し引かれた収益を得る

といった形でしょうか。

Coinhiveを使用するメリットとは?

先の項目で述べた様に、Coinhiveを利用すれば広告に頼らない新たな収益モデルを確立できます。
Coinhive側の思想にも「広告に頼らない新たな収益モデルとしてこのCoinhiveを…」というスタンスでもあるそうです。

広告が嫌いな利用者からすれば邪魔な広告が消えるため、かなり有用だとは思います。

Coinhiveの問題点

Coinhiveの問題点の一つが「利用者の同意なしにCoinhiveで仮想通貨マイニングさせられてしまう」事。
言い換えれば「利用者の同意なしに勝手にCPUを使われる」ということです。

CPUが使われるタイミングによっては、パソコンが重くなる事も。
(具体的に言うと、CPU使用率が100%を越えた状態がずっと続くとパソコンが重くなるので…)
その辺りをどう思うかが問題になってくると思います。

実際、かなり大手のWebサービスが利用者に何も伝えないままCoinhiveを導入し、そのサービスのフォーラムが炎上した事例もあるため…。
使用に際してはかなり注意を払わないと大変なことになりそうです。

※サイトやサービス側が「我が社のサイト/サービスは無料で閲覧/利用出来ますが〜」と注意書きをしっかりすれば良いのでしょうが…。
広告と違って簡単に理解してもらえにくいので、ちょっと敬遠されそうだなとは思います。

もう一つが「現段階では収益率がものすごく低い」こと。
これも具体例を挙げて説明されてた記事がありましたので、そちらから引用させていただきました↓

さて、大事なのは「これがどの程度のお金になるのか」ということです。
まず明確にしておきたいのですが、現状では広告に比べて全くお金になりません。
具体的にどの程度の収益になるのかを示しましょう。

自分のMacBook Pro(Mid 2015, 2.5 GHz Intel Core i7)で1時間Webページに滞在して、0.000029XMR(Moneroの単位)の採掘でした。
XMR-USDの取引レートは記事執筆時点で約$90//XMR、USD-JPYが¥113/USDですので、記事執筆時点では1時間の採掘で日本円で約0.29円になります。
1PVで滞在時間を3分と多めに見積もっても、0.0145円/PVとなり、いわゆるバナー広告の方が何倍もマシということになります。

参考記事: ブラウザで仮想通貨を採掘するサービス "Coinhive" について

また、仮想通貨マイニングはマイニングする仮想通貨の価値によって儲け額が全然違ってくるのも大きな問題です。

今月と先月で閲覧数/利用数は同じなのに、仮想通貨の価値の差異で収入に大きく差がついてしまいます。
このため、常に安定した収益が見込めないというのも問題点ですね。
もっと仮想通貨が流通したりすれば話は変わってくるのでしょうが…。

※また、インターネット環境がないと計算してもらった結果を送信できないので、オフライン環境下では全く収益にならないというのも問題点かと…。

Coinhiveが良いと思う理由

私がCoinhiveが良いと思った理由は

  • 広告収益モデルに代わる、新たな収益モデルが生まれる

これに尽きます。

今のご時世無料で記事を見れたり、サービスを使える様にはなりましたが…。
そこに企業が絡んでいるのであれば、完全に無料で使えるわけではないのです。どこかしらで利益を得る必要があります。

このため、提供するサービスの機能を制限したり、一定期間しか使えなかったり、広告の表示が義務付けられたり、手数料を取られたり…と、様々な収益モデルが誕生しました。

企業は利益を追求するので当然といえば当然ですし、そのお陰で有益な情報が得られたり、便利なサービスが利用できるのであれば安いものです。

ただ、現状…特にまとめサイト運営やブロガーの収益モデルは大概が広告モデルになってます。
そしてこの広告収益モデルによって生み出された害は様々…。

PV数を稼ぐために分かりやすい話題にとにかく飛びつき、低品質な記事が出来上がったり、無断転載だらけのまとめサイトやゲーム攻略サイトが出来上がってしまったり…。
これは現状の収益モデルが「広告収益モデル」だけしか無いということが原因で発生していると思うのです。

もしCoinhiveの様なAPIを利用した収益モデルが確立されれば、

  • 広告収益モデルによって生まれる低品質な記事やまとめサイトの撲滅
  • 広告主=スポンサーに頼らず自分たちで利益を生み出せる
  • ユーザー側に視覚的な鬱陶しさを生み出さず、快適にサイト内を閲覧/サービスの利用ができる

など様々な良い面が生まれるのでは無いかと思います。
最もそれには「Coinhiveの様なAPIを用いた収益モデルの一般認知度向上」「仮想通貨マイニング技術の向上(現状全然儲からないし…)」など、解決すべき点はたくさんあると思います。

でも、これらが解決できればWebサイト/Webサービス運営者は従来の広告収益モデルだけでなく、別の選択肢も選べる様になるのです。

これらのメリットを踏まえて、Coinhiveが悪いか良いかを議論すると、きっと違う答えが出てくると思うのです…!
あわよくば、その答えが「Coinhiveの様な技術を発展させる」方向に向いていれば…と。

参考記事紹介

今回の記事執筆にあたり、参考になった記事をいくつかまとめてみました。
※正直今回の記事で、Coinhiveについてあまり詳しく語れなかったかなと思ってて…。

もし興味が出たら是非!是非下記の記事を読んでみてください…!

記事によってはそれなりの予備知識を要求されますが、読みやすい記事もあったので…。
Coinhiveの技術的な話よりも、倫理的な問題点に焦点を当てた記事も多かったので、そう言った記事なら読むのが苦にはならないはずです。

話題の「Coinhive」とは? 仮想通貨の新たな可能性か、迷惑なマルウェアか - ITmedia NEWS
こちらはCoinhiveの概要やCoinhiveの持つ問題点についてまとめてあります。
分かりやすく書かれていますし、そこまで長い記事でもないので、Coinhiveに関して調べる際に最初に読む記事としては良いかもしれません。

仮想通貨マイニング(Coinhive)で家宅捜索を受けた話 - Webを楽しもう「ドークツ」
Coinhive利用者側の視点で、どの様にCoinhiveを利用されたか、また警察からどの様な取り調べを受けたかを詳細かつ丁寧に書かれてあります。
筆者もこの記事をきっかけにCoinhiveに関して興味を持ちました。

Coinhiveとその周りの攻防を解説するよ – shotaro akiyama – Medium
こちらの記事はCoinhiveの仕組みや概要もそうですが、それと合わせてCoinhiveの様々なブロック方法やそのブロック方法をくぐり抜ける方法の紹介、さらにはCoinhiveとその同種のサービスをまとめてブロックできる方法を提示されてます。
なかなか面白い記事だと思うので、Coinhiveに関して興味が湧いた方は読んでみると良いかもです。
また、この記事を書かれた方がCoinhiveに対して持っている意見について書かれた記事もありましたので、合わせてどぞう|д゚)つ
僕がCoinhiveに期待すること – shotaro akiyama – Medium

人気サイトがアクセス数の多さを利用し閲覧者のCPUパワーで仮想通貨マイニング、広告に代わる収入源になるか? - GIGAZINE
こちらはGIGAZINEさんの記事で、Coinhiveを利用者に無断で自社に導入していたサイトの炎上の経緯〜サイト側の対応が記載されてあります。
他にもこういった、利用者に無断でCoinhiveを導入していた事例は結構あるみたいです…。

ブラウザで仮想通貨を採掘するサービス "Coinhive" について
Coinhiveの概要から問題点、実際に利用してみた結果やCoinhiveのメリットについて書かれてあります。
今回の記事を書くにあたり、大いに参考にさせていただきました…!

余談 友人の私見

Coinhiveに関して友人と話した際「Coinhiveに関してやたらと叩くというか、碌に説明もせずに一方的に悪と決めつける記事が多い」という話題に。

私が「なんでこういうふうな記事が多いのだろう…」と呟いた所、友人が

「広告収益モデルで稼いでいて、他の収益モデルに変更するのが困難な企業、もしくは明確なスポンサーがいる企業だったら、そりゃあ新たな選択肢なんて流行ってほしく無いと考えるでしょう」

と話してくれました。なるほど確かに…。

でも個人的には今回のCoinhiveを用いた収益モデルが出来ても、両者は明確に違うところがあるので…。
※広告モデルは利用者の視覚体験を阻害する一方、Coinhiveの様なAPIを使ったモデルは利用者のCPU処理能力を借りる

競合はせずに両者とも共存すると、私は思います…。

LaTeXのはじめ その3

その1(LaTeXとは/LaTeXインストール)はこちら
その2(LaTeXの書き方について)はこちら
※今回は特に前回からの続き要素が強めです。

LaTeXを使ってて気づいた事

前回では、LaTeX記法についてまとめてみました。

今回の記事では、LaTeXを使ってみて気づいた事をまとめていきます。

コメントについて

コメントアウトは、1行形式と複数行形式(パッケージ読み込みが必要)が使えます。

1行形式なら行の先頭に%
複数行なら\usepackage{comment}でパッケージを読み込み、下記のように書けばOKです。

\begin{comment}
コメントアウトしたい文
\end{comment}

改行について

LaTeXで改行をするのは、ちょっと面倒くさいです。
((とは言っても、考え方はMarkdownと一緒の様なものですが…。

まず、LaTeXで普通に改行をしたい場合は、\\(バックスラッシュ2個)を入れればOKです。
例えば下記の様なコードだと、

hoge\\fuga

コンパイルするとこの様に表示されます。

hoge
fuga

しかし、コード内で例えば

hoge

fuga

こう言った形で書いても、

hoge
fuga

この様に表示されます。
但し、1行目と2行目の行間は↑よりも広いです。

どうしてこうなるかと言うと、LaTeXでは1行開けると「段落が変わった」扱いとなるからです。
なので\\の改行よりも、行間は少し広めに取られるんですな。

同じ段落扱いで改行したい時は\\を使いましょう。
(Markdown記法と感覚的には一緒かな?

太字や斜体等について

太字にするには\textbf{太字にしたい文字}を、斜体にするには\textit{...}を使います。

と思ったの…ですが、少し調べると斜体にするコマンドは正確には「イタリック体」にするコマンドでした。

イタリック体は英語文字に存在する概念らしく、「イタリック体」と「斜体」は別物として扱われる様です。
※日本語におけるイタリック体にまつわる記述が載った、面白い記事がありました↓
日本語のタイポグラフィにおけるイタリック体と斜体について

ここで、「イタリック体は英語文字にしかない概念だとするならば、日本語に対して\textit{...}を使っても効果は無いのか?」と思い、実験してみました。

結果…。

LaTeXでtextitコマンドを用いれば斜体文字になるか試してみた結果

予想通り斜体にはなりませんでした。やっぱり。
ちなみに斜体にするにはどうするか調べましたが、マクロを用意したり専用フォントを用意してあげないと無理そうです…。

なお、この太字にするコマンドやイタリック体にするコマンドは、非推奨のコマンドもあるそうです。
対応表等も載った詳しいサイトはこちら(TeX入門)

貰った資料テンプレートにも、しっかり非推奨コマンドがありました。
昔から代々受け継がれてきたものらしいのでね…歴史を感じる。
でも使うのは現代の私たちですし、時代に合わせてアップデートも大事…ですよね!

特殊文字について

どうやらLaTeXには、普通に記述できる記号と出来ない記号がある様で。

普通に記述出来ない記号としては &{}#_ など、LaTeX記法では別の目的として使う記号が該当しております。
当然と言えば当然ですね…。

もしこういった記号を記述したい場合は、それ専用の記述が必要です。
上記に挙げたものであれば、記号の前に\(バックスラッシュ)を置いて記述すればOKらしいです。
※他の記号についても、個別に色んな記述方法があるみたいです

ちなみに私は&を普通に書いてたせいでコンパイルが通らず、小1時間ほど格闘しました(血涙)。
入門サイトを読むって大事ですね。

TeXにおけるフォント変更について

TeXで使用する文字のフォントを変更するにはどうすればいいのかな」とふと思い、調べてみました。
デフォのフォントが凄く綺麗なので、無理に変更する必要も無いんですけどね。

調べた結果、TeXでのフォント変更は非常に困難なことがわかりました。
参考記事(TeX入門)

どうしてそうなったのかと言うと(参考記事の文書をまとめてみました)、

TeX開発当時は今のTrueTypeフォントみたいな形式が広まっておらず、TeXみたいな高度なものに耐えうるフォント形式もなかった」
→「無いなら作っちゃえばいいじゃない。TeXで読み込める独自形式のフォントファイル(TFMファイルを作ろう」
→「あれいつの間にかTrueTypeフォントっていう規格のフォントファイルが流行してるぞ」
→「俺らが作ったTFMファイルの方がマイナーになっちゃったお…」
→「TFMでフォント配布してるとこなんて全然ないお…これじゃないとTeXでフォント変更できないのにぃ…」

って感じです。悲しい…。
ただ、個人で作成されたものやGoogleAdobeが提供しているものもあるみたいです。

頑張れば自分でもTFMファイルは作れるとのこと…でも中々骨が折れそうな作業っぽいです。

一覧表の更新(mktexlsr)について

覚えておくとつまづき防止になりそうだったのでメモ。
自分で参考記事をまとめようかと思いましたが、参考記事の記述がすごく良かったので引用という形で残しておきます。

LaTeXがファイルを読み込むときはTeXディレクトリの中から目当てのファイルを探しますが,
ファイルを探すのはそれなりの時間がかかります。
そこで考え出されたのが「あらかじめファイルの一覧表を作っておき,ファイルを探すときにはそれを参照する」
という仕組みで,この一覧表(ls-R)を作るコマンドがmktexlsrです。
手元のシステムでこの一覧表を利用しているかどうかはls-Rというファイルが存在するかどうかを調べるとわかります。

TeX Liveでは,このls-Rという一覧表でファイルを管理しています。
このため,新しいパッケージなどをインストールするたびに一覧表を更新してやらないと,
せっかくインストールしたつもりのパッケージもLaTeXから見つけてもらえずに使用できません。
TeX Liveでパッケージを追加した場合は
mktexlsr
を実行して一覧表を更新しましょう。
Unix系であれば管理者権限が必要ですので,
sudo mktexlsr
として実行します。

※参考記事(TeX入門): LaTeX入門/各種パッケージの利用 - TeX Wiki

長さの単位について

LaTeXでは、長さの単位として下記のものを使えるそうです。
まとめてあった記事があり、その記事より引用させていただきました。
※引用文中では表組みが使えなかったので、こういう表示となりました…申し訳ありません。

medemanabu.net

単位 概要 補足
pt ポイント 1 pt = 1/72.27 in
in インチ 1 in = 25.4 mm = 2.54 cm
mm ミリメートル 1 mm = 0.1 cm
cm センチメートル 1 cm = 10 mm
pc イカ 1 pc = 12 pt
bp ビッグポイント 1 bp = 1/72 in = 0.3527 mm
sp スモールポイント 1 sp = 1/65536 pt
ex 欧文フォントの高さ
em 和文フォントの幅

ページ番号の消去法について

LaTeX文書はデフォルトでページ番号がくっついてきますが、ページ番号を消去したい場合もあると思います。
全部のページ番号を消去する場合は\pagestyle{empty}コマンドを、
特定のページ番号を消去する場合は\thispagestyle{empty}コマンドを用います。

なお、この\pagestyleコマンドですが、引数(上記の場合だとemptyにあたる部分です)を変更する事でページ番号周りの設定も出来るそうです。

詳しくは下記記事を。ページ番号の形式の変更が出来るコマンドの紹介もあります。
www.latex-cmd.com

パッケージ「titlesec」について

頂いた資料テンプレートにしれっとある「titlesec」というパッケージについて調べてみました。
※公式の配布サイトはこちら

こちらのパッケージを使うと、見出しの形式や修飾が簡単に行える様になるそうです。
色んなレイアウト例をまとめておられるサイトもあり、そちらを見るとかなりオシャレなレイアウト等も簡単に出来るみたいです…すごい。
※参考記事: titlesec.sty -- Part 1: LaTeX パッケージ

ちなみに頂いた資料テンプレートでは…よく分からない使い方をしてありました。
「これここの部分消しても問題なくね…?」と思って消してみたら、案の定変化は無かったです。
いったいあの箇所で何をしていたんだ…。

参考までに、該当箇所のソースコードを載せておきます。

\usepackage{titlesec}
\titleformat*{\section}{\large\bfseries}
\titleformat*{\subsection}{\normalsize\bfseries}
\titleformat*{\subsubsection}{\normalsize\bfseries}

今後について

一先ずLaTeXについては満足いく所まで調べられましたので…。
もし他にも気づいた事等ある際は、別の記事にまとめると思います。

ではでは|д゚)