2014年2月15日土曜日

分かりやすい関数、変数名の付け方まとめ

リーダブルコードという本を読んだので参考になる点をメモします。

ー分かりやすいとはどういう意味か?
 =>他の人がコードを読んだ時に最短で理解する事ができること。

ー関数、変数名の付け方
   ー基本は名前に必要十分な情報が含まれている事
 ーgetPage(url)という名前は良いか
  =>インターネットからのPage取得ならばFetchPageやDownloadPageの方が明確
 ーint Size()は良いか
  =>何の量かわからない、Height()かNumNodes()かなどより具体的に
 ーStop()はどうか
  =>取り消しできないような重い処理の場合はkill()にする。
 ー良い名前が無ければ
  =>シソーラスを使ってよい英語が無いか調べてみる。
 ーイテレータが複数あってi,j,kと付けていくと紛らわしくなる場合
  =>イテレータに配列名の頭文字をつけてやる,あるクラブに所属している一人のメンバーを取り出すような場合clubs[ci].member[mi]と付けてやると不具合が見つけやすい。
 ー単位の情報は明確化しておいた方がバグが生じにくい(start_msミリセカンド)など
 ーパスワードは暗号化したものと暗号化していないもので分けるべき、暗号化前がplaintext_password,暗号化後がencrypted_passwordなど。
 ープロジェクト固有の省略形はさける、String->str Document->docは良いが、BackEndManager->BEManagerとすると誰も理解できなくなる。
 ーfilter("year <= 2011")というコードは、2011年以下のものを選択するのか、あるいは除外するのかが分からない
  => 選択するならばselect,除外するならばexcludeのように誤解されない名前にする。

2014年1月25日土曜日

Ruby on Railsでのモードの確認方法、本番モードでの実行方法

Railsには開発モードと本番モードという2つのモードがあり、それぞれ役割ごとにデータベースを切り替えて使う機能が備わっている。

本番環境への切り替え方は以下の用にする
1.環境変数の設定
export RAILS_ENV=production(linuxの場合,windowsの場合はset RAILS_ENV=production)
2.モードが変わったかどうかは以下のコマンドで確認
ーrails consoleでコンソールを開く。
ーRails.envとコマンドを叩く、これで現在の開発モードが出てくる。
3.precompileをする。
ーassetsの圧縮ファイルを作成する事が目的?SASSのbuild、JSファイルの圧縮などを行っておくのだと思われる。これを行う事により高速に動作する?
確認したところ圧縮しているわけではなさそう。キャッシュファイルの生成と書いてはいる。
4.本番モードに切り替えた場合データベースをシードから作っていないので
作成する。
rake db:create
rake db:migrate



2014年1月22日水曜日

Androidアプリを実機とエミュレータで起動できるようになるまで


AndroidのSDKがそんなに親切ではないので取りあえず起動できるようになるまでをまとめてみた。基本的にはAndroidの公式サイトと後は分からない点を少しぐぐって調べたくらいである。本の手順に従ってダウンロードして設定していくと、アンドロイドはすぐに新しいバージョンが出て記述方法が変わるため、時間のロスが大きい。ドキュメントはかなり整備されているので最初の起動までは公式ドキュメントを読んで設定した方が結果としては理解も増すし速い気がする。ともあれ以下まとめ。

(環境Windows7 64bit PC)
1.SDKのインストール
http://developer.android.com/sdk/index.html#download
一旦ダウンロードしたSDKは新しいパッケージがSDKManager経由でインストール
できるため再度ダウンロードの必要はないとのこと。

==トラブル==
SDKManagerを開こうとしたけども、コンソールを開くとすぐに落ちてしまう。
->find_java.batというファイルがどうもjavaのSDKを見つけてくれないらしい。
そこでJAVA_HOMEをJDKをインストールしたディレクトリを指すようにする。
具体的にはC:\Program Files\Java\jdk1.7.0_17があったので、これを使って開発を行う事にする。
コントロールパネル->システム->システムの詳細設定->環境変数で新規に

変数名:JAVA_HOME
パス:C:\Program Files\Java\jdk1.7.0_17

として登録してやる
これによりSDK Manager.exeが起動できるようになる。

日本語化は必要か?
->チュートリアルは全て英語でフォルダ名などが翻訳されているとかえってわかりにくいので
日本語化の設定はしない方がむしろ良いと思われる。

2. 初回のAndroidアプリの設定を行う。
http://developer.android.com/sdk/installing/bundle.htmlに行く。
zipファイルを解凍し、eclipseをスタートする。
※注意
eclipseやsdkのディレクトリを動かしてしまうとうまく起動できなくなる
ので動かさない事。

3.Androidの最初のアプリを作成しよう。
http://developer.android.com/training/basics/firstapp/index.htmlにいく
ここにチュートリアルが書かれている。

3-1.プロジェクトの作成
http://developer.android.com/training/basics/firstapp/creating-project.html
に行き、まずはプロジェクト作成を行う。
プロジェクトの作成方法はEclipse(with Android Developer Tool plugin)を使ったものと
SDK toolsを使ったものの2種類が紹介されているが、ここではEclipseを使った方法でプロジェクトを作成していくことにする。
Eclipseを使った方法ではADT Pluginがいると書かれている。
因みにADT Pluginとは統合開発環境(IDE)のEclipseにAndroid OS向けの開発環境を追加する
プラグインで、最初にSDKをインストールした時にADTは入っているため新規にインストール
する必要はない。

Create a Project with Eclipseというタイトルの項目にしたがってプロジェクトを
作成していく。詳細は省略するが気になったとこだけ記述。

・Package Nameは自分が所属する組織の逆ドメイン名を使うと良いと記述されている。
逆ドメインとは何か?自分が所属する会社のホームページがdmm.comならばcom.dmm.myfirstapp
みたいなパッケージ名にしろという事が書かれている。
ちなみにデフォルトではcom.example.myfirstappというパッケージ名が付けられるが、
com.exampleではGoogle Playに出すことはできないようである。

・Minimum Required SDKは、サポートしたいアンドロイドのバージョンである。
Androidのバージョン別シェアを下記サイトから確認すると
http://juggly.cn/archives/tag/android%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%88%A5%E3%82%B7%E3%82%A7%E3%82%A2
現時点ではGingerbread(Android 2.3以上)をサポートしていれば世の中的に大丈夫という事が言えそう。
どのバージョンまでサポートすべきか?という問いに対しては自分が開発するアプリのコア機能が実現できる最低のバージョンまでサポートしようという事が書かれている。それ以外の、新しいAndroidバージョンになると少し新APIを使って高速化やUIの強化ができる、といった違いはバージョンごとにプログラミングでかき分ける事ができるようだ。
http://developer.android.com/training/basics/supporting-devices/platforms.html
を参考。

・Target SDK
あなたがテストをした中で最も高いVersionのAndroidと書かれている。
Target SDKを指定した場合、指定したSDKのバージョンより先のバージョンでの前方互換性を無効にできます。
1.Android 4.4用のアプリを作成
2.Android 4.2のアプリは前方互換性があるため、Android 4.4の記述を書いていると、それに影響されて
画面のデザインや外観が変わる可能性がある。
3.これをAndroid 4.2独自のものにものにして、画面のデザインや外観を変えたくない場合には前方互換性
を無視する必要がある。
->Target SDKに4.2と指定。これで4.4用のレイアウトが4.2に適用される事がなくなる。
他実例として、Target SDKを Level8に設定するとタブレット等での大画面へ対応しないアプリになるらしい。

まあしかしまだ良くわからんので取りあえず最新にしておけばよいか・・。

Minimum Required SDK及び、targetSdkVersionを変更したくなった場合には
AndroidManifest.xmlを開き、
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
の部分を変更してやればよい。

3-2 アプリケーションを実行する。
実行する対象は実機かエミュレーターの2通りがあり、また
Eclipseを使用する。コマンドラインを使用するの2通りの実行のさせ方がある。

・リアルデバイスでの実行方法
1.PCとスマホをUSBケーブルでつなぐ。適切なUSB driverをPCにインストール
する必要がある。ドライバの詳細は
http://developer.android.com/tools/extras/oem-usb.htmlを閲覧との事。
デバイスによってはここがめんどくさいかもしれないが頑張ろう。
2.toolバーの三角ボタンを押してAndroid Applicationとして実行
3.デバイスを選択するとその端末にインストールされる。
4.デバイスの接続を切ってもインストールされたまま残る。

・エミュレータ(AVD:Android Virtual Device)での実行方法
-EclipseのツールバーからAVDManagerを起動し、デバイスを定義して実行。特に難しくない。
しかし、RAMに設定する容量次第では、エミュレータがクラッシュしてしまう事もある。
どうやら768MB以上のRAMを設定すると落ちてしまう可能性があるそうだ。
製品として2GBのメモリーを積んでいるNexus 7を1GBのRAMで動かそうとしたところクラッシュ
してしまった。しかしクラッシュが起こらないようにしようとして1GB->768MBに変更したところ
エミュレータが重すぎていつまでたっても起動しない。3分間たって、ようやく画面が
表示されたかと思えば、アプリが勝手に軌道を終了してしまい、画面を確認することができなかった。

ごついデバイスを低スペックパソコンでエミュレートしようとしたことが間違えだったようだ。
気を取り戻してしょぼいAVDを定義して、それで実行してみようと思う。
AVD_for_WVGA(800*480)という標準的なデバイスを768MBのRAMで定義して、これを実行させる事
にする。これで少しは速くなった。大体2分くらいでEmulatorが起動する。

しかし、こんなノソノソとエミュレータを起動していてはイライラするのでもう少し
速くエミュレータを起動できないかを探していたところ以下のホームページを発見した。
http://www.webtech.co.jp/blog/developer-news/5966/
Android端末のほとんどがARMアーキテクチャのCPUを使用していて、Windows,Macはx86系の
CPUを使用している。即ちARMアーキテクチャからx86系アーキテクチャへの命令変換をCPUで処理しているためこんなに速度が遅くなってしまうのである。そこでIntel atom androidエミュレーターというx86系の命令で動いているAndroidエミュレータがあるのでこれを使用してみる。詳しくは上記のホームページを参照。
なお、intelのHardware_Accelerated_Excution_Managerというものを手動でインストールする必要があるが、
\adt-bundle-windows-x86_64-20131030\sdk\extras\intel\Hardware_Accelerated_Execution_Manager
にexeファイルがある。

その結果・・・起動まで大体1分、さらに動作がサクサク。これならある程度Emulatorでの開発に耐えられそうである。

ところで会社などプロキシを設定している場所だと、インターネットに
繋がってくれない。そのような場合は

Settings->WIRELESS&NETWORKS->More...->Mobile networks->Access Point Names->
T-Mobile USなどのキャリア名をクリックしてとんだ先にプロキシとポートの設定ヵ所があるのでそこにそれぞれ入力する。ただし、一度エミュレータを再起動しないとプロキシ設定が反映されなかった。

3-3 アプリケーションを作成する。
設定部分を本で読むと、情報が古い可能性があるので、ここまでは英語ではあるが公式の
チュートリアルを呼んで進めていった方が良い。ただしここから実際に作成していくパート
になるので日本語書籍で学んで進めていっても良いと思われる。



2014年1月20日月曜日

ruby on railsでtableが無いと怒られる。

rails serverと打ってlocalhost:3000でWebページにアクセスしてみたところ
ActionView::Template::Error (Could not find table 'articles'):
と怒られた。いや絶対あるはずなのになぜ怒られる?と疑問に思っていたところ、
rails serverと打った後でテーブルを作ってもそのテーブルが作成された事は認知されないという事がわかった。
という事で、再起動したら直す事ができた。めでたし。

rbenvを入れている状態でgemした後command not found

rubyにはrbenvという便利なバージョン管理ツールがある。rubyはマイナーチェンジの度に既存のソースコードが動かなくなる事がそれなりにあり、バージョンを簡単に切り替えられると便利である。
今回
gem install bundler
でbundlerを入れて、その後に
bundle installと打つと
command not foundと言われてしまい実行できなかった。

rbenvを入れている場合、新しくGemで入れたコマンドを有効にするためには
rbenv rehash
と打ってやる必要があるらしい。

これを打つとbundle installが実行できるようになった。

めでたし。

2014年1月19日日曜日

OSXでのディレクトリの色の設定

MACの標準のターミナルでディレクトリの色が見にくいので、設定してみた。
まずググってみたら
alias ls='ls -G'とすれあ色が変わると書いてあったのでこれを
.bash_profileに設定。
ところがlsをしたところ色が濃い青色で同様に見にくい

man ls してみたところ以下のようにかける事が判明
#color setting
export LSCOLORS='gxfxcxdxbxegedabagacad'

gxfx・・・にファイルタイプと色の記述がずらっと書かれている。
ディレクトリの色を変更したい場合は最初のeをgに変更しただけである。
注意点として、alias ls='ls -G'は記述しておく必要があるらしい。
よって
alias ls='ls -G'
export LSCOLORS='gxfxcxdxbxegedabagacad'
と設定しておけば良い。

他の色を変更したい場合はman lsでLSCOLORSの所を調べればよさそう。


vimrcのカラー、シンタックス設定ではまったこと

カラースキームを設定していて
vimrcにcolorscheme molokai
syntax on
と記述するのだが、なぜか
source ~/.vimrcとすると
-bash: colorscheme: command not found
-bash: syntax: command not found
と表示される。
CentOS6とOSXの両方で確かめて見たがいずれもこのエラーが表示される。
誰か原因を知っている人がいたら教えて下さい。

また不思議であるが、
OSXではsyntax onをしないと色が設定されなかったが、
CentOSではsyntax onの記述がなくとも色が設定された。

エラーは出るので気持ちが悪いものの設定自体はきちんと反映されているのでまあいいか
という気分である。