うなすけとあれこれ

2015年06月14日

vimべんきょうにっき その1

vim logo

きっかけ

あこがれの先輩とペアでvimの練習とかしてた

— うなすけ(偏差値5) (@yu_suke1994) 2015, 6月 12

べんきょう

Vim plugin

新しくNERDTree(scrooloose/nerdtree)と、vim-slim(slim-template/vim-slim)と、vimshell.vim(Shougo/vimshell.vim)をインストールした。

NERDTreeの設定も先輩のからもってきて、space+eで開閉できるようにした。

nmap <silent> <Space>e :NERDTreeToggle<CR>

autocmd vimenter * if !argc() | NERDTree | endif
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif

let g:NERDTreeShowHidden=1

また、インストールしたきり設定が書いてないneocompleteの設定も行った。

他にも、ウィンドウ分割の方法など教えて頂いた。

まとめ

ペアvim前 .vimrc

"neobundle.vimの設定
if has('vim_starting')
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'

"install plugins
NeoBundle 'Shougo/vimproc.vim', {
    \ 'build' : {
    \   'windows' : 'make -f make_mingw32.mak',
    \   'cygwin' : 'make -f make_cygwin.mak',
    \   'mac' : 'make -f make_mac.mak',
    \   'unix' : 'make -f make_unix.mak',
    \   },
    \}

NeoBundle 'Shougo/unite.vim'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 'vim-jp/vimdoc-ja'
NeoBundle 'vim-ruby/vim-ruby'
NeoBundle 'wakatime/vim-wakatime'

call neobundle#end()
NeoBundleCheck

"help language use Japanese
set helplang=ja,en

"vimを使ってくれてありがとう!!!!!!!!!!
set notitle

"Ricty
set guifont=Ricty\ 11

"use UTF-8
set encoding=UTF-8

"syntax
syntax on

"line number
set number

"indent setting
set autoindent
set smartindent
filetype plugin indent on

"no more swapfile
set noswapfile
set nobackup

"status line setting
set laststatus=2
let g:lightline = {
    \ 'colorscheme' : 'solarized' ,
    \}

"colorscheme setting
set t_Co=256
set background=dark
colorscheme solarized

"convert file encode
function SetUU()
    set ff=unix
    set fenc=utf8
endfunction
command -nargs=0 SetUU call SetUU()

"use backspace
set backspace=indent,eol,start

ペアvim後 .vimrc

"neobundle.vimの設定
if has('vim_starting')
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'

"install plugins
NeoBundle 'Shougo/vimproc.vim', {
    \ 'build' : {
    \   'windows' : 'make -f make_mingw32.mak',
    \   'cygwin' : 'make -f make_cygwin.mak',
    \   'mac' : 'make -f make_mac.mak',
    \   'unix' : 'make -f make_unix.mak',
    \   },
    \}

NeoBundle 'Shougo/unite.vim'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 'vim-jp/vimdoc-ja'
NeoBundle 'vim-ruby/vim-ruby'
NeoBundle 'wakatime/vim-wakatime'
NeoBundle 'slim-template/vim-slim'
NeoBundle 'scrooloose/nerdtree'
NeoBundle 'Shougo/vimshell.vim'

call neobundle#end()
NeoBundleCheck

"help language use Japanese
set helplang=ja,en

"vimを使ってくれてありがとう!!!!!!!!!!
set notitle

"Ricty(only gvim?)
set guifont=Ricty:h16

"use UTF-8
set encoding=UTF-8

"syntax
syntax on

"line number
set number

"indent setting
set autoindent
set smartindent
filetype plugin indent on
set expandtab
set shiftwidth=2
set softtabstop=2

"no more swapfile
set noswapfile
set nobackup

"status line setting
set laststatus=2
let g:lightline = {
    \ 'colorscheme' : 'solarized' ,
    \}

"colorscheme setting
set t_Co=256
set background=dark
colorscheme solarized

"convert file encode
function SetUU()
  set ff=unix
  set fenc=utf8
endfunction
command -nargs=0 SetUU call SetUU()

"use backspace
set backspace=indent,eol,start

"Neocomplete
source ~/.neocomplete.vim

"NerdTree
source ~/.nerdtree.vim

当該コミット github.com/unasuke/dotfiles pair vim lesson

2015年06月14日
2015年06月10日

複数アプリケーションから参照されるDBをridgepoleで管理する

ridgepole

忙しい人のためのまとめ

tmixの現状

最近の大規模なwebサービスが、1つのアプリケーションとして動いているというのは珍しいだろう。cookpad社がそうであるように、tmixも裏ではいくつかのRails Applicationが同時に動作している。 そしてそれらのRailsが見に行くデータベースはもちろん共通の1つである。

Railsは、そのアプリケーション内でschema.rbを用いてデータベースの定義を行っている。そしてRailsアプリケーションの数だけschema.rbが存在し、各アプリケーションの開発者が各々でschema.rbを好きに編集すると、conflictは避けられない。実際、tmixでもschema.rbを別リポジトリからコピーしてくるなんて作業はしょっちゅう行われていた。

この状況が好ましくないことは誰の目にも明らかであり、解決策としてのridgepoleの導入が必要だった。(参考 クックパッドにおける最近のActiveRecord運用事情)

ridgepoleの導入

現状の把握

ridgepoleを導入する前に、まずは現状を正しく把握する必要がある。

tmixは、メイン、画像生成、発注管理で3つのRails Applicationが動作している。それぞれはCircle CIによってGitHub Pushのタイミングでテストされ、production deploy時にはCircle CIからcapistranoを用いて本番環境にdeployされるようになっている。 環境は、development、staging、production、testの4つあり、それぞれにデータベースが存在する。

各リポジトリからschemaを適用させる(没案)

まず僕は、schemaを管理するためのリポジトリを作成し、それぞれのリポジトリがdeploy taskのなかでgit cloneを行い、ridgepole applyをさせれば良いと考えた。ridgepoleでは冪等性が保証されているので、schemafileの適用は何度走ってもよい。各アプリケーションがdeployされるたびに、データベースは更新される。

そのために、次のようなシェルスクリプトを作成し、circle.ymlで実行させるようにした。

cd ../
git clone git@github.com:spice-life/tmix-schema.git
cd tmix-schema
bundle install
bundle exec ridgepole -c ../tmix/config/database.yml --apply

当然のように、これはうまく動作しない。なぜなら、Circle CIでテストを行う環境は、その環境と結びついたリポジトリにしかアクセスできず、他のリポジトリをcloneする権限は持っていないからだ。(もちろんこの記事で出てくるリポジトリは大半がprivate)

そこで、いい方法はないものかとCircle CIのchatで聞いてみたところ、user keyを追加しろとの返答があった。しかし、それでは僕がアクセスできる全リポジトリへの権限が渡ってしまう。それに、サービスの運用が属人性の高いものになってしまう。これは良くない。 そのような返答をすると、今度はkey pairをCircle CIとGitHubに登録しろと言われた。これなら、権限が最小に抑えられて望ましい。 circle ciでのchatの様子

さて、SSH keyを登録するにしても、hostnameがgithub.comではいろいろと都合が悪い。そこで、hostanemeを"ridgepole"として登録し、git cloneするときには明示的にその鍵を使うようにした。具体的には以下のようにした。

cd ../
GIT_SSH=tmix-web/bin/git-ssh.sh git clone git@github.com:spice-life/tmix-schema.git
cd tmix-schema
bundle install
bundle exec ridgepole -c ../tmix/config/database.yml --apply
#!/bin/sh
exec ssh -oIdentityFile=~/.ssh/id_ridgepole "$@"

Circle CIで追加した鍵は、内部ではid_をhostnameの前に付与して保存されるのでこのようにしている。

このようにしたことで、git cloneができるようになり、めでたしめでたし……と思っていると、おかしなことが起こり始めた。cap deploy時に次のようなエラーメッセージが表示されるようになったのである。

ERROR: Repository not found. fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

もちろん追加した鍵のhostnameはridgepoleなので使われるはずはないのだが、鍵を削除するとdeployができるようになったので、仕方なく鍵を削除した。どうすれば良かったのだろう……

結局、user keyを追加するしか無い。そこで、chat deployを行うbotのuser keyを追加した。これで、git cloneができるようになり、ridgepole applyもできるようになった。

だが、この方針では、本番サーバーそれぞれがschemaリポジトリを保持することになり無駄であること、データベースの変更を単体で行えないなど問題点も多い。

ridgepoleをcapistrano deployさせる

なので、schemaが存在するリポジトリをcap deployできるようにした。ただ、このためにサーバーを持つのも無駄なので、deploy先は既存アプリケーションのサーバーを間借りする形にした。

具体的には、以下の記述をdeploy.rbに追記した。

namespace :deploy do
  after :published, :ridgepole do
    on roles(:db) do
      execute "cd #{fetch(:release_path)}; bundle exec ridgepole -E #{fetch(:stage)} -c database.yml --apply"
    end
  end
end

これでbundle exec cap hoge deployするとその環境のデータベースにridgepole applyができるようになった。

テストについて

ridgepoleで読み込むschemafileについてsyatax errorがないか確認する簡単なテストを書いた。

require "spec_helper"

describe "Schemafile" do
  it "should correct syntax" do
    `bundle exec ridgepole -c database.yml -E test --apply --dry-run`
    expect($?).to eq(0)
  end
end

schemafileについてはこれくらいでいいとして、問題は各アプリケーションのテストである。テスト時に、schema.rbを読み込んであれこれする動作をする場合、やめさせなければならない。Rspecを使用している場合、spec/rails_hepler.rbの

ActiveRecord::Migration.maintain_test_schema!

この記述を削除する必要がある。

業務フローがどうなったか

ridgepoleの導入によって、業務の流れは次のようになった。

例えば共用の開発用データベースが存在する場合は、それに対しては手動でridgepole applyする必要がある。

2015年06月10日
2015年06月07日

といくんのおうちで家二郎

二郎

経緯

なんかLINEが飛んできてやることになった。

様子

ここから先、生肉とキッチンの画像が多くなります。

僕、とい、りゅうのすけの3人で、とりあえず肉のハナマサやスーパーなどに行って、以下の食材を購入しました。

これを何とかしていきました。以下、写真と雑な説明が続きます。

下準備

肉たちです。 とんこつ 豚バラ そもそもこの豚バラが、とい家に届いたことが会の発端だそうです。

豚骨をゴロっとしました。 とんこつゴロリ ここでりゅうのすけに一旦何もかも任せてといくんと僕で鍋や食器や麺を買いに行きました。

開化楼という有名な製麺所に行って太麺を10玉買いました。これは3人の会だったのですが、まあ10玉は買いすぎました。5玉で良かったです。というか有名な製麺所ってのをこの日に知りました。 開化楼 麺を入れる木箱が大量にあってただただすごい。

帰ってくるとこうなっていました。一回目の茹ではアクとか臭みとかなので捨てます。肉片もこそぎ取ります。骨を割りたかったのですが、トンカチがありませんでした。買うのもアレだし。 煮込み1回目

豚バラをいい感じの大きさにしてタコ糸で巻いていきます。タコ糸が足りなくなったりもしましたが、それはそれ、これはこれ。 チャーシュー仕込み

昼ごはんとして振る舞われた豚バラの炒めた何か(調理中)です。唐辛子の効いたからい何かで、美味しかったです。 からくておいしいなにか

煮込み

チャーシュー、背脂を入れて煮込みます。ひたすら。 煮込みを始めた

豚バラの何かでは物足りなく、また肉も潤沢なので、薄く切って生姜焼きを作り始めた様子です。脂ですごくすべる。 薄く切って 生姜焼き

調理はほとんどりゅうのすけがやっています。この辺りからといくんが寝始め、僕はHuluで仮面ライダーやら俺物語やらを観つつたまに調理を手伝ったりしました。

太麺です。 太麺

ぐつぐつと煮えています。水がどんどん減っていくのでどんどん足していきます。 沸いた

頃合いを見て、香味野菜を入れてさらにさらに煮込みます。排水口用のネットに入っていますが、後で取り出しやすくするためです。(参考: 第五回家二郎報告会 - おともだちティータイム) 煮込んでいます 煮込んでいますよ 香味野菜を入れて煮込みます

野菜を切って茹でます。どう考えても、もやし2kgは買いすぎた。 茹で野菜

チャーシューをカエシに漬け込みます。これは一旦取り出したもの。 チャーシューカエシ

提供

いよいよ麺を茹でていきます。ちなみにとんこつを煮込み始めたのが12時頃で、この写真は16時半頃だったので、ざっと4時間はいろいろやっていたことになります。ガス代すごそう。 麺を茹でる

どんぶりにカエシ、味の素を入れておきます。雰囲気が出てきました。 カエシと味の素

茹で上がった麺をよそっています。 メンヨソイ

完成

野菜、煮玉子、コールを聞いて完成!!突然出てきた煮玉子は僕が木曜から仕込んでいたものです。 二郎

僕は「二郎」と名のつくラーメン店には行ったことがないので比較はできませんが、おいしい、おいしいがこれ量が、という感想です。麺は半分余ったし、もやしが冷蔵庫を占領しました。

感想

よかった。けれど次があるならもっと上手くやれるだろう。僕らは人間で、学び、成長することができる。次に活かそう。

まず、材料のみきわめ。あと、チャーシューはすこし固かったかな。これは各人で納得のいくものをつくって持ち寄る方式にしてもいいかもしれない。地味に大事なのが、いい写真を撮る能力。

あと、PCDJコントローラーが欲しくなった。

2015年06月07日
2015年05月04日

#kosen10s LT 01に参加した

kosen10s

kosen10’s LTとは

高専をついこの間卒業したイケてる人たちでLT会! 本イベントは2010年に高専に入学され、「順調であれば」つい先日本科を卒業された高専出身者で集まってLT会をするものです

というイベントです。当日はこのTシャツを着て参加しました。 うなすけTシャツ

参加した感想

割りと軽いノリで参加したつもりが、あれよあれよとすごい人たち(でも同い年)が参加し始めて、提案者が7人位の参加者になると思っていたところを結局16人も集まり、「わあなんだこのメンバー」となりました。 ルーターをいじって遊ぶやら、大規模ネットワーク構築するやら、Sony社員やら、噴水が溢れるやら、IMAGINE THE FUTUREやら、アイカツやらで、ただ濃いだけにとどまらず技術的にも高度な人たちが集まりました。 ただ、萎縮するなんてことはなく、そもそも同級生ですから、いつの間にか敬語が外れていき、最後はなんかワイワイという感じになっていました。

自己紹介LTは軽め、自由LTでネタをぶち込んでいこうと思って準備してきたのですが、自己紹介LTからとんでもないものを仕込んでくる人が多く、こりゃやべえなとなりましたが、Tシャツなどのおかげか一応はウケて良かったです。 ネタをぶち込んだ自由LTは反応が良かったですが、次のルーター芸人の発表に完全に持って行かれた感じはあります。発表スライドは後ほど追記します。

自分が今まで関わって来なかった高専ベンチャーのこともそうですが、こういった集まりに参加すると、自分の知らなかった世界、逆に自分は知っているけどみんなは知らない世界というものがわかります。 「人脈を広げる」というわけではないですが、いろんな人と会ってみるのはとても良いことです。同じプログラミングが好き同士と思っていたつもりが全く違う方向を見ていたり、初対面の人との意外な共通点で盛り上がれたりと、得るものは名刺だけではありません。 確かに、交通費や参加費、様々な障壁はあります。心理的な壁もあることでしょう。ですが、障壁の向こうで得るものは大きいです。自分に乗り越えられそうな壁から壊していくのがいいと思います。

地理的な障壁で言えば、福井では「福井技術者の集い」が、定期的に開催されつつあります。是非参加してみてください。

発表スライド

自己紹介 つくったもの

発表者シャッフルについて

あらや君と見せ合ったのですが、eachせずともそのままputsしてしまえばよかったな、と思いました。

2015年05月04日
2015年04月26日

M3-2015春に行ってきた

買ったCD

行くのを決めたのは2日前

M3、存在は知っていたけど、僕の中ではコミケほどの存在感はなかった。けれども行ってみたいイベントの一つではあった。しかし、コミケと違って、僕はM3の開催時期を知らなかったのだ。

超ボマスとリリパとM3なんでスケジュール被ってしまったんや………

— HolyGrail (@HolyGrail) 2015, 4月 23

このツイートを見て、「あ、M3ってもうすぐなんだ。行かなきゃ」となった。しかし給料もまだだし、机や断線したイヤホンなど買わなければいけないものがいっぱいあるので迷っている、と先輩に言ったところ「そういうのは行って後悔した方がいい」とのことなので、行くことにした。カタログの事前販売はもう無くて、当日買うしかなかった。

買ったもの

Hybrid Monster

Hybrid Monster これはプチョヘンザ案件ですよ。

ABSOLUTE

ABSOLUTE 絶対硬核電踊楽

GAT04

GAT04

元気くんバンドEP

元気くんバンドEP

Candy Star

Candy Star

IRREGULAR NATION

IRREGULAR NATION 禁忌に触れる快感

dreamless wanderer

dreamless wanderer

paroxysm

paroxysm

sudden shower

sudden shower

SYNERGY-STYLE VOL.4

SYNERGY-STYLE VOL.4

趣味がわかる。事前チェックとか何もせずに行って、よくわからぬまま買ってしまって良くないと思った。次行くときは入念にチェックしてから行こう。

2015年04月26日
2015年04月17日

tmixでオリジナルTシャツを作った

あなたと違って、僕は人見知りなんですよ

先日開催されたRails寺子屋にも参加したりと、東京に来たからには様々なイベントに参加したい僕なのですが、生憎と人見知りです。知らない人に話しかけるのはとても緊張するけど、かと言って誰とも話したくないわけではなく、積極的に会話をできればなぁと思っています。さっさとなんでもいいから誰かに話しかければいいのに、困ったものです。

何かきっかけがあれば話せるんだけどって言い訳をする

そうです。例えば、使っているパソコンやエディタがいっしょだったり、有名企業のステッカーが貼ってあったり、どう考えても真横にいるこの人が今俺のツイートをふぁぼったよな……だったり、なにか話しかけるきっかけがあればいいのです。あと、いつも見知ったtwitterのアイコンと本人が一致しないのも要因の一つじゃないでしょうか。「あの人、たぶん○○さんだと思うけど違ってたらどうしよう……」と不安になって話しかけられない、なんてこともあります。

きっかけになって、twitterとかの特定がしやすければ良いんですよ

となると、手っ取り早く特徴づけられて、かつ特定しやすさを得たいというわけです。そんなことで悩んでいると、隣の席の開発部長がこんなことを言いました。

「そういえば僕、オリジナルTシャツをWEBで簡単に作れるtmixっていう便利なサービスを知ってるよ」

……そうか。突飛なTシャツを着ていたり、またはTシャツにtwitterアイコンなんかプリントされていると、課題が一気に解決する。ありがとうございます部長。ありがとうtmix。最高のサービスだ。

オリジナルTシャツを作ってみる

デザイン

早速、twitterアイコンTシャツと、話題になったアレでTシャツを作ってみました。

twitterアイコン 基板もやし

こんなTシャツ着てたら話しかけざるを得ないでしょう。いや、むしろ怖くて近寄れないかもしれない……とデザインしながら考えましたが、まあ、良いネタになるでしょう。皆さん笑ってくれると思います。たぶん。

発注

発注はよくあるネットショップ(amazonとか)と同じように、住所を入力、支払い方法を選択してOK、という感じです。郵便番号を入力すると住所が自動で入るけど、逆の、住所から郵便番号を自動入力もあったら便利かな、と思ったりしました。よくあるでしょう郵便番号のほうが思い出せないこと。ない?

あ、これで作る作業終わりか。なんて手軽なんだろう!tmixって素晴らしいサービスだなぁ!!サイコーだ!

到着

こんなふうに、オリジナルの袋に入ってます。 袋

表側が、こんな感じ。 表

印刷はこんな具合。 印刷

これが裏です。 裏

文字の方も。 文字T

綺麗に印刷できてますね。 印刷が綺麗

近寄って見ると、こんなふうになります。長い間着ていると、この印刷がだんだん薄くなっていきます(先輩の着ているのを見せてもらいました) 寄って見る

みんなもオリジナルTシャツを作ろう

こんな感じのTシャツが、デザイン?時間10分で作れてしまうんだからお得ですよね。着たいかどうかは別ですが。

というわけで、なにか緩い感じのイベントがあった時には、忘れなければこれらを着ていくので気軽に話しかけてください。

2015年04月17日
2015年04月01日

働き始めて

桜

新卒

いつかの記事にも書いたように、この春から株式会社spice lifeで働いています。詰め込まれるような電車は今までに経験がなく辛いですが、通勤にはもう慣れ、駅で迷ったり、地図に頼ったりすることなく出社できるようになりました。

業務の内容はというと、入社する前に先輩方によって割り当てられた(軽微な?)バグを直しているところです。それが終わると、いよいよ本格的にサービスに関わっていくようです。「軽微な」と、さらっと書きましたが、おそらく先輩方にとっては軽微な修正でも、先日寺子屋に参加したばかりのひよっこである僕には十分難しく、ほぼ手取り足取りで毎日が過ぎていきます。日々が勉強で、読むべき本、読みたい本も溜まっていく一方です。まるで軽自動車で高速道路を走るような、やっとのところで追いついている感じでしょうか。

かと言って楽しくないわけではなく、例を挙げるならば社内idobataでのゆるい発言であったり、溜まっていく一方と言った本も基本的に会社負担だったり、良い椅子であったり、水などが自由に飲めたり、そもそもプログラミングに専念できたりと、恵まれた環境にいます。

生活

それと同時に初めての一人暮らしも始まりました。短かった寮生時代も一人暮らしのようなものと言えなくもないですが、冷蔵庫も、洗濯機も、キッチンも、お風呂もすべて自分だけのものになるという事実は、家事を楽しくさせるには十分です。会社の人と食べに行くことも多いですが、自炊も下手なりにしています。いつまで続くかは分かりませんが。

一方で足りないものもまだまだ多く、例えば机がないのでご飯はまだダンボール箱の上で食べていますし、新しく買っていただいたMacBookは、今まで使っていたリュックには大きすぎます。デスクワークばかりなので運動をしようにも靴がありませんし、部屋もまだまだ片付いていません。

不安

そして頻繁に頭をよぎるのが、「実はこれは職業体験で、もうすぐ地元に帰らなくてはならないのではないか」という考えです。電車から降りて、改札に向かうときによく浮かんできます。多分、お風呂とトイレが一緒であることが、就活の時にホテルに泊まっていた時のことを思い出させるからだと思います。それでも、杞憂だとわかっていても不安になるものです。

これから

さて、こんな僕ですが、Railsエンジニアとしての第一歩を踏み出しました。プロジェクトへの貢献も少ないままに、名刺には「プログラマ」という肩書が書かれると思います。駆け出しとしてではありますが、5年間の高専生活を終え、念願の肩書を得ることとなりました。まだまだ若輩者ですが、みなさんどうかよろしくお願いします。

2015年04月01日
2015年03月30日

僕がお酒を飲まないわけ

楽しかった懇親会も終わり、いよいよ皆とお別れであるという感じが強まります。これから先に同じメンバーで集まるのも極々少なくなると思うと、うるさかったあの教室もやけに恋しく、また懐かしくあります。

さて、そんな別れの場ですが、先生方、同級生みんなの盃を断ってしまい、結局お酒を飲んだのは数滴程度と場を白けさせるような行いをしたことを、少し申し訳なく思います。そしてこれからの新生活で、歓迎会などのイベントで僕がお酒を飲まないということで、気分を害される方がいるかもしれません。

しかし僕は、お酒を飲みたくはないのです。

飲まない理由

僕の家では、父がお酒を飲みます。父は酔うと記憶をなくすタイプの人です。その姿を見ていると、僕もこうなってしまうのだろうか、という怖れがあるのです。記憶をなくすのがとても怖いのです。

また、自分の箍が外れてしまうのも怖れているのです。酔っ払うことを免罪符に、多少の行いは許されるという印象があり、その意識により自分の抑えが外れて失礼を働くことが怖いのです。

そしてこれは他人のことも含まれますが、嘔吐がとても怖いのです。嘔吐されても僕は多分何も対処できず、ただその場から逃げてしまうでしょう。というか、逃げていました。同じく自分の嘔吐もとても怖く、避けたいものです。

これらの理由により、僕はお酒を飲みません。飲みたくありません。

もちろん、一人でゆっくり自分を試し、許容量を知れば、この様な恐怖を抱く必要もないでしょうが、そのような行為さえ怖く、ただ盲目的にアルコールを避けてしまいます。また、今のところ僕の周りには、見境なく飲酒し、みっともない姿を晒すような大人はいません。

近年は、「飲みニケーション」という単語も影を潜め、社会的な付き合いでの飲酒の強制も少なくなりました。とても嬉しく思います。ただ、体質的にアルコールに弱い人ならともかく、僕のようにただアルコールが嫌いだから飲まないというのは、まだ許されている気がしません。

飲酒が喫煙ほど嫌悪感を持たれることはないでしょう。将来も成人後の飲酒習慣というものは縮小されずに根強く残るでしょう。それはお酒の成り立ちから考えると当然のことであり、消えることのない文化としてずっと継承されていくことでしょう。それでも社会は多様化が進みます。僕のようなただ嫌いだから飲酒しない、という意見も、もっと認められる日が来ることを願っています。

そして最後に、僕は父のことを嫌悪しているわけではないこと、「飲み会」という場自体にはむしろ好意的であることを伝えておきます。

2015年03月30日
2015年03月16日

卒業

祝卒業確定

この度、福井高専を卒業することになりました。

入学してからのことを振り返ってみると、実に様々な出来事がありました。1年生では、全ての元凶とも言えそうなIT研に所属したこと。2年生では、初めて進級という壁にぶち当たったこと。3年生では高専祭、メディア研と忙しくなりました。4年生ではプロコンとスポンサー長の平行作業。そして5年生では、またもやスポンサー長、就職活動、高専カンファ、そしてとても大きな壁だった卒業研究。毎年何かしら忙しく、何かしら充実した高専生活でした。

高専に入学したきっかけは、スマートフォンを触り、その上で動くアプリケーションを見て、「自分もいつかこんなように動くものを作れるようになりたい」と思ったのが始まりでした。高専のパンフレットを読み、電気電子工学科と電子情報工学科がどう違うのかで悩んだのも、遠い昔の事のように思えます。

電子情報工学科で5年間過ごし、自分の夢である「プログラマ」に近づくことが出来たかというと、春からそのような職に就くこともあり、夢が叶った、と言えるようでその一方、なにか誇れるものを作り出すことはまだ叶っておらず、まだ夢にむかっている途中かもしれません。まだ手をつけてすらいないアイデア、まだ改善点の多くあるプログラムが残っており、それに春からは仕事と、まだまだやることはたくさんあります。

僕の高専生活の多くを占めるものは2つあり、その一つが高専祭です。1、2年生は露店でカレーを売っていましたが、3年生以降は運営に関わり始めたことが理由です。夏休みは高専祭の準備のために潰れ、毎年毎年「来年は絶対高専祭実行委員なんてやるものか」と思いながら、2年連続で部門長になってしまうなど、忌々しい思い出もあります。それでも、高専祭実行委員を通して出会えた友人もあり、夜通しの作業を通じたよくわからない一体感や、最後の年では花火も観れるなど、とても楽しかったです。

そしてもう一つは、高専カンファレンスです。高専カンファレンスに関わるうちに、フォロワーは増え、福井のみではなく県外にも友人ができ、職を得るきっかけにもなるなど、良いことがたくさんありました。高専カンファレンスを開催したいという想いの中には、カンファへの恩返しがしたいという気持ちもあったかもしれません。

その他にも、特筆するに値する大きな出来事はたくさんありました。退寮、仮進級、プロコン、出火など、どれも地元の高校に進学していれば経験できないようなことです。そのうちのいくつかは経験しないほうが良かったといえるような出来事もありますが、今思い返せば楽しかったと言えるので、よしとします。

入学したときは、5年生の先輩がとても大人びて見えたものでした。賢くて、何かよくわからないことを言っていて、さすが最上級生は違うな、と思わせられました。ただ、自分が5年生になってみると、見た目が老け、ちょっとばかし知識が付いただけで、中身はというと1年生の頃からちょっとしか、いやほとんど成長していないのではないかといった感じで、とてもあの時尊敬した5年生には敵わない、ただの歳を重ねた学生です。自分のことだからそう感じるのかもしれませんが、まだまだ幼く、未熟な、尊敬には値しない人間です。卒業と言っても、要件を満たしただけのような、精神的な面で卒業に値するかと言われると達していないかもしれません。

そんな僕でも卒業してしまうわけで、せめて今まで関わってきた放送メディア研究会やIT研究会には、なにか恩返しがしたいと思いながらも、何も思いつかないという状況です。

長くなりました。論文の査読も通り、学内サーバにデータを提出したし、卒研室の掃除も終えたし、ロッカーの中身も空だし、思い残すことはありません。春からは今まで同様に、いやそれ以上に頑張ります。ありがとうございました。よろしくお願いします。

2015年03月16日
2015年03月10日

Gitのコミットメッセージの2行目に何か書くとどうなるのか?

Gitのコミットメッセージの書き方

Gitのコミットメッセージの書き方は、多くのwebサイトや書籍では2行目を空行とする、と説明している。

Git ではコミットメッセージの形式に関して制約はありませんが、1 行目にコミットの全体的説明を 50 字以内で記述し、2行目は空白行とし、3行目以降に変更内容の詳細を記述するのが標準的な形式です。

Atlassian Gitチュートリアル The git commit Commandより

GitHubのOS X用クライアントでは、そもそもコミットメッセージの2行目に何かを書くことはできない。では、書くとどうなるのか。

実践

リポジトリを新規に作成し、README.mdを作成した。そしてコミットメッセージを以下のように記述して、コミット。 2行目に記述があるコミットメッセージ プラグインか何かの働きかと思うが、2行目が注意色になっていて、あからさまな警告を感じるが、何もエラーメッセージを吐くことなくコミットできた。

そしてコミットログを表示したのがこれ。しっかり2行目も表示されている。(メルアドは隠した) 2行目のメッセージも表示されている

その後、2行目を記述しないコミットを同様に行ったが、問題なく出来た。 普通のコミットメッセージ コミットログも。 2つのコミットのlog

GitHubではどのように見えるのか確認したところ、webではこのように表示されている。 githubでの2行目の表示 普通のコミットメッセージはこのように。 普通のコミットメッセージの表示

GitHub for Macでは、すこし小さく表示されているように見える。 GitHub for Macでの2行目 普通のコミットメッセージは、こう。 普通のコミットメッセージのGitHub for Mac

bitbucketでも、このように特に問題なく表示された。 bitbucketの2行目

このように、コミットメッセージの2行目になにか書いても特に問題はないように見受けられる……が、git logをするとおかしなことになる。

git logの表示が

git logでoneline表示をすると、このように表示される。 複数行が表示される 2行目を記述したコミットメッセージの1行目、2行目、3行目がひとつの行に表示されている。

そこで、このように3行目が長い(2行目はそれほどでもない)コミットメッセージを記入し、onelineで表示させるとどうなるだろうか。 3行目が長いコミットメッセージ

結果、こうなった。どうやらgit log –onelineは、コミットメッセージの初めの空行までを読み取って1行に出力する動作をするようだ。(空行をはさんだ後の文章は表示されていない)ソースコードを読んでないので推測だが。 長いコミットメッセージのgit log

まとめ

gitのコミットメッセージの2行目に何かを書いたとして、それが何らかの不具合を引き起こすことはないと思われるが、例えば今回実験しなかったgit format-patchやgit amではどのようになるかわからない。そもそも歴史的慣習を打ち破ってまで2行目に何か書きたい需要があるとも思えない。

コミットメッセージの2行目は空けよう!

2015年03月10日
新しい投稿
古い投稿