2017/11/26

Git の hook を使って merge line がある時には commit できないようにする

Git で merge した時に conflict すると
みたいな形で表示されます。これを解決して commit すれば問題解決。
しかし、複数部分が conflict していると、たまにこの線を commit することがあります。つらい。
それを阻止したいのですが、人の手でやることでは無いので自動化します。


man githooks

  • $ man git
    • とりあえず man を読む。
    • /hook とかすると githooks というものがあると。
  • $ man githooks
    • $GIT_DIR/hooks か core.hooksPath/* のファイルを読み込むと書いてあります。
    • hooksPath を設定してみます。~/.gitconfig あたりに
    • を追記。
    • たぶん git confing --global とかでもできる。
    • 実際やることは ~/.gitconfig への書き込みだから同じなのだけれど。
    • これで全リポジトリに対する設定終わり。
  • ~/.config/git/hooks/pre-commit を書く
    • こんな感じかな。参考とか
    • これで commit 前に <<<<<< などの線があったら警告してくれます。
    • 実際は単なる shell script ですね。hook なので特定の action があった時に起動してれる感じ。
    • ちなみに git init したリポジトリの .git/hooks/* あたりを見ると sample があったりします。


動作サンプル

さて実際はどう動くかと言うと、こんな感じ。
commit したのに status が clean になってませんね。
これでミスって merge を解決し忘れたファイルを commit することも無いでしょう。めでたしめでたし。


おまけ

ソースにどうしても <<<<<< などの線を入れたい場合は
  • $ git commit --no-verify
とか使うと良いようです。
この hook を足す commit そのものが hook に引っかかったので使いました。


参考

2017/11/22

Ubuntu 16.04 + Nginx + Let's Encrypt で https 化する

基本的には表題の通り。
というかもともと certbot というものがあって、対話的に質問に答えるだけで設定が終わります
一応ログとして残す、くらいで。
最初の頃は letsencrypt コマンドを直叩きしてたのですが、certbot が楽でした。
certbot は http -> https への Redirect configuration まで入れてくれる。便利。みたいな話。
ちなみに https 化したサイトは Kindle格安マンガまとめKindle 無料マンガまとめ です。


環境

  • Ubuntu 16.04 LTS
  • certbot: 0.19.0
  • letsencrypt: 0.19.0


コマンド

  • # add-apt-repository ppa:certbot/certbotapt-get
    • ENTER
  • # apt-get update
  • # apt-get install -y python-certbot-nginx
  • # vi /etc/nginx/sites-available/default
    • server_name _;
    • server_name kindle-comic.info
    • とかに。適宜自分のドメインに置き換えてください。
  • # nginx -t
    • で syntax check できます。
  • # certbot --nginx -d kindle-comic.info
    • mail address とか聞かれる
    • terms and condition に同意するかどうか。アグリーってやつだ。
    • メールアドレスを公開するか。No かなー。
    • http -> https の Redirect をするか。もちろんするので2を選択。
  • # systemctl restart nginx
    • これで https 化完了


おまけ

certbot 楽で良い。おまかせなのが逆に難点かもだけれど。
nginx の configuration 書いたこと無い身としてはありがたかった。
ちなみに、 Let's Encrypt で取れる証明書は有効期間が3ヶ月らしい。
ので、だいたいの人が自動更新するよう cron に書くようですね。
私はこんな感じかな。
  • # crontab -e

あと AWS の EC2 を使っていたら Security Group で Inbound の 443 を空けるのを忘れないように。
ということで、Kindle格安マンガまとめ と Kindle 無料マンガまとめ を https 化した話でした。みんな使ってねー。


参考

2017/11/14

G Suite でプライマリドメインを変更できない時は試用期間でないか疑う

Google には GMail などの G Suite というものがあります

独自ドメインで GMail を運用するとかできて便利。
これは複数のドメインを持つことも可能で、それぞれにアカウントを作ったりできます。
なお、複数ドメインを持つと各ドメインに(プライマリ|セカンダリ)ドメインという区別がつきます。
これはデフォルトのドメインの指定です。
例えば Google Site を使う時、URL にはプライマリドメインが含まれます。

プライマリドメインは変更が可能らしいのですが、そんな項目が無い。
仕方が無いのでサポートに連絡してみることにしました。
英語だと24時間対応しているらしいので英語でちょちょいと。
その結果、「試用期間内はプライマリドメインの変更ができない」と言われました。
んで、試用期間を今日終わらせても良いなら対応できるよ、とのこと。

ということで試用期間を終わらせて有償プランになったらプライマリドメインが変更可能になりました。やったね。

にしても Perfect! とか Awesome! とか言ってくる人が対応してくれたので、愉快なチャットでした。


参考

2017/11/13

Ubuntu 16.04 LTS で NeoVim を使う

AWS の EC2 インスタンスに Ubuntu 16.04 があったので使ってみる。
環境構築の中で NeoVim のインストールと設定をしたログ。


環境

  • OS: Ubuntu 16.04.3 LTS
  • apt: 1.2.24
  • NeoVim: 0.2.0
  • Ruby: 2.3.1p112
  • neovim gem: 0.6.1
  • Python2: 2.7.12
  • pip2: 8.1.1
  • python2-neovim: 0.2.0
  • Python3: 3.5.2
  • pip3: 8.1.1
  • python3-neovim: 0.2.0


NeoVim 本体をインストール

  • # apt-get install -y software-properties-common python-software-properties
  • # add-apt-repository ppa:neovim-ppa/stable
    • Enter 押す必要があったけれど -y とか付けたら良かったのかな
  • # apt-get update
  • # apt-get install neovim
で neovim 本体は入ります。楽で良い。


dot_files を設定する

私は dot_files を公開しているので
  • git clone https://github.com/atton/dot_files
  • cd dot_files
  • ./install.sh
で設定終了。備えあれば何とやら。


NeoVim の環境を整える

私が使ってるプラグインが python3 必須だったりするのでその辺も整備。
  • # apt-get install -s ruby bundler
  • # gem install neovim
  • # apt-get install -y python3 python3-dev python3-pip python python-dev python-pip
  • # pip3 install neovim
  • # pip install neovim
で python2 + python3 + ruby の環境が整った。
:CheckHealth すると clipboard が無い以外は問題無い、とのことでOK。
自己診断機能便利ですよね。 brew doctor とか。


おまけ

ec2 の IP 覚えるとか domain 振るのとか面倒なので私の ~/.ssh/config はこんな感じ。
というかOSごとに default user name 違うってなんでやねん。

2017/11/12

tmux 2.6 を全角記号対応させる

2017/08/30 に tmux 2.6 がリリースされました。
それに伴ない、例によって分割線を ascii にするバージョンをリリースしました。
分割線の表示が変になる問題は Terminal.app が原因だったので、細々と自分用のをリリースしていこうかと(2.5の時)。

なお、作業としては rebase のみでパッチの変更点はありません。


環境

  • OS: macOS 10.12.6
  • tmux: border-ascii-2.6(65784831fcf0040b78d68b180c6ca8c1210e4317) (patched)
  • utf8proc: 2.1(562edab805b82d66622914d06a5da3f53cd54a17)
  • Homebrew: 1.3.6-217-g441c212
  • Homebrew/homebrew-core: git revision cf537; last commit 2017-11-11
  • Ricty: 3.2.2(no option)


インストール用コマンド

  • $ brew tap atton/customs
  • $ brew install atton/customs/utf8proc
  • $ brew install --HEAD atton/customs/tmux

2017/11/11

ドワンゴの Scala 研修用テキストに Pull Request を投げた

ドワンゴ在籍時代に新人向けの Scala 研修がありました。
研修テキストはGitHubで公開されていて、間違いや修正点があれば Pull Reqest を投げることができます。
テキストを読んでいると、文とサンプルコードの整合性が取れていないのに気付いたので、修正の PR を出しました。
そうしたらマージされた。やったね。

2017/11/04

#vimconf2017 にいってきた

2017/11/04(Sat) に Vimconf 2017 があったのでいってきました。


所感

なんか全体的に高級感あった。
全席電源あるし、WiFiは問題なく快適だし。昼ごはんはおいしい(あと白い恋人も付いてくる)。
いんたーなしょなるかんふぁれんす感はかなりありましたね。


はやぶささんの発表

haya14busa さんの Vim 活の歴史。
みんなに助けてもらったとか、アイデアを貰ったとか。
とあるプラグインの一部をライブラリとして切り出してもらったりとか、ハートフルな話。
私は EasyMotion 使ってないし、紹介された plugin もあまり入れて無いので、私とは違うタイプの Vimmer っぽそう。
スライドの途中でもあったけれど「Vim ユーザには多様性があって良い」とのこと。
Windows ユーザも多そうだしね。
『VimScript はペイする言語』(うろおぼえ)
置換時の offest とかは知らなかった。 conceal はう、頭が。


key note by fatih

He told about vim-go includes golang histories.
I interested commands uses go using AST.
It means very power full 2-way communication between vim and golang.
Another hand can be actioned easily for other hand(like use go-fmt in vim).
It's very important and interesting factor the in recent languagse.
Multi-platform support is very difficult(like PATH).
He gets 40+ ebooks from users say `I used vim-go. Where I donate?`


おひるごはん

豪華なすき焼き弁当でした。美味しかった。


参加費用5400円ではあるけれど、良いものに出て赤字にならないのかな、と思ったら赤字だそうです。


鼎談(3 vim legends)

3人とも Windows ユーザなんだそう。
なので Win で動かなかったらパッチぶん投げたりする方々。
でも Bram の意思とか気分とかで取り込まれたり、取り込まれなかったりとか。
昔のものを掘り起こすと、意外に取り込んでくれたりするらしい。
Windows ユーザは大変そうだなー、という事を感じる。makeencoding とか。
あと壊れてたら自分で Contrubute する精神重要だよな、とも感じる。
卒論の時の yak shaving が元で vim に patch 作るとかすごいよなー。
「割と度胸あるよね」「新幹線の中で作ってきた」「俺達には共通言語のCがあるやん」などのパワーワードが乱舞する。


cocopon さんの話

cocopon さんの colorscheme の話。
icebarg と言えば知ってる人は知ってるそう。
vim で syntax highlight を作るにはどうするか、に始まり、どういう風に配色を作るかまで。
ちなみに私は colorscheme は default で使っているというテキトーさである。
それでもおさえるべき汎用的なポイントはあったかな。
  • コンセプトを決める
  • 困ったらコンセプトに立ち帰る
とか。
ですが、この辺から体調が悪くなり始めてダウン。帰っちゃいました。


まとめ

会場とか高級感あった。参加者の話も分かりやすくまとまってた。
mopp さんの司会も分かりやすく聞きとりやすい英語だった。
惜しむらくは体調不良かな。懇親会が本番説もあるのでそこまでいけなかったのは口惜しいですが仕方無し。
ブログを書くまでが勉強会、は達成できたので良しとしよう。
Vimconf 2017 運営の方々 & 発表者の方々 ありがとうございました。

2017/11/03

うっかり消してしまった iPhone の計算機アプリを復元する

iOS 10 のどこかから、標準でインストールされているアプリを消せるようになりました。
ヒントとか使ってなくて邪魔なのでガンガン消していく。
その中で、「計算機アプリを消しても Control Center に計算機あるから良いかな」と思って計算機アプリを削除。
そうしたら、Control Center にある計算機も消えてしまいました。困った。

なので計算機アプリを復活させたログ。


環境

  • iPhone: SE 64GB
  • iOS: 10.3.3


復活方法

AppStore の購入済みの項目には無い。AppStore で検索をしても出てこない。困った。
何故こういう形になっているかは不明ですが、復活したので良し。


参考

業務委託時の開発費には消費税がかかる

タイトルの通りらしいです。

我々エンジニアは、業務委託の際、
  • ソフトウェアを開発し、その対価として報酬を貰う
ということをしています。

  • (2) 対価を得て行う取引
などに相当します。
なお、フリーランスである個人事業主も事業者として扱われます。
よって、報酬には消費税が課税されるので注意してください。

しかし、世の中には知らないと損をすることが多すぎる。


宣伝

ちなみに、この記事を書いている 2017/11 時点では、 2017/12 以降の仕事がありません。
なので絶賛お仕事募集中です。詳細は随時更新される atton.github.io にて。


参考

2017/11/01

tmux のバグを踏んだので Pull Request を作ったら Terminal.app のバグだった話

さて。私は tmux の線を ascii にするパッチを自分であてています
tmux は線を ascii で表示するか、UTF-8 で表示するのオプションがあります。
今日日 UTF-8 非対応というのは稀なので、基本は UTF-8 で表示される筈です。


問題

tmux の線に使われている文字が曲者で、EastAsianAmbiguous という文字種です。
これは文字幅を1にするか2にするか、言語圏によって決めます。
そんな文字を分割線に使うと、言語圏によって線の長さが変わってしまいます。
幅を決める部分は tmux の内部実装と glibc と utf8proc があります。
それらが EastAsianAmbiguous に対応していると問題ないのですが、 全部非対応。これはつらい。

UTF-8 で表示する際は、EastAsianAmbiguous を幅固定の線にする Pull Request を作りました


Pull Request による変更点

単に文字の置換です。

という変更をしています。
両方とも固定で幅が1なので、言語圏に依存しません。

例えば、このように表示が崩れていた場合でも
この Pull Request によってこのように綺麗に表示してくれます。やったね。

修正と文字リテラル

さて、当然ですが、文字を置換するにはソースをいじる必要があります。
tty-acs.c というファイルに文字テーブルがあるのでそれらを変更。具体的には x と q です。
さてこれで修正完了、と思ったら "\342\224\200" という謎の表記がある

実はこいつが分からなくて今まで PR を作ってませんでした。
q に相当する ─ (0x2500) のページを見つめていると、
  • UTF-8 (binary) 11100010:10010100:10000000
という表記が。

こいつをさらに良く見ると8進数で 3bit ずつ表記されていることに気がつく。
修正する予定の (0xffda) は
  • UTF-8 (binary) 11101111:10111111:10011010
なので
  • 11 101 111:10 111 111:10 011 010
  • 3 5 7: 2 7 7: 2 3 2
  • \357\277\232
書いてみると動いた。やったね。
単に私がこの文字リテラルを知らなかっただけなのですが、閃いた時は楽しかったですね。


メンテナのコメント

この PR で EastAsianAmbiguous を排除するので言語圏に依存せず正しい線が引けます。
なのでマージされると思っていましたが、メンテナの環境では上手くいかないらしい

んで、以下のオプションを試してくれと
set -as terminal-overrides ',*:U8=0'
こいつを .tmux.conf に書くも、やっぱり私の環境だと上手くいかない。

UTF-8 表示に強制するオプションのようなのですが、そいつを修正するパッチなのに……
正確には ACS というものを使って線を描画するようです

ちなみに Terminal.app + Ricty では上手くいかない。こうなります。

動かないよって文句を言ったら、「ACS サポートしてないターミナル使ってない?」と。

いやいや公式の Terminal.app ですよと内心思いましたが、iTerm2 と xterm を試すことにしました。
そうしたら何と綺麗に表示されるではありせんか

どうやら Terminal.app は ACS をサポートしていないようです。つらい。

iTerm2 に乗り換えを検討しましたが、今度は EastAsianAmbiguous に対応しているか問題に変わる。
面倒になったので今まで通りの
  • Terminal.app
  • 独自パッチの tmux
で運用していこうと思います。

しかし tmux のバグだと思ったら Terminal.app だとは。
流石にそれは修正できない。

これはちょっとしたぼやきなのですが、Terminal.app は結構バグがあるらしい。
Terminal Multiplexer のメンテナが言うからには、色々あったんだろうな、と察する。
しかし nicm さん対応が早い。最初のコメントは10分とかでついた気がする。
反応が早いのはこちらとしても助かるし、いろいろと助言を貰えました。
まー助言の結果 Terminal.app は残念というオチなのですが。

ということで、tmux のバグを踏だので Pull Request を作ったら Terminal.app のバグでした。


環境



参考