サイン、コサインをインテルの CPU で計算すると少しバグっているらしい

こんにちは。

ちょっと前にどこかの偉い人が「女性にサイン、コサイン教えても仕方ない」ような発言をして炎上したのは記憶に新しいところです。面白いですね。

「女の子にサインコサイン教えて何になる」 鹿児島県知事の発言がネットで非難 発言撤回の会見動画も公開 – ねとらぼ
http://nlab.itmedia.co.jp/nl/articles/1508/28/news145.html 

「いやいやサイン、コサイン使うでしょ」という反論には完全に同意です。それはよいのですが、プログラマー的な視点で見れば「サイン、コサインはコンピュータでどうやって求めているか」を説明できてやっと安心(?)ではないでしょうか。

そこでちょっと復習と思って調べてみたら、なんかインテルのCPUのバグ?の話とか出てきてわけが分からなくなってきたので、まとめておきました。

sin(x) の求め方(基本)

理系の方は学校で習ったと思いますが、テーラー展開した多項式で求めるのが常套手段です。

例えばサインの値は、以下の多項式で表現できます。

Screen Shot 2015-10-21 at 10.26.30 AM

自然科学のための数学I/II(2014年度)- 琉球大学
http://www.phys.u-ryukyu.ac.jp/~maeno/sizensuugaku/lec11_sin.html

これを実際に計算するサンプルプログラムとかはネット上にごろごろしてるので、ここでは挑戦しません。ここでは、この計算が最近のコンピュータのどの部分で行われるかに注目してみます。

コンピュータのどの部分で計算しているのか

コンピュータで sin(x) の値を計算させるときは、昔も今も上記の多項式が使われているようです。(※他のアルゴリズムもありますがあまり使われていないらしい)

最近(と言っても 8087 にすでにあったようなので20年以上前から)はハードウエアレベルでその機能が提供されています。別の言い方をすると、sin(x) の値を求めるアセンブラ命令があるということです。インテルの x87 では FSIN, FCOS などです。

なので当然 sin(x) の実装にはこのアセンブラ命令 FSIN が使われていると思いますよね?

しかし念のため確認してみると意外な事実が判明しました。確認したのは GNU の C 標準ライブラリ glibc のソースで、バージョンは 2.22.90 です。

GNU C Library (glibc)

https://www.gnu.org/software/libc/

おそらく sin(x), cos(x), tan(x) とかはそのハードウエアのアセンブラ命令を叩くだけのはず。

sin(x) とかはアーキテクチャ依存の実装になるので、double __sin(double) の実装があちこちにあって悩ましいですが、とりあえず x86_64 アーキテクチャでは、

  • sysdeps/x86_64/fpu/multiarch/s_sin.c
  • sysdeps/ieee754/dbl-64/s_sin.c

の実装が有効のようです。すると、

<sysdeps/ieee754/dbl-64/s_sin.c>

Screen Shot 2015-10-21 at 1.11.21 PM

https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/ieee754/dbl-64/s_sin.c;hb=HEAD#l279

あ、あれ?

なんか思っていたのと違いますね・・・と言うか、完全にソフトウェア的に計算しています。

なんでハードウエアサポート使わないの?

せっかくハードウェアサポートがあるのに何で使わないんだろうか・・・。って思っていろいろ調べてみましたが、以下ページを見つけました。

Intel overstates FPU accuracy – 06/01/2013

http://notabs.org/fpuaccuracy/index.htm

Screen Shot 2015-10-21 at 1.17.29 PM

リンク先を見てみると「インテルの FPU (x87) のコサイン、タンジェント命令は、スペック通りの精度がでない場合がある。」と言った趣旨のことが書かれています。

また以下のページにも興味深いことが書いてあります。

How does C compute sin() and other math functions? – Stackoverflow

http://stackoverflow.com/questions/2284860/how-does-c-compute-sin-and-other-math-functions

Screen Shot 2015-10-21 at 2.35.57 PM

この質問に対する回答によると、「2011年の10月以降 x86-64の Linuxではこの(ソフトウェア)コードが使われており、明らかにFSINより速いSince October 2011, this is the code that actually runs when you call sin() on a typical x86-64 Linux system. It is apparently faster than the fsin assembly instruction.)」とのことです。

というわけで、現在かなり普及している x86_64 アーキテクチャー(Windowsも Mac も大部分が採用している)の CPU の三角関数命令 FSIN は、速度、精度などが問題視されており(少なくとも glibc では)、別途ソフトウェア的に実現されているようです。

他の実装ではどうなっているかは不明ですが、glibc での実装と似たようなことをやっているのではないかと思います。

インテルも大変なんだな・・・。

まとめ

  • サインなどの三角関数の値はテーラー展開を使用した有名な式を昔も今も使って計算していることが多い。
  • 20年以上昔から浮動小数点数演算用のFPU(コプロセッサー) には三角関数の値を計算する命令(ハードウェアサポート)がある。
  • しかしインテルの x86_64 系アーキテクチャーのこの命令は精度及び速度に問題があるらしく、少なくとも glibc 2.22 ではFPUのサイン命令は使っておらず、ソフトウェア的に計算しているらしい。

という感じでした。

何はともあれ glibc の sin 関数のソースは勉強になるので、数値計算に興味のある方には一度じっくり見てみることをおすすめします。

 

 

「性別」を表す変数名をアレにするのやめませんか?

こんにちは。

プログラマーあるあるだと思うのですが、人物を表すクラスなどをしばしば以下のように定義すると思います。

typedef _Person {
    char* name;  //名前
    int age;     //年齢
    int sex;     //性別 (0:男性 1:女性) <=== 恥ずかしい (><)
} Person;

 (※言語は何でもいいんですけど、とりあえず C で記述します)

「性別」って辞書で調べると「sex」って出てくるので、おおそうかとばかりにこれを変数名にしているコードが実に多いです。

いや間違いではないし、むしろ正しいのですが、個人的にはなんか恥ずかしくてどうしてもやりたくありません。

「sex = 1;」とか書きたくない。

「sex が 0 のとき・・・」とか読みたくない。

セクハラ認定されそう。

などなど不安でたまりせん。

そこで代案をいくつかあげましたのでプログラマーの皆さんにおかれては、今後そのようなコードを記述する際にはご検討ください。

代案1:そこだけローマ字にする

ぐぐってみると以下のようなコードを使っているサイトがありました。

typedef _Person {
    char* name;   //名前
    int age;      //年齢
    int seibetsu; //性別 (0:男性 1:女性) <===
} Person;

個人的には「これは無い」と思いますが、例の単語を使うよりはましな気もしました。しかしおすすめではありません。自分がコードレビューワーなら却下したいところです。

代案2:”gender” に置き換える

個人的なおすすめはこれ。”sex” という単語の代わりに “gender” (ジェンダー)と言う単語を使う方法です。ロジックはそのままなので簡単ですね。ちなみに weblio 様のサイトによると gender の意味は次の通り。

gender【名詞】
1【文法】 性.
2《口語》 (人の)性,性別,ジェンダー 《社会的,文化的意味づけをされた男女の差異》.

[weblio – http://ejje.weblio.jp/content/gender]

いろいろ調べてみると、gender は sex よりも「社会的な性」という意味で使われることが多いとか書かれてたりしますが、Wikipedia 様の「Sex and gender distinction」(2015年10月18日閲覧)という記事によると婉曲表現うんぬんとの解説があるので、今回の目的にも使えると思います。っていうか、自分は使います。

typedef _Person {
    char* name;   //名前
    int age;      //年齢
    int gender;   //性別 (0:男性 1:女性) <===
} Person;

「ジェンダーが0のとき〜」とか自然に読めます。やった!

代案3:男性であるかどうかのフラグに置き換える

これもいい方法です。「性別」ではなく「男性かどうか」のフラグに置き換える方法です。

typedef _Person {
    char* name;   //名前
    int age;      //年齢
    BOOL isMale;  //性別 (TRUE:男性 FALSE:女性) <===
} Person;

但し、こうすると「男性でも女性でもない」状態が表現できなくなります。それが必要な場面はそれほど多くはないと思いますが、昔自分がかかわった医療機器のコードでは、性別は「男性、女性、不明」と3つの値が取れるように定義されてました。

この方法にはもう1つ心配な点があります。それは「なんで真の時に男性を表すのですか?これは男尊女卑的ではないですか?」というクレームがどこからともなく来そうな予感がするところです。

それに備えてコードを以下の様にしておけばスキはありません。

typedef _Person {
    char* name;    //名前
    int age;       //年齢
    BOOL isFemale; //性別 (TRUE:女性 FALSE:男性) <===
} Person;

これなら真のときに女性を表すので妙なつっこみもできそうにないですね!

以上、真面目な提案なのでよろしくお願いいたします。

駅のホームにある非常ボタンを押したときの話(※適正使用)

こんにちは。

昨日、Yahoo!ニュースにこんな記事があったのですが、

非常ボタンで阪急電車を妨害 男2人を逮捕(毎日放送) – Yahoo!ニュース http://headlines.yahoo.co.jp/hl?a=20151015-00000019-mbsnewsv-l26

そう言えば自分もまだ会社員だった時代、非常ボタン押したことあります。もちろんニュースのようないたずらではなく、ちゃんと非常事態でした!

会社がJR豊田駅にあったので、朝自宅からJR中央線で豊田まで行ったときの話です。そのときのツイートしてたので、正確な日時がわかりました。2013年の6月11日だったようです。ツイート便利ですね。

自分は一番後ろの車両に乗るのが好きなので、その日も一番後ろの車両に乗っていて豊田で降りました。で、ホームの端から階段まで、(会社行きたくないので)ゆっくり歩いていました(笑)。そうしていると、自分の後ろの方でドスンと言う音がして続いて男性のうめき声がしました。

すぐに振り返ってみると、5〜60歳くらいのおじさんがホームの下に転落してました。周りに誰もいなかったので、突き落とされたとかではなく、一人で落ちたようです。間近で見たときに感じたのですが、ホームから線路上に落ちただけでも怪我してたと思います。音もそんな感じでした。

で、すぐに電車が来る雰囲気ではありませんでしたが、来てしまったらやばいです。ホームを見渡しても、近くには自分しかいない感じでした。

あ、なんかこれはやばい。あれ、駅員さん呼ばないと!非常ボタンだ!

って思って近くを見渡すと、5〜10メートルくらい離れたところにありました!非常ボタン!

結構こまめな間隔で設置してあるんですね。(※この画像は豊田駅のものではありません)

Emargency_train_stop_button

“Emargency train stop button”. Licensed under GFDL via Wikipedia – https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Emargency_train_stop_button.jpg#/media/File:Emargency_train_stop_button.jpg

迷っている時間はなかったので、押しました。

ボタンを押すと、ホーム全体に「ビーーーーー」と言う警報音が大音量で鳴り始めます。

これはずーっと鳴ってます。多分音を止める操作をするまで鳴り続けるのだと思います。

そうすると、どこからともなく多方面から駅員さんが駆け寄ってきました。ホーム上から2人(どこにいた?)くらいと、階段から2人くらい降りてきて、合計3〜4人来ました。

自分はそこから離れるといたずらだと思われたりするかもしれないので、駅員さんが来るのを待っていました。

で、駅員さんが「押された方ですか?」とか聞いてきて、押した理由とか言おうと思ったんですけど20メートルくらい先に人が転落していたので、指差しただけで全てが通じました。

幸い後続電車もすぐにはなく、駅員さんが2〜3人がかりで転落した人を助け上げていました。

助け上げ終わったくらいのときに警報音も鳴り止みました。

てっきり非常ボタンを押した人は駅員室に連れて行かれて、長々と事情聴取的なものがあるのかなあと思ってたんですが、ありませんでした。ただ、連絡先を教えて欲しいと言われたので携帯の電話番号だけ伝えました。確か名前は聞かれませんでした。個人的には貴重な経験だったので、むしろ名前聞いて欲しかったんですけど。

結局事情聴取もほぼ無かったので、午前中は会社サボれるかもと言う淡い期待は叶わず、普通に1日がスタートしました。JRからの電話も来ませんでした。

なおボタンを押した時の感触ですが、フニャフニャしてたのが印象的です。その時のツイート。

皆さんも危険を感じたらためらわずに押したほうがよいと思います。いたずらはだめですが!

水のトラブルがあったので業者呼んだら危うく別のトラブルに巻き込まれるところだった

こんにちは。

築10年のマンション住まいですが、先日洗面所の蛇口を閉めても水がちょろちょろ漏れていることに気づいたときの話です。

いわゆる「水のトラブル」というやつですかね。

業者さん呼んだんですけど、危うく「別のトラブル」に巻き込まれるところだったので、そのときの顛末を紹介します。皆さんもお気をつけください。

「水のトラブル」なので業者さん呼んだ

ある日、洗面所の蛇口を閉めても、水がちょろちょろと漏れていることに気づきました。

当時忙しかったこともありしばらく放置していたんですけど、だんだん漏れがひどくなってきたのでしかたなく業者さんを呼ぶことにしました。

自宅はさいたま市内なんですが、よくポストにこんな感じの広告が入ってます。マグネットになってるので、台所とかに貼り付けておきました。ついにこいつの出番が。

securedownload

(※重要)この写真の業者さんと本文の業者は関係ありません!その業者のやつは即刻捨てました!

たしか土曜日の昼ごろ電話したら、「本日の16時ごろに伺えます」とのことだったのでお願いしました。そして16時近くになって業者さんが到着。

早速洗面所の状況を見てもらうと、

「ああ、これは壊れてますね。とりあえず止めますね。」

と言って、洗面所の下の棚の部分を開くと、そこに隠し蛇口があってそこで止めてました。

考えてみれば当たり前な気もしますが、そんなとこに蛇口があって、手でひねればすぐ止められるんですね。恥ずかしいですが知りませんでした・・・。

securedownload-1

で、その業者さんが言うには、

「このメーカーは倒産している。いま自分の車にある別のメーカーのやつと総入れ替えすれば直せますがどうしますか?値段は8万円くらいです。」

とのことでした。

まさかの見積もり8万円

軽い気持ちで修理を頼んだつもりが、新品との交換で8万円!

なんか(この業者とは関係ない)テレビCMとか見てたので、元体操の選手みたいな人がニコニコしながら専用の工具でチョチョっと直してくれて8千円、とかいうのを期待してたので、びっくりしました。

こちらも人生経験多少あるおっさんなので、これは水道トラブルの緊急性につけこんだ手口ではないかと疑い始め、

「わかりました。お金がないので、ちょっと考えさせてください。」

と言って帰ってもらいました。

真剣に調べることにした

こちらとしては、洗面所の下に隠された蛇口を閉めればとりあえず水は止まることを教えてもらったので、緊急性は下がりました。

で、いろいろぐぐってみると、確かのこの水道メーカーMYMは、水道事業から撤退していたのですが、メンテナンスはKVKという別会社が引き継いで行っているようです。

securedownload-4

↑蛇口の下の方にメーカー名(MYM)が書いてありました。

自分で直せて4千円ですんだ・・・

長くなるので詳細は割愛しますが、これをドライバーなどで分解してみたところ、水漏れしている箇所がわかり、その部品をアマゾンで購入することができました。

アマゾン便利すぎ!!

KVK シングルレバーカートリッジ 【PZ110S】

41oRA6yTvML._SX425_

(※注意)似たようなパーツがたくさんあるので、購入する場合はよーーく調べてからにしてください!
レバーを上げたときに閉まるタイプと、下げたときに閉まるタイプもあったりします!

交換したら、直りました!

自分でやったので、部品代の4千円ですみました!8万円はひどい!

全部の業者がこんな感じなのかはわかりませんが、皆さんも水道トラブルの際はぼったくられないように気をつけてください!

会社やめたら出勤したくてたまらなくなった

こんにちは。

今年の初めに会社やめてから半年と少したったのですが、あれほど行きたくなかった会社に行きたくなってきました。

人間の心理とは不思議なものです。と言うか結局いまの状態から逃げ出したいだけなのかもしれませんが・・・。

せっかくなので経緯と現状についての報告です。会社辞めようかどうしようか検討している方などの参考になれば幸いです。

プロフィール

1973年生まれの42歳です。妻と4歳になる娘1人の3人家族。

今年3月に10年勤めた会社を辞めて現在起業準備中。(ただし再就職も捨てきれない)

会社を辞めた理由

前向きな理由と後向きな理由が相乗効果をもたらして辞めてしまいました。

後向きな理由は、会社の人も見ているかもしれないので控えめな表現にせざると得ませんが(苦笑)、仕事が忙しすぎて会社に行きたくなくなったからです。朝起きるのつらいし。

前向きな理由は、もともとフリーでいくつか公開していたゲームを商品化して勝負してみたいとずっと考えていたからです。最近はアプリとかで市場も広がっているという噂もありました。(その噂についてはまた長くなるのでここでは触れません・・)

会社やめて良かったこと

朝目覚ましをかけなくてもよくなったのが何気に一番うれしいです。

勤めてた会社はコアタイムの無いフレックスのような制度で、ミーティグが無い限り何時に出社しても良かったんですが、忙しくなってくると朝9時とか10時からのミーティングは普通なので、結局それに間に合うように目覚ましをかけて出勤しなければなりません。

しかし自分が朝弱いのが原因なのか、それとも最近ちょっと話題になった『午前10時前から働くことは「拷問に近い」と英研究 ネットは「今世紀最大級の重要な発見」と賛同 』のように、朝9時からの始業がそもそも無理があるのかわかりませんが、自分は毎朝つらかったです。

会社やめて良くなかったこと

おちんぎんがもらえなくなります。

まあ当たり前なんですけど、これにつきます。みんなお金のために働いているのです。自分もそうでした。

最近の生活

現在、自分のゲームを商品化すべく活動しています。

会社辞めた後、とりあえず2本アプリリリースしてみたんですけど、びっくりするほどダウンロードされてません。収入はほとんどありません。(泣)

生活費は、失業保険と貯金から出してます。今年いっぱいくらいは収入なくても大丈夫そうですが、その後はさすがにまずいです。

いま、社運(?)をかけて新作を開発中ですが、なかなかはかどっていません。この新作は、プログラムが自分、音楽とグラフィックはそれぞれ発注して制作してもらっているのですが、この自分担当のプログラム部分がはかどらない。

準備期間を経て、8月 始めくらいから開発しており、2ヶ月で完成の予定でした。ああ、だから9月いっぱいで完成の予定だったんですね。いま思い出しました・・・。

しかし本日10/14現在、まだ50%くらいしかできてないです。進捗ダメです。

予定では来月11/15に開催される展示会(デジゲー博)でパッケージ販売しようと思っていました。いろいろ調べたところ、パッケージにするには3週間〜1ヶ月くらい前に発注しない間に合わないようなので、そうすると今日くらいにすでに完成してないとダメだった。

しかたないのでパッケージ販売はあきらめて、どうしようかなあとか考えています・・・。

「出勤したくなった」の真意(1)

やっと本題です。

会社員時代は、朝早く出勤し終電まで会社にいることはよくありました。

今は、寝たいだけ寝て起きると10時とか11時だったりします。寝不足は頭の回転を悪くすると信じているので、それはいいんですが、その後自宅で机に向かうこともあれば、外出してスターバックスとかタリーズコーヒーとかで作業することもあります。

誰も管理してないので、気が乗らなかったら作業しません。というか、できません。

最初は「そのうちやる気でるよね。やる気でるまで待とう。」って思っていて、実際1日とかサボると次の日とかは結構やる気出てました。

最近は、なんかなかなかやる気が出なくなってきました。これはたぶんやばい。

会社員時代は、いやだったんですけど、進捗管理されてました。なので、いやだったんですけど、やる気がないからと言って手を動かさないわけにはいきません。いやでしたが。無理やりにでも手を動かせば進捗はあります。これが今の自分にはないんですよね。

「出勤したくなった」の真意(2)

会社員最後の2年間くらいは、20人くらいのソフトチームの開発リーダーをやってました。リーダーなんて向いてないんですけど、目立つのは好きでした。

そんなこともあって、会社での自分は多少輝いていました。たぶん。

なので、それがいいモチベーションになっていたようですね。頑張れている実感。

今の自分は、1人でやっているので、頑張れている実感がありません。計画通りにリリースしていけば、多少は結果も期待できると信じていますが、なんか頑張っても頑張らなくてもリリースするまでは反応もらえないんですよね。

なので、モチベーションが足りなくなっている気がひしひしとします。最近特に。やばい。

imgres

まとめ

というわけで、一人でずっと作業していると、

  • 管理されてないので、果てしなくサボれてしまう。これは楽だけど、やばい。
  • まわりに誰もいないと頑張れてるのか頑張れてないのかよくわかなくてモチベーションが下がってくる。

と言ったデメリットがあることを痛感しました。大丈夫かな、自分?

ちなみに、それなりの貯金をしてから辞めたのでお金の問題はまだ発生してません。しかしそれが逆にモチベーションを下げている気も少しだけします。

自分でもよくわかりませんが、たぶん「ちょっと会社行って管理されて、やる気を取り戻したい・・・」と感じているようです。

行きませんけど・・・。

 

Cocos2d-JS の Scale9Sprite で画像を伸縮する代わりにタイルする方法

こんにちは。

Cocos2d-x/JS では Scale9Sprite という、フレーム画像を9分割し、必要な大きさに応じて角や縁の比率を保ったまま伸縮してくれるクラスがあります。

これは非常に便利なのですが、元画像と使用サイズがあまりにも違いすぎると、伸縮が目立ってしまい、綺麗にならないことがあります。

そこで角や縁以外の画像を伸縮するのではなく、サイズはそのままで繰り返し配置(タイル)してみたところ、かなり改善したので、やったことをメモします。

尚、Cocos2d-x でもできるはずですが、JS のようにクラス継承ルールがゆるくない(private/protected 指定がある) ので、同じように簡単にできるかどうかは不明です。

確認した環境

Cocos2d-JS v3.2

Scale9SpriteTiled

既存の cc.Scale9Sprite を継承して “Scale9SpriteTiled” を作りました。Scale9Sprite が、各辺と中心部を伸縮するのに対して、この Scale9SpriteTiled では各画像をタイルすることで全体のサイズ変更を実現します。

Figure1

変更を少なく抑えるために現在の Scale9Sprite にべったり依存した実装をしたので Cocos2d-JS のバージョンが上がった際に動かなくなる可能性はありますが、まあ大丈夫でしょう・・。

 

<Scale9SpriteTiled.js>

_updatePositions というメソッドは、Scale9Sprite のサイズが変更された時に呼ばれるので、これをフックして必要な処理を行いました。

_top, _bottom, _left, _right, _centre というのは Scale9Sprite のおいて、9分割されたスプライトのそれぞれ 上、下、左、右、中央部分です。四隅に対しては何も変更する必要はありません。

_addChildInsteadOfScaling というメソッドで、各スプライトの拡大率 (scale) を元に、自分自身の画像を必要な数だけ複製してならべます。サイズがぴったりになることはまれなので、最後半端なサイズに対して cc.Sprite のコンストラクタに範囲を指定してサイズを合わせます。

最後、もともとの引き伸ばされているスプライトは不要なので、不可視にします。

使用例

実際に現在制作中のゲームに使用する予定の枠の素材でやってみます。

FrmDate

 元画像

これを Scale9Sprite と Scale9SpriteTiled で拡大した結果が以下の画像です。

 

Screen Shot 2015-10-13 at 11.57.16 AM

Scale9Sprite

 

Screen Shot 2015-10-13 at 11.57.24 AMScale9SpriteTiled

この画像では Scale9SpriteTiled のほうが綺麗になってますね!

以前『ネット上で公開されているコードをコピペする前に確認すべきこと』とか偉そうなことを書いたので名言しておきますが、この Scale9SpriteTiled.js は自由にコピペしてお使いください。その際、一声かけていただけると嬉しいですが、必須ではありません。

今回は以上です。

vim を less とか more の代わりに使うと便利

こんにちは。

久しぶりに小ネタ書きます。

プログラマーの皆さんはコマンドライン(ターミナル)で作業されることも多いと思いますが、コマンドの結果が長くて1画面に収まらない場合どうしているでしょうか?

「スクロールしてターミナルの履歴を見る」でもよいですけど、ターミナルの設定によっては見たい結果がバッファに残ってなかったりしますよね。あと検索できないのが辛い。

なので less とか more というコマンドに渡して見る方法が一般的なのではないでしょうか?
less だと “/” を押せば検索もできますし。

しかしこの less なんですけど、なんとなく vim っぽい操作性でありながら vim ではありません。

そこでいっそのこと vim を less の代わりに使えばいいのではと思いついて、5年くらい前からやってますが、いい感じなので紹介です。

「そんなの普通にやっている」という方はスルーしていただけるとありがたいです。

確認した環境

Max OS X Yosemite 10.10.5

やり方

vim はファイル名として “-” (マイナス記号) を指定すると、標準入力を編集対象にできます。また、vim は “view” という別名を持っていて、この名前で起動するとリードオンリーモードになります。

この2つのオプションを使えば vim を less の代わりのページャーとして使えます。具体的には、

$ ls | view -

などのようにします。

こうすれば、検索はもちろん、vim の機能がすべて使えるのでいろいろ便利です。

使用例

例えば Cocos2d-x のソースファイルの一覧を見たい場合、

$ cd cocos2d-x-3.8
$ find . | view -

このようにします。すると結果は以下のような感じになります。

Screen Shot 2015-10-10 at 12.54.03 PM

14,787行もでました。

しかしここは vim ですので、あとは何でもできます。例えばこのなかに “SpriteBatchNode” を含む行だけを残したい場合

:%!grep SpriteBatchNode

などと打てば、(「リードオンリーですよ」って警告は無視)

Screen Shot 2015-10-10 at 12.57.23 PM

となりました。
クラス SpriteBathcNode に関連する C++, JavaScript, lua のファイルが6件あったってことですかね。

さらに例えばファイル名は不要で、ディレクトのリストにしたい場合は、ここから

:%s/[^/]*$//

とかやって、

Screen Shot 2015-10-10 at 1.03.39 PM

重複した行は

:%!uniq

などで消せるので

Screen Shot 2015-10-10 at 1.05.31 PM

こうなりました。
これでディレクトリのリストができました。自由自在です!

上記のように結果を編集してしまうと終了時に怒られるので、結果が不要な場合は

:q!

のようにします。

というわけで vim を less の代わりに使うのはおすすめです。

組立式35倍の望遠鏡+iPhone6で月の写真撮ってみました

こんにちは。

科学史をテーマにしてゲームを作ったりしていますが、調査と称していろいろな分野のサイトを覗いています。

先日たまたまこんなサイトを見つけました。

星の手帖社
http://business3.plala.or.jp/starbook/

 

Screen-Shot-2015-10-03-at-11.16.40-AM

35倍の天体望遠鏡・・・、3千円・・・。

天体望遠鏡というと、何万円もするマニア向けのものだと思っていましたが、3千円くらいで35倍とか言う結構すごそうなのが買えるとは知りませんでした。

というわけで、気づいたらポチっていました。

組み立て

写真 2015-10-02 23 15 19

届いてからしばらく放置していたのですが、昨日やっとその気になったので開封!

写真 2015-10-02 23 24 27

レンズが4枚入っていていい感じ・・・。

尚、1枚に見えるレンズも、実際には2枚のレンズが貼り合わされてできている「アクロマートレンズ」(色収差低減レンズ)とのことです。アクロマートレンズは Wikipedia によると1729年ごろ発明されたものなので、ニュートンの時代にはなかったものです。そんな優れものがこんな安価なキットに含まれているとはいい時代になりました・・・。

組立は簡単です。工具もいらない。接着剤もいらない。

「10分で完成!」は看板に偽りなしです。

写真 2015-10-02 23 34 04

最後にシールを貼って完成!

写真 2015-10-02 23 41 46

三脚に乗せると結構それっぽい!

写真 2015-10-03 12 30 50

これで3,056円は安い!!

ひとつ注意点があります。カメラ用でもなんでもよいのですが、三脚は必須です三脚がないと手ぶれでまともに観測できません。三脚がない方は、2千円くらいのやつでいいので一緒に買いましょう。

観測

さっそく自宅のベランダに出て観測しました。

この日は2015年10月2日、場所はさいたま市某所です。

写真 2015-10-03 0 02 52

おお、結構よく見える!

せっかくだから iPhone6 で写真とれるかな〜と思い、特に固定などせず接眼レンズのところに iPhone 持って行ってパシャパシャ撮ってみました。

一番きれいに撮れてたのがこれ!

写真 2015-10-02 23 59 22

クレーターもしっかりと確認できますね!

4日前が「中秋の名月」だったので、満月に近いかなあ〜と思ったんですけど、すでに結構欠けていました。月の満ち欠けも速いんですね・・・。

満月の時に撮ればよかった・・・。

しかしこれは癖になりそう!

「倒立像」について

尚、この望遠鏡は「倒立像」です。上下左右逆さまに見えています。(逆さまにならない「正立像」の望遠鏡は、構造が少し複雑になるので少し高級品になります。)

上下は逆さまになるのはわかりやすいですが、左右はどうなの?とちょっとわかっていませんでしたが、ガソリンスタンドを見てみてわかりました。

写真 2015-10-02 23 53 50

ちょっと写真では見えにくいですが、「セルフ」と読めますよね。鏡像になっていないということは、上下だけでなく左右も逆になっているということですね。180度回転させれば日常的に見ている像になります。

感想

たったの3,056円(三脚お持ちでない方は+2,000円) でここまで見える望遠鏡が買えるとは知りませんでした。買って大正解。

iPhone のカメラを接眼レンズのところに持って行ったら結構きれいな写真が撮れたのも驚きです。専用の器具とか、画質にこだわらなければとりあえず必要なさそう。

説明書きによると「土星の輪の存在が確認できる」そうなので、天気の良い日に挑戦してみたいと思います!

 

誰にも聞かれていませんが9月のブログアクセスはこれくらいでした

こんにちは。

今日から10月です。書くこともないので当ブログ9月のPVの内容を報告させてください。

内訳(月別)

まず月別の内分け。

記事数 PV AdSense
2015年6月 19 8,341 ¥1,292
2015年7月 9 6,724 ¥1,012
2015年8月 5 17,520 ¥2,517
2015年9月 7 8,071 ¥1,198
合計 40 40,656 ¥6,022

9月は特に拡散されるような記事も書けなかったので、過去の記事と後述する「ゲーム開発とは関係の無い記事」でPVを稼いでいた感じです。

ついでに AdSense 収益も併記しました。

プロブロガーの存在を、自分は信じません。

内訳(記事別)

よく読まれた記事TOP10は以下の通り。

1位と2位が全くゲーム開発と関係無い記事なので、ブログのアクセスが欲しいならゲーム・アプリ開発ネタは不向きという事実を再確認してしまいました。

 

Screen Shot 2015-10-01 at 10.32.27 AM

 

【1位】 中国・天津の爆発と核爆発のエネルギーを比較してみた

先月からじわじわとオーガニック検索アクセスされている記事。9月も毎日平均80PV稼いでいますね。(8/19)

【2位】 日本初上陸!本格中国火鍋『海底撈火鍋』池袋店に行ってきた!

これもオーガニック検索でよくアクセスされてます。池袋にオープンしたての某中国火鍋店に連れて行ってもらう機会があり、ネット上に情報が少なかったのでブログに書いてみました。9/23〜30の1週間で1200PVなのでなかなかの集客力。アプリと全く関係ありませんが・・・。(9/23)

【3位】 トップページ

今月はトップページ (tomeapp.jp) にアクセスしていただくことが比較的多かった気がします。おそらく、9/19 の INDIE STREAM FES 2015のライトニングトークで登壇させていただいたからだと思います。

その時 24時間限定公開した PRINCIPIA PERFECTUS は 145人の方がプレイしてくれた形跡(月間アクセス9位)があります。ありがとうございます!

 

今後の方針・・・

当ブログの目的は「ゲーム・アプリの宣伝」なのですが、まったく関係無い記事がアクセスを稼いでいることがかなり明確になってきました。それもありなんですかね・・・。

今のところ、ブログがどれだけ宣伝になっているかは疑問ですが、気分転換としては最高に役に立っています。

当面はゲーム開発の息抜きブログ(?)として続けていきます。