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

クイックソート、リバース

#!/usr/bin/env escript print_list(List) -> io:format("len: ~p~n", [length(List)]), lists:foreach(fun(X) -> io:format("~p, ",[X]) end, List), io:format("~n"). quick_sort([]) -> []; quick_sort([Pivot|Rest]) -> {Smaller, Larger} = partition(P…

fluent-plugin-elb-access-logを作った

ELBのアクセスログのfluentdプラグイン、fluent-plugin-elb-access-logを作りました。 https://github.com/winebarrel/fluent-plugin-elb-access-log 既存の同様のプラグイン、fluent-plugin-elb-logとの違いは aws sdk v2を使っている タグを変更できる プ…

Raven+fluentd+Elasticsearch/KibanaでRailsの例外を集約する

SentryというPythonやRubyなど様々な言語の例外を集約して閲覧するWebサービス/OSSがあります。個々のログを検知・閲覧するにはいいんですが、全体を俯瞰して分析するならKibanaの方が良さそうだったので、Sentryに集めているログをKibanaに流してみました。…

Arproxy 0.2.0でプラグインが使えるようになった

以下のプルリクがマージされてArproxy 0.2.0がリリースされ、Arproxyでプラグインが使えるようになった。 https://github.com/cookpad/arproxy/pull/6 arproxy-plugin-stdout とりあえずサンプルプラグインを作ってみた。 https://github.com/winebarrel/arp…

miam 0.2.1.beta2 / piculet 0.2.8.beta2: JSONサポートなど

miam v0.2.1.beta2とpiculet v0.2.8.beta2をリリースしました。 miam v0.2.1.beta2 Managed Policyのattach/detachのサポート Managed Policyそのものの編集はまだサポートしていませんが、attach/detachをできるようにしました。 user "bob", :path => "/de…

MySQLCasualLog.pmがうらやましかったのでポート(?)した

2015/05/16 23:06 I/F修正 以前、MySQL Casual Talks vol.6に参加したとき、kamipoさんというすごいかた作のMySQLCasualLog.pmというPerlライブラリの発表がありまして、「いーなーいーなー、うらやましーなー。Railsでも使いたいなー」と思っていたのですが…

OS XでRFuseFSを動かす

RFuseFSはFUSEをRubyで使うためのライブラリで、内部で使っているRFuseは基本的にOS Xをサポートしていないんですが、OS Xで動かすためのプルリクエストが投げられていて、手直ししたら一応動いたのでメモしておきます。 https://github.com/winebarrel/rfus…

ridgepole v0.6.0: support AR 4.2.1

プロダクションで使ってみて一応問題なさそうなので、ridgepole v0.6.0をリリースしました。 https://github.com/winebarrel/ridgepole betaにフィードバックいただいた方々、ありがとうございましたm(_ _)m 大きな変更点としてはRails 4.2に対応しました。 …

arel-mysql-index-hintとpt-online-schema-changeでのオプティマイズについて

arel-mysql-index-hintというgemをリリースしました。 MySQL on Rails/ArelでIndex Hintを付けまくるためのgemです。 Article.hint(force: :idx_article) # => "SELECT `articles`.* FROM `articles` force INDEX (idx_article)" Article.joins(:comments).h…

Rails 4.1/Arel 5.0でコネクション切断時にスキーマキャッシュが使われない件について

Rails 4.1/Arel 5.0でactiverecord-refresh_connectionなどを使ってコネクションを切断したとき、切断後にスキーマのキャッシュが使用されない問題があったので、メモしておきます。 再現方法 以下のような簡単なRackアプリで再現できます # Gemfile: # sour…

AWS as Code!: WEB+DB PRESS Vol.85に記事を書きました

WEB+DB PRESS Vol.85に『AWS自動化』という記事を書きました。@sawanobolyさん、@muramasa64さん、@y015i(y13i)さんとの共著です。 サービスやツールを使ってAWSの運用を自動化しようぜ!という内容です。 内容 具体的な内容は以下の三本です。 CloudForma…

Cronicleというツールを作ってみた

Cronicleというツールを作りました。 http://cronicle.codenize.tools/ これは何? なんでしょうね…ジョブオンデマンド実行・定期実行管理ツール? 名前から分かるとおりcronの管理ツールなんですが、オンデマンド実行も普通にできます。 目指したのは簡易版…

fluentdとKinesisで雑にログを集める

aws-fluent-plugin-kinesis v0.3.0リリースされました。待望のPutRecords対応。 ただし、入力プラグインはまだマージされてません。風の噂によると近いリリースでマージされるとか、されないとか… https://github.com/awslabs/aws-fluent-plugin-kinesis/pul…

ridgepole v0.5.2.beta2: Support activerecord-mysql-awesome (support collate)

ridgepole v0.5.2.beta2をリリースしました。 https://github.com/winebarrel/ridgepole/tree/v0.5.2 https://rubygems.org/gems/ridgepole/versions/0.5.2.beta2 ベータバージョンなので--preオプションを付けてのインストールになります。 近日中に正式版…

Codenize.tools

DSL関連のツールをまとめて、Codenize.toolsという名前をつけました。 http://codenize.tools/ 以後お見知りおきを。

Poor man's website monitoring service

Webサイト監視サービスは山のようにあるんですが、Uptime RobotとStatusCakeがいい感じです。 どちらもFree planで監視数が多い Free planで基本的な機能が提供されている HTTP/HTTPS/Ping/Port… 「HTTPSは有料」というのが国内だと多いように思います ペー…

2014年の振り返り

(自称)クラウド型言語 Clalaを発表してきた

Lambdaによるクラウド型言語の実装 from Sugawara Genki AWS Lambda Meetup #0というイベントで、(自称)クラウド型言語 Clalaを発表してきました。 winebarrel/clala winebarrel/clala · GitHub 全然ネタがなくて休日を2日ほどつぶして作ったんですが、全然…

node: コルーチンで同期的に処理する

nodebrewでv0.11.14をインストールしたら、コルーチンが使えるようになったのでとりあえずメモ。 #!/usr/bin/env node --harmony var AWS = require('aws-sdk'); var ec2 = new AWS.EC2(); var main = (function*() { yield ec2.describeInstances({}, funct…

AWSのAPIのテストのつらみ

AWSを管理するツールをいくつか作っているが、たまにテストがめんどくさくなる。 具体的に言うとついさっきPiculetのテストが壊れた。 原因はRoadworkerのPrivate DNS対応をテストするためにいくつかVPCを作ったら、それがPiculetのテストと競合して「こんな…

PostgreSQLカンファレンス2014に行ってきた

先日、PostgreSQLカンファレンス2014に行ってきたのでメモ。 NTTデータと PostgreSQL が挑んだ総力戦 大規模案件にPostgreSQLを投入した話。 案件 開発者1000人規模 10M step DB規模 1インスタンス/〜10TB DBアクセス 200TPS〜 ミドルウェア RHEL 6.2 Postgr…

AWS Lambda: JavaScriptの関数をLambdaの関数として動かす

JavaScriptの関数をLambdaの関数として動かすlamblegというモジュールを作った。 https://www.npmjs.org/package/lambleg https://github.com/winebarrel/lambleg 使い方 var Lambleg = require('lambleg'); var lambleg = new Lambleg({ region: 'us-east-1…

AWS Lambda: context.done()の中身

context.done()の中身が気になったので、ちょっとソースを出力してみた。 exports.handler = function(event, context) { console.log(context.done.toString()); }; 2014-12-01T14:37:21.597Z 8813aa33-7967-11e4-9b88-b730c83d5e8a function (err, message…

S3をgitのリモートリポジトリにする

3年前の話題が自分的に再燃したので、ブログを書く。 要約 jgit(パッチバージョン)を使うとS3をリモートリポジトリにできます gitのカスタムコマンドを作るとさらにシームレスに連携できます jgit jgitはJavaで実装されたgitでEclipseのプラグインなどで使わ…

AWS Lambdaについて気になること

AWS Lambdaについて気になることをつらつらと。 Amazon SNSサポート Amazon SNSのイベント通知がサポートされていないのが謎。ユースケースを考えると夢がひろがりんぐだと思うのだが、以外とそうでもないのだろうか…?同じ疑問を持っている人も多いと思う。…

AWS Lambda: 任意のシステムコマンドを実行する

Exploring The AWS Lambda Runtime Environmentが興味深かったので、任意のコマンドを実行してみた。 lambchopで以下のtest.jsを実行。 #!/usr/bin/env lambchop /* function_name: test role: arn:aws:iam::123456789012:role/lambda_exec_role handler: te…

AWS Lambda: バイナリデータをイベントとして送る

以下のツイートが興味深かったので、ちょっと検証してみた。 @shot6 Lambdaってイベントストリームに画像バイナリ流せるのですか?それおもしろい。。— Kazunori Sato (@kazunori_279) 2014, 11月 14 送信側Rubyスクリプト バイナリを直接送信することはでき…

AWS Lambda: aws-sdkで自分自身にイベントを送る

『Lambdaの無限ループ』を読んで、aws-sdkで自分自身にイベントを投げることができそうだったのでやってみた。 test.js #!/usr/bin/env lambchop /* function_name: test role: arn:aws:iam::123456789012:role/lambda_exec_role handler: test.handler */ v…

AWS LambdaでMySQL(RDS)に接続する

AWS LambdaでMySQL(RDS)に接続できるか試してみた。 テストスクリプト ※あいかわらずlambchop使ってます。超便利! test.js #!/usr/bin/env lambchop /* function_name: test role: arn:aws:iam::123456789012:role/lambda_exec_role handler: test.handler …

AWS Lambdaで外部のURLをたたく

lambchopができたので、AWS Lambdaでいろいろ試行錯誤中。 以下のようなスクリプトを立ち上げて、echo '{}' | lambchop-cat testでイベントおくってやると、外部のURLをたたけた。 #!/usr/bin/env lambchop /* function_name: test role: arn:aws:iam::82299…

lambchop 0.0.2: Invoke AWS Lambda function from local as normally script

AWS LambdaのLimited Previewが使えるようになったので、デバッグ用にローカルからさくさく実行できるツールを作ってみた。 lambchop 0.0.2 https://github.com/winebarrel/lambchop shebangに「#!/usr/bin/env lambchop」と書いておくと、マジックコメント…

DynamoDB Streamsを触ってみた / ツール作った

なぜかDynamoDB StreamsのLimited Previewの利用申請が通ったので、DynamoDB Streamsを触ってみ…ようとしたが、 何をするにもAPIたたくのは不便なので、とりあえず各種ツールを作った。 ddbcli 0.4.2.beta2 https://github.com/winebarrel/ddbcli/tree/dynam…

Ridgepole 0.4.10

利用され具合がいまいちよく分からないのですが、Ridgepole 0.4.10をリリースしました。 https://github.com/winebarrel/ridgepole 変更点 テーブルのリネーム時にdry-runをするとこける不具合を直しました 以上です。 Fixの副作用として、dry-run時にshow/s…

Roadworker v0.5.2: Private DNS対応など

Route53管理ツール「Roadworker」の v0.5.2 をリリースしました。 https://github.com/winebarrel/roadworker 主な変更点は以下の通りです。 Private DNS対応 --target-zoneオプション追加 マジックコメント出力対応 Private DNS対応 以下のようなシンタック…

DynamoDBの前にキャッシュを置こうとした話

最初に断っておくとこれは懺悔のエントリです。 スライド: DynamoDBのまえにキャッシュおく奴 AWS Casual Talksでのグタグタな発表申し訳ありませんでした! (あと、マイク持っていただいた @takipone さん、ありがとうございます。AWS Advanced User Meetu…

ddbcli 0.4.0

https://github.com/winebarrel/ddbcli ※最初に断っておくと、菊水を飲みながらコードを書いていました。今はタカラcanチューハイに移ってます。バグ報告をお待ちしています ※0.4.1をリリースしました これは何? Amazon DynamoDBのインタラクティブcliです…

Gratan: MySQL権限管理ツール

いつものアレです。 https://github.com/winebarrel/gratan 以下の様なDSLでMySQLの権限を管理します。 require 'other/grantfile' user "scott", "%" do on "*.*" do grant "USAGE" end on "test.*" do grant "SELECT" grant "INSERT" end end user "scott"…

Mechanism of Gossip protocol

社内勉強会で発表したので貼っておきます。 2014 09-23 Mechanism of Gossip protocol from Sugawara Genki

Ridgepole 0.4.8.rc2: 外部キー対応

Foreignerを使って外部キーに対応してみました。 https://github.com/winebarrel/ridgepole/tree/v0.4.8#foreign-key ※インストール時、要--preオプション 使い方 create_table "parent", force: true do |t| end create_table "child", id: false, force: t…

Ridgepole 0.4.8.rc1: executeを追加してみた

スキーマ管理ツール Ridgepole にexecuteメソッドを追加してみました。 https://github.com/winebarrel/ridgepole/tree/v0.4.8#execute rc1なのでインストールする場合は--preオプションが必要になります。 使い方 executeを使ってforeign keyを貼る例です: …

Amazon Linux用 redis 2.9.999-9150a68493f4627a rpm

作ったので置いておきます。 redis-2.9.999-9150a68493f4627a

Amazon Linux用 redis 2.8.14 rpm

ビルドしたので置いておきます。 redis-2.8.14

zabbix-client 0.0.1

深遠な理由によりzabbix-client 0.0.1をリリースしました。 https://github.com/winebarrel/zabbix-client これは何? Zabbix APIのRubyクライアントです。 既存のRubyクライアントはいろいろあるんですが、ちょっと使いにくいので車輪の再発明をしました。 …

検証用にfluent-plugin-dynamodb-altを作った

検証用にfluent-plugin-dynamodb-altというのを作りました。 検証用なので、RubyGems.orgには未登録。積極的にメンテナンスする気はないです。 →諸事情により割と積極的にメンテしてます fluent-plugin-dynamodbの微妙な点 PKがかぶる BatchWriteItemでExpec…

CloudWatch Alarm/Logs管理ツールを作った / CloudWatch Logsについて

CloudWatch Logsを本格的に使いたかったので、CloudWatch Alarm/Logsの管理ツールを作りました。 また、その過程でCloudWatch Logsについていくつか知見がたまったのでメモしておきます。 Radiosonde: CloudWatch Alarm管理ツール https://github.com/wineba…

GitHubを使った複数人でのスキーマ管理 on Rails

要約 Chefみたいなスキーマ管理ツール(Ridgepole)を使うと、GitHubを使ったワークフローでスキーマを管理できる(と思います、たぶん) RailsのMigrationsについての問題提起 Migrationsは便利な仕組みですがベストではないと常々思っていました。 具体的…

Ridgepole 0.0.1

Ridgepoleというスキーマ管理ツールを作りました。 https://bitbucket.org/winebarrel/ridgepole デモを見ればわかると思いますが、RailsのDSLでスキーマを定義してその通りにDBを変更するものです。(Chef/Puppetのごとく) Migrationはいまいちなので、こ…

以前の資料を貼っておきます

ナウなヤングにCloud Formationが流行ってほしい from Sugawara Genki

Drone on AWSのテンプレート書いた

Kumogata 0.4.8で動作確認。 以下のコマンドで、インスタンス・セキュリティグループの作成とdroneのインストールまで行う。 kumogata create \ https://gist.githubusercontent.com/winebarrel/9872697/raw/drone-template.rb \ my-stack \ -p "KeyName=you…

コマンド一発でAWSにMHA検証環境を作成する

Kumogataのデモです。 テンプレートを使ってコマンド一発でMHAの検証用サーバ群をAWS上に構築します。 https://bitbucket.org/winebarrel/mha-example-for-aws/src/use_kumogata 作業手順 gem install kumogata # Set Admin IAM Key export AWS_ACCESS_KEY_I…