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

present

【名詞】贈り物、プレゼント;[the present]現今、現在;

『Selenium 実践入門』読んだ

読書

Selenium 大全と呼ぶにふさわしい一冊

Selenium WebDriver だけでなく、 Geb・FluentLenium・Capybara といったサポートライブラリや Selenium IDE、 さらには Appnium まで網羅している。

ページオブジェクトパターンや CI といったベストプラクティスもあり。

巻末には CSS セレクタや・XPATH・WebDriver API の早見表も載っていて、 リファレンスとしても使える。

本書のサンプルコードはほとんど Java

他の言語でも API はだいたい同じだし、 巻末の早見表もあるので無問題。

Selenium サポートライブラリに関しては、 こればっかりは使おうと思ったら言語も Groovy や JavaRuby を使うしかない。

ただ、E2E テストは何も Web サービスと同じ言語でないと書けないわけではないし。 Web サービスは C# だけど、E2E テストは Ruby というのも全然アリ。

E2E テストでテストデータ投入とクリーンアップ

Selenium 使った E2E テストでは、どうすればいいんだろうね。

単体テストなら、テストメソッド実行前にトランザクション開始してからテストデータ投入して、 テスト後にロールバックする手が使えた。

E2E テストの場合、実際の登録用 API を使うという手法がさらっと紹介されていた。 あまりオススメではないみたいだけど、テスト専用 API を作るという手もある。

Rails のときはトランザクション使わずに、 ActiveRecord でデータ投入して database-cleaner でクリーンアップしていたけど、 JavaC# でも同様の仕組みが要るのかもな。

サイボウズDeNA の事例も載っている

どちらも E2E テストの数が増えて、すべて実行するのに非常に時間がかかる問題に直面していた。 どちらも並列化で対応していたけど、サイボウズSelenium Grid、DeNA は Jenkins のマスター/スレーブと、 アプローチが異なっていて参考になる。

本書にも書いてあるけど、E2E テストは単体テストと比べて時間がかかるので、 ユーザーシナリオに重点を置いたテストをやるのが現実的。 重箱の隅は単体テストでつつくのがベターか。

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

AWS CLI を使って CloudWatch のメトリクスを取得するメモ

AWS

セットアップ

AWS CLIPython 版を使う。

$ sudo pip install awscli

AWSAPI キーやリージョンを設定する。

$ aws configure
AWS Access Key ID [None]: <アクセスキーを入力する>
AWS Secret Access Key [None]: <シークレットキーを入力する>
Default region name [None]: ap-northeast-1
Default output format [None]: json

取得できるメトリクスの一覧を表示

例えば

$ aws cloudwatch list-metric --namespace AWS/RDS

Amazon RDS のメトリクス一覧を取得できる。

後述するメトリクスの値を取得するときに指定が必要な dimensions が分からないときは

$ aws cloudwatch list-metric --namespace AWS/RDS --metric-name <メトリクス名>

で調べることができる。

メトリクスを取得

Amazon RDS の CPUUtilization を取得するならこんな感じ。 5 分間ごとの平均値を取得している。

$ aws cloudwatch get-metric-statistics \
    --namespace AWS/RDS \
    --dimensions Name=DBInstanceIdentifier,Value=<DBインスタンス名> \
    --metric-name CPUUtilization \
    --statistics Average \
    --start-time `date -u -d `date -u -d '5 minutes ago' +%Y-%m-%dT%%TZ` \
    --end-time `date -u +%Y-%m-%dT%%TZ` \
    --period 300

『リモートチームでうまくいく』読んだ

読書

リモートチームとは、チームとしてのリモートワーク。 一昔前に話題になった、働く場所や会社に縛られないノマドとは違う。 リモートチームは会社に所属しながらもリモートで働く。 しかもチームで。 ソニックガーデンは社長を含め社員全員がリモート勤務可らしい。

リモートチームは会社と社員の双方でメリットがある。 社員は会社に所属しながらも働く場所や時間の自由が得られる。 会社は優秀な人材を場所にとらわれずに採用することができる。 リモートワーク可というのが転職の決め手になることもありそうだ。

ただ、全員がリモートで働けばリモートチームになるかといったら、 そんなわけはなくて。 リモートチームが上手く機能するように、ツールを導入したり、情報共有を徹底したり、 働く時間をそろえたり、といったさまざまな工夫が必要。

なにより、リモートチームを実現するためには、 セルフマネジメントが出来る人でチームを構成する必要がある。 これが一番高いハードル。 セルフマネジメントとは、本書によると 「自分の時間やリソースを自身で管理した上で、どんな仕事にどれだけのコストをかけるかを考えて、 誰かに指示・管理されることなく成果を発揮することのできるスキル」のこと。 つまり、優秀な人材だけでチームを構成しないと成立しない。

既にいろんな社員を抱えている会社がやるのは困難を極める。 急に人を増やすこともできないので、急成長したいスタートアップにも適さない。 「納品のない受託開発」という、 顧問エンジニアみたいな急成長はないけど手堅いビジネスをやっている、 ソニックガーデンだから実践できている。

そういえば、『強いチームはオフィスを捨てる』を書いた Basecamp 社も、 ベンチャーキャピタルから資金を調達せずに、自分達の売上で着実に成長していったな。 そういった手堅いビジネスをやっている少数精鋭の会社と、 リモートチームは相性がいいんだろう。 もし自分が起業するなら、リモートチームの実現させたいとは思う。

リモートチームでうまくいく マネジメントの?常識?を変える新しいワークスタイル

リモートチームでうまくいく マネジメントの?常識?を変える新しいワークスタイル

リモートチームでうまくいく

リモートチームでうまくいく

新SUN 岩田屋店

グルメ

会社帰りに、岩田屋本館地下2Fにある『新 SUN』でタルトを買った。 あまおうやマスクメロンのタルトに惹かれたけど、予算オーバーだったので、 定番の『ミックスフルーツ』と2番人気の『あまおうのモンブラン』をチョイス。

フルーツ専門店なだけあって、フルーツはどれも瑞々しく、甘みが強くて美味い。 タルト生地は硬めでザクザクとしていて、 味と形の両方でフルーツとクリームをしっかり支えている。 ひさしぶりに食べたけど満足。

自分の中でタルトといえばキル・フェボンだったんだけど、 岩田屋にこの店が出店してからは行かなくなったな。 キル・フェボンと比べても味は申し分なし。 コスパ考えるとキル・フェボン以上だと思う。

関連ランキング:ケーキ | 西鉄福岡駅(天神)天神駅天神南駅

C# でも匿名型でインタフェースを実装できたらいいのにとたまに思う

.NET

たとえば

public interface IDomainEventHandler
{
    bool CanHandle(IDomainEvent e);
    void Handle(IDomainEvent e);
}

というインタフェースがあるとき

EventBus.Register(new IDomainEventHandler
{
    public bool CanHandle(IDomainEvent e)
    {
        return e is ProjectCreatedEvent;
    }

    public void Handle(IDomainEvent e)
    {
        // なんかやる
    }
});

という風に書きたいことがたまにある。Java は書けるけど、C# では書けない。

今のところは

public class DelegateEventHandler : IDomainEventHandler
{
    private Func<IDomainEvent, bool> _canHandle;
    private Action<IDomainEvent> _handle;

    public DelegateEventHandler(Func<IDomainEvent, bool> canHandle, Action<IDomainEvent> handle)
    {
        _canHandle = canHandle;
        _handle = handle;
    }

    public bool CanHandle(IDomainEvent e) => _canHandle(e);

    public void Handle(IDomainEvent e) => _handle(e);
}

みたいなクラスを作って

EventBus.Register(new DelegateEventHandler(
    e => e is ProjectCreatedEvent,
    e => { /* なんかやる */ }
));

ってな感じで書いてはいるけど、このときだけは Java が羨ましい。

Entity Framework でオブジェクトが変更監視中かどうか調べる方法メモ

.NET

DbSet<TEntity>.Local プロパティを調べればわかった。

public class Customer
{
    // Entity Framework 用コンストラクタ
    protected Customer()
    {
    }

    public Customer(string name)
    {
        Name = name;
    }

    public int Id { get; private set; }

    public string Name { get; private set; }
}

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base("DefaultConnection") {}

    public ApplicationDbContext(string nameOrConnectionString)
        : base(nameOrConnectionString) {}

    private DbSet<Customer> _customers;

    public DbSet<Customer> Customers => _customers ?? (_customers = Set<Customer>());
}

public class CustomerRepository
{
    private ApplicationDbContext _dbContext = new ApplicationDbContext();

    public void Store(Customer customer)
    {
        if (0 < customer.Id)
        {
            _dbContext.Customers.Add(customer);
        }
        else
        {
            // 変更監視中でなければ監視下にする
            if (_dbContext.Customers.Local.Contains(customer) == false)
            {
                _dbContext.Entry(customer).State = EntityState.Modified;
            }
        }
        _dbContext.SaveChanges();
    }
}

『数学ガール』読んだ

読書

関数型言語をきっかけに、数学について勉強し直したくなった。 その取っ掛かりに丁度良いと、だいぶ昔に買ったまま積んでいたのを、 重い腰を上げてようやく読んだ。

大学は情報系の学科を出たので数学は勉強してきたつもり。 だいぶ忘れてしまっているけども。思い出しながら読み進めていくと、 知らなかった知識に次々と出会った。 母関数とか数列や関数の解析技法とかテイラー展開とか、まぁいろいろ。

フィボナッチ数列の一般項を求めたり、 sin x = 0因数分解したり、 そういった驚きが幾つも散りばめられていた。 フィボナッチ数列の一般項は、本書でも序盤だけど一番衝撃的だったかも。

こういった本が学生のときにあれば、と一瞬思ったけど、 自分が高校生のときに理解できたかと問われれば非常に難しかっただろうな。 小説仕立てなので、 数学に強い興味をもっている人なら、 悪戦苦闘しながらも読み進められそうではある。

学生が読むのはもちろん良いけど、 数学への憧れを抱いたまま燻らせている大人こそ読んで欲しい本だと思う。

数学ガール (数学ガールシリーズ 1)

数学ガール (数学ガールシリーズ 1)

数学ガール

数学ガール