Author Archives: rutoru

ITインフラ関連書籍

勉強し直しのためにITインフラ関連書籍を読み直し。


↑ページ数は少ないものの、教科書としては非常に良いと思います。


↑書名の通り図解がわかりやすい。


↑高度な内容まで含まれていると思います。名著ですな。


↑システム運用の振り返りに。

今年35,36,37,38冊目。

斎藤昌義『システムインテグレーション崩壊 ~これからSIerはどう生き残ればいいか?』

斎藤昌義『システムインテグレーション崩壊 ~これからSIerはどう生き残ればいいか?』を読みました。

タイトル通りの内容なのですが、特にアジャイル開発の説明が参考になりました。

スピードとフレキシビリティ(柔軟さ)、この2つがいま求められていると思うんですよね。
それに答えるひとつの方法がアジャイル開発ではないかと思っており、いろいろと勉強を始めているところでして、非常によい本でした。

今年28冊目。

NTTデータ技術開発本部『グローバル競争を勝ち抜く企業のために 革新を続けるソフトウェア生産技術』

NTTデータ技術開発本部『グローバル競争を勝ち抜く企業のために 革新を続けるソフトウェア生産技術』を読みました

アジャイル開発とか継続的デリバリーとか、最近のソフトウェア生産技術について概説されています。
概要を把握したい向きにオススメします。

今年27冊目。

高橋麻奈『やさしいC 第4版』

高橋麻奈『やさしいC 第4版』を読みました。

プログラミング初心者向け。
基本的なところから丁寧に解説されています。実用的なコードはファイル入出力をのぞけばあまり無いです。

C言語プログラミングはNetBeansを使いました。
ワンクリックでコンパイル・リンクから実行までやってくれるのでらくちんらくちん。
コンパイル時にバグが見つかるのって、いいですねえ。スクリプト言語は実行時に見つかるから手間かかるのよね。

オススメの一冊です。

今年26冊目。

Boot CampによるMacBook Pro (Retina, 13-inch, Late 2013) へのWindows 8.1 64bitインストールと初期設定

Boot CampによるMacBook Pro (Retina, 13-inch, Late 2013) へのWindows 8.1 64bitインストールを行いました。

Windows 8.1 64bitのDSP版を購入しました。サポートは要らないし、64bit版があればいいし、まあDSP版で十分でしょう。

なんと、マイクロソフトによる解説ページがあります。しかし、いきなり間違っています。[Boot Camp Assistant]があるのは[Application]の[Utilities]内です。MSのページに書いてるように[アプリケーション]内を探しても見つかりません・・・。

インストールにはUSBメモリが必要です。Windows Support Softwareをダウンロードして、USBメモリにインストールするからです。USBメモリが手元に無かったので焦りましたが、16GBのSDカードを、USBのSDカードリーダーに差し込んで代用しました。FATフォーマットする必要があります。[Application]の[Utilities]内にある[Disk Utility]を使ってFATフォーマットします。SDカードリーダーを選んで、Eraseタブをクリックし、Eraseボタンを押してフォーマットすればOKです。

改めてBoot Camp Assistantを起動。起動可能なUSBメモリを作成する必要性を感じなかったので、一番上のチェックボックスを外して、セットアップスタート。まずはWindows Support Softwareのダウンロードからです。結構な時間がかかります。

続いてパーティション分割。OfficeやVisual Studioを入れることを考えて、60GBにしました。

後はクリッククリックで終了~。
と思いきや、いくつかポイントがありまして。
まず、途中でHDDのフォーマットが必要です。パーティション切ったところをしっかりと選択して、フォーマットしましょう。あとはほっとけばいいのですが、私は間違えてUSB-DVDドライブを抜いてしまい、やり直しになってしまいました。気を付けましょう。SDカードリーダー経由で入れておいたBootcampのドライバは勝手にインストールされます。

インストールが進んで、ユーザを作って、再起動後にWindows 8.1が起動しました。
さっそく無線LANに接続しようとしたのですが、つながらず。エクスプローラなども立ち上がりませんでした。再起動もできない状態でしたので、Bootcampメニューから再起動を選択。再起動後には安定し、無線LANにも接続できました。何だったんだろうか・・・。

ウィルス対策ソフトは前に買っておいたESET ファミリー セキュリティ 2014を使用。

Windows Updateを行いました。

Macのトラックパッドでタップでクリックができず、悩みましたが、Bootcampコントロールパネルから設定可能です。Windowsのコントロールパネルでは設定できません。ややこしい。Bootcampの機能で実現していると思われます。起動直後はトラックパッドでのタップは効きません。Bootcampが立ち上がるまで(タスクトレイに出てくるまで)待ちましょう。

あと、スクロールの方向をMacと同じにするのはこちらに解説がありました。FlipFlopWheelを1にして、再起動してあげればOKです。

また、IMEのオンオフですが、こちらに解説があります。Windows 8.1は若干画面が地学て、IMEの[プロパティ]-[詳細設定]より、[全般]タブの[編集操作]-[キー設定]で[変更]を押すと、設定画面に行けます。[変換]キーを[IME-オン]、[無変換]キーを[IME-オフ]にすればMacと同じです。

これで一通りのインストールと設定は完了。
Windows 8.1は前評判通り?使いにくいことこの上なしですが、Mac風に設定することでだいぶ使いやすくなりました。
OfficeとVisual Studioを入れて遊んでみよう。

PHP技術者認定上級試験に合格しました

PHP技術者認定試験上級試験に合格しましたー。

趣味でPHPを使っております。仕事では直接的には使ってはいないのですが、色々なシステムでPHPが使用されています(Zabbixとか)。仕事でも知っておくに越したことはありません。そこで、趣味と実益を兼ねて、資格を取ろうと考えました。




まずは初級から受けようかと思っていたのですが、えーい、一気に上級をとっちゃえーと思い立ち、勉強を始めました。なんだかんだで1ヶ月くらいはかかりましたかね。まずは初級のテキストと問題集で勉強しました。使ったのは以下のものです。PHP技術者試験はテキストに恵まれている試験だと思います。両方とも入門用としては非常に良い本だと思います。

一通りやってみてから、上級試験のテキストを読みました。
基本となるのはこちらの『プログラミングPHP』です。

英語の勉強を兼ねて原著にしようかと思ったのですが、試験には日本語の処理なども登場しますので、日本語版の方が良いです。

試験には『プログラミングPHP』にあるソースコードが登場しますので、細かいところまで読み込んでおく必要があります。出来れば実際にソースを書いたりしてみるのが良いでしょう。私は本を読みながら、今までに自分が書いたソースを確認したりしました。一回読んだら問題集に行って、問題集が終わったらまたこの本に立ち戻る、という方法が記憶に残ると思います。

問題集はこちらです。

この問題集、問題量も豊富ながら、何よりも解説が充実していて素晴らしいです。試験終わってからもずっと使えるレベルだと思います。その分、読んで理解するのに時間がかかります。何よりもボリューミーです。

私はKindle版を使いました。Kindle版は第一版なので、誤字脱字があります。出版社のサイトに行って、正誤表を必ずチェックしましょう。Kindleは電子書籍なんだから、最新版へのアップデートをしてくれてもいいのになあ。ぶつぶつ。

問題集を二周し、『プログラミングPHP』を読み直してから、試験会場に向かいました。PHP技術者試験はプロメトリックです。前に試験トラブルがあって以来、久しぶりになりました。

試験スタート。二時間で60問です。
試験については守秘義務の関係で公開できませんが、兎にも角にも難しかった。判断に迷う問題が出てくる出てくる。二時間すべて使い切りました。最後に結果を見ると・・・。

70点で合格でした!
ボーダーが70点です。どんだけギリギリなんだー!

いやはや、難しい試験でした。
受ける方は、勉強時間をしっかりとって取り組んだ方がいいです。

スコアが示す通り、PHPをまだまだ知らないので、今後もバリバリとソースコードを書いていこう。

・・・しかしながら、試験勉強をしてみて、改めて思ったのはPHPの言語仕様はイマイチだなあ、という点です。オブジェクトのメソッドであるべきだろうというようなところが関数だったりとか。破壊的な関数(引数の値を変えてしまう)とそうでない関数との違いがわからないとか。もう少し整理されていると分かりやすいかなあ。嫌いになるレベルではないですけど、気になりました。




belkinのiPad mini用キーボード購入

belkinのiPad mini用キーボードを購入しました。

キータッチはなかなか良いですね。スピーディにタイピングできます。エンターキーが小さく、右シフトキーと押し間違えてしまいますが、まあそのうちに慣れるでしょう。
この投稿もbelkinキーボードを使って書いています。
少々かさばるし重くなるのが難ですが。

ちなみに日本語入力はCommand + Spaceです。

Twilioコールセンターアプリ「Runa-CCA」バージョン2.0リリース(簡易CRMとポップアップ機能追加)

Twilioコールセンターアプリ「Runa-CCA」バージョン2.0をリリースしました!
簡易CRMとお客様情報ポップアップ機能追加という、大きな変更だったので、メジャーバージョンを上げました。

簡易CRMはその名の通り簡易な顧客情報管理機能です。
応対履歴も登録可能です。
顧客情報・応対履歴のカラムは今後増やしていきたいと思います。
ソフトフォンからも顧客情報・応対履歴の閲覧・編集を可能にしました。JQueryでAjaxを使って、画面を更新させています。ソースコードに無駄があるような気がするので、これもブラッシュアップしたいところです。

お客様情報のポップアップ画面です。

Runa-CCA_PopUp

残念ながらTwilioは、お客様がQueueから出たとき(オペレータがお客様をQueueから出したとき)にイベントを送りません。以下のような作りにして無理くりポップアップさせています。

・オペレータのCallSidを取得。オペレータはQueueに発信します。発信するとその発信呼のCallSidを取得できます。TwilioのConnectionのオブジェクトのプロパティ(connection.parameters.CallSid)として取得可能です。
・Twilioでは、お客様とオペレータがそれぞれ別のTwiML動詞を使って同じQueueに入ります。そうすることで、オペレータはお客様をQueueから出すことができます。オペレータがQueue動詞を使ってQueueに入るとき、urlを指定します。urlには、お客様がQueueから出るときに実行させるTwiML文書のURLを指定します。このURLで指定されるPHPプログラムで、コールの情報を取得し、DBに格納します。ここで、お客様の電話番号である「From」と、「DequeingCallSid」という値がDBに格納されることになります。「DequeingCallSid」というのは、発信者をキューから外した通話のCallSid、すなわち、オペレータのCallSidになります。
・オペレータとお客様との通話が確立した後に、オペレータが「お客様情報ポップアップ」ボタンを押すと、オペレータのCallSid(DequeingCallSid)を検索キーにして、お客様の電話番号(From)を見つけて、それをもとにお客様の情報を表示します。関連して、お客様が入っていたキューの情報と、お客様が電話した電話番号(To)も取得して表示させます。これにより、
 ・お客様はどなたなのか?
 ・お客様はどの電話番号とどのキューに電話をかけてきたのか?
 をオペレータがすぐわかるようにしています。
・お客様の電話番号は一意ではありません。例えば、お父さんとお母さんが居て、家の電話からコールセンタに電話してきたとすると、1つの電話番号で2人が検索されます。そのため、ポップアップ表示ではお客様のリストを表示する仕様となっています。
・お客様が電話番号を通知してくるとは限りません。その場合は、お客様のお名前や電話番号、お客様IDをお伺いし、検索します。登録されていないお客様の場合は新規に登録を行います。

うーん、無理くりだな。
手動なのをポップアップとは言わない気もしますが、まあ許してくださいませ。

追加した機能の一覧は以下の通りです。

  • 簡易CRMとお客様情報ポップアップ
    • お客様情報の検索・追加・変更・削除機能を追加。
    • 応対履歴登録機能を追加。
    • お客様情報ポップアップ機能を追加。Twilioはキューから出るときにイベントを送らないので、手動でボタンを押して情報を取得する必要があります。
  • その他
    • twilio.jsを1.2に変更。
    • デザイン統一(シンプル化)。

ソースコードは以下から。

PHPでRespect/Validationを使って値の検証をするときの例外文字複数指定

PHPのRespect/Validationは、入力値の検証に使えるライブラリです。GitHubのREADME.mdを読めば、だいたいの使い方がわかります。

class Validator extends \Respect\Validation\Validator {

    static function validate($param){

        if(!static::notEmpty()->alnum()->validate($param)){
            echo "Error!!";
        }
}

みたいにして使います。

alnum()は「alphanumeric characters from a-Z and 0-9」を検証してくれます。空白も許容。noWhitespace()と組み合わせると空白は非許容となります。例外文字の設定が出来るのですが、README.mdだと例外1文字の例しかなくて、複数の例外文字指定方法がわかりませんが、GitHubのWikiに整理されています。

class Validator extends \Respect\Validation\Validator {

    static function validate($param){

        $additionalChars = "#_-";

        if(!static::notEmpty()->alnum($additionalChars)->validate($param)){
            echo "Error!!";
        }
}

これで「#_-」を許容してくれます。

ご参考まで。