BEMANIで行くって決めたのでこうなりました。終わった後みんなからからよかったって言われてよかったです。
当日早朝に試しにやってみたところ3分ほど足りなくなったのであわてて曲を追加したら、当初最後に流そうと思っていたのが時間がなくて流せませんでした。もっと前々から準備しよう。
systemctl restart mysql.service
すると設定が無効になる僕らが高速化したのはRuby実装です。
まずは定石、SQLのslow_queryが何なのかの調査をはじめました。
しかし、何度mysqlのconfigファイルにその設定を有効化した記述をしても、systemctl restart mysql.service
すると無効状態に戻ってしまうので、
なんだかわからないままrestartは諦めました。(そもそもrestartするのも正しかったのか……?)
結果として、stars
テーブルのkeyword
、entry
テーブルのkeyword
、user
テーブルのname
にindexを張った他に、content_length(keyword)
としていた部分を
keyword_length
に値を格納してそこを見に行くようにアプリを変更したりするなどを行いました。
isuda
とisutar
の2つのsinatra appが相互に通信を行っており、この部分がボトルネックになるのではないかと考えました。
そこで2つのappとdbをまとめてしまいましたが、効果の程はわかりません。(この改善で一瞬だけスコアが0以上を返しました。たしか160から180くらいでした。)
public
以下の静的なファイル群はnginxが返すように変更しました。
存在するkeywordはそのkeywordのurlへと置き換える実装がありました。その中で、一度keywordをSHA-1で置き換える部分があったのですが、それをZlib.crc32
に置き換えて高速化を狙いました。
ただ、おそらくはアルゴリズムの改変もしくは結果のキャッシュ化を行えたほうが良かったのではないかと思います。
完全に気休めでした。
RACK_ENV
をdeploymentにunicornはRACK_ENV
をdeploymentかdevelopment以外は無視するので、アクセスログを見るためにproductionになっていたのをdeploymentにしました(thx kirikiriyamama!)
RACK_ENV
とsinatraの環境は分離させることができて、sinatraのenvironment
をproductionにすることで高速化できたようです。ただproductionのままだとunicornでログを見ることができないので、いずれにせよこの値はdeploymentにし、sinatraのenvironmentをproductionにすべきでした。
descriptionとkeywordそれぞれでスパム判定している部分を、それらを結合した文字列に対してスパム判定を行うようにしました。
/register
へはGETもPOSTもされていないので、エンドポイントごと削除しました。これやる意味あった?
unicornとnginxとの通信にunix domain socketを使用するようにしました。
またそれに限らずnginxまわりのチューニングは全部kirikiriyamamaさんに任せたので、これ以上のことをやってたかもしれません。
ユーザー名とパスワードは同一のものが使用されているので、パスワードの暗号化処理をやめて平文で保存するようにしました。
/login
の静的ページ化/login
のGETは完全に静的ページを返せるので、そのようにしました。
とにかく、スコアが0のまま放置していたのが一番の反省かと思います。どのような改善を試行しても、それによって性能が良化したのか悪化したのかが判断できないからです。
競技中間、確か14時頃からはずっと/login
、/star
、/keyword
へのPOSTがタイムアウトする原因を探っていました。アクセスログを見る限り、499が返っているのですが、手元ではmsec単位でresponseが返ってくるので本当に謎でした。それらのPOST requestは終了後に/
へリダイレクトするのですが、この/
へのアクセスが重いのでタイムアウトするのではないかと予測もしたのですが、それでは「POSTがタイムアウトする」というベンチマーカーのメッセージへの答えにはなっておらず、本当にうんうん唸ってそのまま終わってしまいました。
次回も参加したい!!!!!!!!
今回は、webサイトを公開するためのドメインを、お名前.comで取得します。
インターネット上で接続することのできるコンピューターには、IPアドレスというものが割り当てられています。例えばこのブログ、blog.unasuke.com
を配信しているサーバーには133.130.125.80
というIPアドレスが割り当てられています。(記事公開時点)
しかし、このブログを読むために、いちいちIPアドレスを入力するのは手間ですし、そもそもIPアドレスはそう簡単に覚えられるものではありません。
そこで、ドメインというものを取得し、IPアドレスと紐つけることによって、blog.unasuke.com
でこのブログにアクセスできるようになります。
ちなみにIPアドレスの取得にもドメインの取得にもお金がかかります。クレジットカードがあると便利です。 この記事ではドメインをお名前.comで、サーバーをConoHaで取得します。どちらのサービスもクレジットカード以外にコンビニ支払いや銀行口座決済に対応しています。
(ここから先の画像は、記事公開時点のもので、将来的に変更されるおそれがあります)
まずはお名前.comで、欲しいドメインを入力しましょう。
いくつか空いているものがあるので、欲しい分選択します。
「お申し込みへ進む」と、このような画面になります。今回はドメインだけ取得するので、レンタルサーバー、officeのチェックは外します。
Whois情報公開代行とは何でしょうか。Whoisというのは、ドメインの所有者情報のことです。Whoisで、そのドメインの所有者が誰なのか、所有者への連絡先は何かなどの情報を取得することができます。
たとえばこれは、政府広報オンラインのドメインに対してWhois情報を取得した結果です。
$ whois gov-online.go.jp
[ JPRS database provides information on network administration. Its use is ]
[ restricted to network administration purposes. For further information, ]
[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ]
[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ]
Domain Information: [ドメイン情報]
a. [ドメイン名] GOV-ONLINE.GO.JP
e. [そしきめい] ないかくふせいふこうほうしつ
f. [組織名] 内閣府政府広報室
g. [Organization] Cabinet Office
k. [組織種別] 政府機関
l. [Organization Type] Government
m. [登録担当者] HI3920JP
n. [技術連絡担当者] NH2778JP
p. [ネームサーバ] ns02.gov-online.go.jp
p. [ネームサーバ] ns00.vips.ne.jp
p. [ネームサーバ] ns01.vips.ne.jp
s. [署名鍵]
[状態] Connected (2016/12/31)
[登録年月日] 2001/12/19
[接続年月日] 2001/12/20
[最終更新] 2016/01/01 01:02:15 (JST)
このWhois情報には、ドメイン登録者の名前や住所を含める必要があります。お名前.comでは、これらの個人情報のかわりにGMOインターネット株式会社(お名前.comの運営会社)の情報を登録してくれるサービスを提供しているので、それを利用したい場合はチェックを入れておきます。
この後は、お名前.comの会員登録を済ませているのであればログインしてドメイン取得、そうでなければ新規会員登録をする必要があります。
購入しました。ドメインを購入するとメールが一気に何通も来ます。それらの内容をよく読み、必要な手続きを済ませましょう。(メールアドレスの有効性確認などがあるかもしれません。)
さて、これでドメインの取得は完了しました。ちょっと長くなったのでここで終わりにして、次はサーバーを契約してsshするところまでやりたいと思います。
構成でお分かりかと思いますが、貯金が消失しました。
最初3曲で「Let’s start」→「Gimme a big beat」→「いきまーす」がしたかったのでこうなりました。後はSaikoの後にKill EVERYBODYで殺していく感じにするのも決めてました。あとは流れですね。
ただもうちょっと治安できたのではないかと思います。
肩終了脚終了 #kosendj
— うなすけ(ミートアップ) (@yu_suke1994) 2016年7月23日
家に帰る行為が苦行と化した
— うなすけ(ミートアップ) (@yu_suke1994) 2016年7月23日
2016年6月12日に開催されたDentoo.LT #14と2016年7月9日に開催されたfukuitech 06で、unasuke.comについて話してきました。
また、fukuitechでは例によって配信を担当したので、その録画動画の切り出し、youtubeへのアップロードも済ませました。
話した内容は、middlemanのバージョンが4系に上がったことによるsprocketsの廃止、それに伴うCSSのコンパイルについてどのように行ったか、使用VPSサービスの選定、サーバーソフトウェアの選定などです。fukuitechでは、それに加えてDockerの基礎的なコマンドの実行などをデモしました。
発表した内容について更に詳しく説明した記事を書こう書こうと思っているのですが、下書きのなかに書きかけのままになっていて手を付けられていないのが現状です。やっていきたい。
世界を股にかける男なので、Dockercon 2016に参加してきました。
日本を出たのは16時で、Seattleに着くのが9時、その間のフライト時間は8時間で、単純計算すると24時になった瞬間に朝9時まで飛ばされるという感じです。
機内ではwifiが使えるとのことでしたが、APにはつながるもののインターネットには繋がらなくて呼吸ができなかったです。 機内食は美味しかったです。が、エコノミークラスの狭い空間でナイフとフォーク使わせるのは本当につらい。
到着してからは、ようこそ時差という感じで、さらに2日ほど前からお腹の調子がよろしくなく、シアトルの寒さに追い打ちをかけられたのもあり、1日目はずっとホテルで寝ていました。
この日のTシャツはRubyKaigi 2015のノベルティであるsushi tshirtでした。
spice lifeがショールームを始めるきっかけのひとつが、Warby Parkerというアメリカのメガネブランドです。
そいうったこともあり、Warby Parkerには行ってみたかったのです。
さて交通手段ですが、事前に買っていた「地球の熱き方」は全く参考になりませんでした。
シアトルタコマ空港からシアトル市内への行き方 | Developers.IO
この記事に助けられました。
電車とバスを乗り継いで、Warby Parkerに到着。 この時点ではまだ開店していなかったで、starbucksに寄って暇をつぶしました。ホットコーヒを頼んだら殺しにかかってくるのかというくらい熱くてビビりました。なんなら夜までずっと熱かったです。
開店したので、メガネを買いました。まだ度は入ってないです。
Verne Eyeglasses in Jet Black for Men | Warby Parker
決済は店員さんの持っているiPad miniで行えるのですが、クレジットカードのサインが、指を離すまで線が描かれない感じでとにかく難しかったです。 なんか謝られました。どう作ったらあんな使いにくくなるんでしょう。
この日のTシャツはLGTM yamama(TMIX)でした。
コーヒーのせいでほとんど眠らないまま11時頃に会場入りしたら、受付が16時からなのを見落としていたので一旦ホテルに戻って寝ました。計画性のなさ。
1日目はExpo(企業のブースがいっぱいある)くらいしかなく、とにかくTシャツとステッカーを貰いまくった感じです。
この日のTシャツはcontainer mermaid(TMIX)でした。
After partyでNTT、docomo、MTI、Yahoo Japanの人と話しましたが、日本語なのに何を言っているのか分からなくてアーでした。
この日のTシャツはvivaldi(STEERS)でした。
終わったあと、Googleの人に勧められた公園に行きました。
この日のTシャツはTMIX 404 not found(TMIX)でした。
空港で現地のおじさまに話しかけられ、写真を撮ってくれと頼まれました。そのおじさまと一緒に居たのが帰国する日本人で、住む場所も近いという偶然があったりしました。
機内のwifiはやっぱりインターネットまで出られませんでした。なんなんだ。
この日のTシャツはpplog fix hiwai(STEERS)でした
寒かったです。
ホテルですが、開催1ヶ月を切ってから申し込んだのですが、その割に安く、なのでそれなりの感じがしました。 お湯をわかすポットが欲しかったのと、もっとシャワーの水量が欲しかったです。
20時頃まで日が昇っていて明るく、緯度の高さを感じました。
交通はわかってしまえば楽です。道も名前が付いているので最高に便利という感じです。日本より楽かもですね。
空港で買ったsimはUltra Mobileというところのもので、通信網はT-mobileのものを使用していました。4G回線も特に何事も無く使えて良かったです。
ちなみに端末はXperia Z5の国際版です。
ウオー複数コンテナ使うイイカンジアプリケーション作りたくなった〜〜という感じです。 カンファレンスに参加するとモチベーションが上がりますね。
社でもドカドカやっていきたい所存です。
spicelifeのエンジニアは、どんな開発環境で仕事をしているの? - スパイスな人生を書きました。
自分のことについてはあまり深く突っ込んで書いていないので、ここで詳細を書くことにします。
これ以降はOS Xについて主に書いていきます。なぜならwindowsを持っていないからです。linuxは常用する暇がなくなったからです。
iTerm2の上でzshが動き、その上でtmuxを起動してワイワイやっています。colorschemeはsolarizedです。
登録しているaliasesは、現時点では以下のとおりです。
dotfiles/aliases.zsh at 285a411b96 · unasuke/dotfiles
#alias
#ls
alias la='ls -alGh'
alias ll='ls -lGh'
#git
alias g='git'
compdef g=git
#peco
#cd repository
alias e='cd $(ghq list -p | peco)'
#bundler
alias bi='bundle install'
alias be='bundle exec'
#vim
alias vi='vim'
主にvimを使っていますが、ごくたまにatomを起動し、ちょちょっとしたメモが欲しい時はCotEditorを使います。
vimのプラグイン管理はShougo/neobundle.vimShougo/dein.vimに乗り換えました。
よく使うプラグインはscrooloose/nerdtreeで、space
+e
で開閉するようにしています。
あと、ctrlpvim/ctrlp.vimがインストールされていることをよく忘れます。
他によく使うキーバインドは、space
+t
で:tabnew
で、space
+j
とspace
+l
でタブの移動をしています。
ウィンドウの分割は、vimで行うよりはtmuxで分割することにしています。理由は特に無いです。
vim-modeで使っています。特筆することはないです。有名ドコロのpackageは一通り入っていると思います。
抜粋してこんな感じです。
dotfiles/.gitconfig at 285a411b96 · unasuke/dotfiles
[color]
ui = true
[push]
default = simple
[core]
excludesfile = ~/.gitignore_global
precomposeunicode = true
quotepath = false
[ghq]
root = ~/src
[alias]
s = status
sh = stash
shu = stash -u
shp = stash pop
c = commit -v
l = log --oneline --decorate --color --graph
l = log --oneline --decorate --color --graph --all
pl = pull
ps = push
ch = checkout
chb = checkout -b
ad = add
d = diff
dc = diff --cached
fe = fetch --prune
me = merge
miku = !git stash 1> /dev/null && echo 'もうしょうがないにゃぁ、この変更はみくが覚えておくにゃ!'
g = grep
branches = branch -a
tags = tag
stashes = stash list
unstage = reset -q HEAD --
discard = checkout --
uncommit = reset --mixed HEAD~
amend = commit --amend -v
[rebase]
autostash = true
[stash]
showPatch = true
[diff]
algorithm = patience
compactionHeuristic = true
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
[interactive]
diffFilter = diff-highlight
よく使うaliasはs
、sh
、c
、ch
、ad
ですね。最近、人間らしいGitのエイリアス | プログラミング | POSTDからいくつか拝借しました。
rbenv/rbenv-default-gemsを入れて、よく使うrubygemsはrubyをインストールした時に同時に入るよう設定しています。
あと、amatsuda/gem-srcを使って、rubygemsのソースを同時にgit clone
するようにしています。
ソースコードの管理はmotemen/ghqで行っています。上のgem-srcもghqを使用して、いい感じのディレクトリにcloneするよう設定しています。
ディレクトリの移動はpeco/pecoによる絞込で行っています。
Amazon.co.jp: サンワサプライ 机上に設置可能便利タップ 3個口 集中スイッチ仕様 TAP-B25: パソコン・周辺機器
これを机に設置すると無限に便利です。
macのACアダプタには、「どうぞここにコードを巻き付けてください」と言わんばかりの部位があるけれど、あそこに巻きつけているとコードの癖がひどいし、断線もしやすくなると思うのです。(主観)
なので、僕はこう巻きます。
使っている技術は、
くらいです。
いい加減静的Webサイトの作り方の続き書きます……
どうも、blogでは文章を書くうなすけです。ところで、kosen10’s LT #4 in OSAKAに参加してきました。
ルーターの話だとかlogの読み方だとか児童教育の話とかセクマイの話とかの中にぶっこんでごめんなさいという感じの発表をしてきました。ごめんなさい。ごめんなさいっていうか、やっていきましょう。
なんとこれまで皆勤賞らしいので、このまま流れに乗って行きたい所存です。
次回開催を弊社で、というのは密かに狙っているので、各位よろしくお願いします。
どうやらkosen10'sのグループの中では僕は結構意識が低空飛行で、すごい発表の後でも「おお、俺もいっちょやったるか」とはあまりならず、上のような発表ばかりになる傾向があります。
それでもこれまでの計4回に継続して参加して来れたのは、やはりkosen10'sのメンバーに会いたいという気持ちと、みんなの気持ち、テンション、やる気に乗せられているところが大きいのかもしれません。非常にありがたいです。
そういう意味で、僕がこの集まりに対して貢献できることといえば、今は開催場所のあてがある、ということくらいしかないので、「なんとしても」という位の気持ちで次回開催を弊社でできるように交渉していきたいのです。
次回がいつになるかはまだ決定していませんが、その時はよろしくお願いします。その時こそなにかいい話をしたいと思います。