エイチームライフスタイル技術勉強会 in 名古屋ギークバー にお邪魔してきた
こんばんは。お酒飲んでないので記憶が鮮明なうちに書いておきます。
(感想込みのものをこっちに書いておきます)
概要
Q.なにそれ A.↓です
エイチームライフスタイル技術勉強会 in 名古屋ギークバー (08月31日) #geekbar https://geekbar.doorkeeper.jp/events/30082
以下、メモと感想。 間違っていたりするかもしれない&あとから加筆しているので適当に今度お会いした時とかに補足ください>< あとから補足したり、わからなくなってコメントしたのを->で表記してます
タイムテーブル
メールアドレスの誤入力検出
・アドレス入力フォームあるある メールアドレスの入力間違い ピリオドとカンマ入れ間違えるetc. なぜかhttp://とかコピペするひとがいる 何度もドメイン部が入力されてる 全角で入っちゃってる
・正しいメールアドレスがほしい 正しい #とは * SMTPサーバが受け入れる * 受信者のSMTPサーバまで届く ←今回はここまで ...以下(書ききれず)
・入力時にご入力をどこまで防げるか 方法はいかがある * 正規表現でマッチ(簡易ver 簡単な入力値チェックのみ
->簡単にやるとpreg_matchに/^([a-zA-Z0-9])+([a-zA-Z0-9.-])*@([a-zA-Z0-9-])+([a-zA-Z0-9._-]+)+$/とか食わせるぐらい? ->RFCには準拠しない簡易的な実装
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
->真面目にやろうとすると死ぬ
- 正規表現でマッチ(番外編) 99.9%の確率でメールアドレスを検出できるサイトがある http://email.regex.com ex) perl/ruby
(?:(?:\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とかかけると記述が楽になる
隣の席に座っていた先輩: むかしdocomoとauは準拠してなかった(先頭にハイフンつけられるとか。ガラケーの頃の話
- 感想 自分的には簡易的な正規表現だけでいいのかなーと思った。
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>
みたいに書かれたコードがあった時に
->正直このコードはそもそもどうなのかと思ったけど
・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マッパーとか? RailsのActiveRecordが優秀 PHPのORマッパーよりも優秀っぽさ
突き詰めるとActiveRecordがいい・・・? →はい!
Q.PHPでかくのとRubyで書くのとどっちがいい? 新しいPJならRubyがいいかな PHPはドクトリンを使っていた https://doctrine.readthedocs.org/en/latest/ バージョンは教えられない
- 感想 ActiveRecord便利なの同意\\\٩( ‘ω’ )و //// PHPはフレームワーク使って開発っていう経験が(ほぼ)なくてPDOとかを使ってしかきちんとアクセスしたことないのでドクトリンとかいろいろ知らないのでうまくわからないけどRubyのActiveRecordとかは便利。
あたりが参考で出ていたような気がする
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)という意味 リクエスト・レスポンスの改ざん
iPhone ↓ OS Xのmitmproxyを実行 ↓ サーバ
2013のpythonのアドベントカレンダーにいろいろかかれている 〜〜〜 インストール設定 ~アドベントカレンダーにあるらしいので以下略
ごにょごにょ終わったら safariをひらいて 証明書を入れる
- 感想 重くするだけだったらiOSだと8から?できるようになったような気がするし、chromeとかだと重くできたりするのでandroidもできる(ときいた)のだけど requestの80%を破棄するような設定とか、柔軟に設定できるのはいいなーと思った。 本当に80%つながらないような状況で、実際にうごくかどうかってちょっと不安だし。
AcriveAdminの布教
redmineのtwitterらいくなプラグインとかつくっている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の紹介
おわり。