久々に自作PCやりたいな
「圧縮」の前に「値をかたよらせる」ってのは、よく行われる手法のひとつ。PNGの場合「となり合う値は似ていることが多いので差を求めるとWord8で言うところの小さい方と大きい方にかたよりがち」という話。
組み立てPC
分割統治っていうとアルゴリズムのほうを思っちゃうけど、本来の意味は被支配者同士を争わせることで統治しやすくすることで、まあいわゆるポピュリズムのやることってのが、これ。
自分で書いたコードなのに「?」ってなったやつ
calc :: [Word8] -> Int
calc = sum . (^ (2 :: Int)) . fromIntegral . fromIntegral @_ @Int8 <$>)
「なんでfromIntegral2回もやってんの?」って思って思い出した。
このコードはWord8の複数の値ができるだけ小さい方と大きい方にかたまるものを選ぶために、Word8をInt8に変換することで、その条件を「0に近いもの」にしたうえで、それを二乗して総和を取っている。
何かっていうとPNGのフィルタの結果で一番良いと思われるものを選ぶもので、できるだけ値をかたよらせたほうが以降の圧縮に有利という話。
「色」ってのは具体的な物と抽象的な概念のちょうど真ん中あたりにある気がする
goroutineおもしろい。HaskellだとSTMのTChanを使って同様のことができる。
wとかhってわりとよく使うので、widthとかheightを意味するときはwdtとhgtにするようにしようかな。
おもち
cons :: a -> [a] -> [a]
snoc :: [a] -> a -> [a]
uncons :: [a] -> Maybe (a, [a])
unsnoc :: [a] -> Maybe ([a], a)
このあたりの命名、好き。