page_adsence

2014年2月4日火曜日

Apacheの条件付きログ

Apacheの条件付きのログを残す方法。

例えば、ドメインは一緒だけど、一階層目のディレクトリでサイトが異なる場合。

http://hogehoge.co.jp/a/
http://hogehoge.co.jp/b/

こういった場合に普通にバーチャルホスト切ると、
ログファイルが一緒になってしまい、混乱を招くので条件によってログファイルの出力先ファイルを変更するようにしました。

最終的なバーチャルホストはこんな感じ
<VirtualHost *:80>
    ServerAdmin admin@hogehoge.jp
    DocumentRoot /path/to/dir/web
    ServerName hogehoge.jp
    ErrorLog /path/to/dir/logs/error_log

    SetEnvIf Request_URI "^\/site_a.*$" a_log
    ErrorLog /path/to/dir/logs/error_log env=a_log
    CustomLog /path/to/dir/logs/access_log common env=a_log

    SetEnvIf Request_URI "^\/site_b.*$" b_log
    #ErrorLog /path/to/dir2/logs/error_log env=b_log
    CustomLog /path/to/dir2/logs/access_log common env=b_log
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !^/site_a
        RewriteCond /path/to/dir/web/%{REQUEST_FILENAME} -d
        RewriteCond /path/to/dir/web/%{REQUEST_FILENAME} -s [OR]
        RewriteCond /path/to/dir/web/%{REQUEST_FILENAME} -l
        RewriteRule ^(.*)$ /site_a$1 [PT]
        Alias /site_a /path/to/dir/web/

        RewriteCond %{REQUEST_FILENAME} !^/site_b
        RewriteCond /path/to/dir2/web/%{REQUEST_FILENAME} -d
        RewriteCond /path/to/dir2/web/%{REQUEST_FILENAME} -s [OR]
        RewriteCond /path/to/dir2/web/%{REQUEST_FILENAME} -l
        RewriteRule ^(.*)$ /site_b$1 [PT]
        Alias /site_b /path/to/dir2/web/
    </IfModule>
</VirtualHost>

MySQLのクエリログ出力をオンラインで変更する方法(MySQL5.1.12以降)

MySQLのクエリログの出力設定をオンラインで変更する方法です(MySQL5.1.12以降)。

まずMySQLのrootユーザーでログインします。

ログを出力するには

mysql> SET GLOBAL LOG = on;


ログ出力を停止するには

mysql> SET GLOBAL LOG = off;


ログ出力場所の確認は

mysql> SHOW VARIABLES LIKE "general_log_file";


ログ出力場所の変更は

mysql> SET GLOBAL general_log_file = '/var/log/mysql/mysql.log';


ログを出力しっぱなしにすると、ディスク容量を圧迫する可能性があるので、必要な時に出力するようにして、必要がなくなったら停止しておきます。

今更iPhoneアプリの開発を始めてみる(Objective-Cのお勉強)

前回ようやくiOS Developer Programへの登録が完了したのですが、
並行してXcodeの使い方とかObjective-Cのお勉強を進めていました。
ネットの情報でもなんとかなると思っていたのですが、どうもネットの記事を読みながらだと集中できない。
なので本を買うことに。
最終的な目標はUnityを使ってiPhoneアプリを開発することなので、iOSの本とUnityの本を買うことにしました。

とりあえずビックカメラに行って買ってきた。
今回購入した本は3冊。

「初めてのiOSプログラミング 第2版」
「詳細!Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS」
「ゲームの作り方 Unityで覚える遊びのアルゴリズム」


  • 「初めてのiOSプログラミング 第2版」
    技術書の定番オライリー・ジャパンの本。
    正直最初は難しすぎて理解できないだろうと思いつつ、まぁ詳しく書いてあるだろうから、
    足りない部分を補うために念のため購入。ちなみにXcode4系で書かれているので、現状の5    とは若干違う部分が多い。

  • 「詳細!Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS」
    この本はネットで色々調べてから買った本。
    やはり最初に一番ネックになるのはXcodeの使い方とObjective-Cの書き方だったので、
    最新のXcode5に対応している本は現状2冊しかないっぽくて、うち1冊は微妙そうだったの     で、こっちの本にしてみました。
    まだ軽くしか読んでいませんが、大分読みやすいと思います。

  • 「ゲームの作り方 Unityで覚える遊びのアルゴリズム」

    この本はサンプルアプリが幾つか用意されていて、それを作りながら学習するタイプの本で    す。
    ゲームを自分で作ったことがないので、とりあえずサンプルがいっぱい入っている本を選び     ました。


とりあえず3冊購入したので、徐々に読み進めて書評を書いていきたいと思います。

今更iPhoneアプリの開発を始めてみる(iOS Developer Programへの登録)

大分遅くなってしまったが、今更ながらiPhoneアプリの開発を初めてみようと思った。
最終的にはUnity使ってゲームを作るとこを目的にしてやってみる。

実機でいろいろ試すにはiOS Developer Programへの参加が必要なので、とりあえずその登録をしてみようと思い、サイトを見ながら登録してみた。

が、何度やってもエラー。
購入画面にすらたどり着かない。
新しいAppleID作って購入してみたけど、それでも結果は同じ・・・。
何がいけないのかさっぱり分からず・・・。
時間が深夜だったので、その日は諦めて翌日試すことに。

で、翌日早速登録してみたらあっさり購入画面まで辿り着いた。
昨日のエラーは一体何だったんだ・・・と思いつつ、しばらく待っていると購入完了メールが届いたので、購入自体は正常に終了。
後はアクティベーションメールが届くのを待つ。
早い人は2〜3時間でメールが来ているみたいだったので、そわそわしながら待っていたが、待てど暮らせどメールは来ない。

結局丸2日経ってもメールが来なかったので、サポート宛にメールしてみた(このアドレスは日本語でも大丈夫とのことなので、日本語で質問した)。
半日後にメールが返って来て、AppleIDの情報で日本語になっている部分をローマ字に変えてくれって日本語で返って来た。
早く登録して欲しかったので、AppleIDの情報を修正して返信後にサポートセンターに電話。
アクティベーションメール来てないけど、ローマ字には変更しましたと伝えると、確認するから名前と電話が切れてしまった時のために折り返し用に電話番号を聞かれた。
その後AppleIDの情報は変更の確認が取れたが、アクティベーションメールが来ない件に関しては調査してみますとのことだった。
どうやら1/27にアクティベーション周りのシステムをアップデートしたらしく、その後からうまくアクティベーションメールが送れていないケースがあるらしい。
どのくらい時間掛かるのか聞いてみたが、分からないけどそんなに時間掛からないと言っていたので、今日中に連絡来るかなと思って待っていたが、結局その日は連絡もらえず。
金曜日に連絡がもらえなかったので、登録は来週に持ち越しかとがっかり・・・。

しかし翌朝メールチェックしていたら英語でメールが来ていた。
Google翻訳で訳してみると、課金情報が一致しないから政府発行の身分証を提出しろと。
このURLにアクセスして身分証送れと書かれていたので、入力の際に間違えたかなーと思いながらも、身分証を送信したら、送信後に表示された画面に

「Not Received」

送信に失敗したと思って、同じURLにアクセスしてみると、既にそのURLは使えなくなっていた。
休日だしどうすればいいのかと思っていたら、自動応答メールが送られてきた。

We received your documents.

・・・。
なんじゃそりゃ。
こんにゃろーと思いつつ、ファイルは無事受信されたらしいので、とりあえず週明けまで待ってみることに。

週明け月曜は全く連絡来ず。
火曜日の朝にメール確認したら連絡来ていました。
ようやくアクティベーションのメールが来たのかと思っていたら、

Thank You for Joining an Apple Developer Program

あれ、どうやら登録作業はすべて完了しているらしい。
本文を見てみたが、やはりようこそ的な内容が書いてありました。
なんだか正しい手順じゃないっぽいので、参考にならないと思いますが・・・。
何にせよ登録が完了してよかったです。

とりあえず第一歩目は踏み出せました。

2014年1月6日月曜日

PC-DARTS2の効果音をDARTSLIVE風にカスタマイズ

PC-DARTS2は効果音とかを編集出来るので、せっかくだからよく利用するDARTSLIVEの効果音が出るようにカスタマイズしてみました。

まず音源探し。これが一番大変でした・・・。
DARTSLIVE.TVに公開されている動画の中から、効果音がなっている時に観客の歓声がない動画を探してmp3に変換。
そこから必要な部分だけ切り出してPC-DARTSの効果音用のフォルダに保存。
対応する音を探すのも面倒でしたが、なんとか完成しました。

早速PC-DARTSを起動させて、プレイしてみましたが、やはり使い慣れているDARTLIVEの音はいいですね!
テンション上がる!

アワード系は一切手を出してないので、そこもなんとか出来るのであればなんとかしてみたいと思います!

2013年9月13日金曜日

ファイルを削除したにも関わらずディスク容量が増えない場合

DBメンテナンス作業時にデータファイルのコピー作業をしていたら、コピー先のサーバのディスク容量が一杯になってしまい、書き込みが出来ない状況に陥ってしまいました。
そこで、今までコピーしたファイルをディレクトリごと全て削除してディスク容量を確保しようとしたが、dfコマンドで確認するとディスク使用量が40GB程なのに対し、duコマンドで各ディレクトリの使用量の合計を計算すると1GB程度しかなかった。

原因を調べてみると、どうやらゾンビファイルとやらがある状態のため、dfコマンドでは空き容量が増えていなかったらしい。
ゾンビファイルの確認するために現在開いているファイルのプロセスを特定する必要があるので、lsofコマンドを使って調べてみる。
※ちなみにゾンビファイルとは見た目上は消えているが、プロセスが掴んでいるのでkernel上はまだ残っている状態のことだそうです。

このコマンドを使用すると、使用しているプロセスと、掴んでいるファイル名、ファイル容量がわかるのだが、確認してみると、どうやら落としたはずのMySQLプロセスが落ちていなかった。
どうやら誤って別のプロセスであるApacheプロセスを落としてしまっていた。
改めてMySQLプロセスを落とすと、ディスク容量が一気に40GB増えた。
これで一安心。

2013年8月9日金曜日

PDFからJpeg画像に変換時に発生するエラーに関して

あるpdf画像をjpeg画像に変換しようと思ったところ、検証用に使用しているサーバや本番用のサーバでエラーが出てしまった。

コマンドは以下の通り。
convert -quality 75 -density 600 -geometry 858x1215 1375856384.pdf 1375856384.jpg


エラーの内容は以下の通り。
   **** Warning: can't process font stream, loading font by the name.
   **** Error reading a content stream. The page may be incomplete.
Error: /typecheck in --run--
Operand stack:
   --dict:16/16(L)--   1.0   1.0
   --dict:16/16(L)--   1   10   HiraKakuPro-W6   8.5
   --dict:5/5(L)--
   --dict:5/5(L)--   HiraKakuPro-W6
   --dict:10/12(ro)(G)--   --nostringval--   CIDFontObject
   --dict:7/7(L)--
   --dict:7/7(L)--   12   Adobe-Japan1
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--
   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1894   1   3   %oparray_pop   1893   1   3   %oparray_pop   1877   1   3   %oparray_pop   --nostringval--   --nostringval--   2   1   1   --nostringval--   %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1161/1684(ro)(G)--   --dict:1/20(G)--   --dict:82/200(L)--   --dict:82/200(L)--   --dict:108/127(ro)(G)--   --dict:291/300(ro)(G)--   --dict:23/30(L)--   --dict:6/8(L)--   --dict:25/40(L)--   --dict:20/25(L)--   --dict:5/5(L)--   --dict:10/15(L)--
Current allocation mode is local
Last OS error: 2
GPL Ghostscript 9.04: Unrecoverable error, exit code 1
convert: Postscript delegate failed `/hogehoge/1375856384.pdf': そのようなファイルやディレクトリはありません @ pdf.c/ReadPDFImage/611.
convert: missing an image filename `/hogehoge/1375856384-000001.jpg' @ convert.c/ConvertImageCommand/2806.


他のpdf画像では全く問題なく変換されているので、そのpdfに問題があるかと思い、色々調べてみました。
とりあえずエラーの内容としては 「Ghostscript 9.04: Unrecoverable error」と書かれていたので、
Ghostscrip周りを調べてみたら、以下のようなサイトがあった。

http://bugs.ghostscript.com/show_bug.cgi?id=692499

Ghostscriptのバグっぽい内容の記述があるのですが、
英語で書いてあってよくわからず、とりあえず一番最後にアップグレードしろと書かれていたので、
ローカルサーバで試してみた。
現状入っていたGhostscriptのバージョンが8.15と大分古かったので、一気に最新版である9.07にアップデート。
最初はyumからアップデートしようとしたが、なかったのでrpmを探してみたが、
md5のチェックサムが一致しないと。。。 リビルドの仕方がよくわからなかったので、ソースだけ抜き出してインストールするはめに。
どうやらconfigureオプションに「--disable-compile-inits」と記述をしておかないとインストール後に設定変更できなくなるらしいです。
実際に指定したオプションは以下の通り。

./configure --disable-compile-inits --with-x --with-drivers=ALL --without-luratech --with-libiconv=gnu


で、makeしてmake installしたら入った。

gs -v

Ghostscriptのバージョンを確認し9.07に変わっていることを確認。

同じコマンドを実行。
問題なく変換出来た。
この時点で最初の8.15で変換出来るかどうか試しておけばよかったと激しく後悔。

とはいえもう遅いので、とりあえずバージョンを9.05に落としてみた。
こちらもソースから落としてきて、同様のconfigureオプションを指定しインストール。
バージョンが変わったことを確認して同じコマンドを実行。

変換出来てしまった・・・。

こうなってくると問題はImageMagickの方かもということで、ImageMagickをアップデート。
現状自分のローカルサーバに入っているImageMagickのバージョンは6.2.8。
検証、本番サーバに入っているImageMagickのバージョンは6.5.5-6。
なので、とりあえず検証サーバと同じバージョンにアップデート。
こちらもソースからインストール。configureオプションは特に指定していません。

convert -version


バージョンが変わっているかを確認。
そして変換!
エラー。
再現出来ました。
やはりImageMagickのバージョンのせいらしい。
ImageMagickを最新のバージョン(6.8.6-8)にアップデートしてみる。

変換→エラー。

どうやら最新のバージョンでも変換出来ないらしい。
バージョンを一番最初にインストールされていたバージョンに落とすしか対応方法は無さそうな・・・。

ちなみに変換出来なかった原因はpdfファイルの中に編集可能なテキストエリアがあったため、変換出来なかったっぽいです。その部分を削除し変換コマンドをかけたら問題のバージョンでも問題なく変換出来ました。

結果的に対応不要となりましたが、本当に対応が必要になった時にダウングレードして対応出来るのかは引き続き調べてみる。

2013年8月7日水曜日

GROUP_CONCATとDISTINCTの合わせ技

GROUP_CONCATとDISTINCTの合わせ技が結構便利な気がするのでメモ。 
 
以下の様なデータが登録されているテーブルがあるとする。 

mysql> SELECT * FROM TEST1;
+----+------+------+
| id | val1 | val2 |
+----+------+------+
|  1 |  100 |  115 |
|  2 |  100 |  100 |
|  3 |  120 |  100 |
|  4 |  100 |  115 |
|  5 |  100 |  115 |
+----+------+------+
 
GROUP_CONCATでまとめる。 
mysql> SELECT GROUP_CONCAT(val1) val1 FROM TEST1 GROUP BY val2;
+-------------+
| val1        |
+-------------+
| 100,120     |
| 100,100,100 |
+-------------+

GROUP_CONCATでまとめるだけだと、val1の中に重複した値が残ってしまう。
こういった値を無くしたい場合に使えるのがDISTINCTである。


SELECT GROUP_CONCAT(DISTINCT val1) val1 FROM test GROUP BY val2;
+---------+
| val1    |
+---------+
| 100,120 |
| 100     |
+---------+

重複していたデータが消えてすっきり。

2013年8月4日日曜日

自宅でダーツ

ダーツバーに毎回行くのも面倒だし、お金も勿体無い気がしたので、家でも練習できるようダーツボードを買っちゃいました。

普段やるのはソフトダーツなのですが、家でやるならハードダーツの方が静かだということで、ハードダーツボードも検討したのですが、ダーツボードのサイズも違うので、結局ソフトダーツボードを買うことに決めました。
最初は3000円位のやつを買おうかとも思ったのですが、せっかくなので奮発してPCにUSBで接続することで、ダーツゲーム画面も表示されるようなものを買いました。効果音とか、アワード画面とか色々カスタマイズ出来るのも購入に至るまでのポイントでした。

買ったのはEPOCH社のPC-DARTS2!
21500円也

毎回ダーツに行くたびに1200円位なので18回分と考えれば、そこまで高くない金額かなと。まぁDARTSLIVEカードに記録は残りませんが。

で、早速楽天でポチッと。
2日後に届きましたが、どうやらそのまま使うと結構うるさいらしいので、色々と静音対応しました。
1.シングル、ダブル、トリプル、BULL等の各セグメントを全て外して、外周に両面テープを貼ってフレームとセグメントの隙間を埋める。両面テープの白い紙は剥がさない。
2.各セグメントが押された時に通電するような仕組みのフィルムが中に入っているのですが、そのまま使用していると衝撃が強すぎてフィルムが凹んでしまうという自体が起きるらしいので、薄めのゴムシートで保護。フェルトも一緒につけていたのですが、あまりにも反応しなくなってしまったので剥がしました。
3.ダーツボードの裏側はスカスカで、それが原因でうるさいらしいので、パテ盛りしました。計4kg。ダーツボードが一気に重たくなりました・・・。

ダーツボード側に行った作業は以上。

次に設置するために買ったもの。
突っ張り棒 × 2
金属ネット × 1
突っ張り棒に金属ネットを引っ掛けるための金具 × 2
金属ネットを突っ張り棒に固定するための金具 × 2
周囲8箇所に穴を開けた木製の板 400 × 400mm 1枚
ウレタンシート 400 × 400mm 1枚
スポンジシート 400 × 400mm 1枚
キズ・音防止用粘着フェルト × 4枚

1.設置場所に突っ張り棒を2本立て、金属ネットを引っ掛け金具にかけて固定金具で固定。
2.その金属ネットに木製の板の穴に結束バンドを通して固定。
3.ダーツボードを引っ掛けるための木ねじの位置を探り、その位置に木ねじを3本ねじ込む。
4.ダーツボードと木製ボードが直接接触しているとうるさいので、ウレタンシートとスポンジシートを重ねて、ダーツボードと木製ボードの間に挟む。

木製ボードにダーツボードを引っ掛けるのが一番大変でした・・・。
IN-BULLの中心が173cmになるように木製ボードにダーツボードを固定する位置を探すのに四苦八苦。
また、固定用の金具も色々と試してみたのですが、結局ダーツボード付属の木ねじで固定しました。
多少長さが長いのは承知でつけたので、若干貫通してしまいましたが、まぁまぁ問題なく引っ掛けることが出来ました。

とりあえずこの状態で一回試しに遊んでみた。
なかなかいい感じ。
ただ、失投した時に壁紙に凹みが出来てしまったので、それを防ぐためにジョイントカラーマットを購入して壁に敷きました。

とりあえずこれで完成!
これからもちょいちょいいじっていきたいと思います。

2013年8月1日木曜日

DARTSLIVEカード買いました。

ダーツライブという機種専用のカードを買いました。
これで毎回の記録が保存されるようになりました。
現状のレーティングも出てくるので、頑張ってAフライトになれるよう精進していきたいと思います。