2015年2月28日土曜日

アメリカンスナイパーを観てきました

アメリカンスナイパー


『ネイビー・シールズ最強の狙撃手』としてイラク戦争へ向かった、クリス・カイルさんの実話で、戦争の悲惨さと、心の葛藤をリアルに感じられる映画でした。


映画では厳格な家庭で育ったカイルさんは責任感が強く、ある日「アメリカ同時多発テロ事件」をテレビのニュースで目撃し、衝撃をうけ、国を守るためにイラクへの出兵を心に決める、アメリカ海軍特殊部隊(ネイビーシールズ)のスナイパーとして戦地へむかうことになる。そしてイラクへの4回の従軍、激戦のなか仲間の死や、自らがスナイパーとして人を殺してく度に心が病んでいく様などがリアルに表現されていました。

戦争映画も色々観てきましたが、こういう人の心をリアルに表現して伝えてきた映画はチョット新鮮に感じました。ぜひ映画館でみてみてください。



監督のクリント・イーストウッドさん、この人の監督力は凄まじいですね、最近イーストウッドさんの作る映画が凄くいいです、まぁファンです

戦争は良くないですね、みんなで戦争のない世界を作れないものでしょうか?


2015年2月19日木曜日

haskellの差分リストが地味にエレガントな件

差分リスト


やはり基本が大事ということで、久しぶりに「すごいH本」を読み直していたところ、差分リストに遭遇、ダラダラと読んでいましたが...

「これって地味に凄くねぇ?、ここまで考えて普段、コーディングしたことぇーだろ」

 って感じになってしまって、ついブログをかいてしました。 「すごいH本」ではWriterモナドのログの蓄積方法について、アルゴリズムによっては効率が悪い処理になってしまうよという説明からの、もうクリスがいっちゃうと

* 効率的なリストの結合方法 
n1 ++ (n2 ++ (n3 ++ (n4 ++ (n5 ++ f)))) ・・・右結合


* 非効率なリストの左結合方法
((((n1 ++ n2) ++ n3) ++ n4) ++ n5) ++ f ・・・左結合
細かいことはいいとして、左結合のリストの場合、右側を結合する度に、左側を最初から計算する必要があるため、結合処理が多い場合非効率なコードになってしまうということで、そこで差分リスト

パクる


まず、DiffListの定義、
newtype DiffList a = DiffList { getDiffList :: [a] -> [a] }
DiffListはa型の配列をとってa型の配列を返す関数と定義する

それから、リストからDiffListへの変換関数
toDiffList :: [a] -> DiffList a
toDiffList xs = DiffList (xs++)

それの逆、パターンマッチさせた関数fに[]を食わせてリストに変換する
fromDiffList :: DiffList a -> [a]
fromDiffList (DiffList f) = f []
そしてMonoidクラスのインスタンスへ設定する
import Data.Monoid
instance Monoid (DiffList a) where
    mempty = DiffList (\xs -> [] ++ xs)
    (DiffList f) `mappend` (DiffList g) = DiffList (\xs -> f (g xs))
memptyは単位元の宣言で、かっこいいのはmappend、例えば
f = \xs -> "最近" ++ xs
g = \ys -> "結婚して" ++ ys

f `mappend` g ってすると、\xs -> "最近" ++ ("結婚して" ++ xs)

となるので、これがDiffList (\xs -> f (g xs))になる
算数的に書くと
f(x) = A ++ x
g(y) = B ++ y

f(x) `mappend` g(y) = f(g(y)) = A ++ (B ++ y)
まさに右結合じゃないですか!、、、なんと綺麗な!

使ってみる


*Main> let d1 = toDiffList "最近"
*Main> let d2 = toDiffList "結婚して"
*Main> let d3 = toDiffList "皆からやな奴って言われるようになりました"
*Main> let f = d1 `mappend` d2 `mappend` d3
*Main> putStrLn $ (getDiffList f) []
最近結婚して皆からやな奴って言われるようになりました
*Main> putStrLn $ fromDiffList f
最近結婚して皆からやな奴って言われるようになりました
*Main>

奴は、最近調子に乗ってます

そしてmemptyは
*Main> putStrLn $ fromDiffList $ d3 `mappend` mempty
皆からやな奴って言われるようになりました
*Main> putStrLn $ fromDiffList $ mempty `mappend` d3
皆からやな奴って言われるようになりました 
Monoidしてるね、なるほど、素晴らしい

mappendでDiffListをつなげていって最後に[]で全部をつなげるところなんか

「すげぇー」

って思わない?、haskellっていい

2015年2月14日土曜日

DVDをisoイメージで救出する

腐ったDVDに大事な動画が!


昔のDVDとかCD-ROMなどを整理しろと女房に脅迫されていたので仕方なく早朝から作業を開始したのですが、

何と、「捨てられないDVDを発見!」

でもDVDは腐って傷だらけだし、替えのDVDは今持っていないのでisoで抜きました。

isoで抜き出す


これは簡単です、ddコマンドで救出します、デバイスはdvdが接続されているものをご利用ください
karky7 ~ # dd if=/dev/cdrom of=dvd.iso

抜いたisoを見てみる


Xfce4のparoleでみてみる
cuomo@karky7 ~ $ parole dvd://dvd.iso
ファイルシステムにマウントしたいなら、loopバックデバイスでマウントする
karky7 ~ # mount -t iso9660 -o,loop /home/cuomo/dvd.iso /mnt/cdrom/

みるのは同じ
cuomo@karky7 ~ $ parole dvd:///mnt/cdrom



これでお泊まり保育を救出することができました、決して変なDVDではありません。