さわらブログ

さわら(@xhiroga)の技術ブログ

.vimrcの更新をgit add → commit → push でGistに反映する

あけましておめでとうございます。良い年になりますよう。

.vimrcをGistに公開しています。毎度コピペで更新するのが面倒なので、GitHubみたく更新できるようにします。

やり方

  1. Gistに.vimrcを公開(今回は済)
  2. Gistをローカルにclone
  3. vimの起動時にcloneした.vimrcを参照
  4. .vimrcを更新してadd → commit → push

やってみた

1.Gistに.vimrcを公開します(今回は済)

こちらをどうぞ。
さわらの.vimrc · GitHub

2. Gistをローカルにcloneします

Gistのページからcloneするアドレスを取得して... f:id:hiroga_cc:20180101071318p:plain

シェルでcloneします。

$ cd ~
$ git clone https://gist.github.com/1e7ae56f94ea301e9b585663d275ccc4.git vimrc

3. vimの起動時にcloneした.vimrcを参照させます

$ vi ~/.bash_profile

# alias vi='vim -u ~/vimrc/.vimrc -N’ などcloneした.vimrcファイルを指定

$ source ~/.bash_profile

※ -Nオプションを忘れるとvi互換モードで起動して面倒なことになります。

4. .vimrcを更新してadd → commit → pushします

$ git remote
origin 
$ git add .vimrc
$ git commit
$ git push origin master

やってみて

デフォルトの.vimrcをできれば直接反映させたかったので、新たにフォルダを作ってしまったのが残念。 もっといいやり方あればぜひ下さい。

キーボードショートカット一発でブックマーク開く@Firefox #大晦日ハッカソン

ショートカットで特定のウェブサイト開けたらいいな〜って思うことありませんか?
例えば alt+f でFacebookを開いたり、 alt+tでTwitterを開いたり...

Firefoxでできるようにしました(めっちゃ簡単です)
* 未確認ですがChromeでも多分できます

やり方

  1. 開きたいページをブックマークします。
  2. アドオン「Shortkeys」を導入します。
  3. 設定から「Open bookmark/bookmarklet in current tab」を追加し、対象のページでブックマークを選択します。

これだけ!設定画面はこんな感じです。
f:id:hiroga_cc:20171231121451p:plain

めっちゃ快適!みなさんもどうぞ〜!

DJのやり方を真似して自分専用のプレイリスト作った

その年よく聴いた曲をまとめているんだけど、今年はプロのDJの人のやり方を真似てみた。

参考にさせていただいた情報:
www.studiorag.com

Dj Kyonさんという方が曲のミックスのために書いた記事。今回はミックスとかはしないので、曲順を決めるまでを真似する。
要約すると...
1. テーマを決める
2. 曲を集める
3. 集めた曲を分類する
4. 分類した中で優先順位をつける
5. 入れる曲と曲順を決める(DJの人はここでミックスする)

やってみた

1. テーマを決める

これは「今年自分がよく聴いた曲」で決まっているので省略。

2. 曲を集める

iPhoneのミュージックで曲を聴くので、再生回数トップ100から今年の曲を選んでいく。 ちなみに選んだのがこれ

3.集めた曲を分類する

Dj Kyonさんの例を見るとBPMとかジャンルで分けているみたい。
自分もそれに倣ってBPMとジャンルで分ける。
BPMはこのサイトを開いて、曲のテンポに合わせて画面をタップして測りました。 www.vocalist.org.uk

あと、iPhoneのPyroってアプリでも測れる(ただしApple Musicの曲は対象外)

4.分類した中で優先順位をつける

聴きたい順に優先順位をつけました

5.入れる曲と曲順を決める

前の曲と後の曲のつなぎ目が自然かなー?とか考えながら曲順を決める。
できたのがこれ。BPM120台→130台に上がっていくように考えた。

f:id:hiroga_cc:20171230111357j:plain

やってみて

BPMを測ってみると自分の好きなテンポがわかって面白い!いいプレイリストができた!

ようやくプロダクションコード書いたエンジニア3年目を振り返っていく🐘

2年目まではなんだったのか...!!!

2016年までのまとめ

文系新卒からのド大手SIerに就職したら、配属は分析ツールの導入案件だった!
人には恵まれたけどプログラミングしたかった新卒1年目~2年目。
残業も多くて勉強時間があんまり取れなかった...。

そして2年目夏、念願叶ってフルスクラッチの開発案件に配属される...しかし大量のExcel設計書と手動UTが待っていたのだ! 3年目はそんな開発案件の単体テストフェーズから始まります。

そして2017年...

プログラミングしてない焦り+キャリアを重ねる同期SE/コンサルへの劣等感に悩まされた1月
何かやらねばと思ってチャットボット作ったりしてみた。が、特に解消はされなかった。
github.com 今思うとこの時期に必要だったのはモノを作ることじゃなくてひたすらプログラミングの練習だった気もするな...。

引越しでドタバタした2月が過ぎ、3月クーリエジャポンハッカソンに参加。結果まさかの優勝。なぜならチーム組んだ坂本さんがアプリ全部作ったから。
ここで思う。アプリもやらねばハッカソンに勝てない...!!!

一旦置いて、4月ポプテピピックの通知bot作ったりしてた。あとSpace Apps Challengeに出てIBM社員なのにIBM賞をもらったりした。
github.com

5月、現場が落ち着いて定時で上がれるようになり、プライベートでReact-Native ※1 に着手する。
※1...JavaScriptiOS/Androidアプリが作成できるフレームワーク。つまり普通のWebページ作れる人ならアプリが作れるようになる。

というのもSPAJAM予選参加することになっちゃったからである。スマホアプリ開発経験者のいないメンバーでよく申し込んだわ...。

これでちょっと自信をつけ、6月にReact-Nativeで自作アプリに挑戦する。7月頃できたのがこれ。 appetize.io シビックテック的なのに憧れて地元感のあるアプリを作ってみた。でも三鷹市に許可取らなきゃな〜とか面倒でリリースはしてないぞ。

8月、Unityで遊びはじめる。 hiroga.hatenablog.com
福島Game Jamとかショッカソンとか参加してみた。ショッカソンでは自分のUnityアプリが足を引っ張ったのが悔やまれる...。

秋ごろから現場での案件が変わり、サンプルのWebアプリをいちから作りはじめる。
ここで簡単なテストコードさえググらなければ書けないことに気がつく...。半年くらいモノつくりに励んできたけど、エンジニアとしての実力っていうか、プログラミングを道具として使うためのスキルが全然伸びてなくて辛さを感じる。

いちからのWebアプリ作成は勉強することがめっちゃあり、9月10月はプライベートで調べて現場で書いての往復だった。そんなわけでブログ記事調べ物が多い。楽しい!

11月にはJJUG CCC ※2 に参加した。これがめっちゃ良かった!それまで現場で使うものだったJavaが好きになった。 ※2 Javaユーザーの勉強会。
今後もずっとJavaを使うかは分からないけど、使っている言語のカンファレンスは絶対参加したいな〜。

そして12月。お勉強的にはPythonで機械学習の復習をしつつ、練習てきなプログラミングをちょくちょくしている。現場でちょっとしたコード書いたりとか、競プロとか。
Python機械学習もいいけど、ちょっとしたコードをささっと書けるようになりたいな〜。

振り返って

現場でプログラミングをするようになったこと、ちょっとしたことでもコード書く癖がつくようになったのが一番嬉しい!
モノつくりも楽しいけど、ググって必死に作るんじゃなくて、普段のちょっとしたコードの延長線上でモノつくりができるようになりたいな〜と思います。
来年はちょっとしたプログラミングでできることを広げつつ、現場ではもっとお客さん目線でシステム作る経験を積みたいな〜と思いました。おしまい。

2017年に買って人生が良くなったものベスト5

一人暮らし→実家暮らしに逆戻りし、プロジェクトも安定で生活にゆとりができた2017年。
とはいえむやみに買い物したわけではなく、最低限買ったものの中でよかったものをランキング。

5位

ボンタンアメ
信者なので職場のお菓子バッグに常に2箱入れてる(片方は予備)
何気なくお菓子をあげる時、微妙な話題作りに役立ったりして良い。

4位

REYLEO バックパック
通勤用リュック。ビジネスすぎないのが良い。

3位

TaoTronics Bluetoothヘッドホン
それまでiPhone標準のイヤホンを使ってたけど、やっぱBluetoothはいい!イヤホンの紐がそこらに引っかからないように気をつけるのがストレスになってたことに気がついた。

2位

エレコム ワイヤレスマウス
夏にUnityで遊び始めて、3D空間を操作するのにマウスなしでやってられなくなった。
いざ使うと普段のウェブサーフィンやらなんやらにも便利で手放せない!

1位

UNIQLO カシミアクルーネックセーター 長袖 紫
www.uniqlo.com ほとんどこれを書きたいがために今回のエントリ書いた。この色で廉価なのが店で見つからなくて買ったけど、カシミアめっちゃいい。
10000円近くしたけど一冬ずっと着てるので元は取ったはず!

おしまい。

Javaのマルチスレッド処理を比較!ExecutorServiceとForkJoinPoolで計測した

今度のJJUG ナイトセミナーで人生初LTするのでその準備をしている〜!
現場でマルチスレッド処理を書いたので、その時のフレームワーク選定の話にしようかと。

概要

Javaでマルチスレッド処理をするためには何通りがやり方があるんだけど、自分の仮説ではこう使い分ける!
- トランザクションとか複数裏で走らせたい → ExecutorServiceにRunnableやCallableインスタンスを渡す。
- 再帰的に処理したい → ForkJoinPoolにRecursiveTaskを渡す。

スタックオーバーフローも見た。
stackoverflow.com

でもこれって本当なの?ということで計測した。そしたら新たな疑問が出てきた(後述)

計測

マルチスレッドが必要なので、AWS上にcloud9でvCPU=4の実行環境を用意。
ローカル機だと他にも起動しているアプリが多すぎて計測に向かないかなーと思ったので...

f:id:hiroga_cc:20171223160048p:plain
cloud9は便利だった!
関係ないけどcloud9のjavaのバージョン7だったんですがそれは

計測する処理は次の二つ!
1. フィボナッチ数列の任意の項を求める!nが2よりも大きかったらn-1とn-2の合計として求めることで、再帰的にする。
2. 任意の文字数のファイルを作ってみる!

結果がこちら。めっちゃ適当だって?すまんね。
f:id:hiroga_cc:20171223161206p:plain

でもこの計測結果も今ひとつ信じられない。なぜなら...
- 今回はSystem.nanoTime()で測ったけど、ファイル作成はなぜか計測後もなかなかJavaプロセスが終わらなかった→ロジック変だった?
- ファイル作成の速度が文字数に全然依存していないようにみえる?

結論

再帰的な処理についてはForkJoinPoolに対してRecursiveTaskでよくて、それ以外の処理はどっちでも変わらない...?
そんなわけあるのかしら。どっちでも変わらないならExecutorServiceをそのまま使った方がいいのかな?

ともあれおしまい。LTが楽しみ!

ビットコインノードをMacbookで立てた

ビットコインについて人に説明する機会ができたので、せっかくなので手元でノードを立ててみた。

インストール

githubビットコインソースコードosx向けのドキュメントがあるので、それに従えばOK!
なのだけど、僕の場合は autogen.sh コマンドで引っかかってしまった。パスを書き換えてpkgコマンドが成功するようにしたら上手くいったよ!

$ git clone https://github.com/bitcoin/bitcoin
$ cd bitcoin

$ ./autogen.sh
$ ./configure
configure: error: PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh.
# autotoolで参照しているツールのパスが期待と異っている結果のエラーらしい。

$ find /usr -name "pkg.m4"
/usr/local/share/aclocal/pkg.m4

$ ACLOCAL_PATH = /usr/local/share/aclocal/pkg.m4
$ ./autogen.sh
$ ./configure
$ make

このmakeが1時間近くかかった気がする。

動かす

普通に動かすと取引履歴をダウンロードしてめっちゃ重いらしい(100GBくらいあるトランザクションを数時間かけて落とすのだとか)ので
物理的にネットを切断してダウンロードを阻止します笑

$ bitcoind -testnet # このオプションでテスト環境につながる。

いや確かに動くけど...何がしたかったんだっけ...?

参考

Bitcoinプログラミングの入り口 – blockchain

macos - pkg-config: PKG_PROG_PKG_CONFIG: command not found - Stack Overflow