投稿

Do Look Think Grow

日経を読んでてメモ。 高すぎる目標を立て、「できなかった」ということを突きつけるのではなく、適切なステップを用意し小さな成功を積み重ねることで同じゴールに到達するために必要な考え方。 Do 試す、経験する Look 確認、チェック、観察 Think 分析、理由 Grow 改善、一般化 まさに少し前の仕事の状況が高すぎる目標、最終目標だけを用意して「できてない」を突きつけられるだけの状況だった。 やっぱり小さい成功体験、ここまではちゃんと到達したって必要だよね。。。 なお、PDCAはチームの成長段階が第3段階になっていないと使えないらしい。 チームの成長段階ってなに?と思ったら結構体系化されてるんだね。 たとえばこちら。 成長の4段階 4段階という場合と4段階に「衰退期」を加えた5段階という場合ある様子。 で、この中の第3段階である「標準期」にならないとPDCAが使えないと。 たしかに形成期や混乱期ではPDCAするようなかっちりした進め方は煙たがられそう。 それを踏まえると混乱期にDLTGをうまく回すには 「実現可能なステップ、小さなゴール」 「ステップはメンバーと合意する」 「Do=試し方、経験方法はメンバーにまかせる」 「振り返りをちゃんと行い、Loog=結果の観察、Think=理由を考える」 「改善案を決める」 がポイントになるのではないだろうか。 なんということでしょう。 まさにアジャイル。 なお、Doの部分で「できないからタスクを取り上げる」を安易にやってしまうと、後のLook, Think、Growがメンバーのものにならなくてモチベーションダウンに繋がるので悪手ということになりそう。一方で、タスクが遅延しすぎても困るるのできっとここのハンドリングとメンバーのモチベーションをどう維持するかがマネージャー、リーダーの腕なんでしょうねぇ。 DLTGを回して、成長して、「うちらはこれをやってこうぜ!」となると標準期には社風とか、カラーと呼ばれるものができるのでしょうな。

[iOS]横になった動画を書き出し時に縦にする

iOSでAV Foundationを使うと動画を保存できたり合成できたりするが、基本的に横向きで動画データが保存されてしまう。 そのまま保存するならSessionに向きをいれれば良いんだけどね。 取ってある動画を使って文字とか図形とかいれようとしたら横になってて。 縦にしたい。 AVMutableCompositionTrackにtransformを設定するときに90度回転させればいいみたい。 AVMutableCompositionTrack* compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; //rotate 90 degree [compositionVideoTrack setPreferredTransform:CGAffineTransformRotate(videoTrack.preferredTransform, M_PI_2)]; マイナス付きの「- M_PI_2」とも試したけどどっちでもよさげ。 どっちかというとCALayerの座標軸がUIViewと違うのでハマってハマって...

[iOS]UIViewの階層構造を調べるrecursiveDescription

UIViewの階層構造を調べる為につかえるメソッドのメモ 自作のUIViewの子クラスのhファイルに以下の記述を追加 - (NSString *)recursiveDescription; 使いたいところで以下を呼び出す。 NSLog(@"%@", [self recursiveDescription]); こんな感じで階層構造が出力される。 2012-12-30 23:54:58.902 CustomTableTest[5767:c303] > | > | > | > | > | > | > 2012-12-30 23:54:58.915 CustomTableTest[5767:c303] resizeTable after {{0, 0}, {300, 50}}

iOSアプリのインストール日時を取得する

イメージ
前回に引き続き、AndroidとiOSのアプリ作成での調査メモを。 Androidはアプリケーション自身が「自分がいつインストールされたのか」を取得できるAPIが存在しますと。 アプリケーションのインストール日時、更新日時を取得する TechBooster APIレベル9,Android2.3からではありますが、このうちインストール日時が特に使いたい機能だった訳です。 で、コレに相当する機能がiOSにあるのかどうか、ここ数日しらべまくりました。 結論から言えば、一発で取得できるメソッドは無いけど、取得はできる、だろうと。 Androiのように上手く取得できるメソッドが無いので、sysctlとかNSTaskとか色々探したものの、すべて検討違いなところで、最終的にはすでに買ってあったObjective-Cの逆引きハンドブックに書いてあったというオチ。 肝はインストールされる「*.app」自身のタイムスタンプを取得できればよいということで、 1、NSFileManagerをつかう 2、ホームディレクトリからアプリ自身のappファイルのパスを設定する という2点でできました。 以下、サンプルコード。 アプリの名前が「AppTimeTest」という前提。 - (void)viewDidLoad { [super viewDidLoad]; //outletの代わりに紐付け textAppInstallDate = (UILabel*)[self.view viewWithTag:2]; textAppUndateDate = (UILabel*)[self.view viewWithTag:4]; textAppFilePath = (UILabel*)[self.view viewWithTag:6]; NSString *appFilePath; //ホームディレクトリパスを取得 appFilePath = NSHomeDirectory(); //ディレクトリパスにappファイル名を追加。 [appFilePath stringByAppendingString:@"AppTimeTest.app"];

スマホアプリのUIデザインとプログラム作成の分離

スマホアプリ開発について。 どうもUIデザインとプログラム作成を物理的にも別々のチームで実施しなければならいようで、「UIデザインの成果物とプログラム作成の成果物」をなんとか分離できないものかと画策しています。 まぁ世間のアプリ開発しているチームの大半はデザイン担当とプログラム作成担当は隣のデスクで分離なんていらないのかも知れませんが…。 まず、AndroidについてはXMLにレイアウトが集約されており、ActivityクラスからXMLの名前をしていし、そこからXML上に設定された各部品のidを指定する事ができるので、こちらはUIデザイン担当はXMLの作成とidの指定をすれば良いであろう、という見解になりました。 問題はiOSについてで、どうやらStoryboardを何も考えずに使うと、ViewとControllerクラスの宣言がStoryboard上でくっついているので「後からコーディングでViewとControllerを紐付ける」という操作が出来ない様子。 実際、プログラム上でself.storyboard instantiateViewControllerWithIdentifierを使っても返ってくるのはControllerなのでviewだけ引っこ抜く事が出来ません。(ここでのselfはカスタムVewController) で、一旦tempControllerという変数に入れて、self.view = tempController.viewとか無理矢理やってみたけど、だめだった。 色々さまよった結果、どうやらStoryboardを使いながらカスタムViewControllerを使うなら、Storyboard上で各画面(シーン)にカスタムViewController紐づける必要がある、というやり方しか見つけられなかった。それではUIデザイン担当がカスタムViewControllerのクラス名を知ってもらう必要が出てくるので、もう少しUIデザイン側がプログラムを知らなくても良いようにしたいなと。 で、Storyboard以前の仕組みであるNibファイルを使うやり方だと、Nibファイル側では具体的なControllerクラスの名前を知らなくても、Controllerクラス側でNibファイルと自身のviewを紐づける事ができるので、デザイ

mavenからのstruts2練習

イメージ
herokuを使ってみて「そもそもmavenに慣れよう!!」ということで、maven練習のメモ。 まずは、 techscoreのmaven を参考にstrutsアプリをmavenで構築。 以下メモ。 pom.xmlのrepositories、pluginRepositoriesは指定しなくても良いらしい。というか、むしろsnapshotサイトと呼ばれるものを指定するのはやめておけ、という意見もちらほら見かけた。 maven-compiler-pluginはversionを指定しないとmvnコマンドでワーニングが出る。 mvnからtomcatの操作は上手く行かなかった(tomcat7使ったから?)ので、使わなかった。 pom.xmlを更新したらmvn eclipse:eclipseをたたく→Eclipseのプロジェクトを「リフレッシュ」すれば良い。 warが生成されるけど、いらない。それを止める方法は、まだ探してない…。 で、ここからが(結果的に)メインディッシュ。struts1は使った事あるので、さらにstruts2でtechscoreと同じアプリを作ってみることにした。 1.プロジェクト作成 まずは、mvnでディレクトリを準備。アプリ名はwebchat2とした。 cd {eclipseのworkspace} mvn archetype:create -DgroupId=com.example.webchat2 -DartifactId=webchat2 -DarchetypeArtifactId=maven-archetype-webapp javaソース用のディレクトリを準備して、プロジェクトをeclipseで使えるようにする。 cd webchat2 mkdir -p ./src/main/java/com/example/webchat2 mvn eclipse:eclipse ここでEclipseで「インポート>既存プロジェクトをワークスペースへ 」を選んでプロジェクトをeclipseに認識させる。 ※M2_REPO変数の定義忘れずに。詳細は techscoreの4.Eclipseとの連携 を参照。 2.pom.xml修正 で、pomを以下のように変更。 pom.xml <project xmlns

初めてのherokuでJavaデプロイ

herokuを触ってみようとおもって、herokuでjavaを動かそうとトライした時のメモ。 基本はこちらの2つを参考にさせて頂きました。ありがとうございます。 酒浸りの日々 daicham blog 参考にさせて頂いたブログを見ればherokuのへのpushまでは行けます。 で、自分のアプリにアクセスしたところエラー発生。ブラウザの画面には以下のメッセージが。 Application Error An error occurred in the application and your page could not be served. Please try again in a few moments. If you are the application owner, check your logs for details.  おやぁ? ログを見てみようか…。 $heroku logs (中略) 2012-02-21T14:46:17+00:00 heroku[slugc]: Slug compilation finished 2012-02-21T14:46:19+00:00 heroku[web.1]: Starting process with command `sh target/bin/webapp` 2012-02-21T14:46:20+00:00 app[web.1]: Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld 2012-02-21T14:46:20+00:00 app[web.1]: Caused by: java.lang.ClassNotFoundException: HelloWorld 2012-02-21T14:46:20+00:00 app[web.1]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 2012-02-21T14:46:20+00:00 app[web.1]: at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 2012