Hatena::ブログ(Diary)

hishidaのblog このページをアンテナに追加 RSSフィード

プロフィール

hishida

hishida

EB series support page 管理人 ブログ

2016-08-04 Macbook Pro Mid 2012 ハードディスクトラブル このエントリーを含むブックマーク このエントリーのブックマークコメント

どうも最近呪われているらしい。

毎日持ち歩いている相棒の Macbook Pro Mid 2012が、画面中央にクエスチョンマーク付きのフォルダが点滅表示され、起動できなくなってしまった。どうやら起動ディスクを認識しないらしい。

Mac の起動時に「?」マークが点滅表示される場合 - Apple サポート

サポートページの指示に従い、電源を押した後にcommand + Rキーを押し続けて、OS X 復元システムから起動。Apple メニューから「起動ディスク」を選択しようとすると、おや、起動ディスクが表示されない?

ディスクユーティリティを開くと、内蔵の750GBのディスクドライブ自体は認識しており、パーティションも表示される。

パーティション選択して「ディスクを修復」を実行すると、しばらくしてエラーが表示され、修復に失敗! この時点ではディスクの寿命による故障と判断し、ディスクを交換することを決意する。

この機会にSSDに交換することも考えたが、価格的な問題で、とりあえず1TBの2.5インチハードディスクを5,000円で購入。

USB外付けHDDケースに入れ、ディスクユーティリティでパーティションを切り、試しにMac OS X を新規インストールする。

そのままUSB外付けドライブから起動させると、難なく起動に成功。

このディスクを内蔵ディスクと交換すればそのまま使用できるはずだが、なぜか起動ディスクとして認識せず。またクエスチョンマーク付きのフォルダアイコンが表示される。

不思議なことに、確かにGUIDパーティションとしてフォーマットしているのに、内蔵SATAケーブルにつなぐとマスターブートレコードパーティションとして認識される。これが原因で起動ディスクにならないらしい。

ディスクの相性問題かと思って、手持ちのハーディスクでいくつか試した結果、日立製の320GBのディスクでは内蔵でも起動することがわかった。

もともと750GBで使用していた環境を320GBに引っ越すのは容量がかなりきついが、背に腹は変えられず、当面は320GBで運用することにする。大きいファイルは外付けに逃せばなんとかなるだろう。

これで解決かと思われたが、この日立製320GBも数日すると起動ディスクとして認識しなくなり、またクエスチョンマーク付きのフォルダアイコンが表示されるようになった。

原因はハードディスクではないらしいと思い至り、320GB内蔵ディスクを取り出してUSB外付けHDDケースに入れ、外部ディスクとして起動すると、問題なく使用できる。やっぱりディスクは壊れていない。ここで初めて内蔵SATAケーブルを疑うようになった。

あらためてググってみると、Macbook pro Mid 2012は内蔵SATAケーブルのトラブルが多いらしいことがわかる。

MacBook Pro Mid 2012の内蔵SATAケーブルを交換する - @ビボーログ

MacBook Pro (Mid 2012, 13インチ)のSATA cableの交換 - おっぱいそん!

ジーニアスバーやApple提携プロバイダに修理を依頼すると、たぶん作業料金だけで4万円以上かかることは必至なので、ケーブルだけ入手できないかと調べたところ、Amazonで2300円程度でパーツショップから買えることがわかった。早速発注して内蔵SATAケーブルを取り替えてみたところ、結果は大当たりで、あっけなく復旧!

(この方法がダメなら、最後の手段として内蔵DVDSATAハードディスクに交換するアダプタを試すつもりだった)

もしかすると、もともと内蔵の750GBのディスクは壊れていなかったのかもしれない。すぐにディスクを取り出してUSB外付ケースに換装すればデータを復元できた可能性は高い。だが不安定なケーブルでシステム復旧を試みたために、本当に壊れてしまった。幸いTime Machineバックアップがあったので、直近数日の作業が飛んだだけで済んだ。

教訓としては、Time Machineバックアップは大事ですよということと、ハードディスクが認識しないときは万一の可能性として内蔵SATAケーブルを疑うべしということ。

毎日持ち歩いていることも故障の原因の一つかもしれない。2kgのMacbook Pro は流石に重いので、軽量化したいが、現行のMacbookのラインナップはそれぞれ一長一短があって、乗り換え候補が決まらない。

Retinaディスプレーは外せないのでMacbookMacbook pro Retineのどちらかになるが、Macbookキーボードストロークが極端に浅いのが問題で慣れそうにない。Macbook pro Retinaは重い(と言っても1.6kgなので現在のMacbook pro Mid 2012より軽いが)し、もうじき後継機の噂がある。もうしばらく悩みが続きそうである。

さて、やっと開発環境が復旧したので、何を作るかを決めないと。。。

2016-07-19 Visual Studio Community2015 を入れた このエントリーを含むブックマーク このエントリーのブックマークコメント

どうも最近、開発環境の整備に時間を費やして、肝心の開発が何も進んでいないようだ。

1 Windows10の導入

Windows 10への無料アップデートの期限が7月29日までということで、重い腰を上げて、開発環境をWindows7からWindows10アップグレードすることにした。

当方の環境はMac OS XVMWare Fusionなので、これまで使用していたWindows7の仮想イメージは外付けハードディスクバックアップして削除し、Macbook proのディスクスペースを空ける。

手元にはMSDNに加入していた時に送られてきたWindows8.1のDVDライセンスキーがある(今はMSDNに加入してもDVD郵送サービスはないので、貴重だ)。

なるべくクリーンなWindows10を入れたいので、Windows8.1をクリーンインストールしてからWindows10アップデートすることにした。なお、MSDNの期限が切れていても、当時取得したWindows8.1のライセンスキーは現在も有効である。

Windows10インストール直後はWindows標準のディスプレードライバのために表示が非常に遅かったが、VMWare Toolsを再インストールするとVMWare SVGA 3D ドライバに更新され、快適に表示できるようになった。Windows10仮想マシンにはメモリ4Gと2CPUを割り当てる。実用上ほとんど不満を感じない。

Microsoft OfficeはOffice2010の優待アップグレード版のOffice2013を導入。日常的な使用環境はこれで整った。

2 Visual Studio Comminuty 2015の導入

さて開発ツールだが、個人ユーザなら無料で使用できるVisual Studio Community 2015を導入。(過去 Visual Studio Professional with MSDN を3回も購入した者としては、いい時代になったものだと思う。まあMSDNにはOSも付いているけど。)

これまで開発したプロジェクトをコンパイルするための保険にVisual Studio2010も入れたが、Visual Studio Community 2015ではVS2010のプロジェクトをそのまま読み込んでVS2010のライブラリセットを指定してコンパイルできるので、VS2010は不要かもしれない。

3 EBPocket for WinRTのWIndows8.1アプリへの移行

以前、VS2012でWindows8ストアアプリのEBPocket for WinRTを開発してリリースしたが、ストアアプリの将来性に疑問を感じて開発を凍結していた。

その後、VS2013ではWindows8.1とWindows Phone8.1のユニバーサルアプリが作れるようになり、VS2015では同一バイナリですべてのWindowsプラットフォームで動作するUWPが登場。あっという間に2世代も進んでしまった。

今回最初に行ったことは、Windows8ストアアプリのEBPocket for WinRTの当時のソースを、Visual Studio Community 2015でコンパイルすることである。

VS2012で作成したWindows8用のプロジェクトを読み込むと、Windows8.1に再ターゲットを求められる。EBPocketの本体のソースはWindows8.1に再ターゲットできたが、C++/CXで開発したWindowsランタイムライブラリ変換できない

仕方ないので新規プロジェクトでユニバーサルWindows8.1のWindowsランタイムコンポーネントを作り、ソースを一つ一つ追加。これでコンパイル&リンクしたところ、EBPocket for WinRTがWindows8.1アプリとして復活した。Windows10では全画面ではなく一つのウインドーで動くので、かなり使い勝手がよくなった気がする。(もちろん機能が少ないことを酷評されていることは承知しているが。)

4 ストアアプリの将来について

Windows8.1アプリになったといっても、Windows8.1ユニバーサルアプリとしてWindows Phone8.1版を追加するのは、アプリ一本をまるまる新規で開発するぐらいの工数がかかる。いっそUWPで単一のEBPocket for UWPを作った方がいいのではないか。

そう考えてUWPの新規プロジェクトを試してみると、Windows8.1ストアアプリにあったような「分割アプリ」「ハブアプリ」のようなテンプレートがない。要するにどんな解像度でも動くように、自分で様々な解像度にあった画面を用意しないといけないらしい。ここでまたやる気が萎えてしまった。

この1年くらいでWindows Phoneの新機種が日本でも発売されるようになったが、シェアが低いのは相変わらずで、「アプリがないからシェアが低い、シェアが低いからアプリが作られない」というジレンマから抜け切れていない。UWPも開発事例が少ないようで、笛吹けど踊らずの状態がまだ続くかもしれない。

やはりWindows Mobileに対する方針の迷走と、過去のアプリの互換性を切り捨てたことによる開発者離れがいまだに効いていると思う。懐かしいW-ZERO3の頃には、スマートフォンのシェア100%だったのだから。当時の有名アプリで今もWindows Phoneで開発が続いているのは青空子猫ぐらいじゃないか。

EBPocket for WinRTを再開するための開発環境の構築まではできた。この後やる気がでるかどうかは、まだなんとも言えない。Windows Phoneの実機はお安いようだが。。。

2016-07-18 EclipseからAndroid Studio に乗り換えた このエントリーを含むブックマーク このエントリーのブックマークコメント

Androidの開発環境は当初はEclipse+ADTプラグインだったが、現在はGoogle公式の開発環境はAndroid Studioになっており、ADTの更新は2015年末で終了している。Andoroid Studioに乗り換える必要を感じていたものの、NDKの移植がうまくいかないために、延び延びになっていた。

ところがGoogle さんからの一通のメールでAndroid Studioに移行せざるを得なくなった。

Android 向け Google Mobile Ads SDK の 6.4.1 以前のバージョンは、2016 年 9 月 15 日をもってサポートを終了させていただきます。

2016 年 9 月 15 日以降も引き続き広告を配信していただくには、Google Mobile Ads SDK を 7.0.0 以降のバージョンにアップグレードしてください。

SDKアップグレードするには、Play 開発者サービスの最新バージョン(バージョンは dependencies セクションで確認)を Gradle Build 設定ファイルに追加してください。次の例では v9.0 を追加しています。

apply plugin: 'com.android.application'

...

dependencies {

compile 'com.google.android.gms:play-services:9.0.2'

}

うーん、そうですか。EBPocket Freeも読書尚友 FreeもGoogle Mobile Ads SDK 6.4.1なので、バージョンアップしないと9/15以降広告収入が途絶えることになる。世の中の流れとしてAndroid Studio用以外の開発情報が少なくなっているので、この機会にAndroid Studioに乗り換えることにした。この作業が予想以上に大変だったので、忘備録として書いておくことにする。

1. Eclipseのプロジェクトのインポート

Android Studioには既存のEclipseのプロジェクトをインポートする機能があり、"Import project(Eclipse ADT,Gradle,etc.)"を実行するだけで簡単に取り込める。100% Javaの読書尚友はこれだけでOK。問題はNDKを使用しているEBPocketである。

2. NDKのコンパイルAndroid.mkで行う

Android Studioは1.3からNDKをサポートするようになったが、色々不完全でGradleのバージョン毎に設定方法が変わったりしている。jni/ディレクトリC/C++言語のソースを入れておけばAndroid.mkは不要でコンパイルしてくれることになっているが、これが曲者でどうしてもNDKのコンパイルが通らない。既存のAndroid.mkでNDKをコンパイルする方法を探したところ、次のページを見つけた。

Android StudioでNDKを使ったビルドをする - Qiita

ほぼこのページの説明通りで、既存のAndroid.mkでコンパイルできるようになった。Cソース内のデバックができるかどうか不明だが、とりあえずAndroid Studioへの移行に成功。

3. com.google.android.gms:play-servicesの導入

続いてGoogle Mobile Ads SDKのバージョンを6.4.1から最新版の9.0.2にしてみる。

  1. app/libs/GoogleAdMobAdsSdk-6.4.1.jar を削除する
  2. build.gradleに追加

build.gradle

defaultConfig {

...

minSdkVersion 9 // 9以上

...

}

dependencies {

...

// compile files('libs/GoogleAdMobAdsSdk-6.4.1.jar')

compile 'com.google.android.gms:play-services:9.0.2'

}

AndroidManifest.xml

<meta-data android:name="com.google.android.gms.version"

android:value="@integer/google_play_services_version" />

<activity

android:name="com.google.android.gms.ads.AdActivity"

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

main_pager.xml

【変更前】

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

【変更後】

xmlns:ads="http://schemas.android.com/apk/res-auto"

【変更前】

<com.google.ads.AdView

android:id="@+id/adView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

ads:adSize="SMART_BANNER"

ads:adUnitId="....."

ads:loadAdOnCreate="true" />

【変更後】

<com.google.android.gms.ads.AdView

android:id="@+id/adView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

ads:adSize="SMART_BANNER"

ads:adUnitId="....."

/>

com.google.android.gms.ads.AdViewではada:loadAdOnCreateがなくなってJava内でloadAdしないといけなくなったので、onCreate()に記述を追加。

AdView adView = (AdView) this.findViewById(R.id.adView);

AdRequest adRequest = new AdRequest.Builder().build();

adView.loadAd(adRequest);

なぜか次のエラーが。

error retrieving app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.0/res/values-v23/values-v23.xml

どうもcom.google.android.gms:play-servicesが8.4.0以上だと、 appcompat-v7の23.0.0が必要らしい。appcompatは使っていないので、素直にバージョンを下げる。

compile 'com.google.android.gms:play-services:9.0.2'

compile 'com.google.android.gms:play-services:8.3.0'

4. multiDexEnabled

実機でデバッグもできたので、Signed APKを作ろうとすると、またまたエラーに。

Error:The number of method references in a .dex file cannot exceed 64K.

Learn how to resolve this issue at

https://developer.android.com/tools/building/multidex.html

Dalvik仮想マシンバイトコードであるdexフォーマットにはメソッド数が64Kまでという制限があり、64Kを超える場合はMultiDex にしないといけないらしい(*後にMultiDexを避ける方法がわかった。P.S.参照)。

MultiDexにする方法は、下記の通り。

build.gradle:

buildToolsVersion "23.0.2"

...

defaultConfig {

...

// Enabling multidex support.

multiDexEnabled true

}

dependencies {

compile 'com.android.support:multidex:1.0.0'

}

AndroidManifest.xml:

<application

...

android:name="android.support.multidex.MultiDexApplication">

</application>

5. gradle.properties

これで終わりかと思ったら、Android Studioのheapサイズ不足でAPKが作れない。multiDexEnabledにするとheapが余分にいるらしい。gradle.propertiesに次の記述を追加する。

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m

これでようやくSigned APKが作成できた。

Android Studio を使い始めると、Eclipseより便利なところも不便なところも両方あるが、なにしろGoogleの開発速度が異様に速いので、問題点は急速に解決されることだろう。継続的なサポートのためには、なるべくAndroid Studioに移行することが望ましい。

Android Studio2.1になってエミュレータの速度が向上して実機以上の速度で動くようになった。これだけでも非常に開発が捗るというものだ。

P.S. multiDex化回避について(2016/08/19加筆)

この記事を書いた後、com.google.android.gms:play-services は必要なモジュール選択的に使用でき、adsモジュールだけを使用すればメソッド数が64k以内に収まってmultiDex化を回避できることがわかった。

build.gradleの記述を次のように変更する:

compile 'com.google.android.gms:play-services-ads:9.2.1'

com.android.support:multidexはAPI14以上(Android4.0以上)でないと動かないので、Android2.3以前をサポートしたい場合はmultiDexは避けたほうがいい。

2016-05-23 読書尚友 横組み、注記付き、etc このエントリーを含むブックマーク このエントリーのブックマークコメント

読書尚友は次版の1.46で基本的に青空文庫の注記に(ほぼ)完全対応になります。

左にルビ

f:id:hishida:20160523123612p:image

横組み

f:id:hishida:20160523123608p:image

注記付き

f:id:hishida:20160523123603p:image

底本では

f:id:hishida:20160523123559p:image

他に、上付き小文字、下付き小文字、字詰め、左傍線、左傍点に対応した。

2016-05-18 読書尚友 割り注 このエントリーを含むブックマーク このエントリーのブックマークコメント

読書尚友の進捗、割り注対応作業中。やりはじめると割り注の中に色々な注記が現れるので対応が難しい。

f:id:hishida:20160518190601p:image

f:id:hishida:20160518190608p:image

f:id:hishida:20160518190605p:image

これができれば、残りは横組み、上付き小文字、下付き小文字ぐらいだと思う。ここまで来たので、青空文庫の注記完全対応を目指して頑張りたい。