月別アーカイブ: 2014年8月

「空き容量不足」を繰り返すPlayストアアプリ

最近、インストールできない・アップデートできないアプリが増えて困っている。ストアアプリが悪いのではないかと思いだした。調べてみたところ、「空き容量不足」を繰り返すPlayストアアプリを直した、ような気がするという記事を見つけたので、同様に行ってみた。

「設定」>「アプリ」>「すべて」からダウンロードマネージャを開き、「データを消去」

して、更新を試みる。「~のダウンロード中にエラーが発生しました。端末に十分な空き領域がありません。」と出た。再起動する。できた。今回はこれでなおった。

2015/03/12 追記 どうにも、治らない時がある。
http://www.gamekozo.com/faqs/faq000
によれば:

特定のGoogle Playアプリの不具合とのことで、

「設定」→「アプリケーション」→「アプリケーション管理」→「マーケット」アプリを探す→「アップデートのアンインストール」

で修正されるとのことである。たしかに、なおった。

他に参考になりそうなのは
http://www.android-navi.com/archives/android/android_125/
http://www.android-mutant.net/article/303002774.html
http://app-roid.com/blog-entry-358.html
http://blog.goo.ne.jp/peki-k/e/7632597abf8fab4d65702b68ee983f9c
http://www.androidpolice.com/2011/04/19/fixing-the-couldnt-install-on-usb-storage-or-sd-card-problem-on-android/
あたり

 

クラスタエラーによって破損した JPEG ファイルの修復

概要

クラスタエラーによって破損した JPEG ファイルの修復を行ってみたときのメモ。破損JPEG画像修復ソフト試用記に、4つのソフトが紹介されているが、JpegAnalyzer Plus(JpegAna142)によってかなり良い修復ができたので、ここに記録として残す。

準備

JpegAnalyzer Plus を、ダウンロードし、解凍しておく。JpegAnalyzer Plus のページには、

Q Windows Vistaや64bit版のWindowsには対応していますか?
A 正式回答は「未確認」です。

 

とあるが、Windows 7 64bit の環境でもきちんと動作した。適宜JpegAnalyzer Plus オンラインヘルプを参照してほしい。

状況

スマホで撮影して、SDHC に保存していたファイルが、クラスタエラーと思われるエラーによって破損していた。Read error が出ていた。scandisc による修復を行い、あったかもしれないバックアップを上書きしてしまった。ファイル後半はデータが残っていたので、修復できるかを考えた。

破損ファイルは 2,799,000 バイトで、バイナリエディタでみると、40167(16進)まで0で埋まっている。つまり、262504 バイトが0で埋まっているという状況である。JPEG のヘッダ等はなく、肝心な部分が失われていることになる。

修復方法

大筋、以前表示出来たファイルが見れなくなった場合デジタルカメラ画像のヘッダー修復例を見るとわかるが、「JPEGの断片ファイルや先頭が欠落しているファイルはJPEGのヘッダー(SOIからSOSまで)やイメージデータの先頭が欠落すると通常は修復出来ません。」がしかし、「JPEGファイルの出力元がデジカメや特定のソフトの場合、同様の処理をしたJPEGファイルはヘッダー部分が同じか似た構造になります。
それを利用してヘッダー部分を付け替える事で画像が何が写っているか判るレベルまで修復出来る場合があります。」なので、やってみるのが良い。デジタルカメラ画像のヘッダー修復例に準じて行う。

基本的に撮像方法は変えていないので、

汎用ハフマンテーブルを使用していること
画像サイズ、サンプリング比が共通していること

という条件にはマッチする。まず、壊れたファイルを読み込ませると、

Address Length Message
00000000     <=== 不明な領域 2,798,998 bytes
002AB596 ****** EOI :End Of Image ******

◆ イメージデータの断片かもしれません ◆

と表示される。ここが重要だが、次に、「メニュー: 設定 -> マーカ・セグメント誤検出防止 -> 全てOFF」とすると、

Address Length Message
00000000     <=== 不明な領域 262,540 bytes
0004018C ****** RST3:Restart Interval Marker
         14,578個のRSTで挟まれた画像データ領域を検出
002AB596 ****** EOI :End Of Image ******

◆ イメージデータの断片かもしれません ◆
◆ DRIセグメントが有りません ◆

となる。

よって、ヘッダー修復機能をまず試した。続いて、「ツール -> ヘッダー修復 -> ヘッダー挿入」で、同時期に撮影した、別の JPEG ファイルを読ませた。縦横はあっているほうが望ましいと思われる。すると、

Address Length Message
00000000 ****** SOI  :Start Of Image ******
00000002 [0010] APP0 :JPEG File Interchange Format Ver 1.2 (JFIF)
密度 1:1 単位なし
00000014 [006B] COM :Comment
                                  Header Repaired by JpegAnalyzer Plus V1.42. ImageFile-201404
                                  17_205451.jpg HeaderFile-20140417_205516.jpg.

00000081 [0084] DQT :Define Quantization Table 【IJG 画質98】
                                  00000085 QT0-8bit IJG輝度 画質98
                                  000000C6 QT1-8bit IJG色差 画質98
00000107 [0004] DRI :Define Restart Interval (MCU blocks=4)
0000010D [0011] SOF0 :Start Of Frame 0 – Baseline DCT
                                  3264[0] x 2280[0] pixel – 24bit color (YCbCr 4:2:2)
                                  ComponentID-01 Y 2×1 QT0
                                  ComponentID-02 Cb 1×1 QT1
                                  ComponentID-03 Cr 1×1 QT1
00000120 [01A2] DHT :Define Huffman Table 【汎用ハフマンテーブル】
                                  00000124 HT0-DC 汎用輝度HT-DC
                                  00000141 HT0-AC 汎用輝度HT-AC
                                  000001F4 HT1-DC 汎用色差HT-DC
                                  00000211 HT1-AC 汎用色差HT-AC
000002C4 [000C] SOS :Start Of Scan 0-63[00]
                                  HT Selector[DC/AC] Y[0/0] Cb[1/1] Cr[1/1]
000002D2 ****** Image Data ******
                                  Data Size 2,527,023 bytes
00269201 ****** EOI  :End Of Image   ******

となった。このまま、保存ボタンを押すと、修復されたファイルが保存された。

repair_resized

こんな画像である。とてもきれいである。画像サイズは 3264 x 2280 であり、ファイルサイズは 2,527,747 バイトとなった。本来の画像は 3264 x 2448 であるため、画像の上部分が削除されたと思われるが、修復としては十分である。

cygwin timezone setting

cygwin のタイムゾーン設定について。PHP で date 系の関数を使っていて、エラーが出たことがあった。

Generating code coverage report in HTML format ...PHP Warning:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.

おかしいと重いながら、放置していた。調べたら、/etc/localtime の設定がない。

cd /etc
ln -s /usr/share/zoneinfo/Asia/Tokyo localtime

を実行。

$ date
2014年 8月 3日 日曜日 12:22:43
$ date -u
2014年 8月 3日 日曜日 03:22:44 UTC

これはこれでよい。

export TZ=JST-9

すると

$ date
2014年 8月 3日 日曜日 12:26:19 JST

ゾーンは入った。

でも、PHP でのエラーはでたまま。date.timezone の設定はした方がよいが、Linux のマシンでは設定していないでも動いている。

面倒になったので、

date.timezone = Asia/Tokyo

/etc/php5/php.ini

に入れた。ま、いいや。

PHPUnit のインストールとスケルトン作成 (about PHPUnit installation and making skeletons)

pear から PHPUnit (4.0.17) をインストールすると

PHPUnit 4.0.17 by Sebastian Bergmann.

You have installed PHPUnit via PEAR. This installation method is no longer
supported and http://pear.phpunit.de/ will be shut down no later than
December, 31 2014.

Please read http://phpunit.de/manual/current/en/installation.html and
learn how to use PHPUnit from a PHAR or install it via Composer.

のように、表示される。pear を用いたインストールは推奨されないらしい。4.0のマニュアルによれば

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/

すればよいらしい。ところが、スケルトン作成のための phpunit-skelgen についての情報がない。https://phar.phpunit.de/ をのぞいたところ、https://phar.phpunit.de/phpunit-skelgen-2.0.1.phar が存在した。https://phar.phpunit.de/phpunit-skelgen.phar でも得られるようなので、

wget https://phar.phpunit.de/phpunit-skelgen.phar
chmod +x phpunit-skelgen.phar
mv phpunit-skelgen.phar /usr/local/bin/

すれば使用可能となる。ドキュメントが全然なかった。

phpunit-skelgen generate-test classname php_filename.php

することで、スケルトンが得られ。目的達成。