~傲慢SE日記へようこそ~


【TownSoft】

私が事業を行っているホームページです。

御社のビジネスモデルを形にするためによければ

TownSoft

へ足を運んでください。


【ニュース】
最近iPhoneアプリの勉強を始めました。

もう3年か、このブログ。。。


【はじめに】
傲慢SE日記にお越し頂きありがとうございます。

本ブログは、今まで私が経験した事や学んだ事を元にIT業界を考察しているブログです。


2008年4月7日より傲慢SE日記 というテーマを追加し、今までのブログとは違った視点で記事を書いていき世の中へ自分の思いを伝えようと思っているものです。

また、それと同時に私の考えに同調してくれる仲間を見つけてビジネスに結び付けていければと思っております。


技術者はもちろんとし広く様々な人が読んでも分かるような内容になるように心がけております。

そのため、技術系の記事は比較的少なくしております。


本ブログを読む事によって、技術者は広い視野を持ち、ビジネスマンはIT業界の現状を把握して頂ければ私にとってこれほど嬉しい事はありません。


傲慢SE日記を宜しくお願い致します。



【昔の記事】

昔の記事は、昔の記事の目次 より見てください。

(傲慢SE日記の目次もそのうち作成いたします。)



【テーマ】
本ブログのテーマは二本立てです。私の現状を二ヶ月遅れで配信している「新天地」と私の哲学を書き連ねている「傲慢SE日記」です。

・新天地⇒初めから読む
・傲慢SE日記⇒初めの記事


【説明書】
本ブログは私の考えを様々な方法で記しています。
その考えが必ず正しいとは思っておりませんし、私の考えも日々変わります。それをご了承の上で読んで下さい。
また、ブログについての非難を私は望んでおりません。私が望んでいるのは、意見です。なので、非難的意見に関してコメントを返すことはありません。

※激励のコメントなどを頂けると嬉しく思います。



【足跡】
本ブログに来た証を付けたい方はこちらまでどうぞ⇒足跡


【twitter】

syou007


【勇者を育てろ】
TownSoftで開発している製品です。

勉強もかねてゲームを作ってます。

良かったら遊んで見てください。


http://hero.s-check.net/

1 | 2 | 3 | 4 | 5 |最初 次ページ >>
2012年02月07日(火) 12時00分08秒

IT業界の実情(一部)

テーマ:傲慢SE日記
お金を稼いでいる僕が言うのもなんだかですが、やっぱりこの業界ってかなり未熟です。
前に「システムエンジニアの仕事って何?」を書いたが、この通りできている現場は実はありません。
その実態を僕が赤裸々に書いてみようと思う。

僕がこの業界に入ったのは2000年問題の後である。その時に思ったのが、

「仕事って結構やる事が無いんだなー」

と。
その後も仕事をしていて、IT業界のイメージは変わらなかった。みんな無駄に働いているから残業が多い業界だと思ったのだ。
その決定的な理由は一つ。

みんなプログラムが書けないのだ。

僕は元々高いプログラム能力を持っていたからか、先輩や上司のプログラム能力の低さに辟易した。僕から見るとその苦手なプログラムから逃げるように上流工程に行こうとしている人がとても多いのだ。
システムエンジニアの仕事って何?」で書いたように設計はプログラム能力がある方が圧倒的に優位なのに、この根本的な能力が欠けている人が設計を行っていて設計が行えない人が要件定義を行っているのが今の現状なのだ。
では、それによって起こる弊害は何かを僕の実体験で書こうと思う。

僕は新人の時には航空旅客システムの開発に携わった。その時に一日に書いていたプログラム量は100行以下。では、考えるのに時間を使っていたかと言うと、そうでもない。指示が無く何をすれば良いか分からない時間が圧倒的に多かったのだ。そして、変える間際に呼ばれたり障害が発生したりして無駄に残業をしていた。(「残業って何ですか?」参照)

その後成長してから、POSレジシステムを作る仕事に入った。この仕事は今までの仕事に輪をかけてひどかった。この仕事の元請けは大手Fであるが、社員は一切居ない
全て孫請けやひ孫受けなのだ。もし大手だから大丈夫だろうと思って仕事を託すとドコモのSPモードの用に後で大惨事になります。(あれをどの会社が受けたかは知りませんが。)大手は仕事受けた後に30~50%くらいの金額をとってから関連子会社に仕事を降ります。その振られた関連子会社が仕事を指揮する事になります。
後は関連子会社とその仕事的に関連がある会社に人を借りに行く、関連がある会社はまた人を探して・・・。となるので偽装請負とかが増えて行く。
また、そんな寄せ集めの人が集まると指揮系統もバラバラになるし、他社に対して依頼を行う事が難しくなるためシステム開発が非常に困難になるのだ。
そういう時に役に立つのがエースプログラマーである。他の人が書くプログラムの10倍から20倍くらい早く正確なプログラムを書けるエースプログラマーはプロジェクトの正否を分けるのだ。
逆に言えば、このエースプログラマーがたまたま集まらなければプロジェクトはデスマーチとなるのだ。
※本当に酷い業界です。。。

他にも色々あるが、そもそものプログラム能力が低いのが起因で起こっている事では無いかと僕は思っている。(このプログラム能力はDB設計やアーキテクト能力もかねた言葉である。)
最近の画像つき記事
画像一覧へ ]
2012年02月05日(日) 23時26分01秒

インターネットが奪い去ったもの

テーマ:傲慢SE日記
前々から思っていたが、考える能力が欠けている人が増えている気がする。最近はgoogleやyahoo等の検索エンジンが本当に進化している為、大抵の事はインターネットを見れば解決する。
たとえば、結婚式に参加する時のご祝儀の書き方等は知らなくても事前にインターネットで調べれば解決する。しかも、かなりの確度で正しい事を教えてくれる。(おそらくほぼ99.999%正しい内容が瞬時に表示される。)
このようにインターネットが常に正しい事を教えてくれると、自分の頭を使う事が減って行く。また、常に正しい事を教えてくれるインターネットがあると自分の考えた事を言い出す事が怖くなる。

プログラムを書く時に思うのが、インターネットに乗っていたプログラムを使って書くコードは凄く奇麗だが例が乗ってないようなものになるととたんに汚くなる人が多々いる。(ここ最近は開発速度が早くなりつつあるので、インターネットの知識を借りなければ納期を守れないのでこの働き方自体は正しいと思っている。)

このように自分で考えれない人はゆくゆく何が困るかと言うと、決断が出来なくなる事である。インターネットにしろ上司にしろ何かしら正しい事を示してくれないと仕事が出来ない状況になって行くのだ。それはすなわち、リーダーになれないどころか仕事に振り回されてしまうのだ。(仕事を作れないので、理不尽な仕事でも受けざるを得なくなってしまうのだ。)
※これは学校の勉強も同様で、何も考えずに暗記だけをしている人は社会に出てもある程度の活躍しか出来ないのだ。

もともと高度成長期の日本は言われた事を行う事で出世をしていたので、そもそも世界的に見てリーダー能力が欠けているのだ。その中で考える能力まで欠如してしまったら日本の良さは本当に無くなってしまう。
考える力と決断する力は必ずしも一致しないが、考えない決断はあり得ない。そして、リーダーには決断能力が不可欠なのだ。その為に考える能力を奪い去って行くインターネットとどうつきあうかをみんなが考え始めても良いのではないだろうか?


P.S.
条件を増やすのが知識であり、条件で成し遂げるのが知恵である。
2012年02月03日(金) 12時00分04秒

初めてのOpenGL ES

テーマ:iPhoneアプリの作り方
音楽を出す方法やアニメーションの方法を書こうかと思って他のだが、、、
実践iPad/iPhoneゲームプログラミング/沼田 哲史
¥2,940
Amazon.co.jp
これを読めば分かるのでやはり割愛。そんなに難しい概念でもないし。
で、この本の5章からOpenGL ESの説明が書いているが、、、とにかく難しい。本にもの書いてある通り一部は理解出来なくても良いと書かれているのでお言葉に甘えて僕は最低限必要な部分だけを覚えた。
画像とメモリ(座標)の格納方法を理解しなければ分からないのですが、、、この本にはその概念も書いてあったのでコードが分からなくてもX座標とY座標の概念さえあればゲームが作れるようになります。

このOpenGL ESと言うのはUIViewに対して描画するものになります。厳格に言えばCAEAGLLayerに対して描画を行います。このレイヤーをUIViewを継承しているどこかのパーツにくっつけます。
例えばUIViewに付ける場合は
[baseView.layer addSublayer:eaglLayer];
と記載します。

では、どのように描画しているかと言うと、、、一秒間に何度も描画ロジックとデータ更新ロジックを呼び出して描画を行うのです。この一秒間に何度描画を行うかの単位がFPSとなります。
例えばFPSが60となると、一秒間に60回描画をしていることになります。FlickShootingはFPS30で行ってるので、一秒間で30回描画を行ってます。

なので、この値が高ければ高いほど滑らかな動きになります。
ただ、ポイントは描画の回数を落としても更新プログラムの回数は変えてはならないのだ。例えば、以下のようなコードのイメージだ。
- (void)fpsTimer {
  if (fpsCount % 2 == 0) {
    // 描画処理
  }

  // データ更新処理

  fpsCount++;
}
このfpsTimerメソッドが一秒間に60回呼ばれます。大抵はデータ更新処理よりも描画処理の方が時間がかかるので、描画処理は2回に一度呼び出す等の工夫をする事でデータ更新処理に影響が無いようにします。ちなみに、FPSを10~20くらいまで下げると描画が荒くなるので注意。

実は僕はこの概念をもともと持っていたので、そこまで抵抗が無かったが初めて行う人は少々戸惑うかもしれない。
まぁ、この本でキャラクターの描画方法と動かし方を知ったところで僕はこの本を読む事をやめた。
もう十分に作れる知識を得たと判断したのだ。ここまでくるのに、、、、約4ヶ月。仕事の合間にやってたせいかとても時間がかかった。

書かなかったが、ここでタップした場合のイベントの取得方法とかも学んだ。


FlickShooting
FlickShooting_icon
※是非、動作確認の為にも買ってください♩
2012年02月01日(水) 11時49分57秒

初めてのobjective-c

テーマ:iPhoneアプリの作り方
音を出す方法やアニメーションについても語りたいが、その前にobjectiv-cについて少し語っておこう。
僕がobjective-cを初めて触った時は正直に言って面倒だと感じた。
例えば、メソッドの呼び出し方法だ。
Rubyの場合は
test = Test.new("引数")
test.doing("実行引数", "第二引数")
で終わりです。しかし、これをobjective-cで書くと・・・
Test *test = [[Test alloc]initWithName: @"引数"];
[test doing:@"実行引数" second:@"第二引数"];
[test release];
となる。これだけ見ても分かる通りかなり面倒くさい。
まず、この記述方法に慣れない。たとえ素晴しい言語でも、この記述量は結構なえます。XCodeがある程度は保管してくれるけれど、やはり面倒なものは面倒である。。。
メソッドの引数に名前をつけなければならないのもコードが長くなる原因である。(可読性は上がるかも知れないが、僕は少々面倒だと感じた。)

アラートの呼び出しなんて以下のようになる。
        UIAlertView *alert = [[[UIAlertView alloc]
                               initWithTitle:label.text
                               message:NSLocalizedString(@"Sure", nil)
                               delegate:self cancelButtonTitle:NSLocalizedString(@"CANCEL", nil)
                               otherButtonTitles:NSLocalizedString(@"OK", nil), nil] autorelease];
        [alert show];
これはFlickShootingの買い物画面で表示されるアラート部分のコードである。
一つ一つの意味がメソッドを見るだけで分かるが、とても長い事が分かる。
そして、このアラートの呼び出しは非同期処理になるらしくdelegateで処理を委託しなければならない。(delegateに関してはそのうち説明するかもしれないが、ここでは割愛)
※ちょっとびっくりしたのが、クラスメソッドからも呼び出せるところだ。その場合はクラスメソッドの「alertView」にdelegateされるのだ。この感覚は僕の中ではとても新鮮だった。

あと、謎なのが定数の切り方。
constを使うべきなのかdefineを使うベキなのか・・・。このあたりはC言語に慣れている人なら直ぐに答えが出てくるとは思うのだが、、、あいにく僕はC言語はあまり業務で使った事が無く未だに困惑している。
そして、グローバル定数をどこに切るべきかと言うのにも悩んだ。(結局各「.m」ファイルに記載・・・)

まぁ、こんな感じで半分ほどしか理解してない状態で僕はアプリの開発を進めて行くのだ。
続く。

FlickShooting
FlickShooting_icon
※是非、動作確認の為にも買ってください♩
2012年01月30日(月) 12時09分07秒

さて、iPhoneアプリを作ってみる。

テーマ:iPhoneアプリの作り方
さて、とりあえずある程度慣れてきたので本格的にiPhoneアプリを作ってみようと思い次の本へ手を出しました。
実践iPad/iPhoneゲームプログラミング/沼田 哲史
¥2,940
Amazon.co.jp
これです。
この本を読めばとりあえず基本的なゲームが作れるようになります。
僕が作りたいゲームは

FlickShooting
FlickShooting_icon

これです。
とりあえず、買ってゲームをして良い評価のレビューを書いてくれればと思いますが(笑
このゲームを作るイメージを持って先ほどの本を読みました。

序盤はiPhoneの機能を使って出来る落ちものゲームの解説がありました。
OpenGLとかを使わなくてもこれだけのゲームが作れるという事を学びました。

さて、ここでは僕が学んだ事を説明します。
僕が一番始めに気になったのがパス。Xcodeではフォルダ(ディレクトリ)の概念がありません。グループと言う概念しか無いのでパスで悩む事が無いのです。なので、違うグループに所属しているファイルでも同じ名前を使う事ができません。(結局全て同じフォルダに入っている為)
この概念はなかなか理解に苦しんだが、慣れるとパスで悩む事が無くなるので小さいアプリでは楽だった。
⇒この概念には慣れとかないとファイル管理が上手く出来ないので、この時点で色々グループを試して慣れておくと良い。

info.plist。
これはiPhoneなどのアプリを作る上での基本設定を行うファイルです。ステータスバーを消したりアイコンやファイル名等を管理しています。iPhoneアプリを公開する上で必ず変更する必要があるものもある。
マルチタスクを有効にするかしないかもここで設定出来る。
⇒僕は必要に応じてgoogle先生に聞いて変更しているので、項目は殆ど覚えてない。

とりあえず、iPhoneの教科書を読めばXibファイルの操作に悩む事は無いだろう。画面遷移に関してもコードを見れば分かるレベルである。(XCode4.2.2からはそれすらもUIで行える。)
ここで重要なのは画面遷移のコード。音を出すコードだ。それ以外は僕の作るゲームでは殆ど使わない予定だった。
ただし、最後にアニメーションは使う事になったのでこのアニメーションのコードは覚えておくべきだろう。
(それにしても、アニメーションのコードはもう少し奇麗に書けるように出来ないだろうか?言語仕様上しょうがないかもしれないけれど、中括弧やインデントを駆使してもう少し簡単にしてくれればと思う。)

画面遷移のコード(FlickShootingでいうギャラリーを表示する場合)
GalleryListViewController *controller = [[GalleryListViewController alloc]initWithNibName:@"GalleryListViewController" bundle:nil];
    
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
    
[controller release];
大抵のゲームには画面遷移があるので、このコードは覚えておくと良いだろう。
始めに次の画面のコントローラーのインスタンスを生成します。allocで生成して、Nibファイルの指定をしてます。
そのあと、画面遷移のアニメーション(UIModalTransitionStyleFlipHorizontal)を設定する。この場合はくるっと回るアニメーションである。
そして、こちらをモーダル(presentModalViewController)で呼び出してます。
そのあとのreleaseはよく分からないけど、おそらくモーダルで呼び出す時にretainしているのだと想定。

あ、あとretainとreleaseの関係については覚えておく必要がある。というのも、objectiv-cにはガベージコレクトが存在しないためインスタンスを生成(alloc)した場合は自分で解放(release)しなければならないのだ。不慣れのうちはautoreleaseと言うものが存在するのでそちらを利用しよう!

allocしたオブジェクトはその時点で参照カウンタに1がセットされている。このオブジェクトに対してreleaseを行うと参照カウンタが0になりメモリが解放される。なので、allocとreleaseは必ずセットになる。
しかし、releaseすると必ず参照カウンタが0になるかと言うとそうではない。それがretainである。このretainを使うと参照カウンタを増やす事が出来る。すなわち

alloc⇒retain⇒release

とされてもメモリが解放されない。もう一回releaseを行う必要がある。そう考えるとretainって何に使うんだろうか?と言うと、上記の例のように自分のプログラムでは使わないけど他のプログラムが使っている時にreleaseされないようにする為の仕掛けである。
(XCode4.1から「Use Automatic Reference Counting」が使えるようになったため、メモリ管理をプログラマーが意識する必要は無くなった。)

上記の例ではメインプログラムではcontrollerをallocしてその後にreleaseしている。もし、これでメモリが解放されてしまったらギャラリー画面は一瞬しか表示されない事になる。しかし、実際にはこのコードでギャラリー画面は表示されている。このように自分のプログラムでは使わなくなっても他で使っている時にメモリが解放されないようにretainを使っているのだ。ここではpresentModalViewControllerがretainをしていると想像。そしてdismissModalViewControllerAnimatedでreleaseしているかと思う。(コードは追ってません。)

よくよくコードを理解するととても単純な構造である。allocすると参照カンターが1で作成されてretainすると参照カウンターが1増える。releaseすると参照カウンターが1減って0になるとメモリが解放される。オブジェクト指向でコード書けば管理出来るが、手続き型で書くと参照カウンターの数を調整するのが至難の業である。。。

と言う事で、画面遷移のコードを覚えました。
次回へ続く。(作ったものが気になる人は是非ご購入お願い致します!)

【今だから分かる事】
IOS5で使える「Use Automatic Reference Counting」を使えばretainはもう覚える必要はもう無いんだよね・・・.

Amebaおすすめキーワード

    1 | 2 | 3 | 4 | 5 |最初 次ページ >>
    アメーバに会員登録して、ブログをつくろう! powered by Ameba (アメーバ)|ブログを中心とした登録無料サイト