Pixel Pedals of Tomakomai

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

monadiusを動かす

12年前に書かれた http://www.geocities.jp/takascience/haskell/monadius_ja.html を手元で動かした。と言っても、ほぼ手を加えずにそのまま動いた。

$ diff -ur monadius.BK/ monadius
diff -ur monadius.BK/src/Main.hs monadius/src/Main.hs
--- monadius.BK/src/Main.hs     2017-05-16 08:02:04.566956400 +0900
+++ monadius/src/Main.hs        2017-05-16 08:08:18.524217900 +0900
@@ -49,7 +49,8 @@
 loadReplay::String-> IO ReplayInfo
 loadReplay filename = readFile filename >>= (return.read)

-main = withMusic $ do
+main = withMusic $ do
+  getArgsAndInitialize
   args <-getArgs
   putDebugStrLn $ show args

@@ -109,7 +110,7 @@
   mainLoop
   destroyWindow curwnd

-  `catch` (\exc -> return ())
+  `catch` (\exc -> print (exc :: SomeException))

   where
   getReplayFilename args = if length candidates == 0 then Nothing else Just (head candidates) where
@@ -119,7 +120,7 @@
   removesuffix str = if '.' `elem` str then (removesuffix.init) str else str

 exitLoop = do
-  throwIO $ ExitException ExitSuccess
+  exitWith ExitSuccess

 initMatrix = do
   viewport $= (Position 0 0,Size 640 480)
@@ -375,9 +376,9 @@

 closeProc = do
   putDebugStrLn "closed"
-  throwIO $ ExitException ExitSuccess
+  exitWith ExitSuccess


 savePoints = [0,1280,3000,6080]

-
\ No newline at end of file
+

diff -ur monadius.BK/src/Monadius.hs monadius/src/Monadius.hs
--- monadius.BK/src/Monadius.hs 2017-05-16 08:02:04.582583000 +0900
+++ monadius/src/Monadius.hs    2017-05-16 08:02:24.097737300 +0900
@@ -5,7 +5,7 @@
   shotButton,missileButton,powerUpButton,upButton,downButton,leftButton,rightButton,selfDestructButton
 )where

-import Graphics.UI.GLUT hiding (position)
+import Graphics.UI.GLUT hiding (position, DebugMessage)
 import Graphics.Rendering.OpenGL.GLU
 import Control.Exception
 import Control.Monad

freeglut導入済みのmingw64でビルド。Windows上でビルドしたので音も出る。Cのコードも入っているので注意。

$ cd src
$ stack exec makefile.bat

と、これで動いたのだけど、5年前に自分で作ったパッチ を見ると、 (_, args) <- getArgsAndInitialize とするのが正しいらしい。まあいいや。

ちなみに、 Surface Book 上で動かしているのだけど、微妙に動きに引っかかりを感じる。引っかかる程度でほぼなめらかには動いているのだけど。

2017/5/18追記: hackageにも上がってた

shu-thing (シューティングもどき) を動かす

12年前にhaskellで書かれた shu-thing を手元で動かした。と言っても、ほとんど何もせずに動いてしまった。

@@ -10,6 +10,7 @@
 import System.Process

 main = do
+  getArgsAndInitialize
   keystate <- newIORef []
   cp       <- newIORef (openingProc keystate)
   initialWindowSize $= Size 640 480
@@ -44,9 +45,9 @@
   mainLoop
   destroyWindow wnd

-  `catch` (\exc -> return ())
+  `catch` (\exc -> print (exc :: SomeException))

-exitLoop = throwIO $ ExitException ExitSuccess
+exitLoop = exitWith ExitSuccess

 initMatrix = do
   viewport $= (Position 0 0,Size 640 480)
@@ -184,7 +185,7 @@

 closeProc = do
   putStrLn "closed"
-  throwIO $ ExitException ExitSuccess
+  exitWith ExitSuccess

 bosstime=6600
 bosstime2=7200
$ stack ghc -- -o shu-thing.exe gl.hs
[1 of 1] Compiling Main             ( gl.hs, gl.o )
Linking shu-thing.exe ...

freeglut 入りの mingw64 でビルド、実行している。

2017/5/18追記: hackageにも上がってた

Mac Pro と BRAVIA の HDMI 接続

Mac Pro(ゴミ箱) と sonyBRAVIAHDMI で繋いでいるのだけど、まったく安定しない。具体的に言うと、認識しないことがほとんど。BRAVIAMac Proの電源をON OFFしつつHDMIケーブルをポートを変えつつ何度も何度も何度も何度も何度も何度も差し替えると、運良く映る日もある。映らない日がほとんど。

なので、悲しいことに VNC で接続している。

今日は、PS4 Proが使っているHDMIケーブルに差し替えてみたら繋がった。けど、Mac Proが使っているケーブルでPS4 Proは接続できているので、ケーブルは悪くない。まったく切り分けができない。

Slackのstarとmute、joinの使い方

最近チャネルが増えてSlackを見るのが大変だったので改善した。社内で投稿したものだが、設定を変えてから快適になったので紹介する。

変更前のチャネルの管理方針

重要っぽいかそうでないかでなんとなく分けていた。大事っぽかったらstarで、大事じゃないけど居ないと不審に思われそうなチャネルをmuteにして仕方なく居残るみたいな設定。

  • star : 重要そうなチャネル
  • starもmuteもしない : そんなに重要じゃない普通のチャネル
  • mute : 一応、入ってるよってことを他の人にアピールはしたいチャネル
  • leaveする : 抜けても他の人から怒られなさそうなチャネル

この方針で使っていて、未読が大量に溜まって読みきれないというe-mailのメーラーと似たような状況が起こっていた。それと、muteの設定で入っている部屋をまったく開かないので、もはやなんのために入っているのかわからない状態だった。

方針を明確にしてチャネルを整理

情報を得る、という観点でまったく別の角度から整理した。

まず、前提としてチームの Preferences の Advanced の設定で “My unread, along with everything I’ve starred.” に変更しておく。 この設定にしておくことが今回の方針で肝 になる。

チャネルの設定は、以下の定義に照らし合わせて機械的に決める。

  • star : 発言することが多いチャネル
    • 次点として、過去ログを頻繁に読むチャネル
  • starもmuteもしない : 全部の発言を読むチャネル
  • mute : たまに発言を読むチャネル (特に、今、動きがあるかを知りたい)
  • leaveする : 1つも発言を読む必要のないチャネル

この設定にしたおかげで、未読が溜まりすぎて読まずに既読にするといったことは無くなった。また、muteのチャネルも頻繁に覗くようになった。

どうしてこう決めたかの解説

まず、チャネルにstarをつけると常にリストに出るようになる。特に発言数の少ないチャンネルの場合、"My unread, along with everything I’ve starred.“ の状態ではstarしてなければリストから消えることが多く、チャンネルリストから検索しないと発言できない。ので、starにしておくと捗る。過去ログを読むことに関しても同じ観点での判断。

逆に発言をしないチャネルは読むだけなので、starにする必要はない。新しい発言があれば勝手にチャネルリストに上がってくる。そうすると、既読の管理や All unreads タブで見えるかどうかが次の判断材料となる。既読が管理されているということはすべての発言を読む気があるという意味。

muteにすると、発言があった場合に白字ではないが灰色の字でチャネルリストに上がってくる。動きがあるかを知りたいだけであればこれで十分である。その代わり、 チャンネルリストを目視する時に灰色のチャネルの存在も無視しないように注意する 、という習慣が必要となる。muteのチャネルが未読でリストに上がってくるときの色は非常に暗く目が勝手に無視してしまいがちなので、これは意識的にやらなければならない。

ということで、情報収集ツールとして「チーム全体がどういう動きをしているのかをなんとなく知りたい」という観点だと、muteでjoinするチャネルが増えるのかなと思ってる。滅多に読まなくてもちょっとでも発言を読む可能性があるのであれば leave するのはもったいない。

VS 2017でrustを使う

Surface Studio に rust をインストールしようと思ったんだけど、 Microsoft Visual C++ Build Tools 2015 が要るらしい。せっかくなので Visual Studio 2017 使おうと思って探したんだけど、パッケージングの仕方が変わってるぽい。

まず、 このエントリ の説明に沿ってbuild tool相当のコンポーネントをインストール

でもって、 https://github.com/rust-lang/rust/issues/38584#issuecomment-285879556 で言われているように "x64 Native Tools" 経由でプロンプトを立ち上げて、そこで rustup-init.exe を実行したらインストールすることができた。もちろん、 rustc コマンドなどを叩くときも "x64 Native Tools" 経由で叩かなければならない。

rustup-init.exe や rustc が VS 2017 へ対応されるまでのワークアラウンド、だと思う。

Alternative preludes

Alternative preludes – Haskell – Aelve Guide

Preludeの代替品の評価。どれも一長一短感ある。

自分のモチベーションはpartial functionよりも Text なんだけど、 Text にまとめたいと思いつつも、結局パッケージを使う以上は現状では String からは逃れられない運命であって、それならそんなにパフォーマンスに寄与しない短い String はそのままでもいいのではってなる。結果、でかい文字列だけ text パッケージで扱えばいいので Prelude でも十分ていう。