YoshikuniJujo's avatar
YoshikuniJujo
YoshikuniJujo@yoshikunijujo.github.io
npub1a7y7...fdm2
Haskell好き
アルゴリズムで焼きなまし法みたいなのなかったかな
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
foldlという関数を見ると、いろいろと話したくなるのがHaskellerの性なのだけど、まあすごく簡単に言うと、「昔はスペースリークの関係でfoldlではなくfoldl'を使えと言われていたけど、今はfoldlとfoldl'は同じものなのでfoldlを使えばいい」という話で、一周して意味のない話になる。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
スリープソート リストを返す版 {-# LANGUAGE BlockArguments #-} import Control.Concurrent import Control.Concurrent.STM import Data.Function sort :: [Int] -> IO [Int] sort ns = do c <- atomically newTChan mapM_ (forkIO . single c) ns threadDelay 1000000 atomically $ fix \go -> do e <- isEmptyTChan c if e then pure [] else (:) <$> readTChan c <*> go single :: TChan Int -> Int -> IO () single c n = threadDelay (n * 1000) >> atomically (writeTChan c n)
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
sleep sortの単純な実装。結果はstdoutに出してる。 import Control.Concurrent sort :: [Int] -> IO () sort ns = do mapM_ (forkIO.single) ns threadDelay 1000000 single :: Int -> IO () single n = threadDelay (n * 1000) >> print n
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
カリー化って厳密に言うとHaskellで言うカリー化と他の言語で言うカリー化とは、すこしズレてるように思ったことがある。忘れちゃったけど。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
スリープソートは並行実行の説明をするときに、「スリープソートというのがありまして...」みたいに、つかみとして使えるかと
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
Haskell Brooks Curryさんは、とりあえず3つの言語に名前を残している。 Haskell Brook Curry さらにカリー化とかカリー=ハワード同型対応などなど、「名前残しすぎ」問題。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
僕が3大ソートって勝手に呼んでるのが マージ クイック ヒープ だ。 どれも「分けて」から「組み立てる」というやりかたでO(n log n)を実現してるのだけど、どの時点で「比較と並べ替え」をしているかで見ると面白い。 マージソートは「分ける」ときはそのままで「組み立てのときに比較と並び替え」をしている。 クイックソートは「分けながら比較と並び替え」をしていて「組み立てる」ときにはそのままにしている。 でヒープソートは「分けるときと組み立てるときの両方」で「比較と並び替え」をしている。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
ネタ枠としてはボゴソートとスリープソートあたりを覚えておけばいいかな。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
ソートは「ひとつだけ覚えておく」ならマージソートがいい。クイックソートみたいな落とし穴もない優等生。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
ソートは僕はヒープソートが好きなのだけど、でも時代はヒープソートを求めていないという。 アルゴリズム的にはすごい「美しい」。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
Jamiはpeer-to-peerなのだけど、接続したい相手を指定はどうするのかな。 固定IPが必要とかだとハードルが高い。 その部分だけ中央サーバがあるのかもしれない。 つまり、中央サーバにアカウントとIPアドレスを登録しておいて、接続したい側はそのサーバに問い合わせる感じか。 でIPアドレスがわかればあとはpeer-to-peerで接続できると思う。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
Gentoo LinuxからWebカメラを使うのもずいぶん簡単になった。 emerge libv4l としてから qvidcap ってするだけで、とりあえず動作確認ができた。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
HaskellでStackを使ってると、カレントディレクトリ化に作られる.stack/下にだだーっていろんなパッケージがビルドされて、しかもバージョンアップごとにたまっていく。で、ビルドされるものなので速度も欲しいし容量も欲しいのでSSDにしてもHDDにしても、どうにも快適ではない。 Stackの仕様がそもそもHDD時代の「水と容量はただ」的考えかたから来てるのだと思う。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
もうしばらく自作してないのだけど、このあいだドスパラでパンフレットだけもらってきた。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
HDDからSSDへの移行って、人間がはじめて経験する「記憶容量の減少」な気がする。 「古いファイルを消さない」という習慣が身についていたので、ディスク容量がすぐ100%になってしまう。 よく使うファイルをSSDに置き、あまり使わないファイルはHDDに置くみたいな、そういう仕組みが必要。というこすでにあるんじゃないかって気はする。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
そろそろPC1台組みたいなという気持ちもなくはないのだけど、場所取るんだよなー 小さいのだと選択肢がかなりせばまるし。 一時期はインテルのマザーボードがLinuxのインストールという観点から安心感があったけど、今はどうなのだろうか。
YoshikuniJujo's avatar
YoshikuniJujo 2 weeks ago
個人的にはPC光るのは嫌いではない。チープさが好き