まさかろぐ

プログラムのこと、DTMのこととか

Photoshopで画像に色ずれ効果を与える方法

Photoshopではチャンネルごとに移動ツールを使うことで、上のような色ずれのある画像を簡単に作ることができます。

続きを読む

[PHP]CodeIgniterでのDBトランザクションのネスト化について

CodeIgniterでは、DBへの登録・更新などを$this->db->trans_start();$this->db->trans_complete();で囲むことでトランザクションを張ることができますが、この機能は内部でネストの深さをカウンタで記録しているため、ネスト化して使用することが可能です(CodeIgniter2, CodeIgniter3で確認)。

通常のトランザクションを用いる関数例

例えば、単純な送金システムを設計する際、CustomerというModelに送金先へ残高を移動する以下のような関数を作成するとします。

public function execute_payment($source_id, $dest_id, $price) {
    // トランザクションを開始
    $this->db->trans_start();

    // 送金元から残高を引く
    $this->db->set('balance', 'balance-'.intval($price), false);
    $this->db->where('id', $source_id);
    $this->db->update('customers');

    // 送金先へ残高を加算
    $this->db->set('balance', 'balance+'.intval($price), false);
    $this->db->where('id', $dest_id);
    $this->db->update('customers');

    // トランザクションを終了
    return $this->db->trans_complete();
}

この例では、トランザクションを張っていることによって、残高を引く処理・加算する処理のいずれかでエラーが出た場合にトランザクション開始時の状態へロールバックされるようになっています。

これにより、片方だけ実行される(残高が引かれたのに送金されていない)という事態を防ぐことができ、データの整合性が保たれます。

ネスト化されたトランザクションを利用する例

上で挙げた関数では$this->db->trans_start();$this->db->trans_complete();を利用していますが、これを含む関数を複数個トランザクションの中に入れたい場合があります。その場合も、特に気にせず$this->db->trans_start();$this->db->trans_complete();で囲めば良いだけです。

すなわち、以下のように記述しても問題ありません。

$this->db->trans_start();

/* 何かしらのDB操作① */

$this->db->trans_start();

/* 何かしらのDB操作② */

$this->db->trans_complete();

/* 何かしらのDB操作③ */

$this->db->trans_complete();

このように記述した場合でも①~③すべてのDB操作が正常に実行されたときのみDBの状態が更新されます、どれか1つでもエラーが起きた場合は①~③の変更はすべてロールバックされます。

例えば、複数個の送金がある場合でも、以下のように書けばそのすべてでエラーが起きなかった場合のみDB更新が反映されます。

// トランザクションを開始
$this->db->trans_start();

// 複数件の送金処理
$this->customer->execute_payment(1, 2, 100); // 1番口座から2番口座へ100円移動
$this->customer->execute_payment(1, 3, 100); // 1番口座から3番口座へ100円移動
$this->customer->execute_payment(1, 4, 100); // 1番口座から4番口座へ100円移動

// トランザクションを終了
$this->db->trans_complete();

この例では、トランザクションを張ることにより3件の送金処理が全件成功した場合のみDBが更新されるようになっています。

なお、$this->db->trans_start();$this->db->trans_complete();は必ずしもDB操作を行うModel内に記述する必要はなく、別途Customerモデルにトランザクションの開始・終了のみを行うメソッドを実装するといった必要はありません。

ただし、Controller内で$this->dbを利用する際には、必要に応じて$this->load->database();をコンストラクタまたは各メソッドで呼び出すようにしてください。

 

FL StudioをAmazon最安値より約6500円安く手に入れる方法まとめ

先に結論を

1. まずこれを買う 2. 次にこれを買う 3. 約6500円浮く

最安値はだいたいの場合Amazon

FL Studio 12を国内で購入する場合、多くの場合はAmazonで購入するか、楽器系のネットショップで購入することになります。
この記事を執筆している2017/10/08現在、フックアップ社のサイトで紹介されている購入先の5店舗と比べてAmazonが最安値となっているので、一番安く購入するならAmazonで購入することになります。

(なお、FL Studioには安い順に「Fruity Edition」「Producer Edition」「Signature Bundle」「All Plugins Bundle」という4つのエディションがありますが、国内で購入できるのは基本的に「Signature Bundle」のみになります。ただ、そもそも「Fruity Edition」はwavファイルが貼れなくて論外ですし、「Producer Edition」はSytrusなどの主要音源がなかったりするので「Signature Bundle」で問題ないと思います。)
追記(2017/10/08):
2015年4月の時点で「Producer Edition」にもSytrusはバンドルされるようになっていたようです。コメントでのご指摘ありがとうございます。「Producer Edition」を公式から米ドルで買うとACID+「Signature Bundle」クロスグレード版より2000円ほど高くなるので、いずれにしても候補としては挙がらないと思います。

FL Studioには他社DAWからの乗り換え用の「クロスグレード版」がある

FL Studioには「通常版」のほかに「クロスグレード版」というものがあり、「通常版」に比べ「クロスグレード版」の方が安い価格で販売されています。

↓ 通常版 ↓ クロスグレード版

「クロスグレード版」とは、他のDAW(作曲ソフト)を持っている人向けに安い価格で販売しているバージョンで、内容は通常版と全く同じです。もちろん新しいバージョンを永久無料で使える「Life Time Upgrade」も通常版と同様に使えます。他の作曲ソフトからFL Studioへ乗り換えてもらいたいことから安く販売されているわけです。

ただし、クロスグレード版を購入した場合、ライセンス登録の際にそれまでにFL Studio以外の作曲ソフトを持っていたことの証明として、購入日やライセンスキーなどを記入する必要があります。
そのため、クロスグレード版のみを単体で買ったとしても、ライセンス登録することができません。

Sony ACIDを先に買ってFLのクロスグレード版で乗り換えた方が、FL通常版より安い

上で述べたとおり、新規で購入する場合はクロスグレード版を利用することができません。しかし、先に別の安いDAWを買ってからクロスグレード版で乗り換えることで、通常版を買うより安くFL Studioを手に入れることができます。
FLへのクロスグレードのために先に購入するDAWは、Sonyの「ACID Music Studio 10」です。

「ACID Music Studio 10」は 元々1万円以上するソフトだったので、FL Studioのクロスグレード製品の対象になっていました。しかし、後にACIDが半額未満に値下がりしたことで、むしろACIDを買ってからFLに乗り換える方が安くなるという奇妙な状況が生まれました。

ACID付属の音声素材(wavファイル)なども付いてくるので、安くなる以上のメリットもあります。

フックアップ社(FL Studioを売ってる日本代理店)が出しているクロスグレード対象製品一覧には「Sony Creative Software : ACID / Vegas」としっかり明記されているので、ACIDからは問題なく乗り換えできます。

どれだけ安くなるか

この記事を執筆している時点で、FLは¥28080(通常版)、¥16416(クロスグレード版)、ACIDは¥5105なので、

  • FL通常版
    • ¥28080
  •  FLクロスグレード版+ACID
    • ¥5105 + ¥16416 = ¥21521

すなわち、¥28080 – ¥21521 =¥6559 となり、合計で6559円も安くなることがわかります。

※クロスグレード版での価格が同価格だったので、解説本pdfバンドル版の価格で計算しています

結論(再掲)

1. まずこれを買う 2. 次にこれを買う 3. 約6500円浮く

補足: クロスグレード版購入後の申請方法

FL Studioクロスグレード版には、クロスグレード申請用紙という用紙がパッケージに入っています。これに必要事項を記入して、FAXまたは郵送でフックアップ社へ送付するとクロスグレード申請完了となります。

用紙には特に期限などは書かれていませんでしたが、購入後なるべく早く送った方が良さそうです。(私は3ヶ月後に送りましたが…)

なお、クロスグレード版は日本代理店が開発元とは別に管理しているようなので、クロスグレード申請とは別に開発元のImage-Lineへの通常のライセンス登録も必要になります。お忘れなきよう。

電通大CampusSquareで毎回「情報理工学部」が選択されるようにする方法

電通大の2016年度からの改組によって、学務情報システム(CampusSquare)で毎回「情報理工学域」が選択されているのを「情報理工学部」に選び直す必要が生じ始めました(2年前から)。

シラバスを見たりする際に流石に面倒なので、ページを開いたときに自動で「情報理工学部」を選んでくれるGreaseMonkeyスクリプトを作成しました。

→ インストールはこちら

※インストールにはあらかじめブラウザにGreaseMonkeyのプラグインを導入している必要があります。

VSTで「msvcr90-ruby191.dllが見つからない」と言われる場合の解決策

「Retro Boy」などのVSTプラグインをdll単体でダウンロードしてインストールした際に、以下のようなエラーが出ることがあるようです。

エラー

msvcr90-ruby191.dllが見つからないですよ~、と言われています。

解決策としては、「C:\Users[ユーザー名]\AppData\Roaming」ディレクトリに「msvcr90-ruby191.dll」を入れれば良いようです。
(VSTプラグインのディレクトリやsystem32ディレクトリなどに入れても上手く行かないので注意)

自分で「msvcr90-ruby191.dll」を見つけてきてダウンロードしてきても良いのですが、「Retro Boy」のv1.0.3以降のバージョンをインストールすると「msvcr90-ruby191.dll」も一緒にインストールされるようになっているようなので、こちらをインストールするのが楽で安全かと思います。

以下のリンクからダウンロードしてインストールすれば解決するはずです。
https://sbaud.io/retro-boy-vst-plug-in/

ブログをリニューアルしました!

新しくブログをサイト内に開設しました!

以前のブログの内容は残しておく予定ですが、今後はこちらで更新を行いたいと思います。

旧ブログ: 「masakaブログ」(FC2ブログ)

© 2016-2017 M'z Koo-boo.