読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

man introとcalコマンド

月末って何曜日だっけとかってときいつもgoogleカレンダー開いてたんだけど、これでいいじゃん。知らなかった・・・。

ubuntu:~$ cal
      May 2017
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

man 1 intro したら書いてあった。 man intro なんて初めて使ったし、そもそも man の基本的な使い方もわかってないよね。適切な情報を得る術を知らずに何年も費やしても、まともな知識は得られないってことだね。

VMWareのインストール

最近ずっとVirtualBoxを使っていたのだけど、3Dアクセラレーションを有効にするとOpenGLがまともに動かなかったので、代わりとして久々にVMWareを入れてみた。

Ubuntu 17.04 を入れたんだけど、 Install VMWare tools が動かなかったので、 /media/ユーザ名/VMWare\ Tools 以下のファイルを /tmp へ展開し、手で ./vmware-install.pl を叩いて入れた。途中 ifconfig がなくて怒られたので、 sudo apt-get update sudo apt install net-tools した上で /sbin/ifconfig を手で指定したら動いたっぽい。

目的だったOpenGLは、すんなりと動いてくれた。後、VirtualBoxディスプレイが大き過ぎるとゲストOSのディスプレイサイズがバグる というしょーもない問題も起きなくなった。このまま乗り換えたほうがいいんじゃないかってくらい快適。

もう少し弄って満足したらそのまま乗り換える。

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にも上がってた

久々にoptparse-applicative使った

いつも optparse-applicative ってどう使うんだっけって悩むのだけど、 philoponさんのエントリ を見ながらやるとトップダウンにコードを書けてすごくよかった。

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 するのはもったいない。