2014/09/23

Kifu for JSを公開,AndroidやiOSで棋譜再生ができるように

Kifu for JSとそのブックマークレットを公開しました.

  • これまで
    • 将棋の棋譜再生盤といえばKifu for FlashやKifu for Java
    • iOSやAndroidでは動かない
  • これから
    • どの環境でも動くJavaScriptで作られたKifu for JS
    • Kifu for FlashやJavaをKifu for JSに置換して表示するブックマークレット

Kifu for JS本体に関してはgithubのREADMEを御覧ください.

ここではブックマークレットの使い方を紹介します.


  1. このリンクをブックマークへ追加する
  2. Kifu for FlashやKifu for Javaが使われているページを開く 
  3. ブックマークレットを開く 
  4. FlashやJava部分が置き換えられ,Kifu for JSの再生盤になる 
以上です.
快適な観る将ライフをお楽しみ下さい.

2014/08/13

モナド教(Monadianity)のサイトについて


補足
  • モナド則を図示してたら天国っぽくなったので当てはめてみた,反省はしていない
  • 新規性: 天国が多重になっている宗教は他にないと思います.
    • 提案手法は,既存天国の問題点(天国が溢れかえる,天国の非現実的描写)を解決しています
  • 空飛ぶスパゲッティモンスター教的な皮肉・ジョーク要素も少し混ぜています.
  • サイト内の宗教っぽい図は1564年のJohn DeeによるMonas Hieroglyphicaからです.哲学の話らしいです.
  • 要望があれば「モナド教で学ぶモナド」も書きます.

Special Thanks (時系列順)
  • Haskellとモナドの平易な理解を促してくださったすごいH本 の筆者,Lipovačaさんと@tanakhさん,村主さん,
  • 2013年圏論勉強会において,圏論とそれを説明する可換図式などのツール,物事の本質とは内的性質ではなく外的関係性であることなどを教えて下さりインスピレーションの素地を作ってくださった@9_tiesさん,
  • モナドへの考察を深めさせてくれる詳細な記述を与え,直接モナド教を発想するに至ったIFPH(関数プログラミング入門) の筆者Birdさんと@nobsunさん,
  • その他これらを確立した学者の方々,
  • サイト公開前にレビューをしてくださった,モナドを予め知っていた/いなかった友人の皆様,
この場を借りて感謝いたします.ありがとうございました.

2014/06/16

ホワイトプランからプリモバイル+Skype電話に切り替えて維持費を月額214円にした

せっかく調べたので公開します.

プリモバイル301Z(左)と旧ガラケー830P

前提

  • ホワイトプランのガラケー所持
    • 家族もホワイトプランであり家族どうし無料通話
  • 携帯ではメールや電話の発信をほとんどしないライトユーザ
    • (インターネット回線と電話回線がくっついていることへ懐疑的)
  • WiMAX,Nexus 7 (Wi-fi)を持ち歩いている
  • 携帯こじ○ではないので複雑なMNP・キャッシュバックは避けたい

現状

  • ホワイトプラン
    • 基本980円/月
    • メール300円/月
    • 電話はソフトバンク宛無料,他は従量20円/30秒
    • 平均して1500円/月で推移
  • 日頃から感じるガラケー使ってなさ
    • 就活前は年4回しか発信してなかった
    • そもそもろくに充電してなかったり

契機

  • 1本のクレーム(他会社宛)の電話をしたところ1620円かかった
    • 従量なので当たり前だが3万円が懸かっていてつい
  • 契約体系見直そう

代案

  • ソフトバンクのプリモバイル
    • チャージ後60日間は発着信,その後360日は着信のみ
      • 途中でチャージすればまた同様の60日+360日になる
      • チャージ最低額は3000円なので,3000円で420日間番号を持てる
    • 着信のみ期間でも緊急通話可能
    • 受け専用にもってこい
    • ホワイトプランの家族がこちらにかけてくる無料が保たれる
  • Skype電話(従量制)
    • 発信が安い
    • (電話番号付与は高い(年7500円)のでしない)
    • 掛け専用にもってこい
    • Nexus 7+WiMAXで発信を行う
  • 上の2つを組み合わせる
  • 参考: Skype電話(月額制)
    • 発信が多い場合は月額制のほうが安い

比較

グレーがかった部分を利用する

ホワイトプラン プリモバイル Skype電話
従量制 月額制(参考)
月間維持費 1,332 ~214
(年3,000(34分無料))
0 130(固定のみ60分無料)
690(固定のみ無制限)
400(60分無料)
790(120分無料)
など
初年月間維持費 (上+機種代等) ~384
(年5,378※1(8分無料※2))
通話従量 softbank宛: 0円
他社宛: 20円/30秒
8.68円/6秒 固定: 4.82円+2.26円/分
携帯: 8.75円+10.81円/分
電話番号 付与 付与 付与なし(+年7500で付与)
緊急通話 可能 可能 不可能
~は"相当"や"換算"の意味.
※1: 301Zキャンペーンは6月末まで.以降6,458円.
※2: (初期チャージ4,000円)-(手数料等3,251円)=749円 が8分間の通話に相当

メリット

  • 月額も従量もホワイトプランより安い
    • 最低維持費が1332円/月から3000円/420日(~214円/月)と月1000円減る
    • 従量料金も1分の通話で40円から7円(固定),19円(携帯)と半分以下に減る
  • 3G圏での着信と緊急電話発信を備え,社会的生存を保てる
  • 縛られない
    • 今どきは2年ごとの更新月でないと契約変更や解約に違約金がかかるらしい

デメリット

  • 家族等ソフトバンク宛通話が無料でなくなる
    • 通常Skypeで補う
  • 現状のホワイトプランから電話番号の引き継ぎができない
    • もし他社の携帯使っていればMNPで可能という皮肉
  • Skypeからの発信は非通知になる
    • 世界中で日本など数カ国だけなぜか非対応
  • WiMAX範囲外では当然Skype通話ができない
    • 通話履歴によりそういうシチュエーションはほぼないと想定
    • いざとなればコンビニで3000円チャージすれば発信可能に

まとめ

プリペイド携帯とSkype電話等のインターネット電話の相性が良いので試してみてはいかが

参考

余談

  • プリモバイル機を持ち込むと,契約手数料3240円+最低チャージ3000円と,買うより高い.
  • 機種変更 = 既存の番号を保ったまま機械やプランを変更すること
    • 機種変更でプリモバイルにすることはできず,今回は新規扱い.
  • ホワイトプラン歴5年以上で,更新月という概念の生まれる前だったため,任意のタイミングで違約金なしの解約ができた.
  • 就職して会社から支給されたら面倒がないのかも.

2014/02/16

最強の音楽サーバーを考える

一般に音楽サーバーといえばストリーミングができるものが想像されるようですが,回線がないまたは共用のものだと帯域が気になりますし,一番頻繁に聴く自宅でも回線を経由するのはスマートでないと思います.

前提

  • 音楽はロスレスでCD3桁枚ある
  • MacBook Pro 256GBを普段持ち歩いている
    • 音楽はあまり入らない
  • Nexus 7を普段持ち歩いている
    • 音楽はあまり入らない
  • 自宅サーバは容量余裕あり

現状

  • MBPにロスレスが一部入っている
  • 外付けに全てが入っている
    • つないだ時しか音楽が聴けない→面倒
  • Nexus 7には入っていない
    • 通学中は聴けない

要望

  • より多くの音楽を聴きたい
  • MBPの容量に余裕を持たせたい
  • 通学中にNexus 7でも聴きたい

最強の構成

  • すべての音楽をサーバに保存
  • A: リモート再生インターフェイスを作成
    • サーバ上の音楽をサーバ上で再生するためのクライアント
    • サーバに直接つながったスピーカーで聴く
  • B: Android用音楽ダウンローダ及び変換サーバを作成
    • Lossyに変換しNexus 7に転送する
    • クライアントで容量上限を設定できその範囲内でやりくりする
    • 何度か聞いたものは削除され新たな音楽に置き換わる
  • 自宅で聴く場合
    • MBPなどでAを立ち上げ再生を指示する
  • 通学中に聴く場合
    • Bがオンラインである適当なタイミングで適当な音楽をダウンロード
    • 好きな時にローカルに保存された音楽を聴く

メリット

  • 自宅では
    • 全ての音楽を聴くことができる
    • スピーカーにMBPを繋ぐ必要がない
    • 音楽が回線を通ることがない
  • 宅外では
    • 変換を考えること無く常に新しい音楽をポータブルできる
  • 容量に悩まなくて済む

デメリット

  • 自宅で音楽以外をスピーカーで再生したい場合,繋ぎ直す必要あり
    • スピーカーで2入力をmixする機能がありケーブルを買えば多分ok
  • 外で聴ける音楽は限定される
    • 優先度などの設定ができれば不満は減るか
    • 回線の安定した場所で全てを聴くためにストリーミング鯖を用意してもいいかも
Aは特にやりたいなと思っています.

2014/01/05

Let's Noteのワイヤレスネットワークが反応しない件

妹の2010年のレッツノートのワイヤレスネットワークが効かなくなり,スイッチをON/OFFしてもうんともすんとも言わなくなった,というか,その状態で何年も使っていたらしい.デバイスマネージャを確認しても有線,VMwareなんとか,WiMAXアダプタしか表示されない.以下の記事を発見.
レッツノートで無線LANが使えない,音が出ない http://matsup.blogspot.jp/2009/04/lan.html
これにほぼならい,次の手順を実行した.
  1. c:\util\wswitch\Setup.exeを起動し,ドライバをアンインストールする
  2. コンピュータを再起動した後(しなくていいかも),上と同じexeを起動し,ドライバをインストールする
  3. 再起動を要求されるため,再起動する
  4. デバイスマネージャのデバイスが1つ増えた!
しばらくしたら接続のところに無線のアクセスポイントが表示された.
スイッチソフトウェアのバグだったということだが,こんな昔から発見されていてもPanasonic側でソフトウェアアップデートをかける術はないんだろうか・・・.

2013/08/16

ApacheでWebSocketを通すリバースプロキシ(mod_proxy_wstunnel)

mod_proxyがWebSocketを通してくれないので困っていましたが,Apache 2.4.5になってmod_proxyがWebSocketも通してくれるようになるモジュールmod_proxy_wstunnelが出来たようです.

まずはApacheのバージョンを2.4.5以降にあげてください.Apache 2.2のままやる方法もあるそうですが知りません.
そうしたらhttpd.confに次のような行が追加されると思います.コメントアウトされていたら外してください.
LoadModule proxy_wstunnel_module libexec/apache24/mod_proxy_wstunnel.so
最後にプロキシの設定をします.
ProxyPassなどは上から順にマッチさせていくので,厳しい条件から書かなくてはいけません.また,httpとwsの2つのプロトコルを同じパスで共存させることはできないようですので,うまくhttpとwebsocketのパスを分けてマッチさせる必要があります.
ProxyPass /socket.io/1/websocket/ ws://81.la:8080/socket.io/1/websocket/
ProxyPass / http://81.la:8080/ retry=3
ProxyPassReverse /socket.io/1/websocket/ ws://81.la:8080/socket.io/1/websocket/
ProxyPassReverse / http://81.la:8080/
上はNode.jsのWebSocketライブラリであるsocket.ioのサーバの設定例です.httpもwsも喋るNodeアプリを8080番で起動し,8080番ポートは開かずに80番のApacheがクライアントとの間を仲介するというようなユースケースです.websocket通信が/socket.io/1/websocket/以下で行われるという前提を利用して条件が書かれています.

2013/07/16

zipWithフィボナッチ関数は正格評価でも書ける

fibs = 0:1:zipWith (+) fibs (tail fibs)
Haskellでフィボナッチ数列を返す関数の一例.2番めを取りに行くとfibsの0番目と1番目を足したものが返り,3番目を取りに行くとfibsの1番目と2番目を足したものが返るというややキモい流れで,これをもって遅延評価怖いとする声があるが,実はこれは正格評価でも問題なく動く.

正格評価で結果を得るには基底部を用意して有限列で止める必要があるため,fibs関数の引数でカウントダウンするようにする.(fibs(n)=フィボナッチ数列のn番目という意味ではないので注意)

function fibs(n){
    return n<=0 ? [] : [0,1].concat(zipWithPlus(fibs(n-1), fibs(n-1).slice(1)));
}

function zipWithPlus(arr1, arr2){
    return arr1.map(function(e, n){return e+arr2[n]}).slice(0,arr2.length);
}

nが0になったら空配列を返す以外はHaskellの場合と変わっていない.

なお,Wikipediaにはこのfibsの定義を「共再帰の例」と書いてあるが,corecursionの訳としては余再帰が正しい.(coに対するcontraが存在すれば「共〜」と「反〜」という訳が当てはまる.)余再帰とは圏論でいう再帰の双対概念である.圏論勉強会 at ワークスアプリケーションズで聞きかじったところによると,F始代数にあたるデータ型を帰納的データ型(inductive data type),F終余代数にあたるデータ型を余帰納的データ型(coinductive data type)と呼び,前者が有限,後者が無限のデータ型を扱えるらしい.Wikipediaではcorecursionの実例としてこのfibsを与えているが,要は無限データ列を返す再帰関数なら全部corecursionなのだろう.