Excel(Google スプレッドシート)でランク付け

A B C D
1 名前 年齢 点数
2 John 23 87
3 Paul 22 87
4 George 24 78
5 Ringo 22 90

こんな表があって、以下の条件で順位付したい場合

  1. 点数が低い
  2. 点数が同じである場合、年齢が低い

RANK関数だと条件は一つしか付けられないので点数が同じだった場合の年齢順が考慮できない。

そんなときはSUMPRODUCT関数を使うと便利。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/sumproduct.htm

正直良くわからないけどこれで良いらしい。

=SUMPRODUCT(($C$2:$C$5<$C2) + (($C$2:$C$5=$C2) * ($D$2:$D$5<$D2)) + 1

($C$2:$C$5<$C2)は自分より点数が低いもの。
($C$2:$C$5=$C2) * ($D$2:$D$5<$D2)は自分と点数が一緒"かつ"年齢が低いもの。(*はAND条件)
それを「+」でOR条件としてくっつける。

これをD列に埋めてオートフィルしてやればD列に順位がでる。

Googleスプレッドシートで使う場合は一点注意。
おまじないが必要だそう。
http://d.hatena.ne.jp/emmie714/20090904/1252026152

=ARRAYFOMURA(SUMPRODUCT(($C$2:$C$5<$C2) + (($C$2:$C$5=$C2) * ($D$2:$D$5<$D2))) + 1

確かにこれでうまく行った。

Selenium2(2)

後続処理を止める

画面遷移を行う場合など、次画面の表示完了まで後続処理を止めたい場合

// フレーム内部が表示されるまで最大10秒待ち
final long before = new Date().getTime() + 10000;
(new WebDriverWait(driver, 10)).until(new
  ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
  // 次の画面のタイトルが出たら処理続行
    return d.getTitle().toLowerCase().startsWith("タイトル");
  }
});

フレーム間の移動

フレームのある画面でフレーム間を移動したい場合

// nameが"MENU"のフレームへ移動
driver.switchTo().frame("MENU");

// idが"top"のフレームへ移動
driver.switchTo().frame(By.id("top"));

// 最初のフレームへ戻る
driver.switchTo().defaultContent();

ポップアップ

ポップアップを開いてポップアップ画面へコントロールを移す場合

// 現在操作しているWindow IDを控える。
String currentWindowId = driver.getWindowHandle();

// ポップアップ表示
driver.findElement(By.linkText("ポップアップ表示")).click();

// ポップアップ表示まで待機
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
  public Boolean apply(WebDriver d) {
    // ポップアップが表示されるとWindowHandlesのサイズが増える
    return d.getWindowHandles().size() > 1;
  }
});

// 増えたウィンドウIDを取得する。
String newWindowId = null;
for (String id : driver.getWindowHandles()) {
  if (!id.equals(currentWindowId)) {
    newWindowId = id;
  }
}
// ウィンドウ切り替え
WebDriver newWindowDriver = driver.switchTo().window(newWindowId);

参考
http://www.storklab.com/seleniumhq.org/docs/03_webdriver.html
http://d.hatena.ne.jp/kencharos/20111027/1319719613

Selenium2

Webブラウザでのテストを自動化するツールのSelenium2。
昔使ったことがあるような気がするが、再度挑戦。

環境
Eclipse3.4
JRE 1.6.04
Sastruts

インストール

EclipseJavaプロジェクトを作成する。
Downloads - selenium - Browser automation framework - Google Project Hostingからselenium-java-xxx.xx.zipをダウンロードし、解凍して内部のselenium-java-xxx.xx.jarとlibs配下のファイルを全てプロジェクトにインポート。

今回はIEを使いたいのでIEDriverを配置する。
上記リンクからIEDriverServerの最新版を取得し、任意の場所に配置する。(今回はC直下)

これで準備は完了

動かしてみる

新規クラスを作成する。(今回はExample)

public class Example {
        // IEDriverの配置先を設定
	private static final String IE_DRIVER_PATH = "C:\\IEDriverServer.exe";

	public static void main(String[] args) {
		// IEDriverの配置先を指定
		System.setProperty("webdriver.ie.driver", IE_DRIVER_PATH);

		// IEDriverのインスタンスを生成
		WebDriver driver = new InternetExplorerDriver();

		// Webページを表示
		driver.get("http://localhost:8080/hoge");

		// 要素を名前で検索
		WebElement user = driver.findElement(By.name("user"));
		WebElement password = driver.findElement(By.name("password"));

		// ログイン情報を設定
		user.clear();
		user.sendKeys("hoge");
		password.sendKeys("hogepass");

		// Submit
		user.submit();
	}
}

これを実行するとIEが起動し、自動的にログインフォームにユーザ名とパスワードを入力してsubmitを行う。

とりあえずここまでで起動は確認できた。

FESSで全文検索

FESS
http://fess.sourceforge.jp/ja/

FESSは全文検索エンジンで、内部ではApacheのSolrを利用している。
WEBクロール、ファイルシステムクロールに加え、DBクロールもできる。

インストールはここを参照。
ファイルシステムクロールを設定してみようとここを参照に

file:\c:\hoge\foo

としてみたが、クロールされない。

file://c:/hoge/foo

にしたら無事クロールされ、インデックスが作成された。
検索の動作は軽快で良いシステム。

ubuntu-server12.0.4にtomcat7

前回に引き続きsolrのための準備。
ubuntu-server12.0.4にtomcat7インストール

またしてもShinya’s Daily Reportさんを参考に
http://d.hatena.ne.jp/absj31/20120930/1349007029

早速インストール

$ sudo apt-cache search tomcat7

上記コマンドでリストアップされた全部をインストール

$ sudo apt-get install -y libtomcat7-java tomcat7 tomcat7-admin tomcat7-common tomcat7-docs tomcat7-examples tomcat7-user

JAVA_HOMEの設定

$ sudo vi /etc/default/tomcat7

下記を追加

JAVA_HOME=/usr/lib/jvm/java-7-oracle

起動確認

$ sudo /etc/init.d/tomcat7 start
 * Starting Tomcat servlet engine tomcat7

ブラウザでlocalhost:8080アクセス

停止

$ sudo /etc/init.d/tomcat7 stop
 * Stopping Tomcat servlet engine tomcat7 

ubuntu-server12.0.4にoracle java7

solrを試すための環境準備
ubuntu-server12.0.4にOracle java7インストール。

こちらを参考
http://d.hatena.ne.jp/absj31/20120925/1348692705

リポジトリ追加

$ sudo add-apt-repository ppa:webupd8team/java

ここでcommand not foundが出たら以下のコマンドを実行してから再チャレンジ

$ sudo aptitude install python-software-properties

パッケージリストの更新

$ sudo aptitude update

java7インストール

$ sudo aptitude install oracle-java7-installer

ライセンスに関する問いが出るのでYESとかOKとか。

確認

$ java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) Client VM (build 23.7-b01, mixed mode)

【読書メモ】情報は一冊のノートにまとめなさい

情報は1冊のノートにまとめなさい 100円でつくる万能「情報整理ノート」 (Nanaブックス)
著者:奥野宣之 ジャーナリスト出身の文筆家
所要時間:60分

概要

情報はA6サイズのノートで一元管理するという方法。

一元管理する理由

複数のノート(仕事ノート、アイデアノート…etc)で管理すると

  • どこに何が書いてあったか忘れる
  • 分別が複雑(面倒)で破綻する

だからA6ノートに全てぶち込む。
資料やレシート等も糊付けしてとにかく一元管理。

A6サイズである理由

  • 一般的に使われるA4の用紙を四つ折りして貼れる
  • 文庫本、ハガキと同じぐらいのサイズで、持ち運べるぎりぎりのサイズ
  • どこでも購入できる(100円ノート)

検索

全部ぶち込んだら日付/カテゴリ/サマリで検索を作成。
例) 130325…企画 紫色のカレーを売るには
PCで管理すると全文検索できる。

アイデアに関するテクニック

本を読んで

情報を一元管理することの意味、意義については共感。
ただ、A6のノートにまとめることについては共感できない。
2009年に書かれた本なので当時はスマートフォンのスペックも低く、ノートのほうが良かったのかもしれないが、今だったらスマートフォンで管理するのが良いかと思う。
Evernoteで管理すればWordだろうがExcelだろうが、PDF、JPGなんでも取り込める。
さらには検索機能がとても優れている。
紙に書く速度に比べたらスマートフォンへの入力は遅いかもしれないが、管理・検索についてはスマートフォンの方が早くて高機能。

ということで、コンセプトだけ頂いてEvernoteで一元管理を行なってみようかと思う。

Amazonマーケットプレイスで1円 + 350円(配送料)だったので概ね満足。