elscreen のタブを一定時間だけ表示

縦に画面分割して ediff とかすると
elscreen の タブの高さだけ
diff で違いのあった行の高さがずれます。

↓ 1 行分ズレている例
f:id:nishikawasasaki:20160131190550p:plain

diff 側や elscreen 側にも
ズレをなおす設定があるのかもしれないけれど、
タブバーが常に表示されている必要もないなということで
タブ切り替え直後だけ表示してその後消えるようにしてみた。

タイマーの使い方、もっと良い方法ありそう。

  (defun temp-display-tab ()
    ;; 一定時間タブを表示
    (setq elscreen-display-tab t)
    (run-at-time "1.5 sec" nil
                 #'(lambda ()
                     (setq elscreen-display-tab nil)
                     (elscreen-notify-screen-modification 'force))))

  (advice-add 'elscreen-next :after #'temp-display-tab)
  (advice-add 'elscreen-previous :after #'temp-display-tab)

2015 のお酒 (日本酒編)

日本酒

今年もかなり飲んだけど、
年々写真に残さなくなっていってる。
飲んでそのままなのももったいないので
来年は記録をつけたい、といまは思っています。
のんだら忘れそう。

ビール編・その他編も気が向いたら残しておきたい。

1 月

近所の焼鳥屋さんで櫻正宗

2 月

広島帰省中の雨後の月 3 種のみくらべ

これも帰省中

牡蠣と日本酒

またもや帰省中の

広島で買って帰った 1 本

土産の定番・幻

3 月

いろいろとドタバタしていて記録のない月。
飲んでないわけ無いのに……。

4 月

どこだろう……花見?

5 月

繁桝はおいしい

金冠黒松もおいしい

6 月

石川旅行への布石

まんさくの花もおいしい

馬肉と日本酒もおいしい

7 月

滋賀のお酒もおいしい

滋賀の

滋賀の

滋賀の

さっぱりと夏の燗酒も良い

8 月

イワシとお酒もおいしい

タンク違いで飲むのもおいしい

にごりと辛口もおいしい

燻製と日本酒もおいしい

山廃もおいしい

鯉雄町もおいしい

カップ酒もおいしい

9 月

日本酒の写真の無い月。 ビールの写真は多い月。

10 月

おでんとお酒もおいしい

赤いラベルでおいしい

11 月

3日連続灘五郷飲み比べもおいしい

すっきりもおいしい

名前もないようなどぶろくもおいしい

金沢の回転寿司で飲むのもおいしい

金沢おでんとお酒もおいしい

12 月

近所で買えた雁木もおいしい

力があっておいしい

東京で飲むお酒もおいしい

同期と忘年会で飲むお酒もおいしい

忘年会で飲み過ぎてもおいしい

☃もおいしい

まだ年末残りの日で飲みそうだ……

12 月の追加分

蜜のような甘さでおしまい?

また今晩増えそうな気も……

xmonad で狙った位置にフロートウィンドウを表示する

すごく簡単そうなのになかなかやり方が (日本語で) 見つからなかったので
備忘録的にメモ。

使うもの

XMonad.Util.NamedScratchpad
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Util-NamedScratchpad.html

設定

まずはインポートになければ追加。

import XMonad.StackSet as W
import XMonad.ManageHook
import XMonad.Util.NamedScratchpad

今回は試しに Thunderbird のメッセージ作成ウィンドウを
画面の右端に高さは上下 (ほぼ) 最大、
幅は 70 文字程度を確保する設定です。

customFloating に表示位置や長さを渡してやるので

doXXXFloat = customFloating $ W.RationalRect (表示 X 位置) (表示 Y 位置) (幅) (高さ)

とつくっていくので、

myManageHook = composeAll
    [ className =? "Thunderbird" <&&> resource =? "Msgcompose" --> doRightFloat
    , resource  =? "kdesktop"       --> doIgnore ]
    where
      doRightFloat = customFloating $ W.RationalRect (4.5/6) (0.1/6) (1/4) (4.9/5)  -- 左上から x y 幅 高

のように

  • X
    ほぼ最大にして一番右へ。ウィンドウサイズ分加減。
  • Y
    一番上からでいいのでほぼ 0。 xmobar のサイズ分加減。

  • 70 文字程度がちょうど 1/4。
  • 高さ
    画面上から下まで最大で使いたいのでほぼ 1。xmobar サイズ分加減。

して使いました。

位置やサイズを変えてやれば
画面下に表示したり、中央に表示したりできますね。

clojure から hive へ接続する

jdbc を利用して hiveserver2 へ接続してみたメモ。
hive のバージョンと hive-jdbc のバージョンが問題に。。。

まず

ライブラリ類のバージョンをとりあえず新しい物を探してきて

[org.clojure/java.jdbc "0.4.2"]
[org.apache.hive/hive-jdbc "0.13.0"]
[org.apache.hadoop/hadoop-core "1.0.3"]

と指定して

(def hive-db {:subprotocol "hive2"
              :classname "org.apache.hive.jdbc.HiveDriver"
              :subname "//xxxxxxx:10000/xxx"
              :user "aaa"
              :password "bbb"})

と設定して接続すると、

java.sql.SQLException: Could not establish connection to jdbc:hive2://xxxxxxx:10000/xxx: Required field 'client_protocol' is unset!
Struct:TOpenSessionReq(client_protocol:null)

となって失敗。
hive のバージョンと hive-jdbc のバージョンが違うと起こるらしい。

[HIVE-6050] Newer versions of JDBC driver does not work with older HiveServer2 - ASF JIRA
https://issues.apache.org/jira/browse/HIVE-6050

hiveserver2 のバージョンを調べるため

ps -ef | grep HiveServer2

とプロセスから調べてみると、
使っている hive のバージョンは 0.10 なので
hive-jdbc 0.13.0 では動かず?

hive-jdbc 0.10.0 (失敗)

hive-jdbc のバージョンを hive と揃えてみた。

[org.clojure/java.jdbc "0.4.2"]
[org.apache.hive/hive-jdbc "0.10.0"]
[org.apache.hadoop/hadoop-core "1.0.3"]

これで実行すると今度は

Could not find artifact javax.jdo:jdo2-api:jar:2.3-ec in central (https://repo1.maven.org/maven2/)
Could not find artifact javax.jdo:jdo2-api:jar:2.3-ec in clojars (https://clojars.org/repo/)
Could not find artifact sqlline:sqlline:jar:1_0_2 in central (https://repo1.maven.org/maven2/)
Could not find artifact sqlline:sqlline:jar:1_0_2 in clojars (https://clojars.org/repo/)

と依存性が解決できず。。

解決できなかった jar は spring のリポジトリにあったので
ひとまず

:repositories {"spring" "http://repo.spring.io/libs-milestone/"}

を追加して再実行。

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:hive2://xxxxxxx:10000/xxx,
compiling:(C:\msys64\tmp\form-init2223412939380166071.clj:1:85)

0.10 には

:subprotocol "hive"
:classname "org.apache.hadoop.hive.jdbc.HiveDriver"

と指定するものらしい。

hive-jdbc 0.11.0

接続を

:subprotocol "hive2"
:classname "org.apache.hive.jdbc.HiveDriver"

に戻して
利用する hive-jdbc を 0.11.0 とするために

[org.apache.hive/hive-jdbc "0.11.0"]

を指定。

すると

(ns testtesttest.main
  (:require [clojure.java.jdbc :as j]))

  (def hive-db {:subprotocol "hive2"
                :classname "org.apache.hive.jdbc.HiveDriver"
                :subname "//xxxxxxx:10000/xxx"
                :user "aaa"
                :password "bbb"})

(defn tables []
  (j/query hive-db
    [(str "show tables")]
   :row-fn println))

   (defn -main [& args]
     (tables))

を実行すると

WARNING!!! version ranges found for:
[org.apache.hive/hive-jdbc "0.11.0"] -> [org.apache.hive/hive-cli "0.11.0"] -> [org.apache.hive/hive-service "0.11.0"] -> [org.apache.hive/hive-exec "0.11.0"] -> [org.apache.hive/hive-metastore "0.11.0"] -> [org.datanucleus/datanucleus-enhancer "2.0.3"] -> [asm "[3.0,4.0)"]
Consider using [org.apache.hive/hive-jdbc "0.11.0" :exclusions [asm]].

依存性の警告が出ますが

{:tab_name zzz}
{:tab_name yyy}
.
.
.

と結果が取得できました。

念のため 0.12.0

0.13.0 同様に
client_protocol が指定されていないエラーで失敗しました。

まとめ

hive 0.10 で hiveserver2 を起動しているときは
hive-jdbc 0.11.0 で接続。

(いろいろ試した結果からの答えなので
セオリーや王道があれば教えていただけると助かります。。)

さて次は取得したデータをエクセルへ出力……

Scala 関西 Summit 2015 で LT をしてきました

「せっかくだから LT に応募してみては」と声をかけていただいて、
08/01 (土) の "Scala関西 Summit 2015" で LT をする機会をもらいました。

Scala関西 Summit 2015 - 関西初のScala大規模イベント8/1(土)開催
http://summit.scala-kansai.org/

社外でお話する機会は (仕事以外で) 久しぶりだったので
緊張するかなーなんて心配でしたが、
会場の大阪市中央公会堂というロケーションが素晴らしく
楽しい気持ちのままあっという間の時間でした。

f:id:nishikawasasaki:20150802231026j:plain
f:id:nishikawasasaki:20150802231139j:plain
f:id:nishikawasasaki:20150802231201j:plain

お話した内容はなにもスライド公開することもないような、
Scala を自分がリードして現場に持ち込むために

  • 日頃の信頼を得るためアピールする
  • 小さな事例から積み重ねる
  • 最終的に自分がなんとかする覚悟
  • レビューや CI といった開発環境の整備
  • 最初から 100% じゃなくても良い、少しずつリファクタリング
  • コーディングが楽しくなればモチベーションもあがる

という内容でした。
LT あとのパネルトークの中でも
だいたい同じようなお話をされていた (と思ってる) ので
大きく間違ってはいないかなと (勝手に) 思っています。

LT しておいてなんですが、
これって Scala に限った話ではないんですよね。
環境をよくして無理に 100% 狙わずに
与えられた時間でできるだけ良いモノを。
追加で、言い出したんなら責任とる覚悟。
プログラミングでも仕事でも似たようなものだと思ってます。

とても良い機会をいただきましたし、すごい盛り上がりで
ものすごく暑い中スタッフの皆様おつかれさまです&ありがとうございました!!

vim の grep に ag を使う際のオプション

超久しぶりに vim を使ってみようと 0 から設定してました。

Unite -auto-preview grep

したいので、昔ながらに

if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  let g:unite_source_grep_recursive_opt = ''
endif

してみたんですが、
検索はされてマッチした一覧が表示されても
選択して該当箇所にとぼうとすると失敗して空バッファが開く……。

emacs で ag つかったときもあった〜なんて思いながら
ag のオプションをうたがっていると、
--vimgrep オプションがあったので
unite_source_grep_default_opts の内容を

if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--vimgrep'
  let g:unite_source_grep_recursive_opt = ''
endif

とするとちゃんと動くようになりました。

rbindkeys を systemd で起動する

linuxgui 環境で作業をしていて
gtk のキーテーマで一括変更も可能ですが
他の OS みたいにキーバインドをアプリケーションによって
変化させたい時があったのでメモ。

使わせていただくのは

kui/rbindkeys · GitHub - https://github.com/kui/rbindkeys

rbindkeys のインストール

ruby 2.1.5 を rbenv でもなんでも使ってインストールしたら

gem install rbindkeys

してインストール完了。
あとは README.md の Usage のとおり基本的な設定を済ませました。

sudo 設定変更

まず sudo の設定。 rbndkeys は sudo で起動することになりますが、
systemd から起動する際にパスワードが入力できないので
/etc/sudoers.d/ 以下に

  • 起動用 rbindkeys
  • 停止用 killall

を NOPASSWD で設定しておきます。

nishikawasasaki  ALL=(ALL) NOPASSWD:/home/nishikawasasaki/.rbenv/versions/2.1.5/bin/rbindkeys, NOPASSWD:/usr/bin/killall

X 設定追加

rbindkeys 起動時に自ユーザーの x が受付できるように下記設定を
.xinitrc など起動時に呼ばれる場所へ追加しておく。

vi ~/.xinitrc
+ xhost local:0.0

systemd 設定追加

次に、
systemd から起動するために
~/.config/systemd/user 以下に設定を作成します。

vi ~/.config/systemd/user/rbindkeys.service
[Unit]
Description=rbindkeys

[Service]
ExecStart=/usr/bin/sudo /home/nishikawasasaki/.rbenv/versions/2.1.5/bin/rbindkeys -c /home/nishikawasasaki/.rbindkeys.rb /dev/input/event0
ExecStop=/usr/bin/sudo /usr/bin/killall rbindkeys
Restart=always
Environment=DISPLAY=:0.0

[Install]
WantedBy=graphical.target

ここまできたら

systemctl --user enable rbindkeys.service

して有効にして、
~/.rbindkeys.rb を編集したら

systemctl --user restart rbindkeys.service

したりできます。

問題・懸念点

  • ruby まわりの呼び出しをちゃんとする
  • systemd の起動で sudo するのはどうなのか?
    何か他に方法はないのか?
  • WantedBy が適当すぎないか?

Emacs の use-package で ddskk を使おうとしたらカーソルの色変わらなくてワークアラウンドした話

タイトルの通り、use-package を使って ddskk を入れると
(細かい ddskk の設定は ~/.skk にするとして)

(use-package ddskk
  :ensure t
  :defer t
  :bind (("お好きなキーバインド" . skk-mode)))

のようにすると勝手にインストールがされて便利なのだけれど、
このままでは

(setq skk-use-color-cursor t)
(setq skk-cursor-hiragana-color "#d33682")
(setq skk-cursor-latin-color "#4271ae")

で設定されたカーソル色変更が反映されません。

普段は skk-autloads の autoload で
カーソル色変更用の ccc などなどを読み込んでいますが、
↑ で書いた use-package の設定だと読み込まれないからでした。

use-package の設定の方で

(use-package ddskk
  :ensure t
  :defer t
  :bind (("お好きなキーバインド" . skk-mode))
  :init (require 'ccc))

としてやればひとまず解決。
use-package の commands を使えばよいのかもしれません?

またやりそうなのでメモしておきます。。

emacs のカラーテーマをつくった

黒い背景だとノート PC 電池節約のためにバックライトを暗くすると見にくいので明い背景のカラーテーマを作ってみた。名前適当すぎて変えたい。

nishikawasasaki/ns-milk-theme https://github.com/nishikawasasaki/ns-milk-theme

淡い色にしたら結局見にくかった……

Mac の ssh-agent と fish shell

以下は当時の記事で今は動作しないかもしれません。
2019/01/09設定を見直しました

https://nishikawasasaki.hatenablog.com/entry/2019/01/09/Macssh-agentfish_shell(4年ぶり2回目)


インフルエンザが周囲で大流行、最前線です。

Mac で fish shell を使っていると、linuxssh-agent 用に書いた設定でエラーが発生。 どうも Mac では SSH_AUTH_SOCK の場所が違うみたい。

探してみるとどうやら

/private/var/folders/fw/

にあるようなので、その時作られていた

/private/var/folders/fw/_tkなんとかかんとか/T/ssh/agent

SSH_AUTH_SOCK に設定するように暫定設定。 _tk なんとかの部分はもし変わるようなら対応しよう。

# ssh-agent
set agentPID (ps gxww | grep "ssh-agent]*\$" | awk '{print $1}') | head -1
set agentSOCK (/bin/ls -t /private/var/folders/fw/_tkなんとかかんとか/T/ssh*/agent*|head -1)
if test "$agentPID" = "" -o "$agentSOCK" = ""
    set -e SSH_AUTH_SOCK
    set -e SSH_AGENT_PID
    eval (ssh-agent)
    ssh-add
else
    set --export SSH_AGENT_PID $agentPID
    set --export SSH_AUTH_SOCK $agentSOCK
    # if [ `ssh-add -l` = "" ]; then
    #     ssh-add < /dev/null
    # fi
end

linux 用と Mac 用の切り分けが必要なので

~/.config/fish/config.fish

の中で

# 環境毎の設定読み込み ##########################################
switch (uname)
  case Darwin
    . $HOME/.config/fish/config_mac.fish
  case Linux
    . $HOME/.config/fish/config_gentoo.fish
end

なんてしてます。

Macディレクトリ、何がなんでどうなってるのかあんまり知らないなぁ……