ukstudio先輩のdotfile(ukstudio/dotfiles)見てたら、stowを使ってdotfileへのsymlinkを貼っていてマジヤベエって気持ちになって、とりあえずstowを使えるようにしました。(Using stow instead of shell script:c97f1f8)
atomに代わってvimをメインのエディタにしていく決意をしたので、本格的に環境を整えていくことにします。これが今までのstatuslineです。
とりあえず作者さんの、作者が教える! lightline.vimの導入・設定方法! 〜 初級編 - インストールしよう - プログラムモグモグを参考にして、サクッとvimrcをコピペした結果がこちらになります。(Update lightline setting:c2461db)
こちらからは以上です。
あの……fugitive使って現在のbranchを表示させるのってどうやって……
職場の先輩(HolyGrail先輩)がこんなエントリ(今買うべきおすすめのラブコメ漫画(追記あり))を書いたり、職場におすすめの漫画(1巻目だけ)を持ってきたりすすので、どうにも欲しい漫画が増えていきます。
それに加え、社会人となったことで、学生時代に比べ自由にできるお金も増えたので、自制しないと際限なく漫画を買ってしまいそうになります。そんな僕が6月あたりに買った漫画を列挙します。
※画像は大抵amazonへのリンクです
試し読み マンガボックス (MangaBox) / 人気マンガ家の新作連載が無料で読める!
政府通知届かないしなにをやっても駄目。禁じられた恋的な感じでもないけど、いけないことって感じがする。3人の関係がこれからどうなっていくのか……いや4人か?とりあえず買って読んでください。
試し読み 不器用な匠ちゃん - pixivコミックで漫画を無料試し読み
いいですね、趣味の話になるととたんに饒舌になる感じ。僕らそのものじゃないですか。それでいて、こう「私なんかが」みたいな意識が見える気がして、なんかすごく感情移入しやすい。とりあえず買って読んでください。
試し読み 制服あばんちゅーる / さぬいゆう、伊丹澄一 / まんがライフWIN
は〜なんだこのハッキリ表には出さないけどお互いがお互いを好き合ってる感じ!!学生って感じがして読んでて「は~」ってなりました。とりあえず買って読んでください。
試し読み お前ら全員めんどくさい! | 日本最大級の無料Webコミック[COMICメテオ]
確かに登場人物全員めんどくさいし、読者から見れば國立先生も十分めんどくさい。めんどくさかわいい。webで試し読みもできますし、とりあえず買って読んでください。
試し読み つるつるとザラザラの間/月子 - モーニング・アフタヌーン・イブニング合同Webコミックサイト モアイ
虻川さん、本当に白瀬くんのこと好きなんだな……というのが1巻の終盤から2巻にかけての話とかでわかります。HolyGrail先輩も言ってますが、ヒロインの虻川さやちゃんがかわいいのでとりあえず買って読んでください。
試し読み 「第13保健室 1」 | ゲッサン少年サンデーコミックス | 小学館
マンモス校すぎて、保健室が12もある学校の話。個性的すぎる保健室の先生がまだ全員登場していないあたり恐ろしい。2巻が出てるようですが、まだ買ってないです。何かと2人の先生が絡み合うのでとりあえず買って読んでください。
独特の世界観というか、説得力というか、食べてみたくなるというか。「ヤダーーーーッ!!」ってなる気持ちもわかりますが、ちょっと好奇心のほうが勝っちゃいそう。とりあえず買って読んでください。
試し読み くまみこ - 無料コミック ComicWalker
これは前々から欲しかったけど、amazonで品薄で、店頭で見つけてアッアッとなって一気に買いました。4巻以降、一体どうなるんだ…… まちがかわいいのでとりあえず買って読んでください。
これは友人のふゆたくんにおすすめされて買った漫画。ラブコメばっか読んでるせいか、「ここからどういう恋に発展するんだ?」と考えてしまいますがほのぼの系漫画だと思うのでずっとこのまま……なのかな?数日後に2巻が出るので、とりあえず買って読んでください。
これは上の本を見てた時に同じ出版社のページで紹介されてて気になって買ってしまった漫画。異世界ファンタジー系で、絵が綺麗です。あと、あせびさんが変形してカッコイイです。とりあえず買って読んでください。
これ以外にも「とんかつDJアゲ太郎」とか「ジョジョ」とか買わないといけないので財布がマッハ。とりあえず買って読んでください。この記事書くためにamazonアソシエイトに参加しました。
結局、hackableなeditorとは言ってもかゆいところに手が届かない、という事態がありました。具体的には、「拡張子のない、とあるファイルをrubyとみなしてsyntax highlightしてほしい」という願いです。vimであれば、filetypedetectなどで設定できますが、atomだと……その手のプラグインを入れてみましたが、バグかなにかで期待通りの動作をしてくれませんでした。
vim(emacs)での設定法は後ろの席の人に聞けばすぐわかるのですが、atomだとどこを設定すればいいのかわからず、stackoverflowを見てもなにやらよくわからないディレクトリに潜って設定しなければいけないような解説がいくつも出てきて、結局わかりません。
やはり……vimか……
そこで、「atomを起動すると警告が出るatom package」を作りました。と言いたいのですが、まだそこまではできていません。プラグインを起動するとアラートが出て、atomが閉じるプラグインを作りました。
こんな感じで動作します。
ctrl + alt + o でアラートが出ます。閉じているのはatomのウィンドウのみで、プロセスは死んでいません。
機能増やすためにはatom使わなくちゃいけないしなんのために作ったか全くわからないのにもうstarが付いている。
弊社では、業務日報はesa(https://esa.io)で管理しています。
さてそのesaですが、先日APIがpublic β公開されました(release_note/2015/05/27/esa API v1をβ公開しました)。同時にAPI docsとRuby Gem(esaio/esa-ruby)も公開されました。
ということで、勤務時間を計算するRubyスクリプトを作れそうだったので、作ることにしました。
まず、今回は読めればいいだけなのでread onlyでaccess tokenを取得します。右上にある自分のアイコンを押して飛ぶ画面でaccess tokenを発行します。
access tokenが取得できたら、githubのREADMEに記載されているusageに記載されているコードを試してみます。
require 'esa'
client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
puts client.posts
このコマンドで、esaに投稿されている記事がガッと取得出来ました。多すぎますね。
欲しい記事のカテゴリ、投稿者はわかっている(日報なので)ので、検索クエリを用いて特定の記事を取得します。usageを読むと、postsに引数としてクエリを渡してやると良さそうです。
require 'esa'
client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
puts client.posts(q: "user:unasuke category:日報/2016/06")
これで、投稿者が"unasuke"で、カテゴリが"日報/2015/06"の記事(今月の日報)が取得できます。15分毎にAPIリミットがリセットされるとはいえ、あんまり何回もGETするのもアレなので応答を何かに格納しておきましょう。
require 'esa'
client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
response = client.posts(q: "user:unasuke category:日報/2015/06")
取得ができたので、本文の解析に移ります。まず本文はどこに入っているかというと、こうなっています。
{"posts"=>
[{"number"=>3949,
"name"=>"unasuke",
"full_name"=>"日報/2015/06/15/unasuke",
"wip"=>true,
"body_md"=>"markdown文字列",
"body_html"=>"html文字列",
"created_at"=>"2015-06-15T20:05:50+09:00",
"message"=>"Update post.",
"url"=>"https://hoge.esa.io/posts/3949",
"updated_at"=>"2015-06-15T20:34:16+09:00",
"tags"=>[],
"category"=>"日報/2015/06/15",
"revision_number"=>2,
"created_by"=>
...
解析するのに便利なのはmarkdownなので、markdownでの記事内容を取得します。このようにします。
require 'esa'
client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
response = client.posts(q: "user:unasuke category:日報/2015/06")
for i in 1...response.body["posts"].size do
puts response.body["posts"][i]["body_md"]
end
日報の中から合計勤務時間が書いてある部分を抜き出します。僕は日報の勤務時間を
# 勤務時間
| 場所 | 時間 | 小計 |
| --- | --- | --- |
| オフィス | 10:50 - 13:00 | 2:10 |
| オフィス | 14:00 - 20:30 | 6:30 |
| 合計 | | 8:40 |
このように書いているので、「合計」が含まれる行を持ってくれば良さそうです。また、その中でも、コロンで区切られている数字のみを持ってくればいいので、以下の様に正規表現オブジェクトを作成して抜き出しました。
require 'esa'
client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
response = client.posts(q: "user:unasuke category:日報/2015/06")
for i in 1...response.body["posts"].size do
puts response.body["posts"][i]["body_md"].scan(/^.*合計.*$/)[0].scan(/\d+:\d+/)
end
これで、以下の様な配列が得られました。
["8:00", "9:10", "8:00", "10:00", "7:30", "7:50", "7:30", "7:30", "8:30", "8:00"]
あとは簡単で、時間の計算をしてやれば合計勤務時間が求まります。最終的なコードはこのようになりました。
esaがどんどん便利になっていきます。(scriptの名前はアイドルマスターシンデレラガールズの三好紗南から取りました)
sana.rbの動作を修正しました。
あこがれの先輩とペアでvimの練習とかしてた
— うなすけ(偏差値5) (@yu_suke1994) 2015, 6月 12
新しく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
最近の大規模なwebサービスが、1つのアプリケーションとして動いているというのは珍しいだろう。cookpad社がそうであるように、tmixも裏ではいくつかのRails Applicationが同時に動作している。 そしてそれらのRailsが見に行くデータベースはもちろん共通の1つである。
Railsは、そのアプリケーション内でschema.rbを用いてデータベースの定義を行っている。そしてRailsアプリケーションの数だけschema.rbが存在し、各アプリケーションの開発者が各々でschema.rbを好きに編集すると、conflictは避けられない。実際、tmixでもschema.rbを別リポジトリからコピーしてくるなんて作業はしょっちゅう行われていた。
この状況が好ましくないことは誰の目にも明らかであり、解決策としてのridgepoleの導入が必要だった。(参考 クックパッドにおける最近のActiveRecord運用事情)
ridgepoleを導入する前に、まずは現状を正しく把握する必要がある。
tmixは、メイン、画像生成、発注管理で3つのRails Applicationが動作している。それぞれはCircle CIによってGitHub Pushのタイミングでテストされ、production deploy時にはCircle CIからcapistranoを用いて本番環境にdeployされるようになっている。 環境は、development、staging、production、testの4つあり、それぞれにデータベースが存在する。
まず僕は、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に登録しろと言われた。これなら、権限が最小に抑えられて望ましい。
さて、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リポジトリを保持することになり無駄であること、データベースの変更を単体で行えないなど問題点も多い。
なので、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する必要がある。
なんかLINEが飛んできてやることになった。
ここから先、生肉とキッチンの画像が多くなります。
僕、とい、りゅうのすけの3人で、とりあえず肉のハナマサやスーパーなどに行って、以下の食材を購入しました。
これを何とかしていきました。以下、写真と雑な説明が続きます。
肉たちです。
そもそもこの豚バラが、とい家に届いたことが会の発端だそうです。
豚骨をゴロっとしました。
ここでりゅうのすけに一旦何もかも任せてといくんと僕で鍋や食器や麺を買いに行きました。
開化楼という有名な製麺所に行って太麺を10玉買いました。これは3人の会だったのですが、まあ10玉は買いすぎました。5玉で良かったです。というか有名な製麺所ってのをこの日に知りました。
麺を入れる木箱が大量にあってただただすごい。
帰ってくるとこうなっていました。一回目の茹ではアクとか臭みとかなので捨てます。肉片もこそぎ取ります。骨を割りたかったのですが、トンカチがありませんでした。買うのもアレだし。
豚バラをいい感じの大きさにしてタコ糸で巻いていきます。タコ糸が足りなくなったりもしましたが、それはそれ、これはこれ。
昼ごはんとして振る舞われた豚バラの炒めた何か(調理中)です。唐辛子の効いたからい何かで、美味しかったです。
チャーシュー、背脂を入れて煮込みます。ひたすら。
豚バラの何かでは物足りなく、また肉も潤沢なので、薄く切って生姜焼きを作り始めた様子です。脂ですごくすべる。
調理はほとんどりゅうのすけがやっています。この辺りからといくんが寝始め、僕はHuluで仮面ライダーやら俺物語やらを観つつたまに調理を手伝ったりしました。
太麺です。
ぐつぐつと煮えています。水がどんどん減っていくのでどんどん足していきます。
頃合いを見て、香味野菜を入れてさらにさらに煮込みます。排水口用のネットに入っていますが、後で取り出しやすくするためです。(参考: 第五回家二郎報告会 - おともだちティータイム)
野菜を切って茹でます。どう考えても、もやし2kgは買いすぎた。
チャーシューをカエシに漬け込みます。これは一旦取り出したもの。
いよいよ麺を茹でていきます。ちなみにとんこつを煮込み始めたのが12時頃で、この写真は16時半頃だったので、ざっと4時間はいろいろやっていたことになります。ガス代すごそう。
どんぶりにカエシ、味の素を入れておきます。雰囲気が出てきました。
茹で上がった麺をよそっています。
野菜、煮玉子、コールを聞いて完成!!突然出てきた煮玉子は僕が木曜から仕込んでいたものです。
僕は「二郎」と名のつくラーメン店には行ったことがないので比較はできませんが、おいしい、おいしいがこれ量が、という感想です。麺は半分余ったし、もやしが冷蔵庫を占領しました。
よかった。けれど次があるならもっと上手くやれるだろう。僕らは人間で、学び、成長することができる。次に活かそう。
まず、材料のみきわめ。あと、チャーシューはすこし固かったかな。これは各人で納得のいくものをつくって持ち寄る方式にしてもいいかもしれない。地味に大事なのが、いい写真を撮る能力。
あと、PCDJコントローラーが欲しくなった。
高専をついこの間卒業したイケてる人たちでLT会! 本イベントは2010年に高専に入学され、「順調であれば」つい先日本科を卒業された高専出身者で集まってLT会をするものです
というイベントです。当日はこのTシャツを着て参加しました。
割りと軽いノリで参加したつもりが、あれよあれよとすごい人たち(でも同い年)が参加し始めて、提案者が7人位の参加者になると思っていたところを結局16人も集まり、「わあなんだこのメンバー」となりました。 ルーターをいじって遊ぶやら、大規模ネットワーク構築するやら、Sony社員やら、噴水が溢れるやら、IMAGINE THE FUTUREやら、アイカツやらで、ただ濃いだけにとどまらず技術的にも高度な人たちが集まりました。 ただ、萎縮するなんてことはなく、そもそも同級生ですから、いつの間にか敬語が外れていき、最後はなんかワイワイという感じになっていました。
自己紹介LTは軽め、自由LTでネタをぶち込んでいこうと思って準備してきたのですが、自己紹介LTからとんでもないものを仕込んでくる人が多く、こりゃやべえなとなりましたが、Tシャツなどのおかげか一応はウケて良かったです。
ネタをぶち込んだ自由LTは反応が良かったですが、次のルーター芸人の発表に完全に持って行かれた感じはあります。発表スライドは後ほど追記します。
自分が今まで関わって来なかった高専ベンチャーのこともそうですが、こういった集まりに参加すると、自分の知らなかった世界、逆に自分は知っているけどみんなは知らない世界というものがわかります。 「人脈を広げる」というわけではないですが、いろんな人と会ってみるのはとても良いことです。同じプログラミングが好き同士と思っていたつもりが全く違う方向を見ていたり、初対面の人との意外な共通点で盛り上がれたりと、得るものは名刺だけではありません。 確かに、交通費や参加費、様々な障壁はあります。心理的な壁もあることでしょう。ですが、障壁の向こうで得るものは大きいです。自分に乗り越えられそうな壁から壊していくのがいいと思います。
地理的な障壁で言えば、福井では「福井技術者の集い」が、定期的に開催されつつあります。是非参加してみてください。
あらや君と見せ合ったのですが、eachせずともそのままputsしてしまえばよかったな、と思いました。
M3、存在は知っていたけど、僕の中ではコミケほどの存在感はなかった。けれども行ってみたいイベントの一つではあった。しかし、コミケと違って、僕はM3の開催時期を知らなかったのだ。
超ボマスとリリパとM3なんでスケジュール被ってしまったんや………
— HolyGrail (@HolyGrail) 2015, 4月 23
このツイートを見て、「あ、M3ってもうすぐなんだ。行かなきゃ」となった。しかし給料もまだだし、机や断線したイヤホンなど買わなければいけないものがいっぱいあるので迷っている、と先輩に言ったところ「そういうのは行って後悔した方がいい」とのことなので、行くことにした。カタログの事前販売はもう無くて、当日買うしかなかった。
Hybrid Monster これはプチョヘンザ案件ですよ。
趣味がわかる。事前チェックとか何もせずに行って、よくわからぬまま買ってしまって良くないと思った。次行くときは入念にチェックしてから行こう。
先日開催されたRails寺子屋にも参加したりと、東京に来たからには様々なイベントに参加したい僕なのですが、生憎と人見知りです。知らない人に話しかけるのはとても緊張するけど、かと言って誰とも話したくないわけではなく、積極的に会話をできればなぁと思っています。さっさとなんでもいいから誰かに話しかければいいのに、困ったものです。
そうです。例えば、使っているパソコンやエディタがいっしょだったり、有名企業のステッカーが貼ってあったり、どう考えても真横にいるこの人が今俺のツイートをふぁぼったよな……だったり、なにか話しかけるきっかけがあればいいのです。あと、いつも見知ったtwitterのアイコンと本人が一致しないのも要因の一つじゃないでしょうか。「あの人、たぶん○○さんだと思うけど違ってたらどうしよう……」と不安になって話しかけられない、なんてこともあります。
となると、手っ取り早く特徴づけられて、かつ特定しやすさを得たいというわけです。そんなことで悩んでいると、隣の席の開発部長がこんなことを言いました。
「そういえば僕、オリジナルTシャツをWEBで簡単に作れるtmixっていう便利なサービスを知ってるよ」
……そうか。突飛なTシャツを着ていたり、またはTシャツにtwitterアイコンなんかプリントされていると、課題が一気に解決する。ありがとうございます部長。ありがとうtmix。最高のサービスだ。
早速、twitterアイコンTシャツと、話題になったアレでTシャツを作ってみました。
こんなTシャツ着てたら話しかけざるを得ないでしょう。いや、むしろ怖くて近寄れないかもしれない……とデザインしながら考えましたが、まあ、良いネタになるでしょう。皆さん笑ってくれると思います。たぶん。
発注はよくあるネットショップ(amazonとか)と同じように、住所を入力、支払い方法を選択してOK、という感じです。郵便番号を入力すると住所が自動で入るけど、逆の、住所から郵便番号を自動入力もあったら便利かな、と思ったりしました。よくあるでしょう郵便番号のほうが思い出せないこと。ない?
あ、これで作る作業終わりか。なんて手軽なんだろう!tmixって素晴らしいサービスだなぁ!!サイコーだ!
こんなふうに、オリジナルの袋に入ってます。
表側が、こんな感じ。
印刷はこんな具合。
これが裏です。
文字の方も。
綺麗に印刷できてますね。
近寄って見ると、こんなふうになります。長い間着ていると、この印刷がだんだん薄くなっていきます(先輩の着ているのを見せてもらいました)
こんな感じのTシャツが、デザイン?時間10分で作れてしまうんだからお得ですよね。着たいかどうかは別ですが。
というわけで、なにか緩い感じのイベントがあった時には、忘れなければこれらを着ていくので気軽に話しかけてください。