3歩歩くと忘れるぶろぐ

ついに大学生から社会人になってしまった、地理系・情報系大学生だった人のぶろぐ。えんじにあえんじにあ。

エイチームライフスタイル技術勉強会 in 名古屋ギークバー にお邪魔してきた

こんばんは。お酒飲んでないので記憶が鮮明なうちに書いておきます。

(感想込みのものをこっちに書いておきます)

概要

Q.なにそれ A.↓です

エイチームライフスタイル技術勉強会 in 名古屋ギークバー (08月31日) #geekbar
 https://geekbar.doorkeeper.jp/events/30082

以下、メモと感想。 間違っていたりするかもしれない&あとから加筆しているので適当に今度お会いした時とかに補足ください>< あとから補足したり、わからなくなってコメントしたのを->で表記してます

タイムテーブル

  • 自動車事業
  • SIM クルビア事業
  • 金融メディア事業
  • 発表 特別チーム
  • 投票・結果発表

メールアドレスの誤入力検出

・アドレス入力フォームあるある メールアドレスの入力間違い ピリオドとカンマ入れ間違えるetc. なぜかhttp://とかコピペするひとがいる 何度もドメイン部が入力されてる 全角で入っちゃってる

・正しいメールアドレスがほしい 正しい #とは * SMTPサーバが受け入れる * 受信者のSMTPサーバまで届く ←今回はここまで ...以下(書ききれず)

・入力時にご入力をどこまで防げるか 方法はいかがある * 正規表現でマッチ(簡易ver  簡単な入力値チェックのみ

->簡単にやるとpreg_matchに/^([a-zA-Z0-9])+([a-zA-Z0-9.-])*@([a-zA-Z0-9-])+([a-zA-Z0-9._-]+)+$/とか食わせるぐらい? ->RFCには準拠しない簡易的な実装

  • 正規表現でマッチ(RFC準拠ver)
  • Swiftmailerのアドレス検証の仕組みを利用する ->symfony frameworkなどで採用

PHPだとこれっぽさ

/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD

->真面目にやろうとすると死ぬ

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
 )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
 \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
 ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
 \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
 31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
 ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
 (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
 (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
 |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
 ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
 r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
 ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
 )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
 )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
 )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
 *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
 |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
 \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
 \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
 ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
 ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
 ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
 :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
 :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
 :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
 [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
 \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
 \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
 @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
 (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
 )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
 ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
 :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
 \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
 \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
 ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
 :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
 ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
 .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
 ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
 [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
 r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
 \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
 |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
 00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
 .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
 ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
 :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
 (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
 \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
 ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
 ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
 ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
 ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
 ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
 \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
 ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
 ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
 :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
 \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
 [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
 ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
 ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
 ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
 ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
 @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
 ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
 )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
 ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
 (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
 \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
 \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
 "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
 *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
 +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
 .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
 |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
 ?:\r\n)?[ \t])*))*)?;\s*)

( ゚д゚)...人間が読めるものではない

  • 実際にSMTPdに食わせてみる(正規表現でマッチなし helo してrcpt toしてみてエラーはくかどうか

->このあたり、言ってる意味はなんとなくわかるけど詳しくないのでちょっと調べないとついていけない

参考) http://www.atmarkit.co.jp/ait/articles/0304/22/news001.html から

コマンド パラメータ 意味
HELO    マシン名    メール送信の開始を宣言する
MAIL FROM:  <送信元アドレス> 送信元(エラーの通知先)を指定する
RCPT TO:    <送信先アドレス> メールの送信先を指定する
DATA        メール本文を開始する
QUIT        メール送信を終了する
RSET        メール送信を中断する
NOOP        何もしない
表2 主なSMTPコマンドとその意味

->つまりメールの送信先に指定してぽいっとしてエラーを吐くかどうか。(250 OK)がかえってくるかどうかってことだとなんとなく理解

・まとめ RFCの仕様を完全に正規表現で表現するのは難しい とはいえ正規表現でも大半はOK ユーザーと開発者に優しい感じにしましょう


質疑応答 Q:そーゆー正規表現的なのはどの言語がいいのか? ¥wとかかけると記述が楽になる

隣の席に座っていた先輩: むかしdocomoauは準拠してなかった(先頭にハイフンつけられるとか。ガラケーの頃の話


  • 感想 自分的には簡易的な正規表現だけでいいのかなーと思った。

RFC準拠すると正直正規表現が読めなくなりつつあるので、そこまで厳密にやる場合、コメントでこの仕様に準拠(+URL)とかしておいてあげるといいのかなと思った。

(正直)チェックするのもそんなにしたくないので、html5のinputのtype=emailでなんとかならないかなーと思った(なんとかなると幸せな世界っぽさ) 参考:http://www.htmq.com/html5/input_type_email.shtml


tidyでシンタックスチェック

シンタックスエラーとは

RFCに準拠した形だと yahooで大量にエラーが起きる ->( ゚д゚)

・困るとき ブラウザの親切心でformのとじタグを入れてくれるとか

->(どう書いてたっけ・・・)

<form >
  <input type="text" name="name" >
  <input type="text" name="yomi" >
  <div>

        <input type="text" name="age" >

</form>
  </div>

みたいに書かれたコードがあった時に

の前にを補完してくれちゃってageがうまく取れない時がある的な話をしていた気がする

->正直このコードはそもそもどうなのかと思ったけど

・tidyとは W3Cが妥当ではないhtmlに対してシンタックスチェックしてくれる

... html5未対応

・有志が対応してくれた htacg/tidy-html5

  • how to use

tidy -qe hoge.html

現状だとファイルを指定することでしか見れない curlを使ってリクエスト

tidyはオプションが豊富 * 参考文献

http://w.koshigoe.jp/study/?%5Btidy%5DTidy+Configuration%B3%D0%A4%A8%BD%F1%A4%AD clean up your web pages with tidy

tidy-html5 doc

https://github.com/ayhankuru/gulp-htmltidy

とかもある


  • 感想とか tidyについてそもそも知らなかったところが多いんだけど、どんなときにメリットがあるのかイマイチわからなかった(´・ω・`) curl http://hogehoge してきたやつをーとか、Seleniumでーっていう話だったので サーバーサイドでレンダリングしたあとのはきだされたものに対してチェックしたいっぽかったので、うまく使うとよさそうな気がするんだけど。 htmlhintとかjshintみたいな事前チェックだけだとうまくできないような部分に対して有効?なのかというあたりをもう少し詳しく知りたい感じだった。

適当に調べながら聞いていたけど、 https://github.com/ayhankuru/gulp-htmltidy とか https://github.com/bezoerb/gulp-php2html とかあってgulpとかでも動かせそうだったので、 開発している途中にもgulp watchとかして、phpとかで作っているやつをhtmlで吐き出して、そこでチェックみたいにできるんだろうか・・・要確認


PHPerからRubyist

suzuki.sh(すし)

2012エイチーム入社 当時の比較サイト事業部配属 Webサイトのアプリケーション開発およびインフラを担当

合唱のWebサイトとかつくってる

もともとPHP(Symfony)だったのが徐々にRuby(RoR)が使われるようになった ・もともと専業PHPerだったのがひよっこRubyistになった

これらは覚えるしかない ・一行コメント、複数行コメント ・セミコロン メンバ呼び出し メソッド定義 コンストラクタ名 レシーバ参照 例外処理 try catch finally / begin rescure ensure

rubyらしいメソッド名・snake_case T/Fを返すメソッドには末尾に?をつける 破壊的メソッド(レシーバ自身を書き換える)には末尾に!をつける 末尾に=をつけるとsetterメソッドとして使える(これだけは仕様、ほかは慣習 )

便利なアクセサ class Bool attr_accessor :title end

==

class Bool def title =title end def title= ...

親クラスのコンストラクタは暗黙的に実行されない
・実はPHPもRubyも同じ
superで呼び出す
括弧なし、引数なしでsuperを呼ぶと呼び出し元の引数をすべて引き継いで親クラスのメソッドに自動的に渡す

例外処理
例外を発生させるのはraise

ややこしいことにrubyにはcatch ... throwもあるけれど大域脱出を行う ->例外とは関係ない

== と ===

ruby では論理式においてnulとfalse以外すべて真 空文字列も から配列も 0も

Rubyist担っての所管 Rubyだとmap とか reduceとかブロック構文とかコレクションとか、PHPではあまり見ない昨日がたくさん

これらになれてくるとPHPよりも短く、早くかける PHPに比べて同じ処理を様々な記法でかけてしまう

PHPよりもより小規模な高速開発に向く反面、開発チームの規模が大きくなればなるほど

ジムーバが開発メンバーが1人しかいない のでメンバー募集

事業が大規模になってきたので製品の保守が大変だわーーーといってみたい


Q.なんでPHPからRubyにうつったのか A.なんでしょうね・・・

↑に書いたとおり

Q.そもそもなんでRubyでやろうと思ったの? Q.今回Rubyを使おうと思った理由は? A.Rubyをやってみたいとおもった 知ってる人が増えてきた 失敗したら使わない 初期はRailsのほうが早いよねっていう話題が出てた 挑戦的に使ってみた

Q.PHPだと何が遅いのか ORマッパーとか? RailsActiveRecordが優秀 PHPのORマッパーよりも優秀っぽさ

突き詰めるとActiveRecordがいい・・・? →はい!

Q.PHPでかくのとRubyで書くのとどっちがいい? 新しいPJならRubyがいいかな PHPはドクトリンを使っていた https://doctrine.readthedocs.org/en/latest/ バージョンは教えられない


  • 感想 ActiveRecord便利なの同意\\\٩( ‘ω’ )و //// PHPフレームワーク使って開発っていう経験が(ほぼ)なくてPDOとかを使ってしかきちんとアクセスしたことないのでドクトリンとかいろいろ知らないのでうまくわからないけどRubyActiveRecordとかは便利。

Effective Ruby

あたりが参考で出ていたような気がする

BOT除去のいろは

金融メディア事業部システムチーム

  • 有益なBot グーグルボット的な

  • アクセス過多のBOT

サーバが応答できなくなるアクセス過多のBOT とか 成果集計をしている場合に成果タグを叩くBOT

アクセス方のBotを叩く apache deny from env=ng_ua で除外

RPサーバ以下への付加を大幅に軽減


質疑応答

成果タグBOTはReverseProxyで除外はしない ->有益なアクセスまで弾かれる可能性 ->集計時に弾く

Q.そもそもRPでApacheはコスト高くないですか 参考にします><


  • 感想 Apacheでリバースプロキシはちょっときつそうな気が…と思っていたら質疑で先に出てきた

slowlorisとかあったと思うので、Linuxだったらあれだなーと思いながら聞いてました 参考) Slowloris:つゆむーみん谷:So-netブログ - http://go.shr.lc/1Vsn5XM

今だとnginxとかtraffic serverなのかなーと思って聞いていたら先輩からvanishあるのを聞いた。名前は聞いたことあるようなないようなぐらいだったので、勉強になった(使う機会あるのかな...) 参考) Varnish でリバースプロキシ « インフラ本舗 - http://go.shr.lc/1LOcOUe


chrootとsftpで隔離されたゲストを作る

こんなことありませんか サーバを使っていて とあるディレクトリの中身を他の人に編集してもらいたい とはいえサーバのファイルは見せたくない

useradd sftp-user passwd sftp-user

usermod -d / sftp-user chown root:root /home/sftp-user chmod 755 /home/sftp-user

内部のsftpを使うように設定する

chrootの設定 Match User sftp-user ChrootDirecory /home-sfty-userX11Forwarding ほげほげ

ls -nはつかえないので バインドマウントする mount --bind /home/owner/rails/app/assets /home/sftp-user/assets


Q.ftpもできないデザイナーもいればgitが使えないデザイナーもいる

Q.さっきmount --bindをしらないので参考になりました これってオーバーヘッドはないんですか?(ファイルの読み書きに A.すいませんパフォーマンスに関しては存じないです

Q.主に開発中に使うことが多い?それとも本番サーバで? そこはいろいろとごにょごにょ Q.これ再起動しても永久に使えるんですか

->fstabに書かないと消えるんじゃ…

ハードリンクはフォルダはだめなので無理っぽ


  • 感想 本番とかごにょごにょといっていたのでセキュリティ的に大丈夫なのかちょっと気になってしまいましt><

どうやってデプロイしているのかわからないのだけど、デザイナーさんにgitを使ってもらって、コードベースでエンジニアに渡して、全部まとめてデプロイが良い・・・?


WordPressを受け入れる ゼロ

背景:なぜだかWordPressは一部エンジニアから敬遠されている気がする

happylifestyle そのままのWordPressを受け入れよう

  • 圧倒的なポピュラーさ ・LIGとかマイナビウーマンとかFindjobstartup 害虫にも出しやすい 開発コミュニティも活発

  • 5分間インストール

  • 圧倒的なカスタマイズのしやすさ 設計思想に沿った形でカスタマイズができる魅力

  • サイト更新の圧倒的容易さ

コンテンツとシステムの分離 デプロイ不要、運用工数極小

悪いところ

  • 敷居が低すぎる。油断は混沌を生む ・お手軽ツールだと思って適当にやらない ・初期構築時は絶対にエンジニアが入ること 無計画にプラグインを入れない 判断基準は無効にしても動く ->管理画面使いやすい系はあり

  • Webの8割は信じてはいけない

・信用できる情報を得る ・ソースを読む ・また、信用できる人に聞く

  • オブジェクト指向からの乖離 ・wordpressの作法としそうになれる ・ただ汚いコードなのか、それともしそうなのか見極める ・どうしても悩むならソースを読む ・バージョンアップに期待する

  • 攻撃者に狙われやすい(有名ドコロなので) ・正しい知識をもって対向する ・ログファイルをみれなくするなど ・細かくバージョンアップする!!!!!!←重要 徹底した下位互換、気軽にできる

  • まとめ Wordpressと長く付き合うイメージがわいたでしょうか ・Wordpressを正しく活用するようになってサービス構築の選択肢が増えました ・Wordpressにかぎらず良い面も悪い面を見ることが大切 ・人も同じです ・そのままの僕を受け入れてくれる女性を募集


Q.シンプルなのとつきあいたい。ドキュメントとかはどうか。 OSSなのでそこそこ豊富


  • 感想 一番(面白い的な意味で)LTっぽいLTだと思いました>< 彼女ネタとかそういうネタ的なのが社内LTでできるのはいいなと思いました

mitmproxyでアプリ開発

コンソール型の通信監視ツール アプリとサーバ間の通信(SSL) そもそもmaninthemiddle(mitm)という意味 リクエスト・レスポンスの改ざん

iPhoneOS Xのmitmproxyを実行 ↓ サーバ

2013のpythonアドベントカレンダーにいろいろかかれている 〜〜〜 インストール設定 ~アドベントカレンダーにあるらしいので以下略

ごにょごにょ終わったら safariをひらいて 証明書を入れる


  • 感想 重くするだけだったらiOSだと8から?できるようになったような気がするし、chromeとかだと重くできたりするのでandroidもできる(ときいた)のだけど requestの80%を破棄するような設定とか、柔軟に設定できるのはいいなーと思った。 本当に80%つながらないような状況で、実際にうごくかどうかってちょっと不安だし。

AcriveAdminの布教

redminetwitterらいくなプラグインとかつくっているOSS

管理画面作っていますか DB作ってモデル作ってコントローラービューとかつくって ・・・長い

ActiveAdminで全て解決

今日は布教

activeadminとは rails向けに作られた管理画面gem 極小コーディングで管理画面を構築 気に入らないところは徹底的にカスタム可能 ・コントローラもビューも独自にかける 3大gem rails_admin active_admin typus rails管理系gemを比較してみた(Qiita) インストールは4コマンド

検索画面も含めて作ってくれる


  • 感想 Rails使った経験が少ないので、比較とかはどれがいいのかちょっとわからないところもあったけれど、管理画面もあんなに簡単に作れるのはいいなーと思った。 PHP->Rubyの話もあったけど、PHPだとこのあたりはさくっと作れない気がするので、Ruby(RoR)+Gemのエコシステムすごい (小学生並みの感想になってしまっている感じがする)

総評

マネージャーの人

今日発表した人のうちのひとり →エンジニア歴2年ちょっと

外向けの発表がはじめてのひとー? →3人(ぐらい?)

今回の発表形式(投票形式)を考えたのも若手 業務で使える というテーマにすると小難しい話ばかりにはならなくなる →若手でも点が取れる形式(若手も学んだ内容をすぐにアウトプットできる アウトプットはエンジニアにとって大事. アウトプットしていきましょう

以下宣伝があった部分

code for nagoyaの宣伝

ジオメディアサミットの宣伝

NGKK2014B

名古屋合同懇親会 →NGK2015も開催します 12/12土曜日開催予定

四次会まである DStokaiっていうGoogleGroupがある

mashup award

ruby東海 @47

startup weekendの紹介

おわり。

パーフェクト Ruby on Rails