ことばにならないなにか

「ことばにならないなにか」を言葉で近似するそんな試み

xmr-stak-cpuで仮想通貨Moneroをマイニングしてみた(Linux編)

最近仮想通貨が盛り上がっていることもあり、家に古いPCもあったことから、興味本位で仮想通貨のマイニングをしてみました。
PCは6年ほど前に、約3万円で購入したものですので、かなり古いです。当時のPCの相場価格からしてもかなり安く、低スペックPCのため、あまり収益化は期待できませんが、一体どれくらい稼げたのかも、この記事の最後に報告できればと思います。

仮想通貨・マイニングツール

まずマイニングを行う前に、どの仮想通貨をマイニングするかを選ぶ必要があります。
仮想通貨の代表例はビットコインですが、インターネット上の記事を色々と読むと、ビットコインの採掘は既にビジネス化が進んでおり、家庭用のPCでは採掘が難しいということを学びました。

インターネット上では、いろんな人が、いろんな仮想通貨を推しているのですが、今回は「Monero」という仮想通貨を選びました。選んだ理由?語感です。なんかかわいかったので。

getmonero.org


次に、採掘するマイニングツールを選びます。
今回は、Github上で公開されている「xmr-stak-cpu」というマインニグツールを利用してみました。xmr-stak-cpuは、CPUを使って仮想通貨を発行する「CPUマイナー」の1つです。
また、このxmr-stak-cpuは、上記のMoneroの公式ホームページでも紹介されているツールのため、ある程度の安全性は確保されているような気もします。

github.com


利用したPCのスペック

もともとはWindowsを積んでいたのですが、Windowsを利用することが殆どなくなったので、CentOSを入れ直しました。

はじめに申し上げておくと、私ハードウェアは詳しくないので、このへんはあまりわかりません。足りてない情報があれば教えてください。


マイニングツールのコンパイル

まずは、上記のGithubのURLから、ソースを適当な場所にcloneします。

$ git clone https://github.com/fireice-uk/xmr-stak-cpu.git


次に、コンパイルをします。

コンパイルの前にdonate-lecel.hを確認しておきましょう。この値を調整することで、今回のハッシュパワーの一部を開発者に寄付するかどうかを設定できます。デフォルトの値は2.0 / 100.0となっています。これは100 minutesのマイニングを行った時、98minutes分の成果を自分が、2minutes分の成果を、開発者が受け取る、という意味です。
もちろん、値を低くすると、自分の受け取り分が増えますが、開発者に敬意を払う意味でも、あまり低い値にすることはおすすめしません。


コンパイルコードは、Github(xmr-stak-cpu/LINUXCOMPILE.md at master · fireice-uk/xmr-stak-cpu · GitHub)にも載っていますが、以下の流れで進めていきます。

まず、必要なパッケージをインストールします。

$ sudo yum install centos-release-scl cmake3 hwloc-devel libmicrohttpd-devel openssl-devel
$ sudo yum install devtoolset-4-gcc*


SCLを使って、シェルを起動します。

$ sudo scl enable devtoolset-4 bash


CMakeLists.txtがあるディレクトリ上で、以下のコマンドでコンパイルを行います。

# cmake .
# make install

私の場合は、コンパイル中に何度か、利用しているライブラリのバージョンが古いため、コンパイルできませんというエラーメッセージが出ましたが、逐一対応していけば、問題なくコンパイルできました。
また、Githubではcmake3コマンドを利用するように記載されていましたが、うまく行かなかったのでcmakeコンパイルしています。


configファイルの設定

コンパイルが終わった状態で、いざ起動しようとすると、「configファイルを設定して下さい」というエラーメッセージが表示されるので、設定を行います。

CPUの設定

まずはCPUの設定です。私もあまり詳しくはないのですが、とりあえずconfig.txtを開き、cpu_threads_confの値を、以下のように修正します。

"cpu_threads_conf" :
 [ 
      { "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : false },
      { "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : false },
 ],

スレッド数は、各マシンのCPUのスペックに合わせて調整すれば良いと思います。私のマシンでは、CentOSが認識している仮想プロセッサの数が4つだったので、始めは4つ記載していたのですが、何故か2つのほうがTotalのマイニング効率が高かったので、上記のように設定しています。

2chを見ていると、物理コアの数にスレッドの数を合わせると最速になる、という情報もありました。以下のコマンドで、コア数を確認できます。私のマシンの場合は、やはり「2」でした。

$ grep cpu.cores /proc/cpuinfo | sort -u
2


以下のQiitaの記事にも、CPU設定の例が記載されていますので、確認してみると良いでしょう。

qiita.com


アドレスの設定

次に、マイニングプールと送金先の設定を行います。

同じくconfig.txtの中には、"pool_address"と、"wallet_address"を指定する箇所がありますので、自分で選択したマイニングプールのアドレスと、送金先(ウォレット)のアドレスを指定します。

私は、マイニングプールに「MoneroHash - Monero Mining Pool」というサービスを利用しています。特に会員登録の必要もなく、利用できます。ただ、私自身、どのプールが良いのかなど、比較検討したわけではないので、もっと良いプールがあるかもしれません。

とりあえず、

MoneroHash - Monero Mining Pool

を開くと、ポート番号などの情報が見れます。マシンのスペックに合わせて、適切なものを選択しましょう。私は弱小マシンなので、一旦3333番ポートを選択します。この場合、"pool_address"に指定する値は、「monerohash.com:3333」となります。


次に、ウォレットアドレスですが、今回は、「ビットコイン(Bitcoin)を最短10分で購入 | Coincheck(コインチェック)」という日本のサービスを利用することにしました。
最近、Moneroの受け取りが可能になったようです。

登録して運転免許証などの写真を送ると、約1日で受取先のアドレスを発行することが可能になります。免許証の写真を送るときに、自分の顔と運転免許証が1枚の写真に収まるよう、自撮り(セルフィー)した写真を要求されるので、部屋の中で1人で自撮りをするという精神的な苦行を行う必要があります。

ちなみに、ウォレットアドレスは、長くランダムな英数字となります。

2つのアドレスが発行できたら、それぞれをconfig.txtに記載します。イメージ的には、以下のようになります。パスワード欄は空欄のままでOKです。

"pool_address" : "monerohash.com:3333",
"wallet_address" : "(ランダムな英数字)",
"pool_password" : "",
HTTPサーバの設定

最後に、現在のマイニング状況を、スマホなどのブラウザから簡単に監視するため、httpサーバの設定を行います。

"httpd_port" : 0, という設定項目があるため、0ではなく、適当なポート番号を入力します。既存のサービスと競合しないよう、出来るだけ大きめの数字がおすすめです。
私は、8888と設定しているため、以下のようになります。

"httpd_port" : 8888,


ここまでくると、いよいよマイニングの開始です。

マイニングを始めよう!

マイナーの起動方法

マイナーの起動は、コンパイルを行ったところと同じディレクトリで、以下のコマンドを叩くと実行できます。

$ xmr-stak-cpu

実行中に、「h」キーや、「r」キーを押すと、ハッシュレートや結果を表示することができます。

また、httpサーバの設定を行ったので、ブラウザからでも結果にアクセスすることが可能です。
そのためには、まず、マイニングをしているマシンのローカルIPアドレスを調べます。ifconfigなどのコマンドで調べることが出来ます。

$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.16  netmask 255.255.255.0  broadcast 192.168.0.255

私の場合は、192.168.0.16がローカルIPアドレスでしたので、マイニングしているPCもしくは、そのPCと同じLAN内にある、スマホなどの端末から、「http://192.168.0.16:8888/」にアクセスします。

すると、現在のマイニング情報がリアルタイムで閲覧できます。アクセスが拒否される場合は、マシンのファイアウォール設定を見直す必要があるかもしれません。

マイニングの結果

さて、丸1日程度、マイニングをやってみました。
まず、ブラウザから確認できるハッシュレートは、以下のようになりました。

f:id:penoa:20171001003229p:plain

およそ43H/sということですが、これ、めちゃ遅いです。
2chなどの情報を見ると、スマホアプリでのマイニングで10〜50H/s、専用にチューニングされたマシンだと500H/s程度の速度が出るようです。

結局、プールにいくらたまったのか、MoneroHashの画面を確認してみましょう。1日稼働させ続けた結果が、以下の通りです。

f:id:penoa:20171001003924p:plain

日本円になおしてみましょう。現在の相場(1XMR = 10535 JPY:2017年10月 1日現在)で換算すると、およそ「6円」でした。6円。。。ろくえん。。。

1ヶ月稼働させ続けると、およそ180円を稼ぐ事になります。明らかに電気代のほうが高くなりそうですね。


まあ、オンボロのパソコンだったので、今回は仕方ないかと思います。
AWSとかGCPとかで、もう少しスペックのよいサーバを借りて、再度試してみたいと思います。

落ち着くために素数を数えると何時間かかるのか

突然ですが、みなさんは極度の緊張や、予想だにしない出来事に直面して慌てふためいた時に、どうやって落ち着きを取り戻しますか?

これは豆知識なのですが、素数を数えると落ち着くことができます。みんなやってるので、あなたもやってみてください。


素数を数えれば落ち着く」という有用な豆知識を対外的に広く伝えるために、こんなTシャツまで販売されています。

http://www.ttrinity.jp/_img/product/17/17686/1469482/1630580/3924984/product_img_f_3924984.jpg
数学Tシャツ:素数を数えて落ち着くんだ! | デザインTシャツ通販 T-SHIRTS TRINITY(Tシャツトリニティ)より引用。


いや、ちゃんと説明しておくと、これは完全にネタで、実際に数えて落ち着くわけではありません。まあ、狂おしきほどの素数愛者なら、実際に数えるのかもしれませんが...

元ネタは不明ですが、ニコニコ大百科によると、「ジョジョの奇妙な冒険ストーンオーシャン」にてプッチ神父が使用したセリフとのことで、これ以降有名になったみたいです。

『落ち着け、素数を数えるんだ。』

上記台詞を漫画「ジョジョの奇妙な冒険ストーンオーシャン」にてプッチ神父が使用したことにより、慌てふためいた発言や言動に対して落ち着かせるために使用される。神父曰く、「素数は1と自分の数でしか割ることのできない孤独な数字・・・。わたしに勇気を与えてくれる」

素数とは (ソスウとは) [単語記事] - ニコニコ大百科より引用。

素数を数えるのにどれだけ時間がかかるか

ところでですよ、素数は無限に存在することが数学的に証明されています。ここで一つの疑問が生じるのですが、落ち着くために素数を数えているみなさんは、一体素数をいくつまで数えているのでしょうか?というか、常識的にいくつまで数えられるのでしょうか?

ちなみに、前述したジョジョの奇妙な冒険に出てくるプッチ神父は「19」まで数えているみたいです。素数Tシャツでは「373」まで記載されています。

ということで、計算してみましょう。

素数については、数学的には分かっていない部分が多いです。しかし、「素数定理」と呼ばれる有名な定理があって、ある数{x}以下の素数の個数{\pi(x)}は、

{ \displaystyle
\pi(x)=\frac{x}{\log(x)}
}

で近似できることが知られています。これを使えば計算は容易です。

実際に計算してみる

簡単のため、1つの数字を0.2秒で言えることを仮定しましょう。例えば「37」という素数は、数字が2つなので、数えるのに0.4秒かかって、「1277359」という素数は、数字が7つなので、数えるのに1.4秒掛かるということです。「ひゃくにじゅうななまんななせんさんびゃくごじゅうろく」を1.4秒です。余裕ですよね?

Rでプログラムを組みました。{10^n(n=1,\ldots,11)}までの素数を数えるために必要な時間を計算しています。

calcTimeInDigit <- function(x){ #オーダーがxの素数カウントの時間
  if(x==0){return(4*1*0.2)}
  maxnum <- 10^(x+1) - 1
  minnum <- 10^x - 1
  cnt <- maxnum/log(maxnum) -  minnum/log(minnum)
  time <- cnt * (x+1) * 0.2
}

calcTimeToDigit <- function(x){ #オーダーがxまでの素数カウントの時間
  sum(sapply(c(0:x),calcTimeInDigit))
}

(sapply(c(0:10),calcTimeToDigit))

出力結果は以下のような感じ。

> (sapply(c(0:10),calcTimeToDigit))
 [1] 8.000000e-01 7.779408e+00 8.163726e+01 8.344360e+02 8.434607e+03 8.487045e+04
 [7] 8.521240e+05 8.545341e+06 8.563261e+07 8.577117e+08 8.588153e+09

よくわからないので表にまとめます。

x xまでの素数を数えるのに必要な時間
10 0.80秒 -
100 7.78秒 -
1,000 81.6秒 -
10,000 834秒 13.9分
100,000 8,430秒 2.34時間
1,000,000 84,900秒 23.6時間
10,000,000 852,000秒 9.86日
100,000,000 8,550,000秒 3.25月
1,000,000,000 85,600,000秒 2.71年
10,000,000,000 858,000,000秒 27.2年
100,000,000,000 8,590,000,000秒 2.72世紀

指数部分を除いた仮数部が何かの値に収束しているような気がするので、解析的に計算してみると面白いかもしれません(私はやってません)。

つまり、人生最大級の緊張で、どうしても落ち着きたい場合、勢い余って100,000,000,000(1000億)までに登場する素数を全て数えてしまった場合は、2.72世紀後に数え終わり、やっと落ち着きを取り戻すということです。

みなさんも数えてみましょう

ちなみに、10,000,000(1000万)までに登場する素数は、以下のサイトから閲覧できます(やや重いです)。

素数一覧(〜1000万)

これを全て数えると、9.86日掛かるという計算になります。さあ、みんなで素数を数えて落ち着きましょう!

Twitterを2週間やめた方法とそれによる副作用

やっと、やっと、卒業論文を提出することができました!!
これで私も晴れて、大学を卒業できます!!

ところで、卒業論文を進める上での大敵は、実験の失敗でもなく、教授との仲でもなく、Twitterでした。現代っぽいですね。
ちょっと集中力が切れてしまった時など、ついついTwitterを開いて、20〜30分の時間を浪費してしまいます。

ということで、2週間前の私は、卒論が終わるまでにTwitterを開かないようにする方法を、必死に考えていました。

スマホのアプリを消す

いやいや、PCのブラウザから見れるじゃん。

友人にパスワードを設定してもらう

いや、セキュリティ的にだめじゃね。てかそんな友人がいn...うぅ...


ということで、悩んだ末に取った方法は、

パスワードをハッシュ化する

既存のパスワードをtxtファイルに保存し、おもむろにMacのターミナルを立ち上げ、とりあえずファイルをMD5でハッシュ化します。

$ openssl md5 password.txt


出てきた文字列を、新たなパスワードとして設定します。MD5ハッシュ値は128bitsなので、16進数(4bits区切り)だと32桁で表示されます。そして、このハッシュ値を新しいパスワードにします。

f:id:penoa:20160204133803p:plain

Twitterに「安全性はかなり高いです」と評価されました。そりゃ32桁もあればね。

これで、Twitterにログインする際には、わざわざターミナルを立ち上げ、既存のパスワードをハッシュ化しないといけないという手間がかかります。
もし卒論の集中力が切れて、ふとTwitterを開こうとしても、ターミナルを立ち上げようとする辺りで、ぐっと堪えることができるだろう!と考えたわけです。


という読みが大成功!結局、「2週間Twitterにログインしない」ことを達成しました!やったね!


でも、デジタルネイティブ世代の典型的な若者の私にとって、Twitterを見れないというのは結構なストレスでした。それによって、普段の行動に大きく2つの変化がありました。

(変化1)やたらfacebookはてブをみるようになった

普段なら、1日に1回見るか見ないかだった「Facebook」や「はてなブックマーク」などのWebサイトを、頻繁に見るようになりました。Facebookを見る頻度が上がるのは、同じSNSとして予想できる変化だと思います。しかし、はてブを頻繁に見るようになるとは、自分でも予想外でした。

はてブの中でも特に、今までは全く気にしていなかった、ブックマーク数の「変化」を注視するようになりました。どういうことかというと、「あれ?この記事、さっきまで50ブクマだったのに、一気に100ブクマまで増えてるやん!」なんて考えることが増えたわけです。

思うに、僕はTwitterを見ながら、その流れてくるツイートの背後に、密かに「人間の存在」を感じ取っていたのかもしれません。Twitterで流れてくる情報は、基本的に「画面の向こう側で誰かが文字を書いて、それを送信した」ものです。Twitterをやめると、その「画面の向こうの誰か」を感じ取れなくなり、1人疎外された状態になってしまいます。

そんなときに、はてなブックマークで誰かが記事をブックマークしている様子をみて、そこに「人間の存在」を感じ取っていたのかもしれません。

(変化2)学校に行って友人と話すようになった

今までは、週に1度、先生に卒論の進捗具合を報告するためだけに学校に行っていました。研究テーマ的に、家で1人でも執筆を進めることができる論文だったので、それ以外の日はいつも家で1人で作業をしていました。

ところが、Twitterをやめてから、週に2,3回のペースで学校に通うようになりました。そこで何をしたかというと、卒論を書くことはもちろんですが、今までにないくらいに、友達とかなり喋りました。おお、私ってこんなに喋るんだって思うぐらい喋りました。そして、いつもより会話をするのが楽しいんですね。これは「断Twitter」効果すごいなと思いました。Twitterを開くことができず、1つのコミュニティを失った反動によって、もう1つのリアルなコミュニティで、人間との関わりを強く求めているような、そんな感じがしました。


まとめると、Twitterをやめることによって、人間との繋がりや関係性を希薄に感じたような気がします。そして、その希薄になってしまった人間との関わりを回復しようと、はてブのブクマ数の変化から人間を感じたり、学校に行って友達と積極的に会話したのかな、と思います。

一見、「断Twitter」は、リアルで友達と喋ることが増えたりして、良い効果をもたらすように思います。しかし、やはり学校から家に帰ると、1人孤独で寂しいです。リアルのコミュニティを大事にするか、SNSのコミュニティを大切にするか、どちらが良いのか判断するのは、人それぞれな気がします。私は「リアルもいいもんだな」とは思いました。

R言語を使って株価データを取得(スクレイピング)する方法

時系列分析の勉強をしていると、ふと株価を時系列分析にかけてみたくなる時があると思います。

「株価データ」と考えて、まず思いつくのは「Yahoo!ファイナンス」ですが、
実はYahoo!ファイナンスは、スクレイピング(プログラムを組んでWeb上からデータを収集すること)による株価の自動取得を禁止しています。

Yahoo!ファイナンスでは、Yahoo!ファイナンスに掲載している株価やその他のデータを、プログラム等を用いて機械的に取得する行為(スクレイピング等)について、システムに過度の負荷がかかり、安定したサービス提供に支障をきたす恐れがあることから禁止しています。

Yahoo!ファイナンスヘルプ - Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止していますより引用。


ということで、今回は以下の「株価データダウンロードサイト」というWebサイトから、R言語を使って株価をスクレイピングしてみます。

株価データダウンロードサイト
http://k-db.com/

このサイトの管理者はブログで、スクレイピングするときには高負荷をかけないように気をつけてね、と言っています。
気をつければ、取得しても大丈夫っぽいです。

高頻度アクセスによって、転送量が異常に多い状況が続いたことと、障害が多発するようになったため、制限をかけています。
スクリプト等でデータ取得される方はお気を付けください。(特に同一ページに対しての大量リクエストなど)

k-db.com: 2016/01/20より引用。

株価を取得してみる

ということで、R言語を使って、日経平均株価を構成する225銘柄の2015年の株価日次データを取得するには、以下のようにします。

code <- c(4151,4502,4503,4506,4507,4519,4523,4568,6479,6501,6502,6503,6504,6506,6508,6674,6701,6702,6703,6752,6753,6758,6762,6767,6770,6773,6841,6857,6902,6952,6954,6971,6976,7735,7751,7752,8035,7201,7202,7203,7205,7211,7261,7267,7269,7270,4543,4902,7731,7733,7762,9412,9432,9433,9437,9613,9984,8303,8304,8306,8308,8309,8316,8331,8332,8354,8355,8411,8253,8601,8604,8628,8630,8725,8729,8750,8766,8795,1332,1333,2002,2269,2282,2501,2502,2503,2531,2801,2802,2871,2914,3086,3099,3382,8233,8252,8267,8270,9983,2432,4324,4689,4704,9602,9681,9735,9766,1605,3101,3103,3105,3401,3402,3861,3863,3865,3405,3407,4004,4005,4021,4041,4042,4043,4061,4063,4183,4188,4208,4272,4452,4901,4911,6988,5002,5020,5101,5108,5201,5202,5214,5232,5233,5301,5332,5333,5401,5406,5411,5413,5541,3436,5703,5706,5707,5711,5713,5714,5715,5801,5802,5803,5901,2768,8001,8002,8015,8031,8053,8058,1721,1801,1802,1803,1808,1812,1925,1928,1963,5631,6103,6113,6301,6302,6305,6326,6361,6366,6367,6471,6472,6473,7004,7011,7013,7003,7012,7911,7912,7951,3289,8801,8802,8804,8830,9001,9005,9007,9008,9009,9020,9021,9022,9062,9064,9101,9104,9107,9202,9301,9501,9502,9503,9531,9532)

for(i in 1:length(code)){
  url <- paste("http://k-db.com/stocks/",code[i],"-T?year=2015&download=csv",sep="")
  stock <- read.table(url,sep=",", skip=2)
  #適当な処理
  print(i)
  Sys.sleep(1)
}

軽く解説すると、
codeで、取得する株価の証券コードを指定します。今回は225銘柄全部取ってくるので、225個の証券コードを記載しています。
証券コードは、以下のサイトから持ってきました。
indexes.nikkei.co.jp

urlに、取得元のURLを生成し、URL先のデータを取得します。形式はCSVっぽいので、カンマでデータを区切って、余分なヘッダーを2行取り除いて、stockに代入しています。それ以降は、Rのdata.frameに突っ込むなり、グラフを書くなり、焼くなり煮るなり、お好きな方法で処理して下さい。

Sys.sleep(1)で、システムを1秒間眠らせています。サーバーに負荷をかけないための対策です。これしないとサーバーにアクセス拒否されて、しばらく取得できなくなります。1秒もバッファを取れば十分です。(0.5くらいでも行ける気がします...)

ちなみに、stockの中身はこんな感じです。

> head(stock)
          V1   V2   V3   V4   V5      V6          V7
1 2015-12-30 6071 6100 6032 6065 1555300  9443146800
2 2015-12-29 5940 6098 5933 6093 2152000 13014105600
3 2015-12-28 5898 5943 5858 5929 1105900  6529141700
4 2015-12-25 5908 5947 5884 5895 1034100  6110926700
5 2015-12-24 6012 6047 5846 5860 1664000  9826514000
6 2015-12-22 5957 5986 5943 5955 1297500  7740294100

URL元にアクセスすれば分かるのですが、左から順に、日付(V1)、始値(V2)、高値(V3)、安値(V4)、終値(V5)、出来高(V6)、売買代金(V7)です。

終値だけを取り出すには

例えば、終値だけを取り出したければ以下のようにします。

> closePrice <- rev(stock[["V5"]])
> head(closePrice)
[1] 5000.0 4911.0 4913.5 5097.0 5107.0 5158.0

取得元のデータが日付の降順に並んでいるので、revで反転させています。

PDF変換や数式も書けるMarkdownエディタDillinger

世の中には、Markdown記法というものがあります。簡単にいえば、Wordとメモ帳の間のようなもので、簡単な見出しや箇条書きをつけた文章をサクッと作成することができます。

特徴的なのが、プログラムのソースコードを自動でハイライトできるということです。非プログラマーにとってはなんのこっちゃですが、以下の画像を見てもらえば分かります。左側のプログラムを、右側のように自動で色付けして見やすく表示してくれるのです。

f:id:penoa:20151126022243p:plain

上記のような特徴もあり、技術者には人気の高いMarkdown記法ですが、通常のWindowsMacのエディタではサポートしていません。なので、「プログラムコードを含んだレポートを作成してPDFにしたい」といった場合には、メモ帳で作ることもできず、Wordで作ることもできず、少し困ってしまいます。

そんなときに便利なのが、オンラインMarkdownエディタの「Dillinger」です。

dillinger.io

このサービスは、オンライン上でMarkdown形式の文章を作成でき、リアルタイムプレビュー機能もあり、数式も埋め込むことができ、Dropboxなどと連携してファイルを保存でき、さらにPDF出力もできるという、とても素晴らしいサービスです。

早速利用してみましょう。

サイトにアクセスすると、少しロードした後、いきなりエディタが表示されます。Dillingerには、会員登録という概念がありません。

f:id:penoa:20151126012824p:plain

左側がMarkdownエディタ、右側がそのプレビューになっています。プレビューはほぼリアルタイムで、エディタの文字を変更すると、即プレビューに反映されます

では、いくつか項目に分けて、このDillingerの魅力を見ていきます。

Markdown文法の対応は申し分なし!

Markdown記法では、表を描くことができます。しかし、まれにその表を上手く認識してくれないサービスもあります。Dillingerはどうでしょうか?せっかくなので、表以外にも認識してくれないMarkdown構文がないか、まとめてチェックしてみます。

片っ端からMarkdown構文を突っ込んでいくのが手っ取り早いです。

テストコードは以下からお借りしました。
markdown example · GitHub

で、実際にやってみた結果がこちら。

f:id:penoa:20151126014524p:plain
f:id:penoa:20151126014534p:plain

すこし行間の開きが大きい気がしますが、表も上手く認識できていますし、日本語にも対応しています。このコードに載っている構文は全て完璧に認識できていることになります。コードのハイライトも完璧ですし、普通に利用するには全く困らないでしょう。

数式も挿入できる!

このDillingerには、数式を挿入することもできます。基本的にはTeXの文法が利用できるようです。記述方法は、$$と$$の間にコードを書きます。これもきちんと描写されるのか確かめましょう。

なにか複雑な式がないか考えて思いついたのが留数定理。以下のコードをDillingerに入力してみます。

$$\oint_\gamma f(z)dz = 2\pi i\sum_{i=1}^n \operatorname{Res}_{z=a_i}\,f(z)$$


結果はこちら。

f:id:penoa:20151126020508p:plain

なんか\operatornameがパースできないようです。\mathrmとか{\rm }もダメだったので、ここは妥協して斜体のままで行きます。あんまりよろしくないですが...

表示形式がインラインっぽかったので\displaystyleを追記しておきます。

$$\displaystyle \oint_\gamma f(z)dz = 2\pi i\sum_{i=1}^n \operatorname{Res}_{z=a_i}\,f(z)$$


そうすると以下のようにキレイに表示されます。やったね。

f:id:penoa:20151126021005p:plain

ファイルの保存はクラウドサービスと連携

Dillingerには会員登録という概念がありません。なので、各自のクラウドサービスと連携させて、作成したファイルを保存することができます。現在対応しているのが、

の4つのクラウドサービスです。

f:id:penoa:20151126022037p:plain

今回は試しにDropboxに保存してみましょう。

Dropboxを選択すると、以下のようにAPIの許可画面が表示されます。ログイン情報を入力して、許可します。

f:id:penoa:20151126021731p:plain

認証が完了した後、なぜか、全く保存されずに一度Dillingerに戻ってきてしまいます。めげずにもう一度SAVE TOからDropboxを選択しましょう。そうすると、Dropboxのルートに「Dillinger」というファイルが作成され、その中に.mdファイルが保存されます。

今回は紹介しませんが、このようにして保存した.mdファイルを、IMPORTすることもできます。一旦Dropboxに作業を保存し、また別の日にIMPORTして、作業を再開するといったことが簡単にできます。

PDF出力もできる

ファイルが完成したら、PDF出力することができます。EXPORT ASからPDFを選択すると、ローカルにPDFが保存されます。若干文字サイズが大きいかな?と言う感じですが、それ以外は特に問題ありません!


とても便利なサービスで、会員登録もいらないので、少しMarkdownでメモを残しておきたい時に利用してみてはいかがでしょうか?

flickrのアルバムをアカウントのない友人と共有する方法

最近、デジカメやスマフォで撮影した画像を整理していたのですが、時代はクラウドだしな〜と思い、flickrを利用することにしました。

flickrは、米Yahooが提供するクラウド画像ストレージサービスです。撮影した画像を全てここに放り込んでおけば、もうスマホやパソコンの容量を気にすることはありません

flickr

https://www.flickr.com/

 

Yahoo!が提供しているサービスなので、全部英語!英語できない僕には辛い!

しかも、このflickr、2015年6月に全面リニューアルしたため、ボタンの位置とか機能とか操作性とか、いろいろ変わってしまいました。なので、過去の情報があまり利用できないのです。

ということで、今回は、flickrのアルバムを、米Yahooアカウントを持っていない人と共有する方法をまとめます。旅行に一緒に行った友達と、画像をシェアしたりするときに便利ですね。

アルバムを共有する方法

まず、Albumsページを開きます。上部メニュー「You」から「Albums」を選択します。

 

 

Albumsページでは、いままで作成したアルバムが一覧で表示されます。共有したいアルバムの上にカーソルを持って行くと、いくつかボタンが出てくるので、一番左の「Share this album」をクリックします。

今回は「201603大学の写真いろいろ」というAlbumを共有してみます。

 

 

すると、以下の様な表示が出ます。このURLを共有したい人に教えればいいということです。(URLは既に無効化しています。)

 


思ったより簡単でしたね。ちなみにその下の英語では、

アルバムの中のプライベート設定をしている画像は、もちろんプライベート設定のままです。しかし、あなたがこのURLを教えた人間だけは、そのプライベート設定している写真を見ることができます。

みたいなことが書いてあります。

本当に共有できてるのか確認する

では、本当に、友人がアクセスできるのか試してみましょう。プライベートブラウジングモードを開いて、発行されたURLにアクセスしてみます。

すると、こんな画面が出てきます。

 

無事にアルバム内の画像を見ることができています。

ところで、「< Back to albums list 」という、ちょっとやばい感じのボタンを発見。
これを押すと、アルバムが全て見られてしまうのではないか?と思いましたが...

 

押してみるとこんな感じ。

 

アルバムリストには、共有したアルバムしか表示されていません。ここからどう動こうと、共有していないアルバムの写真は表示できません。これで一安心です。

URLを取り消すGuest passのExpire

ところで、一度教えたURLを、いつまでも有効にしておくことは、セキュリティ上好ましくありません。どこかからURLが流出して、友人だけに公開したつもりが、全くの赤の他人に見られているかもしれません。

それをチェックするのが、「Guest pass history」という機能です。これを使うと、今まで共有したことのあるアルバムや、共有しているURL、そのURLから観閲された回数、共有の停止などができます。

画面右上のカメラのアイコンをクリックして、「Setting」を選択します。

 

 

flickrの設定画面が出てくるので、上部タブメニューから「Sharing & Extending」を選択します。そして、左側にある「Guest pass history」をクリックして下さい。

 

 

そうすると、こんな画面が出てきます。

 

 

先ほどプライベートブラウジングモードで一度観閲したので、View数が1になっています。その右にある「Expire」という赤い文字を押すと、共有をストップすることができます

押すと、以下の様な表示になります。

本当に停止されたのか、先ほどプライベートブラウジングモードで見ていた画面を更新してみます。

すると、404が帰ってきました。これでもう安心です。

 

flickrは他にも様々な機能を搭載していますので、英語が読める人にはお勧めです。ぜひ使ってみてください。そして僕に使い方を教えてください。

個人的には、facebookの様に、顔認識機能を搭載して、人物が自動でタグ付けされるようになればいいなーと思っています。今後の開発に期待しましょう!

面接で円周率を聞かれて答えられないほうが悪い

ちょっと前に、 twitterではこんなツイートが盛り上がってたみたいです。

このツイートをした人は、本気でこんなことを考えてるのか、ただの下手くそな炎上商法なのかよくわかりませんが、普通の人ならこのツイートを見て、「会社で働くのに円周率を言えることが必要なのか?」「この面接官は、大学の数学科では円周率を覚える必要があるとでも思ってるのか?中学生の時から、円周率の計算は全部πでするのが当たり前だろ!」と批判するわけです。

ましてや、就活中の人間にとって、面接でこんな質問されると、もうたまったもんじゃありません。面接の前に必死に業界分析して、会社分析もして、OB訪問もして、その会社のホームページやパンフレットを丸暗記する勢いで読み漁り、準備に準備を重ねた面接で、いきなり「円周率いってみて?」なんて言われたら...考えるだけでぞっとします。

もし僕が就活生だったら

でも、僕自身、採用面接で数学科の学生に円周率の値を尋ねる事自体、そこまで悪いことでは無いのでは?と思っています。

決して優等生の模範解答ではないですが、もし面接官に「大学で数学やってるんだ。円周率何桁まで言える?」と聞かれたら、僕ならこんな感じで答えてたと思います。

円周率は3.14までしか言えません。というのも、大学の数学科では、あまり具体的な円周率を使うことがないからです。じゃあ大学の数学科では何をやってるのかというと、例えば、ライプニッツ級数とよばれる、数学では有名な式があります。この式にはいま仰られた円周率が出てくるのですが、その円周率は3.14...という形じゃなくて、πという文字で与えられています...

きっと会議室にホワイトボードがあれば、面接官のウケが良ければ、3分のミニ講義が始まっていたことでしょう。

面接は会話のキャッチボール?

「面接では、面接官から言われたことに対して、素直に正確に答えなければいけない」と考える人はもちろんいると思います。「円周率言えるところまで言ってみて」といわれたら「3.1415まで言えます」と答えるのが正義だと思ってる人もいるでしょう。

その考えはその考えで尊重されるべきで、それを否定するつもりはありません。しかし、僕自身は、よく言われる言い回しを使うなら「面接とは、会話のキャッチボールがきちんとできるのかを確かめる場である」と思っています。「3.1415です」と答えるべきではないと思うのです。

もし仮に、円周率を100桁覚えていたとしても、100桁言った時点でキャッチボールが終わってしまいます。面接官に「円周率言える?」と聞かれたら、「3.141592...」と答えるのではなく、「いやいや、数学科が円周率言えると思ったら大間違いですよ(笑)」と答えるべきだと思うのです。

科学者の説明責任と今回の面接

少し難しい話をしますが、この問題は「科学者の説明責任」とも関わってくると思います。例えば、大学の教授などは、国から補助金を出してもらって研究を続けているんだから、国に税金を払ってる一般国民に対して、その研究の内容をわかりやすく伝える責任がある、というものです。

面接で「円周率言える?」と尋ねられた数学科の学生は、大学で3年間数学を学んできたはずです。それも、国から多くのお金を出してもらい、数学を学んできたはずです。学問をしているものとして、自分が何をやっているのか、何を研究しているのか、何を勉強しているのか、「数学」について何も知らない人に対しても、やさしくおもしろく説明できるべきだと思うのです。

普通の人は、大学で何を研究してるかなんて知らない

一般の人(今回の例では面接官)にとって、大学の数学科というのは何をやってるのか、全く想像のつかないところです。もし、このブログの読者が大学生ならば、自分の専門外の学部学科がどんなことをやってるのか、想像もつかないと思います。例えばみなさんは、経営学部は何をやってるのか知ってますか?「会社経営でいかに利益を出すか」を勉強していると思ってないですか?経営学とはそもそも「人間の集合である組織の活動」を研究する場所であることを知っていますか

大学生や研究者でさえ、自分の専門外の学部で何をやってるかといった知識は疎かです。ましてや一般人が、大学の数学科で何をやってるのか、正確に理解するのは至難の業です。

一般の人なら、数学と聞いて、「円周率って、確か3.14以降、どこまでも続くんだよな。」と思いつくことは自然です。なので、一般の面接官が、会話のキャッチボールをしようと、数学科の学生に対して、「大学で数学やってるんだ。大学生にまでなって数学をやり続けるってすごい情熱だね!じゃあ、円周率って何桁まで言えるの?言えるところまで言ってみてよ?めっちゃ言えるの?」と尋ねることは、概して自然であると思うのです。むしろ、その質問に対して、「いやいや、数学科はそんなことしてませんよ(笑)」と、一般市民に丁寧に説明できない学生の方に問題があるのでは?と思うわけです。

 

就職活動は、その人の人生を決める一大イベントであるがゆえに、超巨大なマーケットで、いろんな人がそのマーケットに参加しています。様々な人が「就活とはこうあるべきだ!」「面接でのマナーはこうしろ!」「グループディスカッションでは...」などと持論を展開しては、人気を集め、お金を儲けようとします。ちまたの就活本や、就活マナー講座、グループディスカッション講座、就活セミナー、...に踊らされる学生にとっては、たまったもんじゃありません。

でも、そのカオスな状態から、本当に必要なものや真実を取り出し、周りに流されずに意思を持って活動していく人が、いい会社に内定するんじゃないかな〜と、そう思います。