ありがとう。また会おう。

ゆるいかんじで。かたのちからぬいて。やってます。

2017-02-01 MySQL Casual Talks vol.10

https://mysql-casual.connpass.com/event/48473/

参加してきた。
途中でPCのバッテリーが切れてしまって、あまりmemoできなかった。。。

@myfinder
MySQL Casual 運営についての話

Slack運営について
意外と日本語圏外の人もいる

@meijik
MySQLの限界に挑戦する(?!)

超大作なSQLや再起なストアドは限界を見る可能性があると。

@tmtms
MySQL文字コード事情 2017版
http://www.slideshare.net/tmtm/mysql-2017

とても丁寧でわかりやすかった。
それにしても、絵文字の照合問題を考えると
現行は utf8mb4_bin しか選択できないかなぁ。と思った。
utf8mb4_japanese_ci(?)に期待。

あと、クライアントがutf8(not mb4)だと、サーバ側がutf8mb4でも化けるの
よくよく考えりゃそりゃそうなんだが、前ハマったのそれか。。。と既視感があった。

@mita2
MySQL Group Replication - MySQL Casual Talk vol.10
http://www.slideshare.net/satoshimitani71/mysql-group-replication-mysql-casual-talk-vol10

Group Replication良さげだがまだハマりどころがありそう。
もう少しこなれてからかな。

@yoku0825
MySQLアンチパターン
https://yoku0825.blogspot.jp/2017/02/mysql-casual-talks-vol10mysql.html

安定のyokuさんw
今回も楽しませてもらいました。
個人的には、いくつか身に覚えがあるところがあり、gkbr
あと、SQLの可読性問題、これを気にもっと認識されてほしい。

@soudai1025
Webサービスが成長するとロックで苦労する話

soudaiさんの発表も聞いてて楽しい。
ロックはほんとねぇ。。。はまりますよねぇ。。。
ソシャゲやってたときはほんと辛かった。。。

@bizstationcorp
Transactd 高速・高機能なNoSQLプラグイン
http://www.slideshare.net/bizstation/transactd-nosql

知らなかったけど、使い所絞ればパフォーマンスでそう。
RDSでも使えるのかしら。

@bringer1092
Zabbix+group replication
http://www.slideshare.net/bringer1/zabbixgroup-replication-71666508

構成方法がかなりの苦労を感じた。。。
うちのZabbixも。。。そろそろ。。。なぁ。。。

@songmu
Test::mysqldの話

やぱデータも込みでTestしたいってのは完全にAgree。
ただ、そもそもこういうシステムテストする文化が根づいてないとなぁ。。。うーむ。

@i_rethi
Advent Calendarの補足的な話

低レイヤーの話。自分が苦手なところであまり理解できなかった。くぅ。

@kamipo
知って得しない Active Record Issues (MySQL編)
http://kamipo.github.io/talks/20170201-mysqlcasual10/#/title

kamipoさんのコントリビュート力すげぇ。。。

2017-01-30 SRE Tech Talks #2

SRE Tech Talks #2
https://eventdots.jp/event/609456
参加しました。

雑だけど個人memo。

■株式会社メルカリ - SRE 久保達彦 @cubicdaiya
On-call Engineering
https://speakerdeck.com/cubicdaiya/on-call-engineering

SRE 当番制のもろもろの仕組みをエンジニアリングで解決
Slack botにて。勤怠、緊急連絡
PagerDuty APIGoogle Apps Script(スプレッドシート)を活用

質疑応答
・だいたい4,5人で回している
・頻度は1ヶ月に1回も無いくらい(直近は2、3ヶ月前)

サイボウズ株式会社 運用本部・サービス運用部・SRE 深谷敏邦 @toshi_pp
cybozu.com のデータバックアップとリストア、それを活用したリハーサル

SREとバックアップ
 できるだけ安全にやるために
  事前レビュー
  ペアオペレーション
   (第6感で「危ない」と気づく人がいるw)
  バックアップ。あると「安心感」
DM Thin Provisioning(dm-thinp)を活用
バックアップを実際に使うことは99%使わない
アップデートのリハーサルで利用

クックパッド株式会社 インフラストラクチャー部 SRE グループ長 星 北斗 @kani_b
cookpad.com 全 HTTPS 化の軌跡

SRE/情シス/セキュリティ がグループ別れている
SREグループは9名
動機
 セキュリティ、非SSLなログインフォーム(ポップアップダイアログなど)
暗号化の必要性
 保護したい情報は利用者が決められるべき
 前提として通信は暗号化する
 外圧:ATS、Chrome検索エンジンなど
 新技術:HTTP2、ServiceWorker、使い分けの煩雑化→使い分けは事故の元
懸念
 広告・・・HTTPS対応してないものもあった
対応
 とにかくmixedコンテンツへの対応がほぼんど
  CSP使うとエレガントに対応できる
 protocol-relative なURL(//から始まるやつ)に変更
 全社への説明重要 色んな人をまきこむので、コミュニケーション重要
 httpd.confのURL rewriteへの対応
 集計系に影響する可能性あり
 セキュアクッキーとHSTS対応が残ってる
 


■株式会社ミクシィ XFLAG™スタジオ ゲーム開発室 SREグループ 清水 勲 @isaoshimizu
SREグループができてこの半年間やってきたこと
https://speakerdeck.com/isaoshimizu/sregurupugadekitekofalseban-nian-jian-yatutekitakoto

PagerDuty使っている
MySQLチューニング
 innodb_io_capacity
 innodb_spin_wait_delay
OSアップデート
 THP と NUMAの設定要注意


さくらインターネット株式会社 技術本部エンジニア 山田修司 @uzyexe
Arukasの運用事例と、末永くインフラ運用していくためのTips

Arukas:Docker Hostingサービス
利益と信頼関係の両立
「Hope is not a storategy」(SRE本)
PagerDutyを利用
「インフラに強いエンジニアが少ない」「アプリエンジニアの方が多い」
品質のために「入場制限」をかける
可用性における問題:ヒューマンエラー

2017-01-20 第4回実践セキュリティ講座

第4回実践セキュリティ講座
https://yume-ed.connpass.com/event/48872/

参加しました。
セキュリティ、CSIRTといったところを今学んでいるところなのでちょうどよい内容でした。

以下、個人的に気になったワードを、断片的に列挙します。

  • 情報セキュリティは経営マター
  • 会社が抱えるリスク→従業員が抱えるリスク
  • 会社経営におけるリスク・・・発生確率とインパクトの2軸で考える
  • ランサムでお金振り込んで戻ってくる確率は54%という統計がある
    • 身代金を払うことは「反社会的勢力への利益供与」にあたるという解釈をする専門家もいる
  • リスクマネジメント・・・回避、低減、移転、保有 「いくら投資するか」
  • 「守れているか、気づいてないか、たまたま運良く被害にあってないだけ」
  • クレジットカード決済は 透過型よりリンク型が望ましい
  • 従業員の過半数が「情報セキュリティ的にまずい」ことに気づけば自然と報告、改善意識が高まる

2017-01-18 「第44回 脆弱性診断ええんやで」参加

第44回 脆弱性診断ええんやで(^^) OWASP Top 10 の歩き方 一歩目 - 脆弱性診断研究会
https://security-testing.doorkeeper.jp/events/55559

初参加してきました。
最近仕事がセキュリティ絡みのことをやっているので
実践的な内容の勉強会でためになりました。
ツールは実際に手を動かして見るのが大事だなと感じました。
本やWebで見ているだけよりも、感覚として掴めるのは大きいかなと。

今回の勉強会では、Top10の本当に触りだけだったので
もう少し突っ込んだところも聞きたかったなと。次回に期待です。

「足し算の順序」アナタは大丈夫?

この記事は MySQL Casual Advent Calendar 2015 の20日目です。

1ヶ月ほど前ですが、こんな記事がネット上で話題になりましたね。
r25.yahoo.co.jp
togetter.com

個人的には、算数(数学)と国語の授業を取り違えてるんじゃないかな・・・と思ってもやもやします。
数学は抽象化して扱うから、様々な定理・公式が使えるというのに
小学生どあたまの教育でこんな風に教えるんじゃ、ますます算数・数学嫌いを増やすんじゃないかと危惧したりするのですが・・・


ところで。
MySQL(に限った話ではないのですが)では、この「足し算の順序」が重要になる場合があります。

AWS上のMySQLであるRDSでは、タイムゾーンの設定がデフォルトでUTCなので、NOW() 関数を使うと 日本の標準時間(JST)とは9時間ずれた日時が出力されます

※サーバシステム時刻を確認

$ date
Sun Dec 20 12:01:54 JST 2015

※RDSに接続し、NOW()関数を出力

$ mysql -u norii -p -h norii-db.************.ap-northeast-1.rds.amazonaws.com
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2015-12-20 03:02:19 |
+---------------------+
1 row in set (0.01 sec)

なので、これを補正するには、9時間ずらす必要があります*1

mysql> SELECT NOW() + INTERVAL 9 HOUR;
+-------------------------+
| NOW() + INTERVAL 9 HOUR |
+-------------------------+
| 2015-12-20 12:02:29     |
+-------------------------+
1 row in set (0.00 sec)

時に、DBにあるデータに対し、「1ヶ月前」の日時が必要になることがあります。
素朴に現在日時に対する「1ヶ月前」を、上記の要領で求めると

mysql> SELECT NOW() + INTERVAL 9 HOUR - INTERVAL 1 MONTH;
+--------------------------------------------+
| NOW() + INTERVAL 9 HOUR - INTERVAL 1 MONTH |
+--------------------------------------------+
| 2015-11-20 12:02:41                        |
+--------------------------------------------+
1 row in set (0.00 sec)

となります。ここで、「+ INTERVAL 9 HOUR」と「- INTERVAL 1 MONTH」の順序を入れ替えてみます。

mysql> SELECT NOW() - INTERVAL 1 MONTH + INTERVAL 9 HOUR;
+--------------------------------------------+
| NOW() - INTERVAL 1 MONTH + INTERVAL 9 HOUR |
+--------------------------------------------+
| 2015-11-20 12:02:48                        |
+--------------------------------------------+
1 row in set (0.00 sec)

NOW() 関数通してるので秒は実行のタイムラグの分ずれてますが、基本的には同じ日時を指し示しています。

ですが、この計算式は、実行する日時によっては、等値になりません。

たとえば、このSQLを 日本時間の 12月1日 1:00 (UTC では 11月30日 16:00)に実行したとしましょう。
(以下ではNOW()関数ではなく、日時をリテラルで渡しています)

mysql> SELECT '2015-11-30 16:00:00' + INTERVAL 9 HOUR - INTERVAL 1 MONTH;
+------------------------------------------------------------+
| '2015-11-30 16:00:00' + INTERVAL 9 HOUR - INTERVAL 1 MONTH |
+------------------------------------------------------------+
| 2015-11-01 01:00:00                                        |
+------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '2015-11-30 16:00:00' - INTERVAL 1 MONTH + INTERVAL 9 HOUR;
+------------------------------------------------------------+
| '2015-11-30 16:00:00' - INTERVAL 1 MONTH + INTERVAL 9 HOUR |
+------------------------------------------------------------+
| 2015-10-31 01:00:00                                        |
+------------------------------------------------------------+
1 row in set (0.00 sec)

と、なんと1日ずれてしまいました。

まぁ考えてみれば当たり前の話で
1ヶ月の日数は、月によって異なるので
上記のSQLで、先に9時間足すと、日付またいで12月1日なるので、その1ヶ月前で11月1日になる
先に1ヶ月減算すると、10月30日になって、そこに9時間足すことになりますが、10月はもう1日ありますから、10月31日になると。

Webアプリケーションで集計組む場合は、プログラム側から日時を渡せばいいですが
ストアドプロシージャでこのような日付周りを扱う場合は、地味にハマるかもしれません。

・・・というか、地味にハマったんでこのエントリ書いたんですけどね(´・ω・`)
なんで素直な順番で書けばなんにも問題ないのにわざわざ順番変えちゃったんだろう。。。

*1:Webアプリケーションから扱う場合は、MySQLのNOW()関数などは使わず、アプリケーション側で日時リテラルを組み立てて渡すべきです

12/13 Symfony Meetup #7 & 「Symfony2入門」読了

もうひとつ12月に参加したイベント。Symfony Meetup #7

symfony.doorkeeper.jp

久々にあまり知り合いのいないイベント参加で若干緊張しました。
そういえば久しぶりの六本木ヒルズでした。昔は毎日通ってたってのが信じられないw(通勤距離的な意味で)

発表資料や当日の様子はきっと誰かがもう書いていたり
Twitterハッシュタグ #symfony_meetup をみればわかると思うので省略して。

Symfonyは今業務でバリバリ使っているのですが
体系だてて勉強したわけではなく、必要に迫られて必要なところを調べる、みたいな形で知識をつけてしまったので
今ひとつちゃんと使いこなせてないんですよね。
(しかも、自分が設計したシステムではなく、今のプロジェクトに途中からジョインしたので)

で、ここで聞いた話や、後述しますが、「Symfony2 入門」を読んでいて
ほんとまだまだ全然便利な機能使いこなせていないなぁ、というのを痛感しています。

@hidenorigoto の発表だったか質疑応答のときだったか
ちょっと記憶が曖昧なのですが
フレームワークの選定の話で
それなりに大きなシステムを組もうとすると
きちんと設計できるのはSymfonyかZendくらい、と言っていたのが印象的で。
というのも、自分もそれなりに今までいろんなフレームワーク触ってきたのですが
CakePHPやCodeIgniter、FuelPHP は、そのあたり難しいってのは同意で。
もちろんそれに向いたシステムってのもあるので、どちらが優れているか劣っているかという話ではなく
そのビジネスで解決したい課題に適した道具を使いましょう、ということではあるのですが。

で、SymfonyやZendが大きなシステムに向いているってのは、ひとえにDB関連がActiveRecordではなく
Data Mapper 使っているところだと。
(Doctrineも1の頃はActiveRecordでしたけど、2はData Mapperになったので)
Data MapperはActiveRecordの手軽さはないですが
その代わりビジネスに要求されるような複雑な要件を、適切にモデリングして扱う上では
やはりこちらの方式のほうが素直に組めるんですよね。
ActiveRecordだとどうしても無理しなきゃいけないところが出てきてしまう。

このあたりは、PofEAAの知識があると腹落ちしやすいと思うんですが
ちょっと初学者には敷居が高いってところが、学習コストなのかなとか思っていたりします。

で、ちょっと時間に余裕があればLTできるかなとおもって、現場で仕込んでみたのですが時間切れだったのでスライドだけ上げました。

www.slideshare.net

これ、実際業務に使ってるんですが
最初その問題を解決するのに、Twigのドキュメント見て、この関数使えそうじゃん!って思い
Google先生を引いてみたんですけど、びっくりするほど情報無いんですよね。公式ドキュメント以外。
かといって、使うとヤバイ的な話もないし。
単にあまり光があたってないのかな、と思ったので話題にしてみました。

発表できずに終わるのも悲しいので
なんか別の機会があれば、これともう少し話を肉付けして、どこかでしゃべろうと思います。


で、もうひとつの話題の「Symfony2 入門」

基本からしっかり学ぶ Symfony2入門

基本からしっかり学ぶ Symfony2入門

Symfony2は今まで専門書籍、という意味ではあまりなかったんですよね。
効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門 には触れてる部分あることはあるんですが
体系的に学べる、という意味では初の書籍かと。

で、端的に言って、今業務でSymfony扱っている人は必携の本ではないかなと思います。
理論の部分と実践の部分がうまく融合されていて、
とてもわかりやすくまとまっています。
特にSymfonyは今まで初学者には敷居が高い、学習コストかかるという印象があったと思うのですが
この本1冊読み進めていけば、きちんと基礎力つくと思います。

自分もこの本を読んでいていろいろ発見があって。


あと、7章のAPI Docの生成とかもいいなぁと。今あるプロジェクトでも隙をみていれたいな、と思ったり。

SymfonyはWebのリソースが豊富なので
今までは事実上それがドキュメントだったわけですが
体系的に学べる本が出版されたというのは本当に大きいと思います。

自分のエンジニア魂に火がつくような、素晴らしいイベント&書籍でした。

12月7日 GLT(Genesis Lightning Talks) Vol.49 で話してきた

最近は年末の風物詩?となった、「GLT Vol.49」にてLTしてきました。スライドは以下。

www.slideshare.net

GLTはここ最近、年1開催だったので
どうしても同窓会ノリで近況報告になってしまいがちで、これもまぁそうなんですが。

ネタの発端としては、昨年のGLT Vol.48 にて、懇親会の時に彼女の話になって
こっちの話のほうがLTのネタになるじゃん、みたいなことを言われていたので
じゃあ1年越しにそれをネタにしようかと。
・・・というのがネタフリで、いかにも喋るような体にしておきながら
実際は弊社絶賛エンジニア募集中だよ!って言いたいのを延々喋って、ちょうど5分時間切れになる、という
最近ではこの手の落ちも使い古しではありますが、「時間切れ狙い」というオチでした。
(最後のほうのスライドで、スーパーマリオの絵があるのは、以前のGLTは1分前にマリオのhurry up音
 時間になると、1 down音が流れる仕様だったので、それにあわせてのネタ)

で、スライドの本題の方は、ここでわざわざしゃべるつもり無いのですが(笑)
(それこそどこかの懇親会でツッコんでください)
エンジニア募集の方は、ほんとに真面目に募集しています。

事業ドメインとしてはなかなか手堅いところを抑えていて
まだまだ事業拡大中という状況で、
その一方、エンジニアは今超売り手市場なので、なかなかいい人材と巡り合うのが難しいんですよね。
ましてや弊社も特にエンジニア界隈では全然無名な方だと思うので
(あまり外の勉強会に積極的にでることもなかったので)
そこは自分がある程度スポークスマンになって、動こうかなと思っており。

技術的には、超最先端を常に追っていきたいとか、一発勝負出て大儲けしたい、という人には向かないですが
堅実に末永く腰据えてエンジニアリングに取り組みたい方
特に、音楽系、最近はスポーツ系も取り組み始めているので、そのあたりに興味ある方であれば
とても向いてると思っています。

なので、このブログで改めてという感じで
こういったビジネスのシステム開発・運用に興味あるなぁという方は
TwitterでもFacebookでも構いませんので、お気軽にお声がけください。

そうそう、GLTもいよいよ次回で50回!なんですね。
このイベント自体が発足した当時を知るものとしてはなかなか感慨深い。
もう、あの当時あの会社にいた人もすでに別の場所で活躍してる人も多くなりましたが(というか、残ってる人がいない・・・か?)
これだけ継続している事自体、コミュニティの力はすごいなと思います。
GLTがなければ出会うこともなかった人もほんと多いですし。

会場提供いただいたドワンゴ様、運営担当の皆様、ありがとうございました。