CakePHP 2 のプラグインを Travis CI でテストする

プログラミング       2017年12月22日

これは CakePHP Advent Calendar 2017 の 22 日目の記事です。

プラグインのテスト

今回は CakePHP 2 のプラグインを開発する際に便利な、Travis CI 上でテストを実行するためのスクリプト「FriendsOfCake/travis」を紹介します。

CakePHP にはプラグインの機構が搭載されていますが、公式の Cookbook にも基本的な機能の説明がなされているのみで特にテストの手法については具体的な記述がありません。基本的には標準的なアプリケーションと同じようにしてテストを作成することが可能ですが、プラグインのリポジトリー単独でテストを実行することができるように設計されていないためテストの呼び出しにやや難があります。拙作の CakePHP 2 向けプラグイン「lampager-cakephp2」では当初、テストにのみ用いられるコードをプラグイン本体にも含めていましたが、読み込むアプリケーションとの競合や、プラグイン自体のメンテナビリティーの問題があったため別の手法を取ることにしました。

プラグインの作成 – 2.x(CakePHP 2.x Cookbook)

Travis CI × Selenium × Chrome で気持ち良いテスト生活

プログラミング    2017年3月2日

日頃からコードをお書きになるみなさんなら、三度の飯よりテストですよね?
今回は Chrome 拡張「TweetDeck Accounts Switcher」を Travis CI/AppVeyor 上でテストしてみました。

用意するもの

  • GitHub アカウント
  • Travis CI アカウント
  • Google Chrome
  • Node.js

環境構築

 

はじめに macOS で試してみます。

 

Node.js でドライバーを読み込んで……。

 

TweetDeck でアカウント切り替えができる Chrome 拡張を作りました

プログラミング    2015年9月5日

TweetDeck のアカウント選択は 2018/02/21 に Twitter のポリシーによって複数選択から切り替えに変更され役目を終えることとなりました。詳細は Automation and the use of multiple accounts をご確認ください。

TweetDeck はアカウントの選択が複数選択可能な方式ですが、実際は複数のアカウントで同じツイートをしたい場面はまずないと思います(下図)。

というわけで、アカウントを「切り替えられる」ようにする Chrome 拡張を作成しました。
公開当時は Chrome 向けのみでしたが、2018/02/06 に Firefox アドオンも公開しました。

PHP 7.0 を試してみた

プログラミング       2015年8月31日

今話題の PHP 7、非推奨要素などがまるっと削除されてすっきり速くなったそうなので試してみました。
実際に現在ご覧のページも執筆時点最新の PHP 7.0.0RC1 で表示されています。そんな時代もありました。

環境

phpenv でバージョン切り替えが可能な環境で実験してみます。

OS Arch Linux(Linux 4.1.6)
Apache 2.4.16
phpenv rbenv 0.4.0-153-g3b6faa8
php-build v0.11.0dev

RecoTw Explorer を書き直したら思ったより大きくなった話

プログラミング       2015年2月8日

今までバグをたくさん放置したままレンタルサーバーで抱えていた RecoTw Explorer(詳細は GitHub へ)をいろいろ変更してリニューアルしたので告知ついでに。

TypeScript で書き直した

今まで全体が JavaScript で書かれていましたが、クロージャを駆使しながらクラスのように記述する書き方や、型制約のない緩い言語仕様に嫌気が差したので、今回初めて altJS で書くことにし、TypeScript を採用してみました。C# 好きにはたまらない構文(設計者が同じらしいですね)、静的な型付けによるコンパイル時のエラー検出と強力な入力補完、ECMAScript の先進的機能の先取り実装(アロー関数など)、挙げたらキリがないほど導入のメリットは大きく、今まで書いた中では C# と同じくらいの感動を覚えました。

NowPlayingLib を公開しました

プログラミング       2015年1月12日

.NET Framework から利用可能なライブラリ「NowPlayingLib」を公開しました。Windows 上で動作している音楽プレーヤーと連携して、再生中の曲の情報を取得したり、基本的な操作を行ったりすることができるライブラリです。次の音楽プレーヤーに対応しています。

  • Windows Media Player
  • iTunes
  • x-アプリ
  • LISMO Port(x-アプリ for LISMO)
  • foobar2000(要 COM Automation server コンポーネント)

ライブラリならびにソースコードは GitHub 上で MIT ライセンスで公開されています。
https://github.com/chitoku-k/NowPlayingLib

注意

  • このライブラリーは .NET Framework 4.5 のみに対応しています。
  • アルバムアートワークは foobar2000 では取得できません。

WebBrowser や WindowsFormsHost の上に描画する

プログラミング       2014年12月25日

大した記事ではないですが備忘録代わりに。

WPF には Windows 上で動く手前、そのほとんどが DirectX で描画されている一方で、Win32 時代の遺産を利用できるようにするために、System.Windows.Interop.HwndHostという相互運用機構が用意されています。これを実装するコントロールを利用することで WPF でも ActiveX や Windows Forms のコントロールを利用することができるようになっています。そして Web ページを表示する機能を持つWebBrowserコントロールも同様に HwndHostの派生クラスです。

HwndHostFrameworkElementの派生クラスでこそありますが、継承しているプロパティの多くが他の WPF コントロールのようには動作しません。透明度や変形といった WPF 特有の機能のほか、スクロール領域や要素の切り取り、重ね合わせといったレイアウトにも対応していません。これはたとえば次のような例で問題が起きます。

Twitter の GIF アニメを API で取得する

プログラミング       2014年12月16日

この記事は、ヒナロエ氏(@hnle0)の Advent Calendar 2014 参加記事(7 日目)です。

2015年2月2日より API 経由での情報取得が可能になるようです。
詳細は当記事下部の 追記 にて。

というわけで

今回は、ちょっと前から Twitter にアップロードできるようになった GIF アニメを取得する方法を考えてみます。

WPF での画像読み込みをバックグラウンドで処理する

プログラミング    ,    2014年11月29日

WPF でインターネット上にある画像を表示させる場合、その URI を BitmapImage に指定することで表示することができます。

<Image>
    <Image.Source>
        <BitmapImage UriSource="http://chitoku.jp/img/icon.png" />
    </Image.Source>
</Image>
var img = new Image();
img.Source = new BitmapImage(new Uri("http://chitoku.jp/img/icon.png"));
var img = new Image();
var source = new BitmapImage();
source.BeginInit();
source.UriSource = new Uri("https://chitoku.jp/img/icon.png");
source.EndInit();
img.Source = source;

でもこの BitmapImage における読み込み処理は UI スレッドで行われているようです。つまり、画像のダウンロードに時間がかかったり、画像の数が多かったりすると、他の要素の表示速度にも影響を与えることがあるということです。今回は、XAML 側から利用できるバッググラウンド処理の機構を考えてみます。

WPF 4 でもピクセル単位スクロールがしたいっ!!

プログラミング    ,    2014年11月23日

今回は .NET Framework で動作する UI フレームワーク、WPF 4 のお話です。

WPF では大量のアイテムを表示するために ItemsControl というコントロールが用いられますが、多くのアイテムを描画するには時間がかかる上、パフォーマンスの悪化にもつながります。そこで WPF ではアイテムを高速かつ省メモリで描画するために、UI 仮想化という機能が用意されており、ItemsControl の派生コントロールである ListBox などではこれが既定でオンになっています。やったぜ!

というわけにもいかず…本題はここからです。
ListBox ではアイテムをスクロールするときに、アイテム単位でのスクロールが行われます。アイテム単位でのスクロールでは、ボックスからはみ出てしまった文字を読むことができないほか、アイテムによって高さが違う場合、スクロールしたときに読みにくくなってしまいます。