トップ 追記

Route 477

過去の日記


2014-08-27

[ubuntu] Ubuntu 14.04でAltを押すとHUDメニューが出てしまう現象を直す方法

最近のUbuntuではAltを押すと検索ウィンドウみたいなやつが出るようになっているが、極めて鬱陶しいので、オフにする方法を調べた。

方法1

システム設定→キーボード→ショートカット→Launchers→「HUDを表示するキー」をクリック→Backspaceを押す→割り当てキーが「無効」になったらOK

環境によってはこれで治る。

方法2

「CompizConfig設定マネージャ」を入れる。

$ sudo apt install compizconfig-settings-manager

Altを押して検索ボックスにcompizとか入力するとCompizConfig設定マネージャが出てくるので、起動する。
「これはadvanced toolなので気をつけて使ってくださいね」というダイアログが出るのでOKを押す。

Ubuntu Unity Plugin→Launcher→一番上のKey to show Dash, Launcher and Help Overlayのキー設定を「無効」にする

僕の環境(MacBook+VMWare Fusion+Ubuntu 14.04)ではこれでいけた。

Ubuntu Unity Plugin→General→Key to show the HUD when tapped という項目もあるけど、これは最初から「無効」になってたと思う。キーを割り当てると検索ボックス部分だけを表示させることができる。

ところで

aptでcompiz-pluginsを入れるとCompizConfig設定マネージャにStatic Application Switcherという項目が追加されて、これを愛用してたのだけど、14.04で使おうと思ったらControl-Tabに割り当てても反応しないようになってて悲しい。

キーボードでアプリケーションをスイッチする場合、「アプリ単位のスイッチ」と「ウィンドウ単位のスイッチ」(つまり、あるアプリのウィンドウが複数ある場合にそれらを区別して表示するもの)の2種類がある。MacのCmd-tabとか、UbuntuデフォルトのAlt-tabは前者なんだけど、個人的にはLinuxのときは後者を使いたいケースが多いんだよね。


2014-08-25

[misc] Markdownで作業メモを取る

なんか社内勉強会でメモ取りの話をするらしいので、自分のやり方を書いておく。
作業メモはいつもテキストで書いてて、昔はHikiDocで書いてたんだけど、最近はMarkdownにしてる。

  • 1行目にタイトルを書く
  • ファイル冒頭にストック的な内容をまとめる
  • ファイル後半を日記として使う

具体的にはこんな感じ。

# <プロジェクト名>  ←プロジェクトごとにメモを分けてるので、ここにタイトルを書く。

## まとめ1

メモは以下のように日付と時刻を入れて記録するが、これはフローとして流れてしまうので、
ストック的なものはファイルの冒頭部分にまとめておく。

## TODO

このへんに直近のTODOを書いたりする。

----  ←この下から日記ですよ、という境界線

<追記するときはここに追記する>

## 2014/08/25  ← 日付。IMEで「きょう」とか変換すると出る

### vim  13:25 ← エントリタイトルと時刻。

時刻はvimのキー操作で自動入力できるようにしている。日付も同時に入れるやつと入れないやつを
<space>imと<space>inに割り当てているが、しょっちゅう間違うのであまり良い割り当てではない。

" input current time
nmap <Space>im  O## <C-R>=strftime("%Y/%m/%d")<CR><CR><CR><ESC><Space>in
nnoremap <Space>in  O###  <C-R>=strftime("%H:%M")<CR><ESC>F<Space>

↑Markdown的にはソースコードは字下げなり```で囲むなりすべきだが、別にHTMLに変換したい
わけではないので、このへんは適当にしている。

### リストについて  12:00

Markdown的に正しい方法で箇条書きを書くと、エディタのハイライトが効くので見やすくなる。

* aaa
* bbb

Markdownでは+, -も箇条書きに使える。HTMLに変換する場合はどちらも同じだが、テキスト上では
+/-をpros/consとして使ったり、TODOとして使ったりすると便利。

+ メリット1
+ メリット2
- デメリット1

- TODO1
  - TODO2
  + DONE1
  + DONE2

仕事だけじゃなくて、趣味のプロジェクトも同様に作業メモを書いている。
ていうかプログラミングに限らず、ゲームのプレイメモとかもこの形式で書いてたりする(ingress.mdとか)。
フロー部分とストック部分を分けておくと、「今考えてることをとりあえず日記として出力する」ということができて便利。


2014-07-08

[ruby] Rails使いが静的サイト作るならmiddlemanがいいよ〜という話をした

最近middlemanを少し触っていたので、社内勉強会でその話をした。

middlemanとは

Ruby製の静的サイトジェネレータ。erbとかmarkdownとかsassとかを書くと、HTMLやCSSにコンパイルしてくれるやつ。
(競合はJekyllとかNanocとかだけどあまり詳しくないので省略)

RubyKaigi 2013のサイトでも使われていたりした。https://github.com/ruby-no-kai/rubykaigi2013

Railsとの親和性

普段Railsのビューを書いてると素のHTMLを書くのが辛くなるけど、middlemanならRailsの便利なあれこれがそのまま使えるので、Railsのビューを書くような感じで静的サイトが作れる。

ディレクトリ構成

middlemanのディレクトリ構成は分かりやすい。
まずsource/以下に.erb、.md、.cssなどを置く。
で、middleman buildコマンドを叩くと、source/以下がまるごとbuild/というディレクトリにコピーされる感じ。その際に.mdから.htmlへの変換や、レイアウトの適用が行われる。
build/以下が完成したサイト一式になるので、あとはrsync等でコピーしてやれば良いというわけ。

チュートリアル

オフィシャルな日本語ドキュメントがあるので、それを参照する。
http://middlemanapp.com/jp/basics/getting-started/

おおむね以下のような感じ。

$ gem install middleman
$ middleman init my_new_website
$ bundle exec middleman server
$ open http://localhost:4567/
$ bundle exec middleman build

プラグインとか

  • middleman-deploy
    • gh-pagesにデプロイするときに便利
  • middleman-blog
    • ブログっぽいものを生成するための公式拡張
    • 動的な部分はerbになってるのでカスタマイズしやすい
    • コメント欄は、TwitterとかDisqusにアウトソース
  • middleman-syntax
    • ソースコードの構文ハイライトを行う
  • font-awesome-middleman

CSSについて

一応プロジェクトテンプレートみたいな仕組みはあるんだけど、これはCSSフレームワークに何を選ぶかとかそういう話で、入れるだけで見た目が格好良くなるやつ(いわゆるテーマ機能)ではない。
http://directory.middlemanapp.com/#/templates/all
ので、Bootstrapが入るテンプレートを使うか、あるいはフリーのCSS素材サイト (http://templated.co/ とか) から一式ダウンロードしてlayout.erbに貼るのが良いかも。

今回はKubeというCSSフレームワークを使った。JSを使っていないシンプルなやつ。


2014-06-20

[haskell][scala] ScalaのEitherとHaskellのEitherはちょっと違うらしい

このへん見てたら、ScalaのEitherはHaskellのとちょっと違って、より柔軟なことができる(代わりに記述が少しだけ増える)らしいという話があって面白かった。
(※自分用のメモなので分かりにくいかもしれないです。)

お題

def index(id:String) = Action {
  Cache.get(id) match {
    case Some(id2) => {
      Cache.get(id2) match {
        case Some(result) => Ok(result)
        case None => NotFound
      }
    }
    case None => NotFound
  }
}

これをどうやって綺麗に書くか、という話。

でHaskellならEither aがモナドだからEitherとdoでこう書けるんだけどという話が出た

getCache :: String -> Maybe String
nanika id = do
  id2 <- getCacheOr id NotFound
  id3 <- getCacheOr id2 BadRequest
  result <- getCacheOr id3 NotFound
  return result
  where
    getCacheOr id nothing = fromMaybe (Left nothing) $ Right <$> getCache id

で、ScalaのEitherではできないのかというと、実は.rightというメソッドがあるんですね。

RightProjection

HaskellのEitherは「Leftはエラー情報を持ち、Rightは成功時のデータを持つ」という使い方を想定してるので、do記法を使った場合は「Rightなら計算を続け、Leftならそこで中止する」という定義になっている。
一方ScalaのEitherは、LeftもRightも等価なものとして扱えるようになっているみたい。そのため生のEitherはforに使えない。

その代わりRightProjection, LeftProjectionをとるとforで使えるようになる。

a :: Either[String, Int]という変数があったとき、a.rightとすると何が返ってくるか。最初はOption[Int]が返るのかな?と思ったのだけど、RightProjectionのインスタンスが返るらしい。これはもとのEitherをラップしたものだけど、flatMapが定義してあって、「Rightなら計算を続け、Leftならそこで中止する」という定義になっている。で、同様にa.leftとやるとLeftProjectionが返って、こっちのflatMapは「Leftなら計算を続け、Rightならそこで中止する」という定義になっていると。

ちなみに

scalazではEither自体もflatMapできるらしい。
http://togetter.com/li/287993?page=5
http://d.hatena.ne.jp/cooldaemon/20111017/1318862426


2014-06-18

[types] Structual Subtyping(構造的部分型)とRow Polymorphism(列多相)ってどう違うの

Well, subtyping and type inference just don't mix. Doing type inference with row polymorphic records is much easier.

結果的には同じだけど、型推論と構造的部分型を組み合わせるのは大変なので、単に自作言語にrecordを入れたいだけなら列多相を使った方が楽だよ、という感じか。


過去の日記