感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaScriptのオブジェクトの使用方法について復習した。

リテラルシンタックスとは

var n = 2;
var lang = 'hoge';

みたいなもの。

オブジェクトシンタックスとは

vr myVar = new Array();

のようにnewを使った方法。

・配列のエレメントへのアクセスは

var people = ['Fred', 'Daphne', 'Velma'];
alert(people[0]);

のように角カッコ([])の中にアクセスしたいアイテムのインデックスを指定する。


配列のエレメントの削除は

delete people[0];

のようにdelete演算子で削除する。

配列にエレメントを追加するのは

var peoples = [];
peoples.push('mizky');
peoples.push('takaky');

のようにpush()メソッドを使う。

JavaScriptではクラスからオブジェクトを作成するのではなく、プロトタイプ(ひながた、モデルになるオブジェクト)を元に取得する。

オブジェクトはプロパティとメソッドから構成される。

JavaScriptのオブジェクトの作成方法もnew演算子リテラルシンタックスを使用する2通りの方法がある。
JavaScriptでは一般的にリテラルシンタックスが好んで使用される。

リテラルシンタックスでオブジェクトを作成する構文はこんな感じ。

var book = {title:'hoge', author:'fuga'};

オブジェクトは複数行に分けるとわかりやすい。

var myComputer = {
	name: 'VAIO',
	age: 1,
	spec: {
		memory : 8,
		model : 'hoge',
		harddisk : 254
	},
}

プロパティへのアクセスは以下のようにやる。

myComputer.name; //VAIO

オブジェクトにプロパティが備わっているかどうかを確認する3つの方法
1.オブジェクト名.プロパティのシンタックスを使う

if (myComputer.name) {

2.in演算子を使う

if ('age' in myComputer) {

3.typeof演算子を使う
※プロパティの型があらかじめわかっていることが前提となる

if (typeof myComputer.age == 'number') {

<参考>

入門 モダンJavaScript

入門 モダンJavaScript

                                                          • -

今回で感謝のプログラミングは【209時間目】
10000時間まで、あと【9791時間】

JavaScriptでフォームに入力された値をオブジェクトに格納し、表示する。

まずはHTMLから。

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>人のデータを配列に追加する</title>
	<link rel="stylesheet" href="css/form.css">
</head>
<body>
	<form action="#" method="post" id="theForm">
		<fieldset><legend>人を追加してください</legend>
	        <div><label for="firstName">名前</label><input type="text" name="firstName" id="firstName" required></div>
	        <div><label for="lastName"></label><input type="text" name="lastName" id="lastName" required></div>
	        <div><label for="program">好きな言語</label><select name="program" id="program">
	            <option value="Java">Java</option>
	            <option value="JavaScript">JavaScript</option>
	            <option value="Ruby">Ruby</option>
	            <option value="PHP">PHP</option>
	        </select></div>
	        <input type="submit" value="送信" id="submit">
	    </fieldset>
		<div id="output"></div>
	</form>
	<script src="js/person.js"></script>
</body>
</html>

ここで名前や好きなプログラミング言語を登録。
送信ボタンが押されたことをきっかけにJavaScriptが動く。
JavaScriptはこんな感じ。

function process() {
	'use strict';

	var firstName = document.getElementById('firstName').value;
	var lastName = document.getElementById('lastName').value;
	var program = document.getElementById('program').value;

	var output = document.getElementById('output');

	//personオブジェクトを作る
	var person = {
		firstName : firstName,
		lastName : lastName,
		program : program,
		addedDate : new Date()
	};

	console.log(person);

	var message = '<h2> 人の情報が追加されました' + person.lastName + ', ' + person.firstName + '</br>';
	message += '好きなプログラミング言語:' + person.program + '<br>';
	message += '追加された日:' + person.addedDate.toDateString(); 

	output.innerHTML = message;

	return false;
}

function init() {
	'use strict';
	document.getElementById('theForm').onsubmit = process;
}

window.onload = init;

Windowの読み込みが完了した時点でinit関数を呼ぶ。
init関数は、submitが呼び出されたことをきっかけにprocess関数を実行する。

process関数の中ではpersonオブジェクトを持っていて、この中に入力された値を突っ込む。
で、innerHTMLを使って詰め込んだメッセージを書き込むという処理を行なっている。

やっと少しJavaScriptの理解が進んだ感じ。やっぱり復習するといいね。
<参考>

入門 モダンJavaScript

入門 モダンJavaScript

                                                          • -

今回で感謝のプログラミングは【210時間目】
10000時間まで、あと【9790時間】

液晶テレビが供給過剰になったのはなぜか。

今日も英語の勉強がてら会計の勉強。
テキストは以下。


■液晶テレビが供給過剰になったのはなぜか。
①1個あたりの設備投資の額を下げるため
テレビを作るには工場が必要となる。その工場を建設する費用は「設備投資」として扱われる。
製品1個当たりの設備投資コストを抑えるために、大量に生産することになる。
大量生産して供給が増加すれば、それに応じて価格が低下する。

②競争が激しいため

③減価償却を終了させるため

液晶テレビ1台当たり1万円の償却負担がかかっているとする。
液晶テレビ1台あたりにかかる設備投資が1000億円だとすると、1000万台生産すれば減価償却は終了ということになる。
1000万台生産したあとも設備がまだ使用可能だったら、それ以降に生産するテレビは、償却負担がゼロなので、利益率がアップする。

→この辺の説明に納得いかず。
減価償却って期間で考えるんでないの?定率法だと作った数で割るの?説明を簡略化しすぎているように感じる。

減価償却:使用することによって年々消耗する固定資産の「価値の減る分」を企業が経費として計上すること。

                                          • -

英語の勉強は【35時間目】
10000時間まであと9965時間。

PHPでDBに接続する準備。

よくわかるPHPの教科書を復習した。
この本は本当に初心者に優しい構成で、環境の作り方とか文法とかを記述を省略すること無く教えてくれる。
ただ、僕も200時間勉強して、少しはプログラムがわかってきた気がするので、もうちょっと発展版の勉強をしたいとも思った。
この丁寧さで「よくわかるPHPの教科書 [発展編]」とか作ってくれたら絶対買うのに。

よくわかるPHPの教科書

よくわかるPHPの教科書

MySQLで使うデータベースを選択する

use db1;

MySQLのテーブル一覧を表示する

show tables;

MySQLでテーブルを作成する

CREATE TABLE items(id INT(11),name TEXT);

MySQLでテーブルの構造を表示する

mysql> DESC items;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| name  | text    | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.03 sec)


MySQLテーブルにデータを挿入する

INSERT INTO items (id,name) VALUES (1,'商品1');
INSERT INTO items (id,name) VALUES (2,'商品2');
INSERT INTO items (id,name) VALUES (3,'商品3');

MySQLテーブルにプライマリーキーを設定する

ALTER TABLE items ADD PRIMARY KEY (id);

PHPMySQLに接続する準備の構文

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title> DB TEST </title>
	<script src="js/ajaxTest.js"></script>
</head>
<body>
<?php
mysql_connect('localhost', 'root', '1234') or die(mysql_error());
echo 'データベースに接続しました';
mysql_select_db('my_db') or die(mysql_error());
echo '<br/>データベーススペース[my_db]を選択肢ました';
mysql_query('SET NAMES UTF8');
?>
</body>
</html>

ブラウザに表示される文字列

データベースに接続しました
データベーススペース[my_db]を選択しました
                                                          • -

今回で感謝のプログラミングは【204時間目】
10000時間まで、あと【9796時間】

技術を学ぶことに対する意識の違い。

自分の時間(余暇)の中での勉強の優先順位とも言う。

学ぶことをどれくらい優先するのかということについて考えていたら、どうでもいいことを思い出したので、ちょっとメモ。

今の会社(某SIer)に新人として入った頃、部署に配属されたときのどっかの偉い人の話で、

「○○さん(名前忘れた)だって本は自分で買って勉強してるって言うし、〜だから、こういう人を見習いなさい」

なんて話をしていたのをうっすらと思い出した。
要は、本を買って勉強してる○○さんは偉い、みたいな話だったと思う。

そのときは素直で真っ直ぐな疑問を持たない汚れなき新人だったので、

「ほうほう、そんな偉い人がいるのか」

と感心したものだった。

会社に入って3年経ったいま改めて思うのは、特にお年をめした方に言えることなんだけど、技術に対して関心が薄すぎるんじゃなかろうか。
80年代〜90年代の技術知識で止まっているように思う。

要はみんながあんまし勉強しないから、本を買って勉強するという"当たり前のことをしている人"が褒められるようなことになるのだ。

「現場で覚えればいい」
「現場から学ぶものがすべて」

みたいな論調が聞こえるけど、現場の技術って全然体系立っていないんだよ。
現場の知識だけじゃ、その使っている技術の全体像は見えないものだと思う。

それを補完するために書籍などで自分で学ぶ必要があると思うんだけど、その「技術を体系的に学ぶ」という点について軽んじられているようにしか思えない。
そもそも現場にいて、現場の仕事をしていた結果、技術無知なおっちゃんエンジニアになっちゃったんじゃないか。

現場で何か新しい技術に触れたら、その技術をちゃんと理解するために本を買って勉強する。
それをまた現場にフィードバックする。
その繰り返しだと思うんだけど。。何かおかしいのかなぁ。。
自分は間違ったことはしてないと思うんだけど、どうも技術への関心の低さに辟易する場面が増えてきてしまった。

新人の頃は何も知らなかったから、先輩って本当にすごいなぁ、みんな何でも知ってるんだなぁ、と無垢に尊敬してたのに。
最近は先輩たちが意外と勉強不足なことが目に付くようになってしまった。
報告だけ見てるとなんでもやってるように見えたけど、実は先輩じゃなくて協力会社さんがやっていたりすることがたくさんあった。

なんかちょっと寂しい気持ちになる。

そういえばこないだは、JBossのインストールとか、JDKのインストールの仕方を手順書にしてほしいと頼まれたことがあったけど、これはさすがにググればすぐにわかると思うんだが・・・。
JBossなんて解凍するだけじゃないか。。

何か自分が役に立てるのはすごく嬉しいことだけど、触れたことのない技術に対しての拒絶反応が大きすぎると思うんだよね。
ググレよ!と突き放すのは嫌だし、そういうのは丸投げしてしまわずに自分で調べたりしてさ、
もうちょっと勉強する気持ちを皆で共有出来れば、すごくいい会社になると思うんだけど。
仕事に対してはみんなすごく真面目な人達だから。それが丸投げという形になりがちなだけで。。

でも、業務外の時間の勉強を僕が強制するわけにはいかないし、みんな予定とか家族もいるだろうし。
業務時間は会議やら資料作りやらで忙しいんだろうし。
かといって、丸投げばっかりしてるといつまでも中のことはわからないだろうし。
業務では技術を身に付けられないだろうし。

うーん。

というわけで、人に勉強は強制できないので、自分が勉強してチームを助けられるようにもっと頑張るのが1番いいという結論に落ち着いた。
よし、がんばろう。

tmhOAuthを使ってPHPでツイートする。

PHPtwitterを扱う(ツイートする)

サンプルは以下の通り。

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="tweet.php" method="POST">
	ツイートを入力→<input type="text" name="tweet" size="50"/></br>
	<input type="submit" value="ツイート"/>
</form>
<?php

if (isset($_POST["tweet"])) {
	require "../lib/tmhOAuth.php";
	$twitter = new tmhOAuth(
			array("consumer_key" => "XXXX",
				"consumer_secret" => "YYYY",
				"user_token" => "WWWW",
				"user_secret" => "ZZZZ"
				));
	$twitter->request("POST", $twitter->url("1/status/update") , array("status" => $_POST["tweet"]));
	print "ツイート完了:" .htmlspecialchars($_POST["tweet"]);
}

以下のようなエラーが出たのだが、

Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\php\lib\tmhOAuth.php on line 635

解決にあたって、下記サイトを参考にさせていただきました。ありがとうございました。
http://www.limemo.net/blog/2012/05/xampp-thmoauth-curl.html

                                                          • -

今回で感謝のプログラミングは【205時間目】
10000時間まで、あと【9795時間】

PHPの歴史と規約

さっきツイッターのアプリらしきものを書いた時に、配列やらクラスの書き方やらがちゃんと理解できていないのが悔しかったから、基礎からやり直すことにした。
本棚から引っ張り出してきたのは「パーフェクトPHP
入門書に書いてあることはだいたいわかったので、もっと"ちゃんと"PHPを理解したくなった。

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)


このパーフェクトPHPは、入門書の次に読む本として適切な難易度であると思う。これがちゃんと身につけばきっと、PHPオブジェクト指向でプログラムが書けるようになると信じて読み進めてみる。
まずは最初の方から。

PHPって何の略?〜PHPの歴史〜
PHPはHypertext Preprocessorの略である。
1995年6月にRasmus Lerdrfによって作成された。

当初のPHOはHypertext Preprocessorの略ではなく、Personal Home Page Toolsといった。
1995年。インターネットが普及していない時代の、文字通り個人のホームページをアレンジするためのツールだったのだろう。

1998年にPHP3.0が公開されるにあたってHypertext Preprocessorに改名された。
1998年は、ドラゴンボールが終わったくらいの年だったろうか。

ちなみにPHPの内部はC言語で書かれている。

Zend Framework標準コーディング規約をまとめてみる
http://framework.zend.com/manual/1.12/ja/coding-standard.html

■クラスについて
・アンダースコアはパス区切り文字としてのみ使用可能。
・クラス名が複数の単語から成り立つ場合は、 それぞれの単語の最初の文字を大文字にする。ただし、大文字を連続して使用してはいけない。

■インターフェースについて
・インターフェイスの名前の最後は "Interface" にする。 そして、その前にはアンダースコアはつけない。


■関数名
・関数名に含めることができるのは英数字のみ。 アンダースコアを使用してはいけない。
・関数名は小文字で始める。

■変数名
・変数名に含めることができるのは英数字のみ。アンダースコアは使ってはいけない。
基本的にキャメルケースで変数名を書く。 "camelCaps" 方式。

ちなみに、いま読んでいる「パーフェクトPHP」では関数名のところにアンダースコアで区切ったスタイルを推奨しているが、これはたぶん本が古くなっているためだろう。
パーフェクトPHPZend Frameworkのコーディング規約を参考にしているはずだからだ。

PHPブロックって何?
以下のように、開始タグと終了タグで囲まれた部分のこと。
ただし、PHPの終了タグは省略可能で、ライブだりやHTMLを含まないファイルなどでは、多くの場合終了タグを記述しないことが推奨されている。

<?php
 〜
?>

・var_dump()関数
→その変数の型や、値、オブジェクトの場合は保持しているプロパティなども出力してくれる。

$b = "hoge";
var_dump($b);
                                                          • -

今回で感謝のプログラミングは【206時間目】
10000時間まで、あと【9794時間】

Java EEの勉強(1)〜フレームワークを使う側から作る側になるために〜

会社で使ってるフレームワークの中をちゃんと理解したいから、イチからJava EEを勉強する。
読んでる本はコレ。

実践J2EEテクノロジ―Java2 Platform,Enterprise Editionによるビジネスアプリケーション構築 (The Java series)

実践J2EEテクノロジ―Java2 Platform,Enterprise Editionによるビジネスアプリケーション構築 (The Java series)

  • 作者: リックカトル,ジムインスコア,エンタープライズパートナー,Rick Cattell,Jim Inscore,ドキュメントシステム
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/02
  • メディア: 単行本
  • この商品を含むブログを見る

Java EEとは(本書かれたときはJ2EE)
可用性と拡張性にすぐれた、セキュアなエンタープライズアプリケーションを作成するための標準、と。
これだけじゃわかりづらい。というか、このJ2EEは便利そうだけどわかりづらくて難しいから、そこに需要ができた。
その難しさを埋めてくれたのがJBossであり、WebLogicとかGlassFishだったのだ。たぶん。


・3層モデル

3層モデルはWebベースビジネスシステムの業界標準アーキテクチャになっている。
なぜかというと、複数のレイヤに分離することで、各部分を独立に変更でき、システムの柔軟性が向上するからだ。
プレゼンテーション層の開発者は、システムのビジネスルールを知る必要がない。どのレイヤを変更しても、その他のどのレイヤの有効性にも変更を与えない。

3層に分かれていることで、極端に言うと突然DBをOracleからMySQLに変更しても他の層には影響ないし、プレゼンテーション層をC#からHTML5に変えても他の層には影響はないということ。

・依存関係を減らすことで、何が嬉しいのか
依存関係を減らすことは、オブジェクトを疎結合の状態にすることになる。
システムを疎結合の状態にすれば、保守や展開が容易になる。

コンポーネントって何?
EJBの勉強で最初につまづくのは、「コンポーネント」の概念だと思う。
コンポーネントとは、特定のフレームワーク内で使用できる機能単位のこと。
これだけじゃよくわからない?機能単位ってなんだ?

わからないけれど、先に進んでみよう。
コンポーネントに対して通信や永続化などの一定の標準サービスを提供するのが、「コンテナ」である。
つまり、コンテナとコンポーネントは不可分な存在であり、コンテナなくしてコンポーネント無し、コンポーネント無きコンテナはゴミである。
ということか。

コンポーネントってなんだ?要はただの「ある特定の役割を果たす機能」ということか。
で、J2EE(Java EE)コンポーネントに対して使用できるコンテナとして、
アプレットコンテナ
・アプリケーションクライアントコンテナ
・Webコンテナ
EJBコンテナ
などがある。

で、これを読んでるときに新しくすごく良さそうな本を見つけたので、早速本屋に買いに行ってみる。Amazonで頼んでも明日まで待てない。
マスタリングJavaEE5 第2版

マスタリングJavaEE5 第2版 (DVD付) (Programmer’s SELECTION)

マスタリングJavaEE5 第2版 (DVD付) (Programmer’s SELECTION)


今からJava EE勉強するならこれじゃないか?と思った。
いってきます。

                                                          • -

今回で感謝のプログラミングは【207時間目】
10000時間まで、あと【9793時間】

マスタリング JavaEE5を買った。

1つ前の記事を書いているときにたまたま見つけた「マスタリングJavaEE5」。
市販されているJava EE関連の本はひと通り見て、良さそうな本はとりあえず全部購入したはずだが、なんでこの本を持っていないんだろうと不思議に思っていた。
で、さっき本屋に行って値段を見て納得。

5400円。

けっこうな値段だ。たぶん、この本を最初に見た時は値段にビビってスルーしたんだろう。なんたる機会ロスか。

今はもう、前よりもずっと覚悟は強くなった。
孫正義風に言うと、プログラマとしての山を登っていこうという覚悟が決まったと言ってもいい。

で、何かの知識を得たいときは、やっぱりネットで調べて断片的な知識を集めるよりも、誰かが苦労して編集した書籍を読んで知識を習得した方が絶対に早い。
なので、迷わず購入した。

5400円。

で、帰ってきて読んでみたんだけど、1章を読んだだけでもこれは素晴らしい本であると確信が持てた。

1ページ1ページから得られる有用な情報がとても多い。

値段が高いから良く見える、とかいう理由ではない。値段がいくらだろうと、かけた時間に対して得るものがなければ読み進めはしない。

1ページ1ページが、著者の斉藤賢哉さんの努力の結晶のように感じた。
クラスローダの仕組みまで説明してくれる本なんて今まで見たことがない。
ここまでJavaに精通するまで、どれくらい時間をかけたのだろうか。

単語1つも漏らさず、前書きにあるように「Javaにおけるエンタープライズシステム開発のバイブル」としてこの本を作ろうという意気込みを感じた。

その意気込みに応えるように、僕もこの本を20回くらい繰り返して読もうと思う。

読んで得られた知識はできるだけアウトプットして自分のモノにしていきたい。

マスタリングJavaEE5 第2版 (DVD付) (Programmer’s SELECTION)

マスタリングJavaEE5 第2版 (DVD付) (Programmer’s SELECTION)

                                                          • -

今回で感謝のプログラミングは【208時間目】
10000時間まで、あと【9792時間】