Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

Surface Studio の電源が落ちた

昨日の午前中までは安定していたSurface Studioが、昨日の午後から突然画面が暗転するようになってしまった。初めスリープから復帰できずにシャットダウンしたので、 Surface Book がスリープからの復帰がかなり不安定だったこともあってそれと同じかなくらいに思っていた。

ところが、その後電源を上げても、5分程度でまた暗転してしまう。いくら立ち上げても暗転するので、ほんとビビった。結果としてコンセントをタップから根本に差し直したところ安定したのだけど、これが原因かはわからない。暗転時に、本体から今まで聞いたことがないWindows10のサウンドが聞こえていたので、それが関係あるのかもしれない。今度発生したら録音する。

ghcと文字コードとWindowsと

ghc さんは、エラーメッセージに ascii の範囲外の文字を平気で使ってくる。これ、環境によってはハマるので勘弁して欲しい。具体的にはWindowsなんだけど。

例えばこんなメッセージ。

Prelude> 3 / 4 :: Int

<interactive>:1:1: error:
    • No instance for (Fractional Int) arising from a use of ‘/’
    • In the expression: 3 / 4 :: Int
      In an equation for ‘it’: it = 3 / 4 :: Int

メッセージ作ってる ここ とか ここ を見る限り、環境によっては使わないっぽい。この使うかの判定は ここ でやってる。ロケールエンコーディング"‘’" が可逆に変換できるか見てるっぽい。可逆であればいいので、ロケールがユーザが望むエンコーディングに設定されているかは関係ない。つまり、文字化けの起こる状況でも容赦なく使ってくる。

で、 localeEncoding がどう決まるかだが、 Windowsか否かで判定が別れているWindowsだと code pageを使って判定している ようで、 chcp 65001 している環境だと UTF-8 になる。 932 の状態だと CP932 で入出力を扱おうとするので、 UTF-8 を期待するようなツールがどっかに入っていると面倒なことになる。というか、今時 CP932 でも動くことを想定したツールなんてほとんど無い気がする。

入門Haskell(10年前の本)

久々に入門Haskellのsamegameを作る章を読んだ。本を買った当時は頭に入ってこなくて流し読みしかしなかった記憶があるけど、今読むと書いてあることはシンプルだった。

この本に問題があるわけではなく10年前の本なので当たり前だけど、なんだかなあと思うところが多々ある。

  • なんでもかんでも mapfilterzipfoldr で済ませようとする
  • なんでもかんでも 1 行で書こうとする
  • where が大好き *1
  • トップレベルの識別子にも型定義してない
  • 2016年ではWin上で HGL はビルドできなかった・・・

この関数とか。

filterBoard :: (Pt -> a -> Bool) -> [[a]] -> [[a]]
filterBoard f board = filter ((/=0).length) $ zipWith (\x column -> concat $ zipWith (\y v -> if f (x, y) v then [v] else []) [0..] column) [0..] board

zipfilter で押し通すにしても、無理せずこれくらいに分けて書いていいんじゃないって思うわけ。

import Data.List (zip3)

filterBoard f board =
  let numbered = zipWith (\x column -> zip3 (repeat x) [0..] column) [0..] board
      filtered = map (map trd . filter f') numbered
  in  filter ((/= 0) . length) filtered
  where
    f' (x, y, column) = f (x, y) column
    trd (_, _, x) = x

*1:let .. in .. 派なものですみません・・・

tls周りが遅くて悲しい

昨日のプログラム のプロファイリング取った。

...
           tlsManagerSettings                                                                                                Network.HTTP.Client.TLS               51910          0    0.0    0.0    87.7   92.5
            mkManagerSettings                                                                                                Network.HTTP.Client.TLS               51911          0    0.0    0.0    87.7   92.5
...
                           decodeLenient                                                                                     Data.ByteString.Base64.Lazy           55231          0    7.0    8.5    52.5   49.7
                            decodeLenient                                                                                    Data.ByteString.Base64                55235     162720    0.1    0.0    42.7   41.0

処理時間の 52.5% が Data.ByteString.Base64.Lazy に費やされているそうで、すごく悲しい。16万回呼ばれてるのね

【追記】 改善できたのでQiitaへ書いた

ストーカー、始めました

冬休みの工作。

lotz84さんが https://github.com/lotz84/haskell/Haskellのブックマークをガンガン更新していて、これはいいものだと思ったのでストーカーするバッチを書いた。 soozy.slack.com *1 の #haskell というほとんど誰も使っていない部屋に更新ログを流している*2

さくっとHaskellで書いたのだけど、大したことしてないくせに動かすたびにCPUを30%くらい持ってってる。なんか癪に障るので後で調べたい。

*1:登録用の http://soozy.fushihara.net/ が落ちているので id:mikihoshi さんと連絡を取るしかなさげ。

*2:このエントリを書いてる現在、まだ一件も流れていない

Surface Studio を買った

ここ数年年末に散財することが多いのだけど、今年は Surface Studio を買った。Surface Pro3、Surface Bookと買い進めてSurface製品の3台目。 10/26 日の発表直後にpreorderして、手元に届いたのは 12/19 だった。i7のモデルを選んだので、本来発送開始が来年1月の予定だったのだけど、12/6に出荷が早まったから喜べってメールが来て、12/13に倉庫から出庫された。早期出荷してくるとは心憎い。普通のモデルの発売日が本来12/15だったので、それと比べても予想よりも早く手に入った形になる。

転送サービスは 1WorldShopping.com を使っているのだけど、今回はこちら側が荷物の追跡番号を間違えてしまってやりとりが色々大変だった。英語のみしか対応してないと思って日本時間の日中に英語でメールをして反応がなくてヤキモキしていたのだけど、このサービスは日本語のメール受付用のアドレスがあり、日本の日中にはある程度日本語がわかるスタッフが担当してくれていて1~2時間程度で返事をくれる。最後まできちんと対応してもらえて助かった。

A photo posted by Hira Tara (@hiratara) on

触ってみると、やはり 4500x3000 のディスプレイは大きい。 virtual boxでゲストディスプレイのサイズが大きすぎるとバグる という問題も引いてしまって嬉しい悲鳴である。結局ダイアルもペンもまだ一度も使ってないのでstudio感はまだまったくないが、これから何か面白い使い方を見つけられたらいいなあと思っている。

AWSにドブ課金するよ

AWS を含めたクラウドは商売のやり方が昔から本当に嫌いで個人では絶対触りたくないのだけど、そうも言ってられない時代なので今後はどっぷりと課金していく決意をする。

久々なので IAM 周りを色々と見て、問題なさそうなことを確認。

http://dev.classmethod.jp/cloud/aws/after_get_aws_account/ を見ながら課金周りのアラートを弄ってみたのだが、これ、複数アカウントで支払いをまとめてない限り特に要らないってことに気がつく。まあ色々触るリハビリにはちょうどよかったのでいいや。

不思議なもので、ドブに捨てるように課金すると決めると、触るのが楽しくなるのである。色々と使い倒して今日設定した課金のアラートも動くか見ておきたい。