読者です 読者をやめる 読者になる 読者になる

職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングの成果たち。と言いつつも最近は公開できる成果が少なくてお悩み中。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

関西モバイルアプリ研究会 #関モバ 第12回 に参加

iOS(iPhone/iPad) 携帯・デジカメ

関西モバイルアプリ研究会(通称 関モバ)の第12回に参加してきました。

kanmoba.connpass.com

会場

今回のスポンサーは フリュー株式会社 様!
京都の七条あたりでございます。

発表した内容

speakerdeck.com
5分では話し足りないという感触でした。
需要がありそうであれば、また色んなところで続きの話をしたいなーと思います。

聞いてて気になった発表

他にもいろいろあるけど、書いてたら遅刻する…(汗

さいごに

フリューの皆さん、運営の皆さん、参加者の皆さんに感謝!

寝耳に水(物理)

その他

先週の話だが、シャワーの水が左耳に入ってほとんど聞こえなくなるという事件が発生した。
朝シャワーを浴びるときに耳に入り、よくある取り方(飛び跳ねる、etc)を試したものの取れず、諦めて出勤。
夜寝るときは水が入っている方の耳を下にして寝たものの取れず。
翌日夕方になっても取れなかったため耳鼻科の先生のお世話になった。

通常の取り方

「たぶんそうだろう」とは思っていたものの、通常の取り方

  • 水が入っている方の耳を下にして、飛び跳ねる
  • 水が入っている方の耳を下にして、頭を叩く
  • ティッシュを丸めて耳に入れる

などの手法は逆に有害であったり危険であったりするらしい。あまり長時間試す前に「これってヤバいのでは?」と気づくことができて良かった。

じゃあ、どういう取り方が家庭の医学として正しいのだろうか?と思って調べてみると、多くのサイトが次のサイトへリンクを貼っていた。きっとそれなりに効くのだろう。
www.surfersite.com
だが、自分には効かなかった。

「数時間待てば自然に蒸発する」という話もあるが、自分の場合は36時間程度経過しても蒸発しなかった。

耳に水が入っている間の聴こえ方

水が入っていると、次のような聴こえ方をした。

  • 音そのものは聞こえる
  • 言語である場合、言葉を言葉として認識できないくらい、ぼやけて聞こえる
  • 他方の耳は聞こえるため、そちらからの言語は認識できる
  • 何か音が鳴ったとき、その音がどの方向から鳴っているものなのかを認識できない
  • 水が入っている方の耳は、高音域がカットされたような音が聞こえる

まあ、それなりにつらかった。

触覚への影響

耳に水が入っている時間が長くなってくると、良くも悪くも慣れてきてしまう。
そうなると、「あれ? いま耳に水が入ってるんだっけ?」と不安になる。
そこで取る行動は、両手で両耳の耳たぶを触り、左右で聴こえ方を比較するというものだった。
水が入っている方の耳は、高い音が聴こえにくいという状況だったため、細かな毛が擦れて鳴る音は聴こえなかった。その結果、水の入った方の耳はツルツルの表面、他方の耳はフサフサの表面であるかのように触覚が反応したような気がした。もしかすると、聴覚は触覚を助けるような役割があるのかもしれない。

病院に行った結果

祝日明け、かつ、花粉症の季節という事情が重なって、耳鼻科は大混雑だった。


診察の順番が自分に回ってきて、耳鼻科の先生に診て頂いたところ、「あー、簡単に確認できるほど水が入ってるねー」、と。そりゃ蒸発もしない訳だ。
耳の中専用(?)の吸引機で吸引してもらったら、すぐに良くなった。

さいごに

耳に水が入ったままの状態だと、バイキンが繁殖していく危険性が考えられる。病院に行くべきだとネット上で多く言われていたし、自分も同意している。
みんなも、耳に水が入って取れなくなったら無理して頑張ったりせず、病院に行ったら良いと思う。

コルネットを買った

音楽

という訳で、コルネットを買った。文体は Splatoonの日本語公式Twitterアカウント 風のものだ。
こんなの。


これまで使用していた楽器

XO の CR-GBS というのを使っていた。2005年春に購入した。
その当時は Trumpet, Soprano Cornet, 細菅Tenor Trombone を演奏しており、いずれも軽く吹けるものばかりであった。その状況で B♭Cornet を買う必要に迫られたため、軽く吹けるものという選択しかすることができなかった。当時、京都・三条の某楽器店さんの店頭にあった Besson Soverign, Yamaha(モデル名忘れた), XO の3本のCornetの中では、XO のものが最も軽く吹くことができたのだ。

それから10年と少しが経過した現在、自分の体質のせいなのか、銀メッキがボロボロになって、そもそも演奏がつらいという状況に陥っていた。そんな折、YAMAHAさんの管楽器の値上げのニュースが流れてきた。買うならば値上げ前の価格で楽器店さんが仕入れた在庫が店頭に並んでいる今のうちのはずだ!ということで購入に踏み切った。

購入した楽器

YCR-8335 - Neo - ヤマハ株式会社
大阪の某楽器店さんにて購入した。

楽器店の試奏室で吹いてみた感触

  • 中低音域、特に中音域(Low-B♭〜Tuning-B♭の上のE♭くらいまで)は吹き易さ、音色の滑らかさ、音程、いずれも想像以上の良さだった
  • High-B♭の下のGを超えたあたりから、
    • 音の当たるポイントが狭すぎる(ちょっとでも違うピッチで吹こうとすると、音を外す)
    • 息が入らない

バンドの練習に持ち込んでみた感触

  • バンドのメンバーと楽器のメーカー揃えるの、やっぱり大事。
  • これまでの楽器は、自分の雑な吹き方が染み付いていたせいなのか、音が毛羽立つ(?)ことも多かったが、Neoではそんなことはほとんど無かった。(もちろん、自分が雑な吹き方を続けていれば、またダメな状態へ堕ちていくんだろうけど)
  • 強奏から弱奏へ一瞬で変化させたとき(subito p)、弱奏の音色が美しい。(上の項目と同じものかも)
  • Tuning-B♭の上の F# の音、めっちゃ高いかも。でもこれはトリガーで調整可能。
  • High-B♭前後の音域を吹いた時に試奏室で感じた問題は、特に感じなかった。ただ単にウォーミングアップが足らなかっただけだったのかもしれない。
  • 3番菅のスライドにトリガーが付いていることによって、「普段は」演奏し易い。ところが金管バンドのソロコルネットの楽譜では160BPMの四分休符だけでミュートの付け外しをする、みたいなことを求められることもある。そんな場面では、ミュートを外した直後の Low-C の演奏というものの難易度が極めて高い。今までの XO の楽器だと、3番菅のスライドを事前に伸ばした状態でミュートを外す動作をすれば良かったのだ。

最後に

総じて、買って良かったと思える楽器だ。
さあ、キミも管楽器沼へ!

関西モバイルアプリ研究会 #関モバ 第10回 に参加

携帯・デジカメ iOS(iPhone/iPad)

もう3日も前の話ですが、関西モバイルアプリ研究会(通称 関モバ)の第10回に参加してきました。

kanmoba.connpass.com

今回はネタを用意することができず、発表者ではなく聴衆としての参加です。
研究会の開催からブログ記事投稿まで日が空いているのは、諸事情によるものです。

会場までの道のり

前回のときのように新幹線で移動しなくちゃいけない、といった状況に陥ることもなく、平穏無事に会場である はてなさん のオフィスに到着することができました。

印象に残ったもの、いくつか。

  • KeynoteでのiOSアプリのプロトタイピング
    • グラフィックのコアがiOSと同じだから(イラレと比較して)再現度が高い、という話もある。
    • MagicMoveのアニメーションにより、画面遷移なんかも良い感じにできる。
    • 参考動画 WWDC 2014 Session 223 Prototyping: Fake It Till You Make It
  • UIデザイナとの協業(iOS
    • @IBDesignable
    • @IBInspectable
    • これら二つを活用してviewを作ると、デザイナさんに Interface Builder 触ってもらうときに便利。
    • 何でもかんでも作りゃいいという話、ではない。
  • 文書管理/文書作成系
    • モバイルアプリ開発に限った話じゃないけど、ここらへんで変な時間を消費しないためのノウハウというのも大事だなー、と聞いてて思った。

さいごに

毎度のことながら、会場を提供してくださっている、はてなさんに感謝!

IngressのSojournerが途絶えた

その他

凡ミスにより、タイトルの通りの状況になったので、報告致します。

Ingress やってない人向けにも一応解説

  • Ingressとは?:位置情報を使った陣取りゲームです。AndroidiOSで遊べます。https://www.ingress.com/
  • Sojournerとは?:Ingress上で取れる行動のうちのひとつ「ハック」(採掘)を、連続して何日間続けることができたか?で表彰されるものです。15日で銅メダル、30日で銀メダル、60日で金メダル、180日でプラチナ、360日でブラック。

現状

f:id:t_motooka:20160124083254p:plain
自分のプロフィール画面です。(累積の実績ではなく)現状を示す「NOW」のタブ、画面最下部の「Current Hacking Streak」が 0days になっていて、Sojournerが途絶えていることがわかります。
322days までは行ったのに。

なぜ途絶えさせてしまったのか?

土曜日。
朝起きて、ちょっとプログラム書いてから午後の勉強会に出席、夜からの懇親会にも出席。そして帰宅。
そんな一日を過ごしていたのですが、勉強会に行くまでの間は遅刻しかかっていたため活動できず。帰宅中は軽度の腹痛があったため活動できず。
GPS状態によっては自宅から届くポータルがあるものの、届くまで待っている間に寝落ち。

Sojournerを今まで続けてくる中での思い出話

2015年3月上旬にSojournerの制度が開始されました。筆者は当然のようにIngress活動を続けていたので360日くらい楽勝だ!と思っていました。ところが、322日に達するまでの間には危機も何回か訪れました。

45日目くらい

大病を患いました。大病とは言っても、仕事を5日間くらい休む程度のものです。当時はまだ自宅から届くポータルも無く、家から出るのも一苦労!!という状態でしたが、食料調達活動のついでに外出することはできたので、そのタイミングで活動してました。自宅から100mくらいのところにポータルがあったので、それに助けられた形です。

100日目くらい

2015年5月末に任天堂Wii U のゲーム「Splatoon」が発売されました。同業者や同僚の多くがイカになっていく中、筆者も少し遅れてSplatoonを購入しました。
何かを継続するにあたって、その対象物から別の物へと興味が移ってしまうということは非常に強力な敵です。大病に匹敵するほどのものなのです。
こういうゲームを購入すると外出しなくなるのですが、良くも悪くも、平日は仕事で、週末も仕事や音楽活動などで強制的に外出させられるのでSojournerは続きました。
そういえば、Splatoonが発売された頃から、Ingressのプレイヤー(エージェント)が減ったような気がします。みんなイカになってたんですかね?

110日目くらい

GPS状態によっては自宅から届くかもしれないポータル、が生えました。実際の自宅からポータルまでの距離はちょうど40mくらいです。
これで、再度大病を患っても大丈夫!という状態になりました。(もちろん病気になったら困るのですがw)

180日目

ついにプラチナメダルを入手することになりました。
そのときに、ここまでの出来事をブログ記事にしようかと思いましたが、忙殺されており断念。

それ以降

難なく続いていたはずなのですが、322日目にしてご覧の通りの状態です。


これからの動き

「毎日ハック」にとらわれずにIngressの世界を楽しみ続けていきたいと思います。

他に「継続」が表彰されるものの例

参考までに。

  • StackOverflow : 連続ログインで表彰されます。筆者は Enthusiast というタイトルを獲得しています。30日連続ログイン。
  • GitHub : 連続して貢献(コミット、issue報告など)した日数が掲載されます。

さいごに

何かを毎日継続するというのは、本当に大変なことなのです。

pie face in Japan

Australia

オーストラリアに住んでいた頃に大変お世話になっていた飲食店 pie face が日本に上陸したということで、いつか行きたいとずっと思っていた。ついに今日その願いが叶ったのでここで報告したい。

本家Webサイト(オーストラリア) http://pieface.com.au/

日本国内の店舗

日本では、ミスタードーナッツなどを運営しているダスキンさんが運営されている。
現時点では、日本国内の店舗は川崎と渋谷の2店舗のみとなっている。
ダスキンさんのWebサイト http://www.duskin.co.jp/service/pieface/

今回は渋谷の店舗に行ってきた。外観はこんな感じ。

このロゴが最高である。

商品など

VB(ビクトリアビター)


これはオーストラリアのビールの一つであり、日本国内でも比較的入手し易いものである。
※Australia国内の pie face 店舗では、酒類は販売していなかったはず。

ポトフ


向こうにこんな商品あったっけ?(記憶に無い)
美味しかった。

ポトフの容器


やっぱり、最高のロゴである。

紙ナプキン


持って帰りたい。

パイの包装紙


主力商品である、パイ本体


この、パイに書いてある顔も良い。
もちろん味も良い。
このパイは Classic Mince Beef である。詳しくは前述のダスキンさんのサイトから、商品情報を見ると良い。

マグカップ


マグカップも売っていたので買った。1000円ちょっとくらい。大と小の二つのサイズがあり、こちらは大の方。
これは部屋にあるだけで楽しい気分になれそう。

さいごに

超オススメのお店であるから、このブログの読者の皆様方も、渋谷や川崎を訪れる際は立ち寄ってみると良い。
なお、川崎の方は持ち帰りのみらしいので、注意するべし。

退け、ユーフォニアム。

音楽

世間では「響け!ユーフォニアム」の人気が非常に盛り上がり、しかも継続している状況でございますが、そんな中、ユーフォニアム奏者を引退したのでここに記しておきたいと思います。退職エントリの変形版だと思ってもらえれば幸いです。
2015年にあった出来事は2015年のうちに書いておきたいと思いつつも、諸々の進捗がダメだったので今まで書けずにいました。大晦日に投稿するあたり、進捗ダメさ加減は上手く伝わることでしょう。

ユーフォニアムってどんな楽器?

ここで変な説明を書くよりも Wikipediaの記事 を見てもらう方が良いでしょう。
無理して手短に言うならば、中音域の金管楽器の一つ、と説明することができます。
英語では Euphonium と書き、Euph と略して書くこともあります。日本語だと「ユーフォ」と略したりします。ユーフォニウムと発音/表記する人も居ます。

どんな楽器を吹いていたのか?

YAMAHA YEP-621S を吹いていました。この商品ページには「第6倍音のFをはじめとする正確な音程」とありますが本当にその通りで、こんなに安価な楽器でありながらも非常に吹き易く、音色も音量も申し分無い楽器です。第6倍音のF(tuning-B♭の完全五度上)、本当に良かったです。第12倍音のF(high-B♭の完全五度上)も綺麗に鳴る、最高の楽器でした。
世間的にはコンペンセイティング・システムを備えた重装備の楽器で溢れかえっていますが、こういうシンプルな装備の楽器も良いものです。

どんな曲を吹いていたのか?

金管バンドの中のユーフォニアム奏者を務めていたので金管バンドの曲ばかりですが、featured-soloだとこのような曲を演奏しました。

  • Carrickfergus
  • Pantomime
  • Summer Isles

やっぱりPantomimeは難しかったですね。参考演奏はこちら → https://youtu.be/QQbpqOdoluI

どれくらいの期間、吹いていたのか?

2013年10月から2015年9月までの約2年間、演奏していました。それ以前にEuphoniumを吹いていたのは1997年から1998年の2年間なので、実に15年近いブランクを経ての演奏でした。その15年の間もトランペット/コルネットを吹いたりトロンボーンを吹いたりしてたので、復帰直後もそんなに戸惑うこと無く取り組むことができました。

なぜ引退したのか?

身体的な事情があって、ユーフォニアムの演奏を続けることが難しくなってしまいました。不可能という訳ではないのですが、そんな苦労をするくらいなら演奏活動自体全部やめてしまうわ!という状況だったので、まずはユーフォニアム奏者の席から退くことにしました。

アニメで人気出たんだし、ユーフォニアム演奏してたらチヤホヤされるんじゃないの?

ただしイケメンに限る

これから何をするのか?

トランペットとコルネットの演奏、あとは編曲活動に専念します。
専念しますとは言いつつも、これらの活動は収入を産むものではなくむしろ支出する一方であるので、収入のある本業の方がずっと大事です。

また10年くらい経ったらユーフォニアム奏者として復帰するかもしれません。手元の YEP-621S はそれまでお蔵入りです。


それでは皆さん、よいお年を!

マスター・オブ・円弧 #SVG

SVG

この記事は SVG Advent Calendar 2015 の25日目の記事です。
www.adventar.org
Advent Calendar の最後を締めくくるのに相応しい内容かどうかはわかりませんが、皆さんきっとSVGを描きたくなるはずです。

SVGとは?

SVGとは画像ファイルの形式の一つで、基本的にはベクター画像(引き伸ばしても荒れないアレ)です。画像なんだけど中身はXML、すなわちテキストファイルになっている、不思議で便利な画像です。いまここで初めてSVGの名前を聞いたという皆さんは、上記の Advent Calendar に掲載されている記事を読んだり、Wikipediaの記事 を読むと良いでしょう。

SVG手描きとは?

前述の通りSVGXMLであり、テキストです。
テキストであるということは、テキストエディタで作成したり編集したりすることが理論上可能であるということが言えます。
理論上可能なんだったら実際にやろうぜ!と考えるのが人間というものです。そういう背景から近年盛り上がってきているのが「SVG手描き」という趣味になります。テキストエディタで描きましょう。

(注意)一般的には、Adobe Illustrator などのツールで描いた画像をSVG形式で出力することが多いはずです。

こんな画像だって、SVGならテキストエディタでサクッと描けます。

ソースはこんな感じです。
これをコピーしてテキストエディタに貼り付け、拡張子「.svg」で保存させてからブラウザに読み込ませると同じように描画されるはずです。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="480px" height="360px" viewBox="0 0 480 360" xmlns="http://www.w3.org/2000/svg" version="1.1">
	<rect fill="white" stroke="black" stroke-width="2" x="0" y="0" width="480" height="360"/>
	<polygon fill="red" stroke="none" points="40,40 40,320 440,320 440,40 400,40 400,280 80,280 80,40"/>
</svg>

rect 要素が外枠の黒い細い線を、 polygon 要素が「凹」の字を描いています。
※別に筆者が凹んでいる訳ではないですからね?

慣れてくると、公式の SVG 1.1 の仕様 を見ながらであれば5分以内に上記の図形を描くことができるようになります。テキストエディタで。

path要素

SVGでは、さまざまな図形がサポートされており、簡単に図形を描くことができます。
例えば以下のような図形があります。

  • rect : 長方形。左上座標と幅と高さを指定して描く。
  • circle : 円(楕円ではない真円)。中心座標と半径を指定して描く。
  • ellipse : 楕円。中心座標とx方向半径、y方向半径とを指定して描く。(回転はアフィン変換で実現)
  • line : 線分。始点と終点を指定して描く。
  • polyline : 線分をつなぎあわせたもの。カクカク曲がる。
  • polygon : 多角形。各頂点の座標を指定して描く。

これらは非常に便利であり、かつ、後からSVGのソースを見たときに意図が分かりやすいため、非常に重宝します。これらの要素を使って描くことができるのであれば、ぜひそうするべきです。
ところが、これらの図形では表現できないものというのは数多く存在します。
そういった図形は、path要素 を使って描くことになります。
画像を描くプログラムを書いたことがある人であればわかるかもしれませんが、path要素で線を描くときは「ペン」の考え方が根底にあります。ペンは現在の座標という状態を持ちます。現在地点から目的地までの経路をどのように線を引くのか、というのをコマンドで指定していきます。便利ですよ〜。

曲線あれこれ

path 要素の d 属性で使うことができるコマンドには、以下のようなものがあります。
※ここでは大文字のコマンドを紹介していますが、それぞれのコマンドには小文字バージョンがあり、それは現在のペンの位置からの相対座標を指定することで描画させるものになります。

  • M : 線を引かずにペンを指定した座標のところへ移動させる
  • Z : 開始地点までの線分を引く(閉じた領域を作る)
  • L : 指定した座標までの線分を引く
  • H : 指定したx座標までの水平線を引く
  • V : 指定したy座標までの垂直な線を引く
  • C : 3次のベジェ曲線を引く
  • S : 3次のベジェ曲線を引くが、1個目の制御点の座標は直前に引いたベジェ曲線のものに応じる(本当はきちんとした定義があるので、公式ドキュメントをご覧ください)。
  • Q : 2次のベジェ曲線を引く
  • T : 2次のベジェ曲線を引くが、制御点の座標は直前に引いたベジェ曲線のものに応じる。
  • A : 円弧を描く

線分を描くコマンドは単純明快ですし、2種類のベジェ曲線も制御点が線に与える影響のことを知っていれば描くことが可能です。注意するのは目的地の座標よりも制御点の座標を先に書くということくらいです。
一方で、円弧はそうは行きません。

円弧を描く

円弧を描くときにどのようなパラメータが必要なのか挙げてみましょう。

  • rx : x方向の半径
  • ry : y方向の半径
  • x-axis-rotation : x軸からの回転角。0だと回転しない。
  • large-arc-flag : 長い方の円弧を描くなら1。短い方なら0。
  • sweep-flag : 時計回りに円弧を描くなら1。反時計回りにするなら0。
  • x : 目的地のx座標
  • y : 目的地のy座標

恐らく、「なにそれ」という感想を抱いた方も多いことでしょう。
large-arc-flag と sweep-flag の詳細については、言葉でいろいろ見るよりも図示されたものを見る方がずっと効率が良さそうなので、図を貼っておきます。


Example arcs02 - arc options in paths Pictures showing the result of setting large-arc-flag and sweep-flag to the four possible combinations of 0 and 1. Arc start Arc end large-arc-flag=0 sweep-flag=0 large-arc-flag=0 sweep-flag=1 large-arc-flag=1 sweep-flag=0 large-arc-flag=1 sweep-flag=1
origin : Paths – SVG 1.1 (Second Edition)
Copyright © 2011 W3C® (MIT, ERCIM, Keio), All Rights Reserved.


一方、普段私たちが円弧を描くときは、次のようなものを指定することを考えると思います。

  • 中心の座標
  • x, y それぞれの方向の半径
  • 開始角度と終了角度

確かにこちらの組み合わせの方が円弧を描く上で便利そうに見えますが、前述の通り、path要素はペンの概念のもとで描画させる仕組みになっていますので、開始座標は初めから指定されているのと、終点座標はズバリその値を明示的に指定した方が後続の線を引く上で有利なのです。だから、 rx, ry, x-axis-rotation, などの指定をする方が良いのです。

一通り背景を理解したところで、path 要素を使って円弧を描いてみましょう!
えっ、描けない?
描けない人の大多数は、パラメータの順番を暗記できていません。再度掲載しますので覚えてください!

  • rx : x方向の半径
  • ry : y方向の半径
  • x-axis-rotation : x軸からの回転角。0だと回転しない。
  • large-arc-flag : 長い方の円弧を描くなら1。短い方なら0。
  • sweep-flag : 時計回りに円弧を描くなら1。反時計回りにするなら0。
  • x : 目的地のx座標
  • y : 目的地のy座標


タイトルとして「マスター・オブ・円弧」を掲げましたが、マスターするには結局は単純な記憶が必要でした。
でも、こういう指定をすることができれば、円弧が通る道筋は一意に定まる、というイメージを抱くことができたのではないでしょうか?
あとは練習あるのみです。皆さんもテキストエディタで円弧のSVG図形を描き、人生を豊かにしていって下さい。

それではSVGファンの皆様、よいお年を!!

関西モバイルアプリ研究会 #関モバ 第9回 に参加してきた

iOS(iPhone/iPad) 携帯・デジカメ

関西モバイルアプリ研究会(通称 関モバ) #9 に参加してきました。
kanmoba.connpass.com

前回 に続いて2回目の参加で、今回は発表してきました。

会場への道のり

大阪市内から京都市内へJR京都線の新快速で移動していたのですが…


という事情で運転見合わせにハマりました。
偶然にも停車していたのが新大阪駅だったため、こんな大技を使うことに。
f:id:t_motooka:20151223140550j:plain
新大阪・京都間の新幹線の自由席特急券は(時期によるかもしれませんが)860円です。乗車券は別。どうしてもってときは積極的に使っていきましょう。結果的には、関モバの会場である はてなさん のオフィスには10分遅れくらいで到着することができました。

なお、新大阪駅の在来線改札内で切符を買おうとすると、新大阪まで来るのに使ってた乗車券が必要になるため、複数人数の自由席特急券+乗車券を買おうとすると非常に手間取ります。3人以上の大人数で移動するときは、一旦新大阪駅で改札外に出てから切符を買うと、スムーズな行程変更ができるかもしれません。

自分が発表した内容

サンプルコード

motooka/ColorBar · GitHub

どんな発表だったのか

iOS Simulator が表示している「色」がどのようにして表示されているのかを示す発表をしました。iOSアプリの画面が意図しない色で表示されてしまうトラブルを防いだり原因究明したりするのに役に立つことができれば幸いです。
サンプルコードは、 UITableViewの static cells で、背景を適当な色で塗り潰して表示させるだけのアプリです。StoryBoard上の static cells の表示と iOS Simulator 上の表示を見比べながら、システム環境設定のディスプレイ設定で、カラープロファイルを変えてみると、iOS Simulator 上の色は変わらずにStoryBoard上の色だけ変わるという現象が起きます。
これが何を意味するのか、といった推測や議論もありました。

他の皆さんの発表のうち、(酒などに消されずに)記憶に残っているもの

いくつかご紹介しておきましょう。

  • Swift で、 struct を使うべきなのか class を使うべきなのかの判断 参考(公式ドキュメント) The Swift Programming Language (Swift 2.1): Classes and Structures
  • Keynote での画像作成:これは大盛り上がり! いろんな画像が
  • PhotoKit を使う上での注意点と、古くからある Assets Library の使い分け。Assets Library にしかできないことはあるので、特性を考えて選択したい。
  • FastlaneAndroid開発に応用する事例
  • 生物の色覚の話と、人間の様々なタイプの色覚について。
  • iOSアプリのバージョン番号を決める上でのベストプラクティス:リジェクト時のこともきちんと考えよう!
  • iOSアプリの起動にかかる時間を計測する方法(詳しくはメモれてないけど、info.plist か何かにおまじないを書いたら取れるっぽい?)
  • Web API にまつわる問題点あれこれ
  • Reveal でデザインデバッグ。AppCodeとの組み合わせだと上手く運用できそう?
  • Androidアプリでの Now on Tap の動きについて。

感想

色覚についての にわタコさん の発表の直後に色についての発表ができて、色の話を続けてできたのは本当に良かったです。

さいごに

会場を提供してくださっている はてなさん に感謝!!!

関西モバイルアプリ研究会 初参加

iOS(iPhone/iPad) 携帯・デジカメ

関西モバイルアプリ研究会(通称 関モバ) #8 に参加してきました。kanmoba.connpass.com

これまでどうしても都合が合わなくて参加できなかったのですが、ようやく参加することができました。

どんな会なのか?

  • 平日の夜に集まる
  • 乾杯から始まる
  • iOS / Android を中心として、最高のモバイルアプリを作るための話をしたり聞いたり
  • LT形式(1つの発表は5分)

お聞きした話(ごく一部)&学び

  • iOS : readableContentGuide ちゃんと設定して、特に iPad Pro でのコンテンツを読み易くしよう stackoverflow.com
  • iOS : AVFoundation Programming Guide の日本語版、更新されてないものだと思い込んでたけど更新されてた
  • iOS : 複数種類のUITableViewCellをTableViewに入れる時にどうするのが良いか? → xib複数体制が良さげ
  • iOS : Apple Pencil で取れる情報 → 座標、ペンの傾き、強さ、etc...
  • iOS : フレームワークのバージョンの話(提出時にエラーになる話)
  • iOS : はてなさんの教科書は優れている github.com
  • Android : アプリで使う指紋認証
  • ビール一杯でも酔ってしまう
  • 聞き手の酔い具合などの事情により、記憶がiOS関連に偏るようなこともある

謝辞

会場を提供してくださっている はてなさん への感謝の気持ちが山のように積み上がっています。

おまけ

「関西」で始まって「会」で終わる組織の名前を声に出して読み上げようとすると、どうしても「関西電気保安協会」のメロディに乗せようとしてしまいます。
関西電気保安協会CM集 - YouTube
きっと皆さんも同じ現象に悩まされているはずです。

PostgreSQLカンファレンス2015 に参加してきた

PostgreSQL

PostgreSQLカンファレンスに参加してきたので、その感想文および備忘録を書いておく。

www.postgresql.jp
ハッシュタグ#pgcon15j

前回参加したのは、2011年のことだった。

なぜ参加しようと思ったのか?

  • 最近PostgreSQLを触る機会があんまり無くて焦ってたから
  • 近い将来、新規に導入する予定があるから意識を高めたかったから


以下、拝聴した講演のうちのいくつかを紹介したい。

基調講演その1: PostgreSQL 9.5

http://www.postgresql.jp/events/jpug-pgcon2015/detail#keynote_1

開発者のMichaelさんの、日本語での基調講演で、12月にリリースされるかもしれないPostgreSQL 9.5 の新機能などの話。

主な内容はこんな感じ。

  • Upsert : insert文の最後につける ON CONFLICT 句の使い方と用途事例
  • BRIN : 部分インデックス(と訳すのが正しいのかどうかは不明) Blockc Range INdex
  • RLS : Row Level Security
  • パフォーマンス改善
    • ソートの改善
    • マルチCPU(マルチコアじゃない)環境下での改善
  • Streaming Replication における WALアーカイブの取り扱いの改善(これは9.4までの挙動をあんまり知らないから、上手く飲み込めなかった)

性能、信頼性を大幅に向上した pgpool-II 最新バージョンについて

http://www.postgresql.jp/events/jpug-pgcon2015/detail#J1

自分が pgpool-II の導入を検討していろいろ調べてたのは、PostgreSQL8.x の時代。当時はPostgreSQL本体に Streaming Replication の機能が無くて pgpool-II が擬似(?)replicationの仕組みを提供してくれていた。しかしその方式は全てのPostgreSQLノードに対して同じ(だったっけ?)SQLを投げるというもので、ある種の「怖さ」があった。他にも単純に組めばSPOFになってしまうなどの問題もあった。あれから数年が経過し、Streaming Replication登場後の pgpool-II の変貌についてほとんど知らなかったので、参加した。

最新バージョン 3.5 (現在はalpha版がリリースされたところ)での様々な改善の中で最も興味深いのは Watchdog の改善。こういう運用に嬉しい機能が強化されていくのは嬉しい。

他にもいろいろ。
pgpool-II 3.5 development - pgpool Wiki

PostgreSQL セキュリティ総復習

http://www.postgresql.jp/events/jpug-pgcon2015/detail#M2

心に残ったものいくつか。

  • psql\dp コマンドの実行結果の見方
  • sql_firewall : SQL Injection から防御するための拡張(怪しいクエリはエラーにする)
  • 「抑止と予防には予算と労力を投じる割に、検知と回復ができてない」といった趣旨のお話:確かに。

何が違うのか?PostGIS と最新版 MySQLGIS 機能を徹底比較

http://www.postgresql.jp/events/jpug-pgcon2015/detail#K3

大雑把にはこんな感じの話だったように記憶している。

  • MySQLだと本体に built-in なので導入が超簡単で、高速な動作をする。だけど単純な処理しかできない。
  • PostGIS だと最初のセットアップに一手間かかって気をつけないと遅くなっちゃうけど、様々な機能が揃っている。
  • MySQL Workbench の地図プレビューは優秀!
  • PostGIS 開発のキッカケはDB技術者じゃなくて地形界隈の専門家の動きによるもの。
  • 2つのDBはデータ形式がまったく異なるので、数値や文字列だけからなるデータみたいに簡単にダンプをやりとりするようなことはできない。一工夫いる。
  • GeoJSON の取り込み:これはどちらか一方の取り込みが遅いから、早い方で取り込ませて、ダンプを一工夫させつつ他方に取り込ませる手法が良い、みたいな話だったが、どっちがどっちだったか忘れた。。

PGroonga の実装

http://www.postgresql.jp/events/jpug-pgcon2015/detail#M4

講師の方がユーモア溢れる方で良い雰囲気のセッションだったのだが、ここで会場挙手アンケートの結果をご覧頂きたい。

内容は、PostgreSQLとGroongaとをどうやって繋いでいるのか?というお話。
他の製品との機能や性能の比較などもあって面白かった。
全文検索の話になると「あっちは日本語サポートしてない」「こっちもだ」みたいになるので大変。
日本語全文検索やってる皆さんにはほんとに頭が上がらない。

LT

こんな話を拝聴した。

さいごに

CakePHP3で簡易監査ログ

パソコン・インターネット PHP

情報システムを組み上げるときは「誰がいつ何をした」といった情報を残していくことが非常によくあります。この情報のことを監査ログと呼びますが、他にも呼び方があるかもしれません。英語では audit trail と言ったりしてたと思います。たぶん。

そのシステムがRDB(関係データベース)を用いたものである場合、監査ログそのものもRDB上に残すことがあります。
きちんとした監査ログにするためには、監査ログを格納するための専用のテーブルを設けます。そのテーブルはシステム全体で1個であることもあれば、システムが管理しているデータごとに設けていくこともあります。専用のテーブルを設けずに、いわゆる「論理削除」を積み重ねていってそれを監査ログ代わりにすることもあるでしょう(望ましいとは思えませんが)。
これらの手法は、正確な監査ログが取れるようになる代わりに、かなり手間がかかります。構築する情報システムにかける予算が少なかったり期間が短かったりすると、省略されることもしばしばあります。
省略するとは言っても完全に何も記録を取らないのは精神衛生上よくありませんので、簡易的な監査ログをとることになります。
何が簡易なのかと言うと、保持する情報を以下のものに限るのです。

  • 当該データを最初に登録した日時
  • 当該データを最初に登録した人
  • 当該データを最後に更新した日時
  • 当該データを最後に更新した人

これだけの情報が残っていれば、本当に僅かなものではありますが、何か調査するときの手がかりにはなります。

さて、かなり長い前置きになりましたが、ここからはCakePHPの話です。
CakePHPでは昔から(少なくとも 2.x 系から)、日時だけではありますが、簡易の監査ログをRDBに保存する仕組みがあります。テーブルに「modified」「created」といったタイムスタンプ型の列を用意しておくと、そこに自動で登録日時や更新日時をセットしてくれるのです。

Saving Your Data — CakePHP Cookbook 2.x documentation

登録/更新した人については、 AuthComponent::user('id') によってModel内のコードからでも当該HTTPリクエストのセッションに紐付いたユーザIDを取ることができたので、beforeSaveコールバックあたりを実装すれば保存できていました。

ところが、CakePHP 3.x になってから、上記の方法ではユーザIDを取得することができなくなってしまいました。このことはGitHub上でも話題になり、こんなissueが立てられています。github.com
良い設計ではないものを誘発するという理由で速攻でcloseされてしまっています。これまでの手法がそのような性質を帯びたものであることには一切異論は無いのですが、簡易監査ログを取ることにそんなにコスト(時間)かけられないというのも事実です。

じゃあ、悪い設計であることは重々承知の上で簡単な実装を作っちゃえ! ということで、ModelのBehaviorを作りました。ソースはGistに置いてるのをこの記事に埋め込んでます。
gist.github.com

作った後に気付いたのですが、素晴らしい先人たちはもっと良い実装を既にされていました。github.com
これはPluginとしての実装なので、こちらの方が使い易いという人も多いでしょう。しかもstaticおじさんと呼ばれる危険性を摘み取ってくれていますし。


こういったものを活用して、気軽に簡易監査ログを取れるようにして、健全な情報システムを構築していきましょう。

re:Invent 2015(の報告会 #jawsug )に行ってきた

AWS

JAWS UG 大阪さんのイベント、re:Invent 2015 報告会 に参加してきた。もちろん聴衆として。jawsugosaka.doorkeeper.jp

個人的に気になった話をいくつか書き留めておきたい。

最近AWSから出るサービスは、運用系に近いものが多い

筆者のように、AWSを活用して全く別のものを作っている人間は喜ぶ話であるが、見方を変えると、EC2やら何やらを組み合わせて色々作って他のAWSユーザ向けに商売してても、競合するものがAWS本体から登場してメシが食えなくなることがあるよ、という話である。iOSで流行ったアプリの機能がOSそのものに取り込まれてしまうという現象にも似ている。
自分達がやっている商売がどんな特性を帯びているのか、そして今後どのような領域の需要が出てくるのかは絶えず注意を払っておかなければならない。そしてそのヒントは re:Invent に行けばゴロゴロ転がってる(らしい)。

Lambdaが世界を変える

みんな大好きLambda。re:Inventで発表された新機能はどれも魅力的でスグに使えるものばかり。
ただ一つ、VPC対応はまだリリースされていない。

Mobile Hub

今回のイベントでの実演を見て、あれだけの操作でiOSアプリのソースが吐き出されるのは凄いなあと改めて思った。

kintoneとAWSの補完関係

サイボウズさんのkintoneはビジネスアプリのUIを作る部分で強い代わりにデータ加工などの いわゆるサーバサイドの処理 で弱い。一方でAWSは逆。
という話を聞いてなるほど〜、と思った。

参加するにあたって

  • 「情報は生中継やTwitterなどを介してスグに手に入る」
  • 「クラスメソッドさん仕事速過ぎ」

という背景があるので、現地参加するにあたっては「現地でしかできないことに集中する」のが良いとのこと。この辺の現象はWWDCとかも同じかと。

あと、旅行代理店のHISさんが、こんなツアーを企画されていたらしい。
AWS re:Invent 2015 ツアー|H.I.S.海外視察旅行セクション
コースによってはAWS本社訪問というイベントがあったりして、かなり魅力的。

さいごに

2016年こそは行きたい。

スクラム本を読んだ

その他

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術」を読んだ。「スクラム本」と言うと以前は別の本のことを指していた気がするが、具体的にどれだったか忘れた。

紙バージョン

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

スクラム 仕事が4倍速くなる“世界標準”のチーム戦術

Kindle


なぜ読もうと思ったのか?

ここ数ヶ月というか数年というか、身の回りの組織が適切に運用されていないと感じることが多々あった。トップが無能であることもあれば、歴史的な経緯で意思決定が異常に遅い組織体制になっているということもある。もちろん、構成するメンバーが非協力的であることによって上手く行っていない組織もある。
5年ほど前にスクラム(と言うよりはアジャイル型開発)の本を読んで、それの影響を受けて可能な事項から少しずつ、身の回りの組織を実験台(良い意味で!)にして実践を進めてきた。
ここ最近、自分の手に負えないほど酷い事例をいくつか目の当たりにしてきたのだが、矯正しようにも自分から微妙に距離があったり、自分のあやふやな知識では組織体制を変えるほどの説得力を帯び得ないと感じてきた。そんな折、書店を彷徨っているとこの本が視界に飛び込んできたので買った。やはり、ある程度まとまった知識を得るには書籍が一番である。
今まであまり見たことない表紙だな、と思って確認してみると2015年6月の初版発行だった。(6月頃から9月頃まであまり書店に足を運んでいなかったのがバレる発言)

何が書いてあるのか?

  • スクラムの各構成要素が有効に作用する事例
  • (2個目書こうとしたけど良いのが思い浮かばない)

という訳で、基本的には事例集である。他のスクラムの本とは少し異なり、紹介されている事例がソフトウェア開発の分野が主体なのではなく、教育、軍隊、結婚式、医薬品業界など多くの場所から集められている。表紙にも「ソフトウェア」や「開発」といった語が見られないことからも、ソフトウェア開発業界以外に売りに出そうとしていることがわかる。
もちろん、我々ソフトウェア開発業界の人間が読んでもすんなり読める。

感想

もっと実践しよう。

EC2にRedmine(Apache|Passenger|HTTPS)

AWS パソコン・インターネット Apacheとその周辺

人に頼まれてRedmineAWSのEC2上に構築することになった。この記事はその作業記録である。

要件

  • ランニングコストは最低限に抑えたい:業務時間中しか使わないし
  • オレオレ証明書で良いから、平文のHTTPは一切禁止、HTTPSのみでの運用にしたい
  • OSはAmazon Linuxがいい
  • ネットワーク的にはいろんな場所からアクセスする

らしい。

報酬

肉。心は踊るが財布は踊らない。

インフラの用意

ドメイン

既にRoute53で運用しているドメインが存在していたので、それのサブドメインを使った。
Aレコードを、後述のElasticIPのものに設定する。

EC2仮想マシン

運用はt2.microを使うのだが、メモリが1GBしかないときは後述のPassengerのビルド時に「メモリ足らねえぞゴルァ、swapの設定しやがれ」と怒られていろいろ面倒臭かった記憶があったので、そんなのは金で解決する。構築中はt2.smallインスタンスを使い、構築が終わったらt2.microに切り替える。
「業務時間中しか使わない」ということであったが、予算の都合でELB使えないし複雑なことはしたくない(報酬が少ない!)ので、EC2インスタンス起動する度にPublicIPアドレスをRoute53に登録するような構成は取らず、ElasticIPを使う。

やったこと

  • ElasticIP 1個取得
  • t2.small インスタンス
    • Amazon Linux
    • Security Groupは、sshを制限付きで許可、HTTPSをどこからでも許可、という感じのを用意。
    • IAM Role は、例えばバックアップをS3に置いたりってことが考えられるけど今はそこまで設計するの面倒くさいので、一応空っぽのものを付けとく。起動した後にRole設定することは非常に面倒臭いけど、既存のRoleに権限追加するのは簡単なので。
    • ストレージはデフォルトの8GBで構築。こういう小さい容量だとGP-SSDよりはMagneticの方が良い気がしてるのでMagneticで構築。(容量少ないときのGP-SSDのベンチ、誰か取ってないかなー?)
  • root ユーザになる: $ sudo su -
  • # yum update
  • /etc/sysconfig/network をいじってホスト名を設定
  • 気になるならOS再起動

MySQLの用意

MySQL 5.6 は、Amazon Linuxがデフォルトで提供しているリポジトリの中では最新版。世の中は5.7の話題で持ちきりだけど、ここは5.6を使う。(5.7は落とし穴も一杯あるし…)

# yum install mysql56-server

そして起動。

# service mysqld start

初回起動時はいろいろ設定するらしく、ログがたくさんでる。その中に「特権ユーザのパスワードを設定しろよ!」というメッセージが居るので見逃さずに設定する。

# /usr/libexec/mysql56/mysqladmin -u root password 'new-password'

Apacheの用意

# yum install httpd24 mod24_ssl
オレオレ証明書

という戦略を取る。完全に予算の都合である。

# cd /etc/httpd
# mkdir ssl
# cd ssl
# openssl genrsa 2048 > server.key
# openssl req -new -key server.key > server.csr
※ここで、署名要求に記載する事項の入力を対話型で求められる。CN(Common Name)は、事前に用意しておいたドメインを指すようにする。
# openssl x509 -days 36500 -req -signkey server.key < server.csr > server.crt
# chmod 400 server.key

最後の秘密鍵の権限設定は、気軽な鯖だったらやんなくても良いかという気がするが、手が勝手に打ち込む。

証明書の用意ができたら、Apacheにそれを食わせる。
秘密鍵絶対パス/etc/httpd/ssl/server.key になっていて、証明書の絶対パス/etc/httpd/ssl/server.crt になっているはずなので、これらの情報を /etc/httpd/conf.d/ssl.conf に書き込む。このファイル内のどこに書いたら良いのかってのはこのファイルの中身を見ればわかるはずだ。

ここまでできれば、 # service httpd startApacheを起動してHTTPSの動作確認ができるはずだ。

OS起動設定

OSが起動したときに、MySQLApacheが起動するようにしておく。

# chkconfig --level 345 mysqld on
# chkconfig --level 345 httpd on

Redmineの用意

さて、ここからが本番である。基本的には公式のマニュアル http://www.redmine.org/projects/redmine/wiki/RedmineInstall に沿うことになる。
個人的にrubyを取り扱うときにいつも悩むのが、gemをどのユーザのところにインストールさせるのかというところ。今回はRedmineの専用鯖になるのでrootユーザに仕込もうかとも考えたが、マサカリが大量に飛んでくる可能性もある訳で、やはり redmine という名の専用のユーザを用意する。

以下、# はroot権限、$redmine権限でのコマンド実行である。

ユーザの用意
# useradd redmine

以後の操作は基本的に redmine ユーザで実施する。 # su - redmine で成りきれる。

バージョンの選定と入手:公式マニュアルのStep1に相当

個人的なポリシーとして「構築時の最新の stable リリースのものを使う」ことにしている。この記事の執筆時点では Redmine 3.1.1 がそれに該当する。この記事の執筆時点でのAmazonLinuxデフォルトのRubyのバージョンは動作できる Ruby のバージョンは2.0.0であるが、これは Redmine 3.1.1が動作可能なバージョンであるようだ。このまま3.1.1使う。ダウンロードページ http://www.redmine.org/projects/redmine/wiki/Download から必要なアーカイブのリンクをコピって、wgetとかでダウンロード!

$ cd ~
$ wget http://www.redmine.org/releases/redmine-3.1.1.tar.gz
$ md5sum redmine-3.1.1.tar.gz
(一応確認しとく)
$ tar -zxf redmine-3.1.1.tar.gz

この結果、redmineユーザの ~/redmine-3.1.1 にディレクトリができてるので、そこに入っておく。

DBの用意:公式マニュアルのStep2に相当

面倒臭いから、MySQLのrootユーザで接続させる。だからユーザは作らない。

$ mysql -h localhost -u root -p

で接続して、

CREATE DATABASE redmine CHARACTER SET utf8;

でDB作成。終わったら quit

DB接続設定:公式マニュアルのStep3に相当

config/database.yml.exampleconfig/database.yml にコピって使えと公式マニュアルが言っておられるので、素直にそれに従う。設定内容もマニュアルに従う。ここまで作ってきたDBの環境のことを思い出しながら。

必要なgemのインストール:公式マニュアルのStep4に相当

どうやら、これらのコマンドを実行するときの作業ディレクトリは大事であるようだ。Gemfileが見えている場所でってのが大事なんだろう、きっと。

$ gem install bundler
$ bundle install --without development test

この2個目の bundle コマンドを動かすと「◯◯がありません」みたいなエラーが出て止まる。Redmineインストールの難関その1である。
エラーメッセージに従って必要なものをインストールする。ここで何が必要なのか?を調べるのが、Redmine(というかruby)のツラいところだと思ってる。まあruby初心者の戯言ではあるが。

# yum install ruby-devel rubygem20-io-console gcc zlib zlib-devel patch mysql56-devel ImageMagick ImageMagick-devel

このyumのあと、また redmine ユーザに戻って、ディレクトリを間違えずに bundle install すれば良い。

パスワード生成:公式マニュアルのStep5に相当

Redmineのバージョンによって流すべきコマンドが異なる。1.4.x と 2.x には案内があるが、3.x の案内は無い。ここでは 2.x のガイドに従う。

$ bundle exec rake generate_secret_token
テーブル構築:公式マニュアルのStep6に相当

これで一発。前述のDB接続設定をミスってると死ぬ。

$ RAILS_ENV=production bundle exec rake db:migrate
初期値投入:公式マニュアルのStep7に相当

テーブル構築が成功してたらうまく行く。

$ RAILS_ENV=production bundle exec rake redmine:load_default_data

どの言語?って聞かれるので、英語がよければそのままreturn, 日本語が良ければ ja 指定だ。

ファイル権限設定:公式マニュアルのStep8に相当

ここで語ることは何もない。公式マニュアル通り。

chmod 777 files
chmod 777 log
chmod 777 tmp
chmod 777 tmp/pdf
chmod 777 public/plugin_assets

で終わりと行きたいところであるが、ここまでの手順に沿うと redmine ユーザのホームディレクトリ内に置いてあるredmineのファイル群にApacheのプロセスが辿り着けない。もういっちょ chmod 755 ~ を流す必要が有る。
※本当なら /var/ の下だったり /usr/local/ の下だったりに置くのが理想的なんだろう。でも専用鯖なので大目に見る。

Webrickでの動作確認:公式マニュアルのStep9に相当

SecurityGroupでHTTPのポート開けるの面倒臭いし、パス。初期パスワードをインターネット上に平文で流すのも嫌だし。


Passengerの用意

まずはgemのインストール。

$ gem install passenger

これはすんなり行く。
次に、Apacheモジュールのインストール。

$ passenger-install-apache2-module

で、また足りないものをインストールする必要に迫られる。

# yum install gcc-c++ libcurl-devel httpd24-devel apr-devel apr-util-devel

再度モジュールのインストールを試みると、ビルドが始まる。メモリ足らないマシン使ってるとここで怒られる。
数分待つと、Apacheの設定ファイル書き換えろよっていうメッセージが出てくるので、それに従う。これがちょっと面倒で、もう一つのセッションでsshつなぐ必要がある。接続できたらroot権限で /etc/httpd/conf.d/redmine.conf とか言って書き込む。別セッションの方はこれで任務完了であるが、接続を残しておくのも良い。

DocumentRoot の設定

もしもRedmineのインストールディレクトリが /home/redmine/redmine-3.1.1/ であるならば、設定すべきDocumentRootは /home/redmine/redmine-3.1.1/public になる。
これはApacheの設定ファイル /etc/httpd/conf/httpd.conf に直接書き込む。一緒にディレクトリの設定もしてしまう。

DocumentRoot "/home/redmine/redmine-3.1.1/public"
<Directory "/home/redmine/redmine-3.1.1/public">
        AllowOverride None
        Require all granted
</Directory>

ここまでできたら、 # service httpd restart すればRedmineを使えるようになっているはずだ。初期パスワードなどは公式のマニュアルに書いているので、あとは好きにしたら良いだろう。

定期的バックアップは、また暇なときにやる(たぶん記事にはしない)。設定したIAM Roleがきっと役に立つはずだ。

インスタンスタイプ

もともとt2.smallを使ってた理由はPassengerのApacheモジュールのビルドにメモリが必要だったから、である。稼動確認できたらもうt2.smallである必要はなくて、t2.microに切り替えて良い。