2013-09-30

.thumbdata3 というAndroidの容量を圧迫するファイルを作成しないようにする方法

以前から、私のアンドロイド携帯はなぜか「.thumbdata3--xxxxxxxxx」というファイルを自動で作成していました。
ファイル自体に問題はないのですが、なんとこのファイルのサイズが2ギガバイト近くになるなど容量を確実に圧迫し、写真やスクリーンショットをとる際 にいつも容量が不足していて大事な瞬間を逃す、、、という状態が起こっていました。

しかも何度削除しても気がつくと復活しているというやっかいなものです。

そこで本格的に解決策を探って見たところ、英語サイトに書いてあった方法を行えば解決できることがわかりました。
その方法をここに残しておきたいと思います。


[最終結論]
.thumbnails フォルダを削除し、同名ファイルを作成すると自動でファイルを作成できなくなる。


まず作業を行うために使用したアプリが「ES ファイルエクスプローラー」です。
フォルダを削除して空ファイルを作成するだけなので他のアプリでも実行は可能ですが、操作法は違うものになると思います。





では、ES ファイルエクスプローラーを開いて、以下のように画面上部にある部分をタッチしてフォルダを表示させ、「SDカード」をタッチしてください。



そして、同じように次に表示される画面で「DCIM」 をタッチしてください。




次に「.thumbnails」フォルダを長押し(通常のタッチではなく、少しの間ずっと画面に触れる)すると、以下の様な画面になりますので、 画面下にある削除ボタンをタッチしてフォルダを削除してください。

[追記]
もし、フォルダが見つからなければ「左上のマークをタッチ → ツール → 隠しファイルを表示をon」を実行すると表示されます。(small-forwardさん、貴重な情報ありがとうございました!)



では、次に「.thumbnail ファイル」を作成します。
これを行うことによって、 Android側からするとすでに名前が存在するので .thumbdata3 ファイルを勝手に作成できなくなります。

画面左下にある新規作成ボタンをタッチすると、ファイルとフォルダの選択できますので、ここではファイルを選択してください。
(英語勉強のために言語を変更しているので、わかりにくかったら申し訳ないです。^-^;)


すると、以下のようにファイル名を入力してくれと言われますので「.thumbnails」と入力してOKをタッチしてください。
※先頭の文字は「ドット」。いわゆるピリオドですね。




さぁ、これで作業は完了です。お疲れ様でした。





[参考ページ]
今回参考にさせていただいたページは以下になります。
ありがとうございます!

KanuHelmut, thanks a lot!!

[TIP/TRICK] Stop Stock Gallery From Creating .thumbnails Folder! Save SD Card Space! View Single Post

2013-09-25

Crontab が実行されない時には…?

Cron が定期的に実行されない時は様々な要因があると思いますが、今回は include_path に問題がある場合の解決法を紹介します。

[最終結論]
cd(change directory) でフォルダを移動してから PHPファイルを実行すると相対パスもうまくいく。


※ちなみに cronを使う前提として、

1、cron で .sh ファイルを実行。
2..sh に書いてあるコマンドで該当するPHPファイルを実行


という2段階で定期実行しています。
これは、Webサイトのデータ更新を自動で行うために、cronを使いたい。 というページでも言及されていますが、xrea もしくは coreserver からの名残です。


では、 まず 。

crontab -e

を実行して以下のように定期実行するコマンドを登録しましょう。

5  * * * * /home/[ユーザー名]/public_html/example.com/sh/test.sh

 
 ※パスは適宜ご自身のパスに置き換えてください。要するに上記の1番で説明した .sh ファイルがある場所です。つまり、わかりやす例えると実行したいPHPファイルが5つある場合は .sh ファイルも5つ必要ということです。(上級者はひとつのファイルにまとめるのでしょうが。)


そして、次に .sh の中身を見て行きましょう。上の例で言うと test.sh になります。


#!/bin/sh
cd /home/[ユーザー名]/public_html/example.com/cron
/usr/bin/test.php
exit



※ちなみに、これは実行したいphpファイルが /home/[ユーザー名]/public_html/example.com/cron にある場合です。
また、各行 Linux の改行コード 「LF」で改行されています。
ウィンドウズ版は CRLFなのでエラーの原因となります。


さて、流れを説明すると、

1、 実行したいフォルダに移動して
2.お目当ての phpファイルを実行する。

これだけです。
これだけですが、はじめにフォルダ移動しているので

require_once('../confing.php');

などの相対パスが要求されても、そこを基準としてファイルの読み込みがされる、つまりうまく実行できるということです。


今回の記事を書くにあたって以下のページを参考にさせていただきました。
ほんとうに助かりました。ありがとうございます!

[参考URL]
cron で PHP 実行時に require_once のファイルが参照できない

2013-09-22

さくらVPSに nginx + phpMyAdmin をインストール

さて、今回はさくらVPSに nginx と phpMyAdmin をインストールする方法の備忘録です。


[最終結論]
・phpMyAdmin を設定するファイル「config.inc.php」は実は2つ存在するので、間違った方を設定しても何の意味もない。

・$cfg['PmaAbsoluteUri'] = 'http://IPアドレス/phpmyadmin/'; でリダイレクトを固定化する





まず参考にさせてもらったのが以下のページ。

さくらVPS(その7:phpMyAdminのインストール)


ほぼここのページで問題なくインストールや設定を行うことが出来ました。
ただ、この方は nginx ではなく apache でサーバー運用を行っているようだったので、nginx の設定方法を探してみました。
それが以下のページです。

Nginxのalias指定でphpMyAdminを動作させる


渡しの場合、実際には /etc/nginx/nginx.conf ではなく、/etc/nginx/conf.d/phpmyadmin.conf に設定を書き込んでいますが、やっていることはほぼ同じだと思います。


この時点でログイン画面が表示されたため、これでうまく行ったのかと思いましたが実際にログインしようとすると、リダイレクトされる先が一つ上の階層に行ってしまってうまく行かなかったので、上記のページに書いてある

$cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/';

を参考にして、config.inc.php を変更しました。
(実際にはconfig.sample.inc.php をコピーして config.inc.php を作成して変更しました。)

が、まったく状況は変わらなかったので、さらに検索をしてみると、、、
以下の様な全く予想していなかったことを知ることになりました。


一番失敗しやすいのは、/etc/phpMyAdmin/config.inc.phpでなく、 /usr/share/phpMyAdmin/config.inc.phpを調整してしまうことです。

(引用元)
CentOS5.5にPHP5.3.4とphpMyAdmin3.3.9をインストールして、Nginxで動作させる方法

なんと、、、少しの間全く違うファイルを変更していたということですか。。
どうりで die(); や echo 'test'; などをしても何の反応もないわけですね。

ということで、正しい方の config.inc.php に

$cfg['PmaAbsoluteUri'] = 'http://IPアドレス/phpmyadmin/';

を設定して問題はクリアしました。
参考させていただいたページの管理人様、本当にありがとうございます!

2013-09-21

さくらVPSでSFTP接続(Filezilla)

さくら vps に vsftp を使ってFTPをインストールするのに予想以上に時間がかかってしまいましたので、今後のためとこれから設定をされる方のためにまとめを残したいと思います。

[結論]
・SFTPでセキュア接続するには、結局SSHと同じ手順を取らないととダメ。
・SSH接続を公開鍵を使って行っている場合は、Filezilla にもキーを設定しないととダメ。SSHのポートを安全のために変更している場合もそれをFilizilla に設定しないとダメ。
・Filezilla の秘密鍵のパスは全角が入ってはダメ。




まず vsftp をインストール&通常のFTPでの接続は以下のURLを参照し、本当にすんなり完了。

さくらVPSにFTPサーバー(vsftpd)を1時間で導入 

実際30分ほどで完了できました。
しかし、ここからセキュア接続を行うまでに大変なみちのりが。。。


まずは以下のURLを参照させていただきました。
FTPサーバー構築(vsftpd) 

vi /etc/vsftpd/vsftpd.conf

のコマンドを使って vsftpd.conf の設定ファイルを編集しました。
そして、

/etc/rc.d/init.d/vsftpd start

でFTPを開始しようとすると、、、?


「500 OOPS: SSL: cannot load RSA certificate」


 というエラーが表示されました。
 どうやら、証明書がないから起動できないということみたいだったので、以下のURLの中程に書いてある記事を参照して証明書を作成しました。

WordPress on CentOS – vsftpの設定 

具体的なコマンドは

cd /etc/pki/tls/certs/
make vsftpd.pem
 
 
そして、これでやっと
/etc/rc.d/init.d/vsftpd start
がうまくいき、FTPをセキュアな設定で起動することに成功しました。


しかし、

なんどログインを試みようとも失敗するばかり。。。
vsftpd.conf の設定やら iptables の解除やらを行っても全く効果がありませんでした。


そして、最終的に「SFTPって結局SSH接続と一緒だろ?」という当たり前のことに気づき、filezilla に冒頭で書いた以下の結論を実行しました。


・SSH接続を公開鍵を使って行っている場合は、Filezilla にもキーを設定しないとログイン出来ない。SSHのポートを安全のために変更している場合もそれをFilizilla に設定しないとダメ。


これを実行するには、以下のURLが助けてくれました。

FileZillaのSFTP接続設定

要約すると、「編集 > 設定 > SFTP」からSSH接続のために作成した秘密鍵を選択し、そのパスワードを入力すると、「*****.ppk」 という専用のキーファイルを作ってくれるので、これで接続を行うようです。


さて、これで一安心。

…と思いきや、まだ残っていました。。

 それは、以下のURLが非常に簡潔です。

2013-08-09 FileZillaの秘密鍵は全角が含まれているパスに置いてはいけない


通常は半角英数字のみでフォルダ名、ファイル名を作成する(英語も勉強中ですしね)のですが、今回だけは、まわりのフォルダが日本語ばかりで名前がつけられていたので、つられて全角で作成してしまっていました。。。


とまぁ、このように知識があればおそらく1時間あれば完了するものを2,3倍ほどの時間がかかってしまいました。。


助けていただいたURLには感謝あるのみです!

2013-09-13

[Android, Github] カスタムビューのバーチャルコントローラーを公開しています。

以前より公開していた Android プログラム用のカスタムビュー「GameControllerView」を本日アップグレードしたので使い方を公開したいと思います。

[必要なもの]
[GitHub] CoodinateInRange
[GitHub] GameControllerView



[実際のプログラム]


(表示したいxml)

<com.sukohi.lib.GameControllerView
        android:id="@+id/game_controller_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />


(Activity の onCreate の中)

GameControllerView controller = (GameControllerView) findViewById(R.id.game_controller_view); // ①インスタンス
controller.setCallback(new GameControllerViewCallback(){

    public void on(int key, String keyName, SparseBooleanArray keyStatuses) {
    // ②ボタンのコールバック

         // ③各ボタンを押した時のプログラム

        switch(keyNumber) {
   
        case GameControllerView.KEY_LEFT:
            break;
        case GameControllerView.KEY_UP:
            break;
        case GameControllerView.KEY_RIGHT:
            break;
        case GameControllerView.KEY_DOWN:
            break;

        // その他のボタン: KEY_A、KEY_B、KEY_Y、KEY_X、KEY_SELECT、KEY_START

        }
    }
       
    public void off(int key, String keyName, SparseBooleanArray keyStatuses) {

         // ②各ボタンを離した時のプログラム

    }
       
});
controller.setCrossKeySize(300, 300);            // (任意)十字ボタンのサイズ
controller.setABYXKeySize(100, 100);          // (任意)ABYXボタンのサイズ
controller.setLRKeySize(150, 65);                  // (任意)LRボタンのサイズ
controller.setSelectStartKeySize(70, 30);        // (任意)スタートとセレクトボタンのサイズ
controller.setControllerPadding(15);                // (任意)コントローラーの padding
controller.setCrossKeyRepeatInterval(500);    // (任意)十字ボタンを押し続けたときの繰り返し時間
controller.setKeyColor("#88FFFFFF");          // (任意)ボタンの色


[番号の説明]
① インスタンスを作る
② ボタンを押した、離したときに呼ばれる部分です。 on() が押した時、off() が離した時。取得できる値は、

int key: ボタンの番号です。KEY_LEFT などの定数を使うとプログラムしやすいでしょう。
String keyName: ボタンの名前です。例えば「UP」「A」「START」など。
SparseBooleanArray keyStatuses:今現在他のボタンが true(押されている)か、false(離れているか)が KEY_LEFTなどの定数をキーにして格納されています。

③  各ボタンをプログラムをこの部分に記述します。


2013-09-11

[Java, Android] くり抜かれた円、四角を Canvas に描く方法。

Canvas 覗き穴やスコープごしに見ているような描画をする方法がわからなくてなかなか時間がかかりましたが、なんとか実現できましたので備忘録として公開します。

[最終結論]
Path.Direction.CCW を使うと画像をくり抜くことができる。





はじめは、

canvas.drawColor(Color.BLACK);
Path path = new Path();
path.addCircle(300, 300, 100, Path.Direction.CCW);
canvas.clipPath(path);

というようにクリッピングを使って「指定したところ以外は描画しない」設定をしていたのですが、これでは、黒く塗りつぶした部分は描画できなくなってしまいます。
私のやりたいことは以下のようなものだったので、いつものごとくGoogleで情報を探してみました。
(わかりにくいですが、弾丸が右下に表示されています。)




すると、

[プログ - Pathを切り抜くには]
http://www.seeda.jp/modules/d3blog/details.php?bid=28&cid=7

に公開されている情報がまさにそれでした。


paint.setColor(Color.BLACK);
Path path = new Path();
path.addRect(0, 0, canvasWidth, canvasHeight, Path.Direction.CW);  // ①
path.addCircle(300, 300, 100, Path.Direction.CCW); // ②
canvas.drawPath(path, paint); // ③


①黒で全部を塗りつぶした new Path() を用意します。
②「Path.Direction.CCW」を設定した円を追加(つまり、円をくり抜く作業です)
③キャンバスに描画


ちなみに Path.Direction.CCW は描画方向を意味しています。
CW(Clockwise) => 時計回り, CCW(Counter clockwise) => 反時計回り
反時計回りは、Anticlockwise だけだと思っていましたが違う表現もあるのですね。


貴重な情報を紹介してくれている上記のブログには大感謝です。