そういえば去年掘ったあれ、今いくらになってんの?
最近はビットコインやらマイニングやら流行っておりますが、そう言えば去年マインングにチャレンジしていました。
この記事で試しに掘ったBytecoinの件ですね。
qiita.com
去年のスクショがこちら。
はい、そのまま放置していましたが、これが今年のスクショ。
当然、放置していたのでコインの枚数は変わりませんが、、、
0.00038125 EUR => 0.01301568 EUR
おっ??
1年間でコインの価値が上がったようですね。
1年前にこの発言をしている自分を責めたい
1ヶ月に換算したら10ユーロ近いよ!全然ペイしてるよ!
このサーバー 一ヶ月0.66ユーロだからね!
ということで、将来性を見抜けなかった自分の負けですね。
そのまま掘り続けていれば、単純計算で120ユーロくらいになっていたようです。
一般的なエンジニアスキルにも言えますが、
将来流行るであろう技術を如何に先攻して習得していくかどうかってのが鍵なんだろうなー。
複数のRDSから1台のEC2にレプリケーションをする方法 複数MySQL編
以前こんな記事を書きましたが、もうちょっといい方法を思いついたので更新。
qiita.com
そもそもマルチソースレプリケーションが辛いところ
MySQLがトラブると全部アプリケーションのレプリが止まる
レプリケーション元が大量にある場合、セットアップだけでも結構な時間を要する。
せっかく設定が終わったのに、その段階でMySQLレイヤーでのトラブルが起ると辛い。MySQLがstopもしくはクラッシュしてデータが壊れた場合、全ての設定をやり直す羽目になる。
一つだけ止めるといったことができない
MySQLのパラメータを更新したい場合がある。オンラインで変更可能なものもあるが、MySQLの再起動を必要とするものもある。
全てのデータベースが一つのMySQLに乗っていると、MySQLのstop/startの作業とパラメータの反映も全てのデータベースに波及する。
全部同じMySQLのバージョンとパラメータで起動する
アプリケーションによってはMySQLのバージョンが違ったり、パラメータを変えたかったりするかもしれない。
そういったことは、マルチソースレプリケーションでレプリケーションをうけるのは不可能になる。
レプリケーションのCHANNEL管理
10個くらいチャンネルが増えてくると結構めんどくさいことに。
たまーにレプリケーションが止まった時に、エラーになったクエリだけskipしたかったりするのだけど、channel対応していないコマンド(変数)があるとかなり管理が面倒になる。
SQL_SLAVE_SKIP_COUNTERとか。
Auroraが5.7ベースではない
マルチソースレプリケーションはMySQLの5.7からサポートされている機能だが、レプリケーション元としてAWS Auroraを利用している場合バージョンの不一致が起きる。
データを閲覧するだけであれば実際に大きな影響はないのだが、index系の調査でEXPLAINを打って実行計画を確認したり、実際にindexを貼ってみてクエリのパフォーマンス改善具合を確かめる時にオプティマイザの挙動が異なるために望んだ結果が得られない場合がある。
実際に、slaveでは問題なくindexが効くのに、実際のmasterのauroraでは早くならないという場面に出くわした。
ただし、JOINはできなくなる
1MySQL上に複数のデータベースがあることで解決する一つの問題はJOINができるということだと思う。
当然webアプリケーションのようにクエリのパフォーマンスが求められるところでは使うことはないとは思うが、分析などクエリのパフォーマンスを求めないようなところでは便利かもしれない。オススメはしない。
そこで、dockerによる複数MySQLの1台のEC2での起動を試してみた
docker-composeの利用
EC2上に複数のMySQLを立ち上げるために今回はdocker-composeを利用した。
設定をファイルに落としておけるのと、別EC2でもえいやっと一気にmysqlがたくさん上がってくれるため。
設定ファイルの例を以下に。各MySQLでポートだけずらしておき、my.cnfだけ外部ファイルを読むようにして修正可能にしている。
app1: image: mysql:5.6 volumes: - "./my.cnf.utf8mb4:/etc/my.cnf:ro" ports: - "13306:3306" environment: MYSQL_ROOT_PASSWORD: root app2: image: mysql:5.6 volumes: - "./my.cnf.utf8mb4:/etc/my.cnf:ro" ports: - "23306:3306" environment: MYSQL_ROOT_PASSWORD: root app3: image: mysql:5.6 volumes: - "./my.cnf.utf8mb4:/etc/my.cnf:ro" ports: - "33306:3306" environment: MYSQL_ROOT_PASSWORD: root
Auroraからのレプリケーション設定
このページが詳しいので割愛
docs.aws.amazon.com
課題
JOIN問題
各MySQLが別ホスト(別docker)になるのでJOINはできなくなる。
負荷問題
MySQLは別れたが、OSは同一のものを使っているのでマシンが落ちたらそれは全滅。
AWS Auroraの機能拡張
こんな機能があればAuroraだけで完結できるので、AWSさんよろしくお願いします。
あらゆるインフラの足回りをフルマーネージドで完結させたい!!
Auroraのクラスタ内で、readのendpointからは参照がこないようなreaderの作成
書き込みが可能なレプリカ
もう一つの要件として、分析用途などでは必要のないデータのマスキングをしたいという要望がある。
現時点ではレプリカに対して書き込みを行うとエラーになるので、特定のフラグが立っているレプリカだけ書き込みも許可できるようなると嬉しい。
しかし、RDSやAuroraを使い始めてからあんまりMySQLのコアな機能の詳細を追わなくなってきた感があるなあ。。
ロボットアドバイザー THEO を1年半試してみた結果
簡単に個人投資が出来るロボットアドバイザーTHEOって?
theo.blue
お金を預けて簡単なポートフォリオを設定しておくと、THEOのシステムが勝手に運用してくれるというサービス。
投資に詳しくなくても資産運用ができるというもの。
特徴は、日本円で資産を持っているリスクに対して、国際分散投資という方式を提案しているところ。
どのくらい儲かるのか?
結果を晒してみる。
1年半で+17.97%という結果に。
最初の半年間はずっとマイナスで遷移していたので、まじかい、と思っていたがその後はあれよあれよと上り調子に。
長期的な投資としてどーんと構えているのが良さそう。
ちなみに、最初の半年間はずっと円高だった為だと思われる。
その後の成長はトランプが大統領になったくらいのタイミングからでアメリカ株が好調だった為かなーと。
1年半でやった事
半年後に追加資金を投入
THEOは基本的に、日本円で持つ事をリスクと考えて海外株に投資するというスタンスなので
円高の底かなあと思ったタイミングで追加で資金を投入してみた。
運良くその読みは当たり、その後プラス転向してくれた。
(ホントはもっといろんな要因がありそうなので運がよかっただけかも?)
感想と今後
年率10%強くらいで利益をだせているので今のところ満足。
今後も定期的に資金は追加していきたいところだが、また円高になったタイミングで突っ込もうかなと思う。
最安VPS Time4VPSが安すぎた
VPS 月額0.66ユーロ
ちょっとした用事でサーバーが必要だったので安いVPSを探していたら、Time4VPSというVPSが月0.66ユーロ(約80円)という驚きの価格を提供していたので、まあ駄目元で契約してみた。
ちなみにスペックは、CPU 1 x 2.40 GHz、メモリ 512 MB、ディスク 20 GB。凄い時代だ、、、。
購入からログインまで一瞬
サインアップ後に、サーバー購入画面に進みPaypalで購入。10分もするとアクセス可能なサーバーが用意されていた。支払方法はクレジットカードでも大丈夫。
OSも標準的なものは選べるようで、今回は普段使っているubuntuにしてみた。
スペックなど
ちょっとしたjobを走らせて見ている感じ、そんなに遅い感じもしないがこれは継続的に使ってみないとちょっと分からないかなという感じ。今の所全く不満はない。
CPU4コアのメモリ8Gまでスペックがあるので、個人レベルでは十分。
ruby メタプロ method_missing使用例 - delayed_job編 -
gemをもくもくとよんでみた結果得られた物を書こうと思う。
今回はmethod_missing。
method_missingとは
rubyのメタプロ的書き方の一つ。
継承チェーンを一番上まで辿ってもそんなメソッド無いよ!って時に呼ばれる輩。
ググれば色々と出てきますが、要するに実行時に初めて存在するメソッドを呼ぶ時に便利。
delayed_jobでの使用例
delayed_jobって?
非同期にmethodを実行する為のgem。
github.com
実行方法は、Readmeに書いてある通り、レシーバーとメッソッドの間にdelayを挟むだけ。
これで、@user.activate!(@device)ごとシリアライズしてデータベースにキューを保存、daemon化しているプロセスが定期的にキューを拾って実行、とやっている。
# without delayed_job @user.activate!(@device) # with delayed_job @user.delay.activate!(@device)
method_missing使用例
まず、疑問に感じるのが、delayってどこでよんでいるのだ?と@user.delayがなんでactivateを呼べるのか?というところ
delayが呼べる理由
ここは単純だが、ObjectとModuleにincludeさせている箇所がある。
lib/delayed_job.rb
Object.send(:include, Delayed::MessageSending) Module.send(:include, Delayed::MessageSending::ClassMethods)
これもメタプロっぽいがincludeで継承チェーンに突っ込んでいる。(ObjectとModuleなので殆どのクラスは継承する事になる)
Delayed::MessageSendingにdelayがいるのではれて皆がdelayを呼べるようになる。
lib/delayed/message_sending.rb
(snip) module MessageSending def delay(options = {}) DelayProxy.new(PerformableMethod, self, options) end (snip)
activateを呼べる理由
ここでmethod_missingを使っている。
さっきのdelayの中で呼ばれていたDelayProxyを追うと
class DelayProxy < Delayed::Compatibility.proxy_object_class def initialize(payload_class, target, options) @payload_class = payload_class @target = target @options = options end def method_missing(method, *args) Job.enqueue({:payload_object => @payload_class.new(@target, method.to_sym, args)}.merge(@options)) end end
となっていて、.new以外は全部method_missingに送っているのである。
もうちょっと読み進めると、.newでレシーバーとメソッドとオプションをセットしていて
enqueueする時にそれらをセットしようとしている事が分かる。
こうやって、呼び出したいメソッドをごっそりとシリアライズしてdbにキューとしてしまっていた。
Qiita投稿 MySQL記事まとめ
最近はQiitaに投稿しています
Qiita(というかKobito)が結構便利なので最近は単純な技術系記事はQiitaに投稿しています。
おかげで今月31日だというのにこれが最初の投稿。
最近のMySQL系の記事まとめ @Qiita
はてなに投稿するよりはてぶが集まるよ笑
ギャップロックの記事は、2015/08/31現在で32、ツイートは20。
正直今まではてなで書いてきたどの記事よりも多い。笑
まあ、自分なんかの個人ブログよりもQiitaの方がSEO的に強いよね。そりゃそうだ。
とはいえ、なんだかんだでやっぱり読んでほしいし、色々な人からフィードバック欲しいのでQiitaの方が良いかなあなんて思っている最近。特に単純で短めな技術記事はQiitaが良いですね。
はてなには、この記事のようにカテゴリでまとめた記事を書くとか、
技術だけじゃなくて、個人的なメッセージなどを書く場になっていきそうかなと思う。
まあ形は変われど、アウトプットは大事なので今後も、はてな・Qiitaを続けていこうと思います。
Parse.comのAnalyticsが優秀すぎる
Parse.comのAnalyticsが相当優秀
出来る事がこんなにある
- Audience
- Events
- Data
- Retention
- Performance
- Slow Queries
- Crashes
- Explorer
運用しているアプリを例に一つ一つ紹介してみる。
Audience
Daily Active Userとか見れる。しかも期間無制限っぽい。
Data
各テーブルのカウント数が見れる。画像はUserテーブルの件数。
Retention
ユーザーのリターンレート。
Performance
リクエスト数 req/secがのグラフ。オレンジの線は無料枠のリミット。
Slow Queries
図省略。1秒以上のクエリの割合とか、90パーセンタイルのレスポンスとかみれる。結構凄い。
Crashes
図省略。クラッシュレポートが見れる。stack traceも見れる。
explorer
これはまだ使用してないのでリンクだけ。
ユーザーの行動解析などが可能になるよう。
blog.parse.com