AndroidStudioをWindows7に入れてみる。
進行中の案件でクライアントサイドの担当者が使っていたので、
ちょうど年末年始休暇の期間に触れてみる。
あっさり入れられるかと思ったのですが、はまりました。
最新のJDKを入れてJAVA_HOME設定しろと怒られたので、
環境変数を設定し、起動を試みたところ今度は「tools.jar」が無いよ。と怒られ
ぐぐったところどうやらjdkにはあってもjreのディレクトリには無い模様。
日本語化はバッチを当てる方式ではなく、
単純に日本語化のjarファイルをアプリのディレクトリに配置するだけでした。
参考サイト
AndroidStudio,eclipse(ADT22),IDEA13EAP 関係の相互移行を確認してみた - exception think
今年の仕事
約一年ほど更新せず放置してしまいました。
この1年ほどで仕事上で関わった中で技術的なTopicを列記します。
- バージョン管理システムをSubversionからGitに移行。
- 新規コンテンツのサーバーにAWS(Amazon Web Service)を採用。
- HTML5/CSS3/JavaScriptを使ったフロント部分のコーディング作業を代行。
(通常はデザイナーの部署が行う領域) - iOS/AndroidのWebViewアプリ用にAPIをいくつも作る。
- メインはPHP、Ruby。ちょっとしたスクリプトはRubyで記述。
その他、空いてる時間にUnityやJavaのAndroid関係の勉強などしてました。
仕事の役割的なところでいうと、現在進行中でWebViewアプリのエンジニアチームの責任者やってます。特に実際触れられてないObjective-Cを筆頭にクライアント側の知識不足を日々実感しており、本格的にやらねばと思っている今日この頃です。
Macの開発環境構築
自前のMacBookAirのSSDの容量が決して大きくはないこともあって、仮想環境に構築していた諸々の環境をMacでも作ってみることにしました。
今日の作業内容
手始めにシステム環境設定→共有からApacheを起動
/etc/apache2/httpd.confを編集して
#LoadModule php5_module libexec/apache2/libphp5.so
のコメントアウトを削除。
MySQLをdmpからインストールし、/.bash_profileを編集しsourceコマンドで読み込んで有効化。
でoilコマンドをインストールしてみました。 まだgitがなかったり、gem installがやたら遅かったりでできてないですが引き続き環境構築を続けていきます。
参考サイト
PHP版ActiveRecordsとRails
Rubyの認知度を飛躍的に高めたと言われている二つのフレームワークですが、PHPで”似た動作”を実現したフレームワークが一応存在するようです。
CodeIgniter
標準でActiveRacordsライクなO/Rマッパーのクラスがあるようです。さらに拡張ライブラリとして「DataMapper」を採用するともっとActiveRecordライクになるようです。
http://d.hatena.ne.jp/ninoseki/20110715/1310710665
FuelPHP
こちらはRuby on Railsライクなフレームワーク。なんとDB:migrationがあります。PHPは変数の動的型付けであったり制約が少ない言語仕様ですが、フレームワークとして独自のコーディング規約を定義することでRailsライクな開発環境を提供しているようです。
もちろんRubyとPHPでは言語仕様が違うので、あくまで「それっぽい」機能を実装されていると考えた方が良さそうですが、PHPerがRubyの勉強をする上で似たフレームワークを使ってPHPで表現した後にRubyで表現してみるのは勉強のアプローチとしてありかなと思いました。
プログラムにおける最初の設計の大切さ
エンジニアとして初めてプロジェクトの立ち上げから関わる案件に出会ってから約1年半の月日が立っています。今まで二つのタイトルの立ち上げに関わったのですが、システム的には同一のフレームワークを使っています。
1年前というとまだエンジニアになってから半年でデータ構造やアルゴリズム、SQLのパフォーマンス等ほとんど意識の中に無かった頃に同期と基本設計から任され根幹部分の上に組み上がるアクションやらモデルやらをあれこれ実装していたわけです。
この基盤が今でも動いているわけですが当時深く考えずに作ったとあるアクションが今も尚、実装上のボトルネックとして残っています。DRYの思想から考えられないような冗長な作りです。どこかで直したいと今でも思っていますが、運用中のシステムのバグを起こすと信用に関わるような部分なのでおいそれとリプレースもできません。
工期の短さや人員の少なさ、また自分のスキルのなさ等言い訳はいくつでも思いつきますが、最初の設計の段階で考慮できていれば随分変わっただろうと思い知らされるアクションで影響範囲に手を入れる度に設計の影響を考えさせられます。
PHPのDateTime型を用いて日時の妥当性を調べる
備忘録として小ネタです。日時といったらよく
yyyy-mm-dd hh:mm:ss
の文字列として表現されますが、例えば今日の日付も「08日」と表記されるか「8日」と表記されるかでは機械的には別に解釈されてしまいます。csvファイルをExcelで開いて日時を記載する欄に日付を書くと、頭の0はなくなり「8日」に整形されます。
厳密に評価してddの形ではないのでダメとしてもいいのですが、セルの設定まで変えてyyyy-mm-dd hh:mm:ssの形に記載させるのは不毛な気がしてます。そこでいい方法はないか。妥当性を調べる意味でも「yyyy-mm-dd」と「hh:mm:ss」を分けて前者は「-」で文字列を分割して、checkdate()を使い後者は正規表現等で評価する等よく見かけますが、とりあえず文字列をそのままDateTime型に当てはめてみる方法で調べることができたりします。PHP.netのDateTime::getLastErrorsに載っている下記のサンプルコードに入れてみましょう。
サンプルコード
try{
$date = new DateTime($str);
}catch (Exception $e) {
print_r($e->getLastErrors()); // とりあえず表示
}
サンプルデータ($str=渡す文字列、#=>結果)
$str1 = "0000"; // #=> Failed to parse time string ( throw Exception)
$str2 = "0000-00-00 00:00:00"; // #=> The parsed date was invalid (warnings)
$str3 = "2008-02-29 00:00:00"; // #=> 正常終了
$str4 = "2009-02-29 00:00:00"; // #=> The parsed date was invalid (warnings)
上記で見た通り”とりあえずDateTimeに入れてみる”だけで妥当性をチェックしてくれます。しかし、注意せねばならないものが太字で表した二つのケース。
両方とも「日付としては間違っている($str4の2009年は閏年ではないためおかしい)にも関わらず、warningになってしまうため例外は発行されません。例え例外が発行されずともDateTime::getLastErrors()を見る必要があります。ErrorよりWarningの方が重度だったりします。
厳密な日付チェックは元々用途として想定されていないのかもしれませんが使えます。
参考サイト
Sambaの動作がどうもおかしい件
Windows7のPCにVMWarePlayerでCentOS5.8(Linux)をマウントしてWindowsからネットワーク経由でLinuxを見る形で共有ディレクトリをSambaで設定したことは、以前書いた。WindowsのEclipseのワークスペースもこの共有ディレクトリにし、SVNからプロジェクトを立てて作業している。
例えば変更の保存ができないとかそういう使えないレベルではなく、一応一通りの作業はできているのだが、時々svn updateを実行すると1分ぐらいハングアップになったりする。さすがにイラッと来るので原因を探ってみる。
パーミッションの設定を試しに一律777にしてみる。Sambaのログに.svnが見つからない的なとても怪しいエラーが大量にでていたので下記参考サイトを見ながらxinetd経由でSambaを使うようにしてみる等してみたが変わらない。
よくよくエラーログを掘ってみるとタイムアウトらしき文字列が見つかるのでこれが原因かもしれない。ネットワークはまだ全然想像力が具体的に働かない…。うーむ。試行錯誤繰り返して覚えていこう。
参考サイト
http://d.hatena.ne.jp/utadaq/20061126
http://xubuntu.cocolog-nifty.com/blog/2010/01/xinetdsamba-8d5.html