英語の勉強をはじめて4ヶ月の記録

英語の勉強時間をStudyPlusに記録しはじめて4ヶ月がたった。
StudePlusに関しては以下の記事を参照してほしい。
勉強が楽しく続くようになるStudyplus

勉強時間は合計91時間。
最近は英語の勉強のルーティンが生活の中に確立して自然にできるようになった。
いまやっていることは以下のような感じ。

家から駅まで

NHKのラジオ英会話(アプリ版)を聞きながら15分歩く。
アプリ版は好きな時間に聞けるので重宝している。

会社

休み時間にマジタンという英単語アプリで英単語を覚える。

駅から家まで

超右脳つぶやき英語トレーニングを聞きながら15分歩く。
(現在は廃盤になっており、現行は超速つぶやき英語トレーニングという名前で出版されている)

寝る前

データベース3000基本英単語・熟語を30分。
発音とリスニングをする。

以上でだいたい1時間くらいだ。

語彙数を増やすこととリスニング力の向上を目指している。
理由は以下の通り。

  • 英語の勉強に関する著書を読むと語彙数が必要と書いてあることが多い
  • 英会話をやってみて、そもそもリスニングができないと会話が成り立たないことを痛感した

英単語学習についての考え方は以下の記事が大変参考になった。

4ヶ月前と比べて

4ヶ月前と比べ、以下のような変化があった。

覚えた英単語は3500。
4ヶ月前はネイティブが話す速度の英語はほとんど聞き取れなかったが、いまは単語として聞き取れる割合が増えた。
超右脳つぶやき英語トレーニングに付属しているCDはネイティブが普通に話すスピードなのでさっぱり聞き取れなくて愕然としたが、いまは6割くらい聞き取れてていると思う。何度も聞いて内容を覚えてしまっているからでもある。
しかし、聞き取れる単語は増えてきたが、意味がわからないことが多い。

リーディング、ライティングはほとんどやっていないが、語彙数が向上したことでリーディングもあがっていると思う。
しかし、語彙数3500程度だとわからない単語が多く理解できない部分が多い。
当然、日本語のように英語を読むことは不可能である。
ライティングはほとんど向上していない。

今後は語彙数をもっと増やして10000語を目指すつもりだ。

php-idnkitをインストールする

php-idnkitをインストールしたのでメモ。
OSはubuntu、PHPのバージョンは5.6.24で行った。

php-idnkitはidnkitをPHPから使えるようにするPHPの拡張モジュール。
拡張モジュールなのでPHPをコンパイルし直す必要はない。モジュールをコンパイルして、php.iniのextensionに指定すれば使えるようになる。

idnkitのインストール

php-idnkitはあくまでidnkitをPHPから使えるようにする拡張モジュールなのでidnkitがないと動作しない。
まずはidnkitをインストールする。

idnkitはJPNICが提供しており、以下からソースコードをダウンロードすることができる。

1
2
3
4
5
6
$ wget https://www.nic.ad.jp/ja/idn/idnkit/download/sources/idnkit-1.0-src.tar.gz
$ tar -zxf idnkit-1.0-src.tar.gz
$ cd idnkit-1.0-src && \
./configure && \
make && \
make install

php-idnkitをインストール

続いてphp-idnkitをインストールする。
そのままではエラーとなったので以下のパッチをあてた。

php-idnkit.patch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--- xxx/idnkit.c
+++ yyy/idnkit.c
@@ -36,7 +36,11 @@ static int le_idnkit;
*
* Every user visible function must have an entry in idnkit_functions[].
*/
+#if ZEND_MODULE_API_NO >= 20100525
+zend_function_entry idnkit_functions[] = {
+#else
function_entry idnkit_functions[] = {
+#endif
PHP_FE(idnkit_decodename, NULL)
PHP_FE(idnkit_encodename, NULL)
PHP_FE(idnkit_errno, NULL)
@@ -104,7 +108,7 @@ PHP_MINIT_FUNCTION(idnkit)
idn_nameinit(1);

/* get idnkit version */
- REGISTER_STRING_CONSTANT("IDNKIT_VERSION", (char*)idn_version_getstring(), CONST_CS | CONST_PERSISTENT);
+ REGISTER_STRING_CONSTANT("IDNKIT_VERSION", "1.0", CONST_CS | CONST_PERSISTENT);

/* idnkit actions */
REGISTER_LONG_CONSTANT("IDNKIT_DELIMMAP", IDN_DELIMMAP, CONST_CS | CONST_PERSISTENT);
1
2
3
4
5
6
7
8
$ wget http://www.sera.desuyo.net/idnkit/php-idnkit-20031204.tar.gz
$ tar -zxf php-idnkit-20031204.tar.gz
$ cd idnkit && \
patch -lsp1 < /tmp/php-idnkit.patch && \
phpize && \
./configure && \
make && \
make install

php.iniにextensionを指定

最後にphp.iniにextensionを指定を指定する。
以下は、/usr/local/lib/php.ini にphp.iniがある場合の設定例。

1
$ echo "extension=idnkit.so" >> /usr/local/lib/php.ini

以下のコマンドが動作すればOK。

1
2
$ php -a
> echo idnkit_encodename(mb_convert_encoding("日本語JPドメイン名.jp", "UTF-8", "auto"));

高任和夫の「起業前夜」を読了した

私は本が好きで常に何かしらの本を読んでいる。

最近、高任和夫の「起業前夜」を読了した。
商社のサラリーマンが会社の闇に気づいて、それをなんとかしようとする話しだ。
その過程で様々な人と出会い、主人公は自分の人生や幸福について考えることになる。

社会人になってから小説は読むのに時間がかかるのでそれとなく敬遠していたのだが、小説を読む必要性があるのではないかと考えを改めた。
最近、視野が狭くなっていると感じている。
同じオフィスで働く毎日を繰り返すと、どうしてもその日常での視点で物事を見てしまう。
その組織の常識が自分の常識となり、それはどうもおもしろくない。
そんなことを考えず、ただ目の前の仕事をこなしそれでうまくいけばいいのだが私はそうではないので、視野を広げてみようと思ったのが小説を読むきっかけである。

そういう理由なので、サラリーマンが題材の小説を中心に読むつもりだ。
職種は違えど、会社に勤めるサラリーマンであれば皆似たような悩みや問題を持っていると思う。
それをどのように解決し成長していくのかを学び、あわよくば取り込んでしまおうと思っている。

「起業前夜」の次は何を読むのかというと、楡周平の「プラチナタウン」だ。
寂れた地方を元気にしていく内容の小説。
色々と学べることがありそうで楽しみだ。

mysql_real_escape_string()のみで防げないSQLインジェクション

PHPアプリのSQLインジェクション対策として、mysql_real_escape_string() 等があるがこれだけでは万全ではないことがあるのでメモ。

例えば以下のSQLではmysql_real_escape_string()を使っているが、脆弱性が存在する。

1
2
$id = mysql_real_escape_string("1 OR 1=1");
$sql = "SELECT * FROM table_name WHERE id = $id";

mysql_real_escape_string() では上記を防ぐことができない。
クエリ内の変数をシングルクォート(')で囲むことで上記を防ぐことができる。

1
2
$id = mysql_real_escape_string("1 OR 1=1");
$sql = "SELECT * FROM table_name WHERE id = '$id'";

社内ISUCONに参加して優勝した

社内ISUCONが開催されたので参加してみた。
参加チームは全10チーム。
ISUCONは今回初めての参加だったが、思っていた以上に楽しかった。
参加するまではそんなに楽しいものなのかと懐疑的だったのだが、ほかのチームとスコアを競い一喜一憂するのは楽しいものだった。

社内のプライベートクラウド上で行い、PHPとRubyのアプリケーションを選択することができた。
最初はRubyでやったが、スコアがあがらなかったのでPHPのアプリケーションに変更した。

効果があったのが、クエリのチューニング。
select句でアプリケーションに使うカラムに絞ることでIOを減らしたり、結果をセッションにキャッシュすることでクエリの実行回数を減らした。
また、テーブルのカラムにインデックスを作成してチューニングした。
そのほか、php-fpmの子プロセスの数を増やしたり、mysqlのパラメーターをチューニングするのも効果があった(具体的にはinnodb_buffer_pool_size,read_rnd_buffer_size,sort_buffer_size,query_cache_sizeあたり)。

サーバ側はほかのメンバーに任せきりといった感じだったので、どこがボトルネックになっているかを素早く探すスキルやミドルウェアをパパッと導入できるスキルを身につけたいと思った。
優勝できたのは他のメンバーが頑張ってくれたのと運がよかったのだと思う。
個人的には反省の多いISUCONだった。
課題が見つかったのとISUCONを楽しめたのが収穫だ。