カテゴリー別アーカイブ: 勉強会

関西Ruby会議に行ってきた


話を聞いていたから、ほとんどメモはなかった。
すごいざっくりとした感じ。。
久々にこういう大きめのカンファレンスに出て、気持ち的なモチベーションは上がった!!

関西Ruby会議2017

フリーソフトウェア開発

Rubygem開発の流儀

‘何か考えて形にしてリリースする’ ということにハードルがある

  • 困っていることを正確に把握する
    • なんのせいで不便になっているのか
  • 開発に関わる手間が少ない方がいい
  • 運用コストが低い方がいい
  • 原動力
    • 日常の怒りや不満を言語化すること
    • 何がツライのかを説明できること
  • 引き出しを増やすこと
    • 頭のインデックスに引っ掛けるようにする
    • リファレンスマニュアル
    • 抽象化にはデザパタの知識は役に立つ
    • 既存のソースコードからパクる(ライセンスは確認)

CoderDojoを支えるRailsCMS活用事例

CMSのツールとしてよさそうだなぁー

18年でRubyから学んだこと

伽藍とバザール

isucon6 の予選に出てきた


タイトル通りはじめてisuconに参加しました。チームメイト2人が体調不良ということもあり、体調を整える重要さも気づきました。
結果から言うと、タイトル通り予選に出場して終わったという感じでした。

まず、Azureということで運営の方から用意された、VMを作成するテンプレートをデプロイした所 over limit quata
というエラーが出て何度やってもデプロイできない状態でした。
原因は練習用に立てていたVMをそのままの小押しておいたのですが、そのVMのCPU数と競技用のVMのCPU数の総数が無料枠からオーバーしているようでした。練習用のVMを削除したらその後は難なく立ち上げられました。

初期スコアを図ったら4000超位がスタートでした。
Rubyの実装に変えたり、nginxでの静的配信に変えたりして細いインフラのチューニングをやっていましたが、、そんなに効果はなく。。。

ざっくりプロファイリングの仕方などは事前に確認していたのでalpとかを使ったり pt-query-digest を使ってボトルネックを探すというのを初めた所、遅いのは トップページ(/) や キーワードページ(/keyword) というところは判明しました。

DBにインデックスはるなどの微調整できるかと考えていたりしましたが、特にこれと言って効果が出るのもなく。。。
チームメンバーがキャッシュ機構を入れるということで直接サーバの方でアプリの方を修正してくれました。

その間、、自分のチューニングポイントはある程度やりきった感があって、どうしたもんかと悩んでいる時間で、実装のソースを見て、実際に動かしたいと思ったけど、サーバのアプリはチームメンバーが触っているし、下手に触るとコンフリクト起こしそうだしということで、早くからローカルで開発できる環境を整えるべきだと思いながら、ただただコード見ていました。
(このあたりはだいぶ準備不足でどのようにやっていくかなどは事前に話しておくべきだったと思います。)

キャッシュの機構ができて導入してみるものの、一瞬スコアが出るなどもありましたが、Failが多発するなどなかなかうまくいかないうちにタイムアップとなりました。
今回の問題はミドルウェアレベルのチューニングはあまり効果がなかったので、アプリをきちんと修正できるような環境をさくっと作れるような準備などをもっと考えておけばよかったと思いました。

来年もあったら参加したい!!!ありがとうございました!
そしてチームメンバーありがとうございました!

RubyKaigi 2016に行ってきた


RubyKaigi 2016 に行ってきた。
京都開催ということで美味しいものもいっぱいあったし、なにより懇親会で「まつもと」という日本酒がとてもうまかった。
技術的ことはもっと身につけないとという意識が高まったし、英語のトークが資料を見ながらふんわり理解できるくらいなのがだいぶ悔しい感じだったので、どっちももっと頑張らないとという意識が高まったのが参加したメリットだったかも。

まつもと

以下からは簡単なメモ。

スライドなどは以下のサイトにまとめられていました。動画も後日公開されるかもです。

「RubyKaigi2015」全公開済みスライドまとめ #rubykaigi | TechStars Blog

Binding(How to create bindinngs 2016)

GObject Instropection を使うのが良い
C拡張Lib だけど Bindingではないものもある。
Ruby FFI(libffi implを使ったライブラリ)

require 'gi'
GI.load

Scalable Job Queue System Built with Docker

Cookpad Barbeque というジョブキューの発表でした。
とてつももなく参考になる内容だった!!

Modern Black Mages Fighting in the Real World

fluentd1.4系の黒魔術のすごさ。。。

YAPC Asia 2013 へ参加してきた(メモ)


YAPC Asia 2013に参加してきました。初めて大型のカンファレンスへ参加しました。
単純にすごい刺激を受けました。

カンファレンス中に1つのモジュールをCPANにリリースする @tokuhirom さんとかすごすぎと思いました。
でも、とはいえやっぱりエンジニアとしてやっている以上、何か作って残していこうと思いました!!

それから数日後、初めてPull Requestが取り込まれたりして今後の1年間は積極的にオープンソースと関わったり、自分のプロダクトを出していこうと思います!!

ホント刺激になった。。。

ここからはあYAPCの時に気になったことのメモ

いまどきのカジュアルなデータベース開発

知らなかったMysql型 : utf8mb4

モダンPerlリファクタリング

  • CUIのプログラム
    モジュールをテストしやすい形に直す。
    テストから利用しやすいインターフェースにする。
    end2endのテスト(Test::Base)

  • Webアプリ
    Plack化する
    Plak::App::WrapCGIでPlack化する
    Plack化もできない場合はやはりEnd2Endのテストをする( Capybara )

  • 繰り返す
    より粒度の細かいテストを追加して、リファクタリングを進める

  • バグ
    バグを見つけたらバグを再現するテストを書く(回帰テスト)

  • 継続的に
    Travis-ci
    Guard + guard-tap
    テストは ほどほど にやる

  • リファクタリング
    リファクタリングの最初の一歩のEnd2Endのテストを書く。
    回帰テストで細かく進めていく

perl な web application のためのテスト情報

File::Temp
ファイルのアップロードなどのてすとで並列実行させたい時にアップロードするファイル名を変更する
tempfs

Programming AWS with Perl

AWS Command Line Interface とかの話

スライド:http://sssslide.com/http://www.slideshare.net/horiyasu/programming-aws-with-perl-at

AWS_CLIの使いかた
インストール方法
% pip install awscli

~/.aws/config にACCESS_KEY などを設定する

What’s new in Carton & cpanm

スライド:https://speakerdeck.com/miyagawa/whats-new-in-carton-and-cpanm-at-yapc-asia-2013

アンインストール
% cpanm uninstall Hoge

本当にあったレガシーな話

  • ログを取る
    • コメントアウトしているwarn()とか意味ない
    • スイッチ一発でログ出力したい
    • 基本はLog::Minimul
    • 本番環境にログを制御するコードを
    • 定数フラグでログ出力を制御する(if文で丁寧に細かくログ出力するコードを入れていく)
    • ログを丁寧に仕込むことで
  • mod_perlのApache::RequestをPlack::Requiestにする
  • Server::Starter
    –spawn-interval オプションでワーカープロセスの再起動を間隔空ける
    Server::Starter、Starman、Starletを使ったオレオレ運用方法
watchコマンドでプロセスの起動状況が見られる
% watch  -n 1 "ps -ef "
  • Rubyのkage

リンク集

Kansai.pm 第15回ミーティング 参加しましたー


Kansai.pm 第15回ミーティング
* 2013/2/23 14:00 -Yahoo大阪(大阪富国生命ビル27F)

ビルはとても綺麗だった。部屋も広くてとても快適に過ごせましたー!!参加した際の備忘録としてのメモ書き程度に。。。

『Webサービスのつくり方』のつくり方[@yusukebeさん]

オモロキでの仕事を7割。ボケて の開発。オモロキで爆速開発
Webサービスの作り方 著者

  • 2010年から2012年の間に執筆
  • MarkDown + Byword で執筆
  • DropBoxでファイルを共有
  • 自作アプリ「Dropdown」
    • マークダウンっぽい拡張子のファイルを Text::Markdown でWebページでプレビュー
    • WebService::DropBox を使ってDropbox内のファイルをプレビュー
  • Webサービスの作り方で書けなかった内容
  • Mojolicious推し
  • MVCモデルについて
  • Model重要・・・使いまわせる

BokeのWebアプリは以下の様なレイヤ構成になっている(上から順に高レイヤ)

  1. Bokete::Web::Controller::Boke
  2. Bokete::Model::Boke
  3. Bokete::DBx
  4. SQL::Abstract::Limit +DBI
  5. MySQL

Validationも工夫
* Form::FormValidator::Lite
* data on Model -> Data::Validator

  • AWS
    自動化、冗長化を助けてもらう
  • Cinnamon かわいい
    naoyaさんのレシピほぼまんま使っている

【感想】
WebService::DropBox(使ってみたい)
Cinnamonの評判が色んな所でいいとあるよな


MovableTypeについて[@junnamaさん]

WordPressのテンプレートとCakePHPのViewを 書ける

【感想】
MTの話ちょうど気になっていたので参考になった!!


コピペ検出器について(仮)[@goccy54さん]

動くコードを書く上でコピペが必要になるケースはある。(りふぁくたりんぐはしないとね)

PerlやJavaScriptいはコピペ検出器がない 何故無いのか??

作ってみた 

https://github.com/goccy/p5-Compiler-Tools-CopyPasteDetector

日本語での使い方


デプロイツールの作り方[@shiba_yu36さん]

Cinnamon について

有名なデプロイツール

  • Cappistrano
  • Archar

Cinnamonとは

  • perl製デプロイツール
  • perlでDSLっぽく設定を書ける

コンセプト

  • Minimum
  • Role(環境(productionなど)) + Task(実行するコマンドの単位)

Cinnamon側では サーバへのコマンド実行のみを提供。デプロイの方法は利用者に任せる

開発Tips

Net::OpenSSH 外部サーバにSSHでコマンドを実行してくれる
DSL 単なる関数 export Exporter::Lite 
Plack::Bulderを参考


全体を通しての感想

手を動かして作っていくことがいいなーと思った。なんでも手を動かして作ってみたい。ホントkansai.pmにでてやる気が出た。出張帰りと寝不足で懇親会に参加席なかったことが残念だったーー

【メモ】  

  • Milter(MailFilter)