読者です 読者をやめる 読者になる 読者になる

恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

PSR-2(Coding Style Guide)を見ていく

要約ですので、所々省いている箇所あります。

オリジナルはこちら

www.php-fig.org

要点

PSR-2はPSR-1を継承/拡張した基本的なコーディング基準

開発者間でのコードリーディング時の認識のズレを減らすためのガイドライン

ルール自体にではなく、ルールを共有することに意味がある

概要

  • “coding style guide” PSR [PSR-1]を守る
  • インデントは4スペース
  • 1行内の文字数は上限はないが、120文字以内、できれば80文字以内に収める
  • namespaceの宣言後には空行を、use宣言ブロックの後にも空行入れる
  • classの開きブレースは次の行に、閉じブレースはボディ最後の次の行に
  • methodの開きブレースは次の行に、閉じブレースはボディ最後の次の行に
  • property と methodには必ずアクセス修飾子を。abstractfinalはアクセス修飾子に前に、staticはアクセス修飾子の後ろに
  • 制御構造の後には1スペース、メソッド呼び出しの場合は除く
  • 制御構造の開きブレースは同じ行で、閉じブレースはボディ最後の次の行で
  • 制御構造の開き丸括弧の後にはスペースを置かない、閉じ丸括弧の前にはスペースを置かない

例としてはこちら

<?php
namespace Vendor\Package;

use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface
{
    public function sampleMethod($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}

全般

ファイル

  • 改行はUnix LF
  • ファイル最後には空行を
  • ?>の閉じタグは不要

phpキーワード、True/False/Null

  • phpキーワード、true, false, nullは小文字で

methodの引数

  • 引数リストはの,の後にはスペースを
  • 引数にデフォルト値があるものは最後に
  • 引数を複数行にする場合は開き丸括弧の後に改行し、各行に1つずつ

PSR-3(Logger Interface)へ続く・・・ ここからが本番・・・

PSR-3: Logger Interface - PHP-FIG

PSR-1(Basic Coding Standard)を見ていく

諸々あってPSRを順番に確認していく・・・!

オリジナルはこちら

www.php-fig.org

概要

  • <?php<?=タグのみ使用。閉じタグはなし
  • UTF-8 BOMなし
  • シンボル(クラス、関数、定数)を宣言するファイルと副作用のあるもの(出力、iniの変更など)は分ける
  • namespace,クラス名は“autoloading” PSR: [PSR-0, PSR-4]に従う
  • クラス名は、StudlyCaps(単語の先頭文字を大文字。UpperCamelCase?)で定義(ex:FooBarHogeClass)
  • クラス定数は大文字で、区切りはアンダースコアで定義
  • メソッド名はcamelCaseで定義

ちょっと気になったもの

  • シンボル(クラス、関数、定数)を宣言するファイルと副作用のあるもの(出力、iniの変更など)は分ける

例としては下記のようなものが上げられていました。

副作用あるもの、設定と実装は分けましょう的な感じかと

<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);

// side effect: loads a file
include "file.php";

// side effect: generates output
echo "<html>\n";

// declaration
function foo()
{
    // function body
}

<?php
// declaration
function foo()
{
    // function body
}

// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}
  • クラス名は、StudlyCaps(単語の先頭文字を大文字。UpperCamelCase?)で定義(ex:FooBarHogeClass)

StudlyCapsは元々?は大文字小文字が入り乱れるようなのですが、ここでは実質UpperCamelCaseと同義だと思われ。

Studly caps - Wikipedia

PSR-2へ続く・・・

PSR-2: Coding Style Guide - PHP-FIG

「英語は1年でマスターできる」を読んだ

最近、英語の勉強を本格的に始めてます。

海外旅行の時にローカルな所行きたい、海外カンファレンス行きたい、英語LTしたい、ワンチャン海外で働きたい、 そもそもgithub,ドキュメントとかさくっと読みたいとかとかが動機です。

まずは英語のpodcast聞いたり、英会話クラス行き始めています。

しかしそれだけだと明確な進捗が測りづらく計測の仕方を考えないといけないなと感じていました。少しずつ英語に慣れてきた気はするんですが・・・

そんな時に立ち寄った本屋に平積みされていた「英語は1年でマスターできる」を読んでみました。

概要

筆者はソフトバンク孫正義社長の秘書をしていた方です。

英語での交渉に同席した時、全く会話が理解出来ていない事で、「このままではクビにされる!」という所から1年で英語で交渉できるまで上達するまでに行ったことが紹介されています。

印象に残った事

  • 英語で何をしたいか明確にする
  • 勉強するのは、そのために必要なことのみに絞る
    • ex : 英語での交渉が目的なら、カジュアルな言い回し/雑談/発音/ライティングは切り捨てるなど
  • 意思疎通できればよいので、簡単な単語だけでよい。複数の言い回しは不要
    • 1000時間勉強すれば、必ず英語ができるようになる。だいたい1日3時間
    • そのために英語を勉強する時間が固定化してスケジューリング
  • リスニングは映画を英語テキストでシャドーイングが効果的
    • 映画は自分が英語でやりたいシーンに近いものを選び、1つのものを徹底的に

自分に置き換えて考えてみる

感想としては、かなり腹オチしました!

ちょうど英語を勉強し始めたものの英語力が上がっているかどうか、このままで上がっていくのか不安に感じていました。 なので、

  • 目的を絞る。それ以外は二の次
  • 意思疎通が目的なので、微妙な言い回しをする必要はない
  • 単語はすでに知っているもので事足りる

というのはかなり納得感がありました。

ちょうどrebuildでも細かい言い回しする必要なんてないよねっていう話も出ていました。

rebuild.fm

早速自分に置き換えて実践してみようと思います。

英語を学んで何をしたいか目的を明確にする

冒頭にある通り、英語でエンジニアリングの話ができるようになるっていうのが最大の目的です。 なので、フォーカスすべきはリスニング、スピーキングになります。

微妙な言い回し、ライティング、リーディングは切り捨て対象です。

スピーキング強化のために

この本を読む前からですが、ビジネスシーンを対象とした英会話クラスに申し込みました。

テキストを見る限り、面接/プレゼン/仕事の依頼の仕方などの時に使うフレーズが中心なので、 ちょうど本の中にもあった、「目的のシチュエーションに沿ったスピーキング」が経験できそうです。

リスニング強化のために

本にあった通り、自分の目標のシチュエーションに近い映画を、英語テキストでシャドーイングしまくるという事をやってみようかと。

エンジニア系の映画という事で真っ先思いついたのは「ソーシャルネットワーク」でした。 次に英語のテキストを手に入れようと手に入れようと、文中にもあったスクリーンプレイを見てみました。

www.screenplay.jp

しかし肝心の「ソーシャルネットワーク」のテキストがありませんでした><
ですが、ググると普通にpdfで公開されていましたw

http://flash.sonypictures.com/video/movies/thesocialnetwork/awards/thesocialnetwork_screenplay.pdf

とは言え、164ページ印刷するのは流石に億劫なんで英語字幕のあるもの動画で行うことにしました。

itunes,amazon primeは英語字幕が現時点では非対応でしたので、netflixを利用することにしました。 netflixは英語コンテンツも豊富で字幕設定/データのDLができます。 またiphoneだと10秒のみ巻き戻せるので聞き取りづらい所も繰り返し再生することができます。

なので、通勤時間を利用してリスニング、シャドーイングしていこうと思います。

www.netflix.com

まずはこれら実践してみます! そして一ヶ月後くらいに上記を振り返りしてみようかと!

余談

とにかく英語に触れる機会を増やそうということで、PCやサイトの言語設定を諸々英語にしてみました。

けっこうこれだけでも雰囲気変わるので意識付けとしていい感じです。

あとサイトによっては、
.jpではログインできるのに、英語設定だと.comにつながってログインできないものがあったりしました。アカウントの持ち方が別々なのかなーと。
これまで多言語対応したものを実装した経験がないので、自分だったらどう実装するかなーとか考えるきっかけになって面白かったです。

The difference of default charset when connect to mysql with php

When the monitors the product if use codeigniter,fuelphp that PHP framework by New Relic, execute query SET NAMES foo when every connect to mysql.

This is not just problem, but execute when every connect and it was somehow eyesore, so I fix to don’t execute that query.

the code execute query SET NAMES foo

The case of codeigniter * mysqli, it is execute this code↓

CodeIgniter/mysqli_driver.php at 9e17059bf8d277058d1de23390e388b5fa0cc26a · bcit-ci/CodeIgniter · GitHub

This product use UTF-8 charset, and configure my.cnf too.

So I thought in the first place, this is not need it. comment out set_charset() for now. Then, don’t execute SET NAMES foo and don’t garbled.

Only one environment garbled characters

It' OK. just as planned. I apply other environment this fixing. one environment garbled characters. it seemed garbled by latin1.

There is difference in default charset by mysql library

The result i investigated, There is difference in default charset by mysql library.

PHP: Mysqlnd - Manual

MySQL :: MySQL PHP API :: 2.4 Choosing a library

PHP: Choosing a library - Manual

library default charset
mysqlnd the server default charset
libmysql charset selected when build(latin1 if no selected)

Finally, the cause of garbled is the server is used libmysql.

How to fix,

  • use mysqlnd
  • rebuild libmysql and select charset
  • select charset by mysqli_options (selectable charset without SET NAMES foo) PHP: mysqli::options - Manual

This is a minute thing, but it would be better a few query!

phpからmysqlに接続する際のデフォルト文字コードについて

PHPフレームワークでcodeigniter,fuelphpなど使っているプロジェクトをnew relicで見てみると毎回DB接続の度にSET NAMES ~~~という文字コードを設定するクエリを毎回発行していました。

別にこれだけでどうってことはないのですが、毎接続時に発行されているし、なんか目障りだったので発行しないようにしたくなりました。

SET NAMES を発行している箇所

codeigniter * mysqliでは、SET NAMES ~~~を発行しているのは下記のようです。 CodeIgniter/mysqli_driver.php at 9e17059bf8d277058d1de23390e388b5fa0cc26a · bcit-ci/CodeIgniter · GitHub

対象のプロジェクトではmysql文字コードUTF-8を使っており、my.cnfにもそのように設定していました。

なので、そもそもこれしなくていいんじゃね?ってことで試しに、mysqli_driver.phpを継承したクラスを作り、set_charset()コメントアウトしてみました。 そうするとSET NAMES ~~~の消えて、挙動も問題なさそうでした。

とある環境のみ文字化け

で、よしよしと他の環境にも反映を行っていった所、ある環境のみ文字化けをしてしまいました。 文字化け具合的にlatinっぽい文字化けでした。

ライブラリによってデフォルト文字コードの扱いが違う

諸々調べるとPHPが使っているライブラリによってデフォルトの文字コードに違いがあるようでした。

PHP: Mysqlnd - Manual

MySQL :: MySQL PHP API :: 2.4 Choosing a library

PHP: どのライブラリを選ぶか - Manual

ライブラリ デフォルトの文字コード
mysqlnd サーバーのデフォルト文字コード
libmysql ビルド時の文字コード(デフォルトではlatin1)

文字化けしているサーバーがlibmysqlを使われていたので文字化けしていたの原因のようです。

対応としては、

これらあたりでいけそうです。

細かいとこですが、できるだけクエリは少なくしたいということで!

Test Engineers Meetup #1に行ってきた

Test Engineers Meetup #1行ってきました。

connpass.com

ろくにテストを自動化できていない自分としては、テストの実装/運用ノウハウ聴けるかなと期待して行ったのですが、いい意味で違ってましたw

発表資料だったり発表中紹介されたもの

www.slideshare.net

www.slideshare.net

speakerdeck.com

speakerdeck.com

メルカリのBe ProfessionalなQAチームの紹介 - mercan(メルカン)

kintoneチームを支えるSeleniumテスト

実践 Pact:マイクロサービス時代のテストツール - クックパッド開発者ブログ

個人的所感

実際の開発テクニックというより各社のテストエンジニア組織の成り立ち、立ち位置、業務範囲、よかった/悪かったこと等がメインでした。

以下、個人的に印象に残ったこと。

  • 各社テストエンジニア組織を作り始めている
  • テストエンジニア組織はプロダクトに属する部隊とツール/基盤系部隊の横串/縦串の形を取っているのが多めっぽい
  • テストエンジニアは必要なスキルセットがネイティブ/フロントエンド/サーバー/インフラなどかなり広い
  • テストを自動化するだけではなく、プロダクトの品質保証/向上、開発効率向上をゴールにしている
  • テストエンジニアを組織化することで、属人化していたノウハウの共有、標準化。テストツールの基盤作りをすることができた。
  • しかしテストエンジニアが事業/プロダクト側から離れることにより、プロダクト側の知識が少なくなり適切なアクションが取れないことも。
  • それの対策のためにもテストエンジニア組織かつプロダクトに属して現場との認識を合わせるようにしている
  • でもそれだとテストエンジニア組織がスケールしていかない面もある
  • なのでテストエンジニア組織は現場に入るのではなくツールなどのサポート等に徹する会社もあり
  • 逆にプロダクトオーナーと密に関わり、プロダクトの品質を一緒に考え、向上を図っていく会社もあり
  • テストエンジニアの価値、成果を数値化が難しい
  • プロダクトの品質はどう測定する?
  • テストだけをしているだけではないので、テストエンジニアという肩書きに違和感を覚えている人も

もっとも印象的だったのは、テストだけではなくプロダクト/開発の品質、生産性向上をゴールとしているということでした。


個人的な想像ですが、、、

テスト自動化周りが発端になったものの、いざやってみるとテストだけでは品質、生産性の向上は十分ではない。(ましてやテストエンジニア=多くのスキルを持った優秀なエンジニア)

かと言ってプロダクトに深入りするとテストエンジニアを組織化した意味がなくなってしまうのではと感じる会社があったり、そんなの関係なくプロダクト/開発の品質、生産性向上を図ろうとする会社があったりまだまだベストプラクティスがないなか各社手探りで答えを見つけようとしている状況なのかと感じました。

また「テストエンジニアに興味を持ったきっかけは?」という質問で「品質保証/向上には0か1という答えがない。だからわくわくした」という回答もとても印象に残りました。


自分はというとまずは挫折しっぱなしのテスト自動化再挑戦と自分なりにプロダクトの品質/生産性の向上に何ができるか今一度考えてみようと思います><

きっかけ頂きありがとうございました!

f:id:ogataka50:20160915011639j:plain

【翻訳】ハワイ大学アメフト部のアメリカンな奨学金祝い

今朝facebookをながめていたら、最高にハッピーな動画を見つけたのでシェア&翻訳。まずは何より動画を見てください。

ハワイ大学アメフト部のブロディ・ナカマ選手が奨学金を手に入れたのをコーチ、チームメイトがなんともアメリカンな方法でお祝いしています。

彼はジャンプしたくなかったが、ジャンプせずにはいられなかった 

By Robert Kekaula

ハワイ大学のアメフト選手ブロディ・ナカマ(180cm,115kg)はレインボー・ウォーリアーズ(ハワイ大学アメフトチーム)最終学年のシーズンに奨学金を獲得した。

カルフォルニアサンタクララで生まれ、スペシャルチームのロングスナッパーでキャリアを通して堅実にこなしていた。彼は当然のようにロングスナップを決めていた。

「両親は僕を大学に入れ、アメフトをさせてくれるために多くの事を犠牲にしてくれた。奨学金獲得は僕にとって特別な事、きっと両親の助けになる」

奨学金は普通のオファーではなく、ロロビッチコーチの完璧なプランでオファーされた。

彼は金曜の練習を早めに切り上げ、「プールパーティ」に選手達を連れて行った。プールの飛び降り台は始め立ち入り禁止でした。でも選手達に促されて、ロロビッチコーチは飛び降り台を渋々開放しました。

誰かが登り出す前に、口火を切らせるため1人の選手が指名されました。その選手がブロディ・ナカマでした。

「コーチが僕の名前を呼んで、なんでコーチが僕にこんなことをさせるか考えたよ。完全に混乱したよ」とナカマは言う。

彼は飛び降り台からジャンプしたくなかった。でもチームメイトが彼の名前をコールし出したので、選択の余地なくなり、台を登り始めた。

「僕はとても緊張して、何回か息を止めて、息を飲んだりしたよ」

ナカマが飛び降り台の一番上に登った時、彼の名前が書かれている封筒を見つけた。封筒の中に奨学金のオファーが書かれているなんて彼は知る由もなかった。

言うまでもなく、ナカマはとても感動していた。

「その少し時間、言葉にもできず、気持ちを抑えることができなかった」

ナカマ潤んだ目を拭い、それからためらいもなく、ジャンプした。

original

He Didn't Want to Jump, He Had to Jump - Honolulu, Hawaii News and Weather - KITV Channel 4


アメリカの大学でスポーツでの奨学金をもらえるには大きな意味があります。

カレッジスポーツは文武両道が原則なので、スポーツ/学業共に成績が優秀でなければいけません。スポーツ推薦的なものもあるのですが、一定の成績以上を取るのが絶対です。このブロディ選手のプロフィールを見てみると学業優秀者しか選ばれないacademic all-MW teamに1年生から3年連続で選ばれていました。

Brodie Nakama - 2016 Fall Camp Football Roster - Hawaii Athletics

スポーツ一流校であるハワイ大学で厳しい練習をこなしつつ、学業で秀でるためにはかなりの努力が必要でしょう。

そしてカルフォリニア生まれでハワイ大学に行くことは家庭にもある程度の金銭的負担がかかるでしょうし、本人もそれを痛いほど感じていたようです。

そうした背景を知った後で、再度動画を見ると途中で出てくるパリピ系な学生と違いブロディ・ナカマ選手の実直そうな性格がありありと感じられます。

最初に飛び降り台からのジャンプを指名された時は、緊張して困惑してジャンプすることに躊躇している様子

そこから奨学金をもらえることを知って、感激して感情を抑えられないでいる様子

その後ためらいなくジャンプし、それを祝福しようとチームメイト全員がプールに飛び込む様子

本当に映画のワンシーンのようです。

それと同時に大学のスポーツチームが複数のカメラアングルを使って映像にしている所にアメリカのエンターテイメント文化のすごさを感じました。

チームPVとかならある程度予算かけてしっかり作り込むとかはわかるのですが、今回に関してはシーズン前のちょっとしたイベントなのにこのクオリティを出してしまう所がすごい。

ブロディ・ナカマ選手にも注目ですが、今年のハワイ大学には伊藤玄太というRBの選手が入学しているので、こちらも要注目ですね!