プログラマが知るべき97のことで気に入ったエッセイのメモ

完全に私的メモ。

いくつか後で読み返したいエッセイがあったため、記録しておく。ページが消えてコンテンツが分からなくなることを避けるため、タイトルは重複して記述しておく。
また、日本人プログラマによる知っておくべき10のことも含む。

プログラマが知るべき97のこと

[03]ユーザが何をするかを観察する(あなたはユーザではない)
ユーザが何をするかを観察する(あなたはユーザではない) - プログラマが知るべき97のこと

[05]美はシンプルさに宿る
美はシンプルさに宿る - プログラマが知るべき97のこと

[13]コードレイアウトの重要性
コードレイアウトの重要性 - プログラマが知るべき97のこと

[18]学び続ける姿勢
学び続ける姿勢 - プログラマが知るべき97のこと

[19]誰にとっての「利便性」か
誰にとっての「利便性」か - プログラマが知るべき97のこと

[22]1万時間の訓練
1万時間の訓練 - プログラマが知るべき97のこと

[25]見られて恥ずかしいデータは使わないこと
見られて恥ずかしいデータは使わないこと - プログラマが知るべき97のこと

[26]言語だけでなく文化も学ぶ
言語だけでなく文化も学ぶ - プログラマが知るべき97のこと

[33] オープンソースプロジェクトで夢を実現する
オープンソースプロジェクトで夢を実現する - プログラマが知るべき97のこと

[36] ハードワークは報われない
ハードワークは報われない - プログラマが知るべき97のこと

[43] プログラミング言語複数習得すべき
プログラミング言語は複数習得すべき - プログラマが知るべき97のこと

[46] すべきことは常に明確に
すべきことは常に明確に - プログラマが知るべき97のこと

[68] 「人間」を知る
「人間」を知る - プログラマが知るべき97のこと

[89] 関数の「サイズ」を小さくする
関数の「サイズ」を小さくする - プログラマが知るべき97のこと

[91] 良いプログラマになるには
良いプログラマになるには - プログラマが知るべき97のこと

[93] エラーを無視するな
エラーを無視するな - プログラマが知るべき97のこと

日本人プログラマによる知っておくべき10のこと

[99] ロールプレイングゲーム
ロールプレイングゲーム - プログラマが知るべき97のこと

[101] プログラマが持つべき3つのスキル
プログラマが持つべき3つのスキル - プログラマが知るべき97のこと

[102] 快適な環境を追求する
快適な環境を追求する - プログラマが知るべき97のこと

【Unity】metaioとUnityでロケーションベースARアプリケーションを作る

Unityを用いたARアプリは何度かVuforiaで作っていたので、どちらかというとVuforiaが好きなのですが、残念ながら現状のVuforiaではロケーションベースのARアプリが作成出来ないため、metaioというARライブラリを使用して、簡単なロケーションベースARアプリケーションを作成してみたいと思います。
ちなみに、実機デバッグAndroidの筐体で行います。

環境

Mac OSX Mavericks
Unity v5.0.1
metaio v6.0.2
Android v4.4.2

metaioSDKの準備

まずはmetaioSDKの導入を行います。

Download the Metaio SDK

上記URLにアクセスし、必要情報を入力後Submitを押すとダウンロードページに移動します。

Macユーザーの場合、ダウンロードしたdmgファイルを開き、ライセンスに同意します。

f:id:taka_say:20150514101822p:plain

その後出現する上記ウィンドウ上のフォルダを自分のPC上のどこかにドラッグアンドドロップすればOKです。

Windowsユーザーの場合、インストーラーに従ってインストールを行えば、スタートメニューのプログラムリストに登録されるようです。
WindowsでのUnityの場合、修正しなければならない箇所が他にもあるようなので、詳しくは下記を参照してください。

Setting up the Development Environment | metaio Developer Portal

ARアプリケーション作成

新規プロジェクト作成

まずはUnityを開き、 【File -> New Project】 で適当な新規プロジェクトを作成します。

metaioSDKインポート

次に【Assets -> Import Package -> Custom Package】をクリックし、先ほど準備したmetaioSDKから、metaioSDK.unitypackageを選択します(Macの場合_Unityフォルダ下にあります)。

レイヤーの設定

metaioを正常に動作させるためには、パッケージのインポート後いくつかの設定が必要になります。

まずはレイヤーの設定を行います。

f:id:taka_say:20150514104653p:plain

Unityのエディタ右上にあるLayersからEdit Layersを選択します。

f:id:taka_say:20150514104702p:plain

User Layerの空いている一番若いLayerにmetaioLayerを新規で追加します。

署名の作成と設定

次にアプリケーションに署名を設定します。

Welcome to the metaio Developer Portal

新しく自分のアプリケーション用の署名を作る必要があるので、上記Developerサイトにアクセスし、ログインします。
アカウントがまだない場合は、サイト右上のSign upから新規アカウント作成後、ログインしてください。

f:id:taka_say:20150514105728p:plain ログイン後ページ上部のメニューからMy Appsに移動します。

f:id:taka_say:20150514110219p:plain

My Appsページ下部のApp registrationで新規にアプリケーションの登録を行います。
App NameとApp Identifierに適当な名前を入れ、Register your Appを押し新規に登録します。 f:id:taka_say:20150514110229p:plain

新しくアプリケーションが追加されました。

また、追加されたアプリケーション名を選択すると、
f:id:taka_say:20150514110521p:plain
上記画像のように署名データが表示されます。
自分の使用するSDKのバージョンに対応したSignatureの値をコピーしておきます。

Unityエディタに戻り、デフォルトで設置されているMain Cameraを削除します。
その後プロジェクトビューから【Assets -> metaio -> Prefabs】内にあるmetaioSDKをHierarchyビューにドラッグアンドドロップします。

f:id:taka_say:20150519094026p:plain

HierarchyビューのmetaioSDKを選択し、Inspectorビュー内SDK Signatureの欄に先ほどコピーした値をペーストします。

これで署名の設定は完了です。

ラッキング設定

f:id:taka_say:20150514135123p:plain

また先程の署名設定と同様に、HierarchyビューのmetaioSDKを選択し、Tracking configurationのドロップダウンメニューからGPSを選択します。

トラッカー設置

f:id:taka_say:20150514135334p:plain

【Assets -> metaio -> Prefabs】からmetaioTrackerをHierarchyビューにドラッグアンドドロップし、metaioSDKの子要素にします。

f:id:taka_say:20150519102840p:plain

また、HierarchyビューのmetaioTrackerを選択してInspectorビューを表示し、Geo Locationの値の設定と、Transform cameraのチェックをオフおよびEnable LLA Limitsのチェックをオンにします。
metaio社がミュンヘンにあるということで、Geo Locationの値はミュンヘンの座標にしてみました。

このGeo Locationの値なのですが、それぞれX, Yという変数名がつけられていたため、X=経度でY=緯度だと勝手に勘違いしていました。正しくは、XY=緯度経度で問題ないようです。気付かず試行していたため、正しい位置で表示してくれなくて焦りました。

3Dモデル設置

最後に、3DモデルをmetaioTrackerの子要素として設定すれば完了です。
モデルは何でも構わないのですが、こういう時には定番ということでunity-chanにご登場願いました。面倒な方はCubeやSphere等で全く問題ありません。

ダウンロード - UNITY-CHAN!

上記から、いつも通りUnity-chan公式からモデルを含む.unitypackageをダウンロードします。
f:id:taka_say:20150519102723p:plain 規約同意後、3Dモデルデータをダウンロード。

f:id:taka_say:20150519103035p:plain 【Assets -> Import Package -> Custom Package】から、先ほど入手したunity-chanのパッケージをインポートします。

f:id:taka_say:20150519103810p:plain

とりあえずモデルだけ使用できれば良いので、他のチェックは消してインポート(Voiceファイルとか多すぎて容量大きい……)。

f:id:taka_say:20150519104241p:plain インポート後【UnityChan -> Models -> unitychan】をHierarchyビューにドラッグアンドドロップし、metaioTrackerの子要素にします。
また、恐らくですが、デフォルトのサイズでは小さすぎてモデルが見えないので、unitychanのScaleをXYZそれぞれ100に設定します。

ビルド! そして ラン!

ここまで来たらあとは実行するのみです。

まず現在のシーンを適当な名前で保存します。

次に【File -> Build Settings】を選択し、Add Currentで保存したシーンを追加します。

f:id:taka_say:20150519162446p:plain

また、PlatformはAndroidを選択します(UnityでのAndroidのビルドに関しては適宜検索してください)。

その後Build And Runを選択します。
Buildが完了し次第、実機のAndroidでアプリの実行が開始されます。

起動後、実機を手にミュンヘンの方向を向いてみると……

f:id:taka_say:20150519164820p:plain

無事unity-chanが表示されました!

総括

ロケーションベースのARは難しい印象があったのですが、metaioならとても簡単に実装することが出来ました。 Vuforiaと同じく、iOSAndroidそしてUnityといった各種プラットフォームがサポートされている点も魅力的かと思います。

屋内の開けた場所であれば、精度もそこまで悪くないようですので、色々と遊んでみると楽しいかもしれません。

【Unity】metaioSDK内のexampleが動かない場合の対処

Unityでmetaio開発をしようと思い、ダウンロードしたmetaioSDK内のexampleを実行してみたところ、起動後各サンプルのリストと個別ページ自体までは閲覧できるものの、いざStartボタンを押すと画面がブラックアウトしてしまい動作の確認が出来ませんでした。

日本語の情報があまりなくて困っていたのですが、公式のヘルプ掲示板に対処法が載っていたのでメモっておきます。

環境

Android 4.4.2
mataio v6.0.2

対処

【Assets -> metaio -> Scripts -> metaioDeviceCamera.cs】を開き、61行目を、

#if UNITY_IPHONE

から

#if UNITY_IPHONE || UNITY_ANDROID

に変更すればOKです。

結果

f:id:taka_say:20150514155430p:plain

無事exampleが動作しました!

参考

White Screen When Scanning Markerless Targets In Unity 5 Android - Metaio Helpdesk

Vivaldiのタブ移動が重すぎるんだが

リリース当初巷にあふれたVivaldi軽くね?というレビュー記事。
どう考えても、インストール後Google検索して満足しただろとしか思えない。

使い出してすぐ感じたことだけど、タブの移動にラグがありすぎる。
IE8並に鈍足なタブ移動しかできない。
これを軽いと評価するのは甚だ遺憾だなあと思いながらVivaldiの開発ブログを追ってみたところ、最新のSnapshotバージョンでタブ移動時の遅延問題に対する修正が行われた様子。

vivaldi.net

早速アップデートしてみたところ、かなり問題ない水準まで改善されていました。

記事へのコメントを見るに、まだ多くの人が完全には満足していない様子ではあるものの、引き続きパフォーマンスの改善は行っていくという開発スタッフの姿勢が見えていました。

ありがとうVivaldi開発スタッフ。
そしてテスターとして意見しているユーザー諸氏。

もう少しマシな英語が書けたら参戦出来るのになあと若干寂しい気持ちになりましたとさ。

某ネトゲを多重起動する際の手順とハマった点のまとめ

2PCがしたい……でも実機を2台立ち上げるのは面倒だ。

そうだ、仮想マシン作ろう。

というわけで、仮想のWindows上でネットゲーム動かすまでの手順と詰まりどころをメモ。

環境

Windows 7
VMware Player 7.1

構築手順

仮想マシンセットアップ

当初Virtual PCを用いて仮想環境を作成していたのだが、上手くいかなかったためVMwareに切り替えた。

まずはVMwareWindowsのセットアップを済ませる。
この辺りは一般的なやり方で特に問題ないため、各自ググって頂ければ。
ただ、VMware toolsのインストールは必要なので、仮想マシン作成時か、作成後にVMware toolsをインストールしておくこと。

.vmx追記

仮想マシン自体のセットアップが済んだら、まずは.vmxファイルに追記を行う。
.vmxファイルは仮想マシンのワーキングディレクトリ内にある。
念のためワーキングディレクトリの確認方法を記述しておく。

f:id:taka_say:20150510115704j:plain
【Player -> 管理 -> 仮想マシン設定】

f:id:taka_say:20150510115713j:plain
【オプションタブ -> 全般 -> ワーキングディレクトリ】
に記されている。

.vmxファイルを発見したら、メモ帳等の適当なエディタで開き、末尾に、

monitor_control.restrict_backdoor = "TRUE"

を追記する。
保存後、仮想マシンを再起動。

グラフィックドライバ再適用

VMware toolsをインストールすると、自動で各種ドライバが適用されているはずだが、VMware toolsの何らかの機能がネトゲ起動時のセキュリティシールドに引っかかるため、グラフィックドライバのみを残し、残りはアンインストールする。

グラフィックドライバは、
【C:\Program Files\Common Files\VMware\Drivers\video_wddm
にあるため、それをフォルダごとコピーし、適当な箇所にペーストしておく(とりあえずデスクトップに置いた)。

その後【コントロールパネル -> プログラムの追加と削除】からVMware toolsをアンインストールする。
再起動を求められるはずなので従う。

再起動後、
【スタート -> コンピュータ上で右クリック -> プロパティ -> デバイスマネージャー】
でデバイスマネージャを開く。

f:id:taka_say:20150510122033j:plain

【ディスプレイアダプター -> 標準VGA云々上で右クリック 】 をし、ドライバーソフトウェアの更新を選択。

表示されたウィンドウの選択肢から、【コンピューターを参照してドライバーソフトウェアを検索します】を選択。
参照から、先ほどコピペしたグラフィックドライバのフォルダを選び、次へを押して進む。
あとは適用の完了を待ち、再起動を促されたら再起動する。

レジストリいじり

最後に、仮想マシン偽装のためのレジストリ値変更を行う。

スタートから、regeditを実行し、
【HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E968-E325-11CE-BFC1-08002BE10318}/0000】
ディレクトリを開く。
0000フォルダ内の【DriverDesc】を右クリックし、修正を選択。
記載されている値を消してOK(デフォルトでVMware SVGA何とかと書かれているはず)。

結果

以上の工程で、仮想マシン上でのネトゲクライアント起動に成功するはず。
エラーが出た時のために、自分が遭遇したエラー各種を付記しておく。

遭遇したエラー各種

Sorry, this application cannnot run under a virtual machine

仮想マシンの偽装が上手く出来ていない。
.vmxファイルへの追記をし忘れていないか、レジストリ値の値変更を間違えていないかをチェック。

ahnhs ハッキング防止機能にエラーが発生しました

VMware toolsの何らかの機能がハッキング認定されてしまっているっぽい。
グラフィックドライバ取得後に、VMware tools自体はアンインストールすること。

グラフィック・システム・セッティングに失敗しました

VMware toolsが未インストールまたはアンインストールされている状態の場合、ドライバが適用されておらず、能力がしょぼいため起動に失敗する。
グラフィックドライバの再適用の手順を参考とすること。

VMware toolsは、仮想マシン内にのみインストールしてください。

monitor_control.restrict_backdoor = "true"
などの記述があるとインストールに失敗する模様(このケースの場合、原因は十中八九これ)。
一度.vmxから当該記述を削除の上再起動した後、VMware toolsのインストールを試みること。

参考

MapleStory Actual fix for VMWare Instructions inside - MapleStory Forum, Quests, Skills, Items, Monsters, Classes
徒然なるままに VMware ESX/ESXiの仮想マシンではWindows Server 2008 R2のVMware SVGA 3Dグラフィックドライバがインストールされない

【Vivaldi】縦タブからサムネイルを消す

2015 6/13追記
デフォルトでタブサムネイルの非表示が可能になりました! taka-say.hateblo.jp

デフォルトでタブ位置の変更が可能なVivaldiですが、縦タブ状態にすると下記画像のようにページサムネイルの表示がされてしまいます(ルイズかわいい)。

f:id:taka_say:20150430160855p:plain

中にはこの機能をありがたいと感じる人もいるかもしれませんが、自分にとっては全くもって不要なので、消すためのカスタマイズをします。
ちなみにOpera12ではサムネイルのON/OFF設定がデフォルトで可能です(最強!)。

HTML/CSSの編集をしますが、それらについての知識は特に必要ありません。

環境

Mac OSX Mavericks
Vivaldi v1.0.162.4

カスタムCSSの準備

サムネイルを消すためには、VivaldiにカスタムCSSファイルを適用する必要があります。
なので、まずはそのための追記をします。

Macの場合
/Applications/Vivaldi.app/Contents/Versions/[version, e.g. 1.0.162.4]/VivaldiFramework.framework/Resources/vivaldi/browser.html

一応Windowsの場合
Vivaldi\Application\[version, e.g. 1.0.162.4]\resources\vivaldi\browser.html
※自分では確認していないので間違っていたらすみません。

を開き、

<link rel="stylesheet" href="style/common.css" />

と記載されている行の下に新しく

<link rel="stylesheet" href="style/custom.css" />

という一行を加えます。

browser.htmlへの追記が完了したら、実際にカスタムCSSを作成します。

Macの場合
/Applications/Vivaldi.app/Contents/Versions/[version, e.g. 1.0.162.4]/VivaldiFramework.framework/Resources/vivaldi/style

一応Windowsの場合
Vivaldi\Application\[version, e.g. 1.0.162.4]\resources\vivaldi\style

フォルダの下に、任意のエディタでcustom.cssファイルを作成します。

サムネイルを消す

サムネイルを消すためには、以下の記述を作成したcustom.cssに追記すれば完了です。

#tabs-container.right #tabs .tab,#tabs-container.left #tabs .tab{height:26px;max-height:26px}

保存を終えたら、Vivaldiを再起動しましょう。

結果

f:id:taka_say:20150501083940p:plain いい感じのタブの太さになっていますね。

モニターのサイズ、解像度等によっては適切なサイズとなっていない可能性があります。
その場合はCSSに記述したheightの項目を適宜設定してみてください。

参考
Change Vivaldi browser default color scheme
Hide and disable thumbnails in Vivaldi vertical tabs
Vivaldi (Tech Preview) のPage ActionにCSSやJSを追加する (Mac OSX) - Pastalablog in はてな

Vivaldiマスター諸氏に感謝。

Opera死す、Vivaldi蘇生す

前回Operaに散々いちゃもんをつけた挙句、最終的には自分が雑魚だったという結果に落ち着いたわけですが……

taka-say.hateblo.jp

Opera12ではページの戻るが中々機能しなかったり(JSのせい?)、動作が全体的に緩慢になっていたりと、やはり我慢の限界に達してしまいました。

同じく前回の記事で辛辣な感想を述べたVivaldiですが、Technical Preview 3が28日に公開されるなど、活発な開発状況が垣間見えます。

Chromeを使う気はやはり出ません。
FireFoxもそうです。
Safariなど論外です。


悩みましたが、私はVivaldiと心中することに致しました。

現在困っている部分に関しては、解決策が見つかりそうなので、追々カスタマイズしていきたいと思います。

ヴィヴァルディマイフレンド

f:id:taka_say:20150421211401p:plain

Operaと決別す

ついにこの日がやって参りました。

ちなみにここでいうOperaとは、かつて最強の名を欲しいままにした真のOperaこと、Opera12系列です。

そう、長年愛顧を続けたOpera12系列に別れを告げる時が来てしまったのです。

昨年4月にリリースされた12.17のセキュリティアップデートを最後に、過去の遺物化に歯止めがかからないOperaですが、この度我慢の限界を超えてしまいました。

Yahooからのアクセス拒否に始まり…… f:id:taka_say:20150421211033p:plain

Google画像検索からも迫害される有り様……(ルイズかわいい) f:id:taka_say:20150421211105p:plain


というわけで、乗り換え先のブラウザ探しの旅に出ました。

Chromeはサブで使用していたものの、メインブラウザとして使用するほどの愛着は湧いていないため却下。

そのままOperaの新しいやつにしちゃうかなあと決断しかけた矢先、良さそうなブラウザを発見。

その名も……

f:id:taka_say:20150421211401p:plain

Vivaldi

なんとOperaの元CEOが開発に携わっているとのこと!
これは使わずにはいられないと、早速インストール!起動!
プレビュー版ということで機能的にはまだ未熟なものの、シンプルでいい感じのデザインだし、中々良いかも。


と思ったのですが、存外使いづらい……。
タブがデフォでサムネイル表示だったり(えっちなサイトを開いているときに隠蔽しづらい)、タブを閉じる×が左側にあったり(基本的にはCtrl+wで消すからそこまで支障はないけど……)、その他不満点が少々……。

やっぱりOperaの最新版で妥協するかーと諦めかけたのですが、ふと思い立ち『Opera Google画像検索』でググってみると、なんとOpera12系列でも以前までと同様の画像検索を行う方法があるではないですか。

なにやら、User-Agentを偽装すれば解決するらしい。早速実践。

f:id:taka_say:20150421213111p:plain

opera:config

を開き、Custom User-Agentの項目を偽装したい適当なUser-Agentに置き換えて保存するだけ。


本当にかつての輝きを取り戻せるのか!?と半信半疑で画像検索を行ってみた結果……


f:id:taka_say:20150421211413p:plain

すごく……うれしいです……(ルイズかわいい)

f:id:taka_say:20150421211425p:plain

ついでにYahooも見れました。
アクセスが久しぶりすぎてTOPの変わり様に少し唖然。



とにもかくにも、我がOperaはかつての栄光を取り戻し、相も変わらぬ最強っぷりを見せつけてくれたのでした。

決別するのは、昨日までの情弱な自分とだったわけです。

f:id:taka_say:20150421214214p:plain

Google画像検索も出来る。そう、Operaならね。





参考
OperaでGoogleの検索表示を元に戻すTips|to be continued ~とあるプログラマーの実験的開発日誌~
Chrome最新ユーザーエージェント一覧 - SRWare Iron使いの忘備録

Googleインスタント検索を無効にする

検索中に画面がチラチラして鬱陶しいので。

https://www.google.com/preferences

上記URLにアクセスし、

f:id:taka_say:20150416180744p:plain

上記画像の赤線内のように、Googleインスタント検索の予測欄をインスタント検索の結果は表示しないに変更しページ下部のボタンで保存。



ちなみにOperaでは違うページが出ました。 f:id:taka_say:20150416181215p:plain