すっかりブログの更新を忘れてしまっていたのですが
せっかくなので残しておきます……。
一つ前に書いた ストリーム処理と Akka Streams の発表を関ジャバでやりました をもとに
そのデータの流れの部分だけをピックアップした発表を Scala関西 Summit2017 でおこなっていました。
20 分枠だと、話したいことをギュッとまとめるのがなんともですが気は楽ですね。
すっかりブログの更新を忘れてしまっていたのですが
せっかくなので残しておきます……。
一つ前に書いた ストリーム処理と Akka Streams の発表を関ジャバでやりました をもとに
そのデータの流れの部分だけをピックアップした発表を Scala関西 Summit2017 でおこなっていました。
20 分枠だと、話したいことをギュッとまとめるのがなんともですが気は楽ですね。
2017/06/24 に大阪の福島でおこなわれた「KANJAVA PARTY 2017 !!!」に参加してきました。
Java のストリーム処理や Akka Streams についての発表をしました。
発表資料は以下です。
(使用例部分がちょっとお仕事の内容も含んでいたので公開用からは除いています。)
データの流れに注目して、できる限りわかりやすく説明したかったこともあり
例としているのが単純で個数の少ない Int のリストなのですが、
逆に Akka Streams がどんなときに活きてくるのかがぼやけてしまったようです。
これは発表前後にご指摘もいただきました。
Java 自体が持つ Future などの並列処理との違いや
バックプレッシャーについての内容、
そもそも RxJava どこいっとるん?などなど、
説明不足についてはまたどこかでお話できれば良いなと考えています!
聞けたセッションはすべておもしろくとてもためになったのですが、
特に印象に残った部分をピックアップしています。
DDD に対しての心構えとしてお話しされていた下記の部分、 至言です。
DDD だけじゃなくて普段の開発にも、生活にも。
普段やっていないことは複雑な問題に適用できない。 普段の単純な開発でも、 知識の確認・分析・プログラミングのサイクルは 普段から何度も回すように心がけること。
メンバーのモチベーション管理や
より良いコミュニケーションをおこなうためには
どのようなことに気をつけるべきなのか。
実際に用いられている方法や事例の紹介が、
自分がリモートやオフショアのメンバーと仕事を進めていく上で
気をつけるべきことについて考えさせられる内容でした。
社内のネットワークやいろいろなアレがあって
社内の gitlab から直接 CI サーバーへ接続できないけど、
gitlab も CI も backlog へはアクセスできる時などに……。
github へのミラーリング方法を記載されておられる下記ページを参考にしています。
管理画面から git リポジトリを作成しておく。
git の URL を控えておく。
backlog 側 git リポジトリへは鍵認証で接続するので、
gitlab サーバーの git ユーザーで
鍵を作成しておく。
ssh-keygen -t rsa -b 4096
→ 公開鍵の内容は backlog で登録しておくこと
backlog での公開鍵の追加はユーザー単位でしかできないので、 git ユーザーの公開鍵は backlog ユーザーの誰かで登録することになります。 つまり git ユーザーの公開鍵を登録したユーザーが backlog のプロジェクトに参加している必要があります。。。
gitlab サーバーで git ユーザが
git push するので git のインストールをおこなっておく。
su - git
sudo yum install git
最近の gitlab はリポジトリの置き場所が
/mnt/data/git-data/repositories/所有者名/リポジトリ名.git
へ変わっているので
下記場所で作業します。
cd /mnt/data/git-data/repositories/所有者名/リポジトリ名.git
backlog の git リポジトリを remote add しておきます。
git remote add backlog 名前@名前.git.backlog.jp:/所有者名/リポジトリ名.git
`–all` をつけて全ブランチを push
cd /mnt/data/git-data/repositories/所有者名/リポジトリ名.git
git push backlog --all
git 標準の hooks は gitlab が使っているので
gitlab で hook したい場合は custom_hooks ディレクトリを用意しろとのこと。
cd /mnt/data/git-data/repositories/所有者名/リポジトリ名.git
mkdir custom_hooks
ここはそのまま参考にさせてもらっています。
vim post-receive
ファイルの内容は
GIT_REMOTE="backlog"
while read OLDREV NEWREV REFNAME
do
BRANCH=`git rev-parse --symbolic --abbrev-ref "${REFNAME}"`
echo "Push '${BRANCH}' branch to remote '${GIT_REMOTE}'"
git push --tag ${GIT_REMOTE} ${BRANCH}
done
カスタムフックスクリプトに実行権限をつけておく
chmod +x post-receive
msys2 をインストールした状態でmingw64 のバッチで起動、
手順にしたがって emacs-25 ブランチを git で取得してきてビルド完了。
runemacs.exe を Windows 側 (エクスプローラ) から起動すると起動成功するけれど、
msys2 の zsh から ./runemacs.exe
とかすると
ウィンドウも開かずそっと落ちているみたい。
再起動するまでは起動してたのになぜだろう?
確認のために直接 emacs.exe を起動しようとすると
libwinpthread-1.dll
が足りないとのこと。
NTEmacs64 に同梱されていた libwinpthread-1.dll を持ってきて
さきほどビルドした emacs の bin にコピーしてやると無事起動するように。
そういえば再起動前までは NTEmacs64 の bin 以下に PATH を通していたのでそのせいだった……。
いつかまたやりそうなので戒めとして記録📝
縦に画面分割して ediff とかすると
elscreen の タブの高さだけ
diff で違いのあった行の高さがずれます。
↓ 1 行分ズレている例
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)
今年もかなり飲んだけど、
年々写真に残さなくなっていってる。
飲んでそのままなのももったいないので
来年は記録をつけたい、といまは思っています。
のんだら忘れそう。
ビール編・その他編も気が向いたら残しておきたい。
広島帰省中の雨後の月 3 種のみくらべ
これも帰省中
牡蠣と日本酒
またもや帰省中の
広島で買って帰った 1 本
土産の定番・幻
いろいろとドタバタしていて記録のない月。
飲んでないわけ無いのに……。
どこだろう……花見?
繁桝はおいしい
金冠黒松もおいしい
石川旅行への布石
まんさくの花もおいしい
馬肉と日本酒もおいしい
滋賀のお酒もおいしい
滋賀の
滋賀の
滋賀の
さっぱりと夏の燗酒も良い
イワシとお酒もおいしい
タンク違いで飲むのもおいしい
にごりと辛口もおいしい
燻製と日本酒もおいしい
山廃もおいしい
鯉雄町もおいしい
カップ酒もおいしい
日本酒の写真の無い月。 ビールの写真は多い月。
おでんとお酒もおいしい
赤いラベルでおいしい
3日連続灘五郷飲み比べもおいしい
すっきりもおいしい
名前もないようなどぶろくもおいしい
金沢の回転寿司で飲むのもおいしい
金沢おでんとお酒もおいしい
近所で買えた雁木もおいしい
力があっておいしい
東京で飲むお酒もおいしい
同期と忘年会で飲むお酒もおいしい
忘年会で飲み過ぎてもおいしい
☃もおいしい
まだ年末残りの日で飲みそうだ……
蜜のような甘さでおしまい?
また今晩増えそうな気も……
すごく簡単そうなのになかなかやり方が (日本語で) 見つからなかったので
備忘録的にメモ。
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 幅 高
のように
して使いました。
位置やサイズを変えてやれば
画面下に表示したり、中央に表示したりできますね。
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 のバージョンを 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"
と指定するものらしい。
接続を
: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.13.0 同様に
client_protocol が指定されていないエラーで失敗しました。
hive 0.10 で hiveserver2 を起動しているときは
hive-jdbc 0.11.0 で接続。
(いろいろ試した結果からの答えなので
セオリーや王道があれば教えていただけると助かります。。)
さて次は取得したデータをエクセルへ出力……
「せっかくだから LT に応募してみては」と声をかけていただいて、
08/01 (土) の "Scala関西 Summit 2015" で LT をする機会をもらいました。
Scala関西 Summit 2015 - 関西初のScala大規模イベント8/1(土)開催
http://summit.scala-kansai.org/
社外でお話する機会は (仕事以外で) 久しぶりだったので
緊張するかなーなんて心配でしたが、
会場の大阪市中央公会堂というロケーションが素晴らしく
楽しい気持ちのままあっという間の時間でした。
お話した内容はなにもスライド公開することもないような、
Scala を自分がリードして現場に持ち込むために
という内容でした。
LT あとのパネルトークの中でも
だいたい同じようなお話をされていた (と思ってる) ので
大きく間違ってはいないかなと (勝手に) 思っています。
LT しておいてなんですが、
これって Scala に限った話ではないんですよね。
環境をよくして無理に 100% 狙わずに
与えられた時間でできるだけ良いモノを。
追加で、言い出したんなら責任とる覚悟。
プログラミングでも仕事でも似たようなものだと思ってます。
とても良い機会をいただきましたし、すごい盛り上がりで
ものすごく暑い中スタッフの皆様おつかれさまです&ありがとうございました!!
超久しぶりに 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
とするとちゃんと動くようになりました。