monthly gimite

試験運用中。

Flexboxとを組み合わせるときはsize="1"が必要

<div style="display: flex;">
  <div style="flex: 1 1 auto;">hoge:</div>
  <input type="text" style="flex: 1 1 auto;">
</div>

とした場合のこのinput要素、画面サイズが大きいぶんにはちゃんと伸びてくれるのですが、画面サイズが小さい場合にある程度以上小さくなってくれません。

<div style="display: flex;">
  <div style="flex: 1 1 auto;">hoge:</div>
  <input type="text" size="1" style="flex: 1 1 auto;">
</div>

size="1" をつければ良いようです。sizeを省略した場合はデフォルトのsizeが適用されるわけですが、その幅以下には縮んでくれないようです。ちなみにsize="0"は不正な値なようで、駄目でした。動作確認はChrome

[programming][mahjong] シャンテン数計算アルゴリズムで各言語をベンチマーク

ymatsuxさんのシャンテン数計算アルゴリズムをいろんな言語に移植して速度を比較してみました。

結果(所要時間):

タスクは天鳳牌譜中のランダムな手牌1000個のシャンテン数計算です。同一マシンのtimeコマンドで計測した3回の平均。

感想:

  • V8かなり頑張ってる。C++の約2.4倍程度。
  • Scala意外と遅い。JavaScriptに負けてる。
  • Rubyめっちゃ遅い。こういうのを書く言語じゃないんでしょうけど。

注:

  • Scalaの数字が前回と変わってるのは、Hayatoさんの勧めに従ってforをwhileに書き換えたのと-optimizeオプションを付けたことで合計2倍程度高速化したためです。
  • もちろんこういうのはタスク依存でコードの書き方依存なので色々と一概には言えない。
  • アルゴリズム自体は色々と改良の余地があると思っている。とりあえず3倍程度に高速化するアルゴリズム実装済み。
  • Java版以外は七対子を考慮してません。どの実装も国士無双を考慮していません。計測時はJava版に手を入れて七対子の計算を無効化してます。

というわけでJavaScriptが意外と速いので麻雀AI JavaScriptで書こうかなー。

ソースコード:

牌は1m, 2m, ..., 9m, 1p, 2p, ..., 9p, 1s, 2s, ..., 9s, 東, 南, 西, 北, 白, 發, 中の順の0-originの通し番号で表現されています。

2013/9/21追記: yuizumiさんにC#版をもらったので追加。

[mahjong][tenhou] 天鳳牌譜の統計による麻雀危険牌分析

ネット麻雀の天鳳で公開されている、天鳳位の人の牌譜17670ゲームを集計して、牌の危険度を分析しました。詳細はこちら:

統計による麻雀危険牌分析

得られた主な知見:

  • 大雑把な危険度:
    • 字牌 = 中スジ = ノーチャンス < 表スジ << ワンチャンス < 片スジ << 無スジ
  • 中スジ(2p, 8pに対する5pなど)は表スジ(4pに対する1pなど)より安全。
  • 生牌の字牌はスジの通った数牌よりやや危険、片スジよりは安全。
  • 序盤の捨て牌の外側はスジと同程度に安全。
  • 暗刻スジはやや危険度が上がる。
  • 裏スジは危険度に影響しない。序盤の裏スジに限っても特に危険ではない。
  • ただし序盤に5を捨てている場合の1, 9は危険度が上がる。
  • 間四間も危険度に影響しない。
  • またぎスジは基本的に危険度が下がる。リーチ牌のまたぎスジであってもノーヒントよりはやや安全。
  • ここのブログの放置ぶりがひどい。

[mahjong] 麻雀AIと麻雀AI対戦サーバを公開

最近麻雀AIを作っています。現状のAI同士を対戦させるとこんな感じです(たぶんChromeでしか見れません)。一応それっぽく動いています。まだまだナイーブで、あまり強くないですが。まだ役やドラの価値を考慮してないので、赤ドラをガンガン切ってますね…。

このAIのために対戦サーバを作りました。TCPこんな感じのJSONを送り合って対戦できます。もし使いたい人がいたらご自由にどうぞ。詳細はこちら:

Mjai 麻雀AI対戦サーバ

ソースはこちら:

[ruby][googledrive] Google DriveにアクセスするRubyライブラリを作りました

google-drive-ruby - Github

作りました、というか、google-spreadsheet-rubyスプレッドシート以外のファイルをアップロード/ダウンロードする機能を加えて改名しました。

Google Drive Appを作るライブラリではありません。Google Driveにアクセスする2種類のライブラリの違いについてはこちら

インストール:

$ sudo gem install google_drive

使用例:

require "rubygems"
require "google_drive"

# Logs in.
# You can also use OAuth. See document of
# GoogleDrive.login_with_oauth for details.
session = GoogleDrive.login("username@gmail.com", "mypassword")

# Gets list of remote files.
for file in session.files
  p file.title
end

# Uploads a local file.
session.upload_from_file("/path/to/hello.txt", "hello.txt", :convert => false)

# Downloads to a local file.
file = session.file_by_title("hello.txt")
file.download_to_file("/path/to/hello.txt")

# Updates content of the remote file.
file.update_from_file("/path/to/hello.txt")

google-spreadsheet-ruby

require "google_drive"
GoogleSpreadsheet = GoogleDrive

するだけのライブラリになる予定です。

[android] Androidアプリ「かんたん検索」公開

かんたん検索というAndroidタブレットアプリを公開しました。

かんたん検索

パソコンや携帯電話が苦手な人でも簡単に使える、ウェブ検索アプリです。とても簡単に使えるので、Androidタブレットを持っていて、まわりに「パソコンは苦手/使わない」というご家族/ご友人がいれば、ぜひ一度試してもらってみてください。

使い方:

1. 五十音のボタンで調べたい単語を入力して、[検索]ボタンにタッチ。

2. その単語についてのウェブページが表示される。

たったこれだけです。ローマ字入力や漢字変換といった難しい操作は不要です。

注: これはオープンソースのプロジェクトであり、現在所属している会社の製品ではありません。

テスト

一般公開と聞いて作ってみました。こっちに移ってくるかどうかは未定。

  • 無駄に色々スタイルを使ってみるテスト。 

ブログパーツ系は現状無理っぽい?と思ったら出てきた。iframeも使えるのか。プレビューだと出ないんですね…。あと見たまま編集モードで挿入する方法はなさそう?

というかJavaScriptが自由に動くっぽいですね。

あと+1ボタンがあるのを発見。

iframe:

google gadget: