Perl
onagatani
2012年01月16日
おはようございます。本日も帯広はマイナス14度でちょー寒いonagataniです。
昨日は半年ぶりくらいに個人的にコードを書く気力が出たのでMTプラグイン書いてみました。
(今回は完全趣味な上に業務時間外で書いているのでサポート等は会社に投げないでくださいませ。質問はTwitter@onagatani)
できることは少なくてDropboxにMySQLDumpを保存するだけです。
何が嬉しいかというとクラウド上にデータを保存するだけでなくDropboxの機能でクライアントAppを入れたPC全てで
データを同期するので、サーバ機で破損等あった場合でもほぼ100%データが復元できる事です。
逆にまだ実装していない機能として、MTのコンテンツを複数サーバ間で同期する機能があります。
こちらはコンテンツをバックアップしつつ、lsyncの様な使い方ができそうなので鋭意作成中なので検証完了しましたら公開させて頂きます。
使い方
-
以下のCPANモジュールをインストールして下さいWebService::Dropbox、Time::Piece(例:curl -L http://cpanmin.us | perl - WebService::Dropbox Time::Piece)
-
Dropbox.plをMTのpluginsディレクトリに設置して下さい
-
Dropboxのアカウントを作成しこちらのページでアプリケーションの登録を行なって下さい(アプリケーション名等は自由に設定して下さい。アクセス権限はフルアクセスでもディレクトリ制限有りでも どちらでも問題ないはずです)
-
アプリケーション登録を行ったら AppKeyとAppSecretをMTに登録して下さい(システム->ツールメニュー->プラグイン->Dropbox->設定
-
Key、Secret登録が完了したシステム->ツールメニュー->dropbox authを押下して下さい。先ほど登録したDropboxアプリケーションへ認証を許可します。許可するとMTのダッシュボードへリダイレクトされます
-
4の設定画面でデータベースバックアップを保存ディレクトリを指定します。事前にDropboxにディレクトリを作成して下さい(例:mtbackup)
-
以上でrun-periodic-tasksが一日に一回MySQLDumpをDropbox上に保存する用になります。dumpファイルはgzipにて圧縮保存されます
設定項目(mt-configに記述する例です)
-
MySQLDumpPath /usr/bin/mysqldump
-
GZipPath /usr/bin/gzip
ダウンロード
Dropbox01.zip
ライセンス
-
個人での利用はご自由にお願いします。但し問題があっても責任はもてません。
-
企業での利用は何か問題があっても責任が取れないので事前にご連絡下さい。
注意
-
CentOS5.6のMySQLサーバでのみ動作確認をしております。WindowsやMySQL以外のデータベースでは現状動作しませんので注意して下さい。要望あればWindowsや他DBに対応しますので@onagataniまで連絡下さい。
-
保存されるファイルのローテーションは現状実装されていません。ご自身で定期的に削除して下さい
-
本番環境に設置する前に事前に検証環境での動作確認を行なって下さい
-
Dropboxにファイルをuploadするために/tmpを利用します。バックアップファイルが設置される空き容量が一時的に必要になります
onagatani
2011年09月30日
みなさんこんにちわ。最近体調くずしまくりで昼飯代が浮いて喜んでいるonagataniです。
今年もやってきましたYAPC::Asia今年もskyarcはスポンサーをしております。
skyarcでは製品開発・ソリューション共にperlで開発を行っていますが、いつも恩恵に預かるばかりで貢献できていないよね、
ということで昨年度から可能な範囲でJPAやYAPC::Asiaのスポンサーに積極的に取り組ませて頂いています。
今年からJPAではゴールドスポンサーになり、YAPC::Asiaでは広告など出しております。
また、変わった所では「遠方からの参加者支援制度」をJPAにお願いして開始して頂きました。
この制度はYAPC::Asiaで発表したいんだけど地方に住んでいるのがお金が、、、という学生さんや社会人の方にも発表して頂き地方からもPerlを盛り上げていきたいという願いが込められています。
発表者の方は「Skyarc System presents 招待 LT」 という枠にて5名の方に発表して頂きます。
(タイムテーブルに社名がでるとは思わなかったので、JPAさんサプライズに感謝です!)
ちなみに今年も弊社から「Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームを作ろう」というタイトルにて弊社社員である@keroyonn_さんが発表されます。
タイムテーブルには掲載されていないですが自分もスポンサー枠にて少しだけお話させて頂きます。
という事でYAPC::Asiaまであと2週間となりましたが皆様宜しくお願いいたします。
会場で@onagataniを発見したら声かけてください。友達少ないので。
onagatani
2011年08月20日
メモですがとりあえず晒します
*あくまでもメモなのでおかしな文言・間違っている内容があるかも。書くのが間に合わなかった内容もあります。あしからず
MHAについて
単一障害点をなくしたい
DENAではサーバ台数が1000台・・
MYSQLではスレーブは複数だが、マスターが1つなのでシングルポイントになってしまう。
マスターが障害を起こしたときに、全ての情報が全てのslaveにバイナリログを渡していない可能性がある。
正しく復旧するには、マスターのバイナリログの最終更新を拾い出し、slave間の差分をなくす必要がある。
MHAは。。。
Managerサーバが全てのMYSQLサーバをチェック(pingするだけ)。
マスターの稼働監視から自動フェイルオーバーまでを行なうツール。PurePerl。
秒単位でできる(アクティブ・アクティブ型なので)。
任意のスレーブを新マスターにできる
外部スクリプトを呼ぶ拡張ポイントがある
- 複数の経路(NW)から本当にマスターが死んだか検証
- 強制電源OFF
- マスターIPアドレスの更新
MYSQL5.0以降で動作
導入にはプロセスの停止は必要ない
パフォーマンス劣化はない
ストレージエンジンに依存しない
--- 中略(電話に出てる間に話がわからなくなる)---
デモ
--- 中略(電話に出てる間に話がわからなくなる)---
任意のスレーブをマスターにできる
準同期レプリを使うとほぼデータのロストがない
マスターを他のサーバに移したい事はよくある。
ダウンタイムなしでマスター切り替えがしたい。
マスターの更新を止める、スレーブの同期をまつ
それらを0.5秒くらいでできればいいかも
書き込みのブロックは?
MYSQLの更新ブロックは全てが安全ではない
アプリケーションから使っているユーザをdrop
新規セッションがはれないくなる
接続済みのセッションは切断までエラーにならず
=>この話はOSCでも聞いたんですが、非常に納得しました
MHAだと手動でマスターを切り替える機能がある!!!
QA
MHA Managerがおちたらどうする?
ManagerをHertBeatしてpeacemakerとか。
小林
2011年07月27日
こんにちわ、小林です。
こっちのブログに顔を出すのは久々なのですが、関東圏外のPerlエンジニアの方に朗報です。JPAさんが関東圏外のエンジニアの方がYAPC::Asiaに参加しやすくする制度「遠方からの参加者支援制度」の申し込みを開始しました。
YAPC::Asia 2011 「遠方からの参加者支援制度」申し込み者募集のお知らせ
この制度は以下の条件を満たせば、各地域からの交通費を全額負担するという新しい試みです。
-
感想などのBlogエントリを書く
-
地域LT枠でのトーク
-
YAPCに参加したい!という熱い気持ち
スカイアークのエンジニアはすべて北海道在住なのですが、社内ではYAPCにいかせろ!というプレッシャーが強く(笑)、昨年技術支援予算というもので自由に東京に出入り出来る制度を作って、関東圏のセミナーなどに参加しやすくしています。
北海道のエンジニアにいろいろ話を聞いていると、なかなか交通費の関係で関東圏に行きづらいという話をよく耳にしていたので、何かできないかなぁと思っていました。あと@onagataniの「もっとYAPCに行きやすく出来ないか!」という熱い想いもあり、今回JPAさんの「遠方からの参加者支援制度」に協賛いたしました。
この協賛を通じて北海道はもちろん、それ以外の各地域のPerl振興に少しでも力が貸せればと思ってます。
あ、もちろん弊社のエンジニアは会社の技術支援予算で参加しますので枠が狭まることは御座いません、ご安心くださいw
それではみなさん、ふるってご応募・ご参加ください−!
谷内
2011年07月20日
谷内@帯広です。
7月16日土曜日、Hokkaido.pm に参加してきました。
Hokkaido.pm では毎回、さらに今年は OSC、昨年は YAPC::Asia にも参戦して発表をしてきましたが、LT(Lightning Talk)形式は初めてでした。
LTは5分間という枠内で、技術的な内容に加えて「ウケ」が重視した発表が求められます。
またトリを務める上に、体調も思わしくなく緊張しました。
お題は「Perl meets 次世代ゲームコンソール」です。
CUI上で ASCIIアートではなく、スプライトを使ったグラフィカルなゲームを作るという内容です。
上の動画の3分52秒あたりで「マ○オ」もどきが動くデモが見られます。
利用している技術は以下です。
- イベントループ ... AnyEvent
- リアルタイムキースキャン ... Term::TermKey、AnyEvent::TermKey
- サウンド ... Audio::Beep
- グラフィック ... Curses
- スプライトクラス ... Mouse、Data::Section::Simple
ポイントは以下です。
- AnyEvent(AE::timer) で、毎秒30フレームとなるように画面更新を行う
use AnyEvent;
my $t = AE::timer 0, 0.033, sub { "Curses の erase/addstr/refresh 処理など" };
my $cv = AE::cv;
$cv->recv;
AnyEvent::TermKey で、非同期にキー入力を待ち受ける
use AnyEvent::TermKey;
my $kw = AnyEvent::TermKey->new({
term => ¥*STDIN,
on_key => sub {
my ($key) = @_;
if ($key->utf8 eq 'h') { "移動処理"; }
},
});
Curses を使って色と座標を指定し、ターミナル画面上にドットを出力する
Mouse を利用して、汎用的なスプライトクラスを作成する
Data::Section::Simple で、スプライトとして出力するビットマップデータを読み取る
Microsoft Excel で、キャラクタパターンのモデリングを行う
これはあくまでもネタですので、このまま大きなゲームを作成すると破綻すると思います。
また、衝突判定などもいちいち自力で書かないといけません。
この辺の課題は、今後 Games::CUI という汎用的なゲーム作成ライブラリを開発してクリアしようと考えています。
モノになったらエンジニアブログにて、サンプルゲームととも公開しますので、お楽しみに!