ADT Translation Manager Pluginを一瞬でアンインストールした話

Eclipse Keplerで、ADT Translation Manager Pluginをインストールしたら、Eclipseの設定が消えたようになってworkspace含め初期状態で起動するようになってしまいました。

Installing the Eclipse Plugin | Android Developers

結局根本的な解決には至りませんでしたが、上記プラグインをアンインストールしたら復旧したので解決です。


Apacheでリバースプロキシを使う際のホスト名を引き継ぐ方法

GAEの開発中に、Apache経由のリバースプロキシ環境でdev_appserver.pyを起動させていると、認証関係やself.request.host_urlなどでホスト名を取ろうとした場合にlocalhost:8080などのホスト名を返されます。

ProxyPreserveHost ディレクティブを使えば解決です。ポート番号も消えるみたいです。

mod_proxy – Apache HTTP サーバ
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost On

SensioBuzzBundleでname lookup timed outになる問題

やっとSymfony 2.3使い始めました。

コントローラーから、外部APIへのリクエストにSensioBuzzBundleを使っているのですが、cURLのDNS名前解決に時間がかかるようで、タイムアウトが頻発していました。

sensiolabs/SensioBuzzBundle

解決については設定を追加すれば良いようです。

app/config/config.ymlに

sensio_buzz:
    client_timeout: 100

などと追加するだけです。

ソースコードを見る限り、デフォルトは5秒のようです。

SensioBuzzBundle/DependencyInjection/Configuration.php at master · sensiolabs/SensioBuzzBundle


UbuntuでApache 2.4.6(Event MPM)+PHP 5.4(FastCGI)を使う

環境はAmazon EC2のUbuntu 12.10です。Apache 2.4.6を使ってみます。Apache 2.4系列を使うからには、やっぱりEvent MPMを使いたいところです。

ところがPHPのマニュアルにはPreforkを使えと書いてあります。

PHP: インストール – Manual
http://www.php.net/manual/ja/faq.installation.php#faq.installation.apache2

マルチスレッドMPMを使いたい場合はFastCGIを使うようにも書いてあるので、PHPをFastCGIで動かすようにします。

この投稿の続きを読む »


PHP-FPMの起動時にエラーになる&終了できない問題

PHP-FPMを起動するときに、時間がかかった挙句、failedになる現象が発生しました。

# /etc/init.d/php-fpm start
Starting php-fpm ................................... failed

また、終了時にpidが見つからないというメッセージが表示されます。

# /etc/init.d/php-fpm stop
Gracefully shutting down php-fpm warning, no pid file found - php-fpm is not running ?

実際、stopしてもプロセスが残っている状態です。

# ps aux |grep php
root     16260  0.0  0.9 161928  5820 ?        Ss   08:40   0:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
webadmin 16261  0.0  4.9 175012 29700 ?        S    08:40   0:00 php-fpm: pool www
webadmin 16262  0.0  3.6 167872 21884 ?        S    08:40   0:00 php-fpm: pool www

最初、/usr/local/etc/php-fpm.confで、pidの位置を/var/run直下に置こうとして絶対パスにしていたのですが、これが問題だったようです。

[global]
; Pid file
; Note: the default prefix is /usr/local/var
; Default Value: none
pid = /var/run/php-fpm.pid

pidファイル自体は作成されていたので、問題ないように思っていました。
以下のように、相対パスで/usr/local/var/run以下に置くようにしたら解決しました。

[global]
; Pid file
; Note: the default prefix is /usr/local/var
; Default Value: none
pid = run/php-fpm.pid

起動も一瞬でした。

# /etc/init.d/php-fpm start
Starting php-fpm  done

もちろん、終了も問題なくできます。


Let’snoteで画面のコピーのショートカットを無効にする

Let’s noteで、Ctrl+Alt+F7(F8の場合もあり)を押した時に、スクリーンショットが撮影されてpcinfo.bmpというファイル名でマイドキュメントフォルダに保存されます。

WinShotとショートカットが被りますし、減色されて256色ビットマップで保存されるので、正直全くいらない機能です。

というわけで無効にする方法です。

スタートメニューからPanasonic→PC情報ビューアーと開いて、その中にある画面コピーの項目を右クリックします。ちなみに左クリックしてしまうと、また無駄にキャプチャが撮影されるだけなのでご注意ください。

WS000033

右クリックして表示したメニューから、プロパティを選択します。

WS000034

ここでショートカットキーが設定されているかと思いますので、バックスペースなどを押してショートカットキーの割り当てを削除すればOKです。

WS000035


ADT22でのMultiple dex files defineの解決方法

ADT22にして既存のプロジェクトを実行してみようと思ったら「Multiple dex files define」というエラーがコンソールに出て、実行できない状態になりました。

[2013-05-24 17:07:13 - Dex Loader] Unable to execute dex: Multiple dex files define Loauth/signpost/commonshttp/CommonsHttpOAuthConsumer;
[2013-05-24 17:07:13 - ***] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Loauth/signpost/commonshttp/CommonsHttpOAuthConsumer;

これは同じクラス名を持つ複数のjarがAPKに含まれている場合に出るエラーです。
ADT22でプロジェクトにAndroid Private Librariesというフォルダができていて、apkにexportするファイルが被るから、という理由のようです。

解決方法は、Eclipseのプロジェクトを右クリックして、「Build Path」→「Configure Build Path」→「Order and Export」タブで、「Android Private Libraries」にチェックが入っていることを確認して、またlibs以下のファイルにチェックが「入っていないこと」を確認します。
このエラーが出たときは、signpostのライブラリにチェックが入っていたので、外しました。


apple-itunes-appと同等のものをAndroidで実現する

iOS 6のSafariではapple-itunes-appというメタ要素をHTMLのヘッダに指定することで、ブラウザ上部にアプリへのリンクを表示させることができます。

これをAndroidでも簡単にGoogle Play Storeへのリンクを表示できるJSがありました。

jQuery Smart Banner – Jasny · web development

jQueryのライブラリとして公開されています。

    <meta name="apple-itunes-app" content="app-id=544007664">
    <meta name="google-play-app" content="app-id=com.google.android.youtube">

こんな形で設定できるようです。



[dx] Could not reserve enough space for object heap

PHPからAndroidのapkをantでビルドする環境を作成中、ヒープ不足でVMが起動しない問題に遭遇しました。

-dex:
      [dex] input: /path1/to/bin/classes
      [dex] input: /path2/to/bin/classes.jar
      [dex] input: /path/to/android-sdk-linux/tools/support/annotations.jar
      [dex] input: /path2/to/libs/android-support-v4.jar
      [dex] Pre-Dexing /path2/to/bin/classes.jar -> classes-df6cdfb7c6be3c83700a640e18a54033.jar
       [dx] Error occurred during initialization of VM
       [dx] Could not reserve enough space for object heap
       [dx] Error: Could not create the Java Virtual Machine.
       [dx] Error: A fatal exception has occurred. Program will exit.

解決策は android-sdk-linux/platform-tools/dx の
defaultMx=”-Xmx1024M”
を小さくすればOKです。

今回は
defaultMx=”-Xmx128M”
としました。

dxコマンドを直接実行する場合は、コマンドに
-JXmx128M
とオプションを付ければ大丈夫なようですが、antの場合はできないっぽいです。

あと、ANT_OPTSはantの中で実行されるjavaコマンドについては引き継がないようです。