20120117
■[memo]ギャラリーからpicasa画像を共有で取得できるuriの変遷 
メモ。詳しい方フォローください。個人的には3.x→4.xの変更はちょっとぐぬぬです。
- Android 4.x
- Android 3.x
20111202
■Google Web Fonts APIをAndroidでつかってみる 
本エントリは、「Android Advent Calendar*1」という企画の1エントリにもなっています。他にも色々楽しいエントリが上がる予定なのでこちらの方もチェックしてみてください☆
Google Web Fonts APIってなに?
Google Web Fontsとは、Googleが提供するWeb Fontのホスティングサービスです。本日時点で、欧文フォントで302字体あります。ざっとこんな感じ。こんな種類の多いのでAndroidでも使ってみたくなってきますよね。
Androidで使ってみる。
Google Web Fonts は Android 2.2 以上対応となっています。通信が発生するのでパーミッションも必要です。AndroidManifest.xmlに追加します。
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
WebViewに表示させます。WebViewのレイアウトをレイアウトファイルmain.xmlに追加します。
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</WebView>
Google Web FontsはHTML内で以下のように指定することで使用できます。HEADタグの中がGoogle Web Fonts APIを使う為に必要です。装飾したい文字(INPUT_TEXT)を指定されたフォント(CSS_FONTTYPE)、指定されたサイズ(FONT_SIZE)で装飾します。大文字のところが任意で指定する部分です。
<html>
<head>
<link href='http://fonts.googleapis.com/css?family=FONT_TYPE' rel='stylesheet' type='text/css'>
<style>body {color:#000;font-family: 'CSS_FONTTYPE', serif;font-size: FONT_SIZE;}</style>
</head>
<body>
<p>INPUT_TEXT</p>
</body>
</html>
このようなHTMLソースをロードするには、
があります。今回は汎用性を考えて後者で実装します。ベースとなるHTMLソースをStringで定義しておき、指定箇所を置換します。
private static final String FONT_BASEURL = "<html><head><link href='http://fonts.googleapis.com/css"
+ "?family=FONT_TYPE' rel='stylesheet' type='text/css'>"
+ "<style>body {color:#000;font-family: 'CSS_FONTTYPE', serif;font-size: FONT_SIZE;}</style>"
+ "</head><body><p>INPUT_TEXT</p></body></html>";
private String fontType = "Ribeye Marrow";
private String fontSize = "48px";
private String inputText = "Shall we use Google Web Fonts API?";
「Ribeye Marrow」というフォントを使いたい場合には、linkタグの中では「Ribeye Marrow」と定義すればいいのですが、cssの中では「Ribeye+Marrow」とする必要があります。これを考慮して置換メソッドを用意し実装します。
// 置換処理
private String createUrl() {
String output = FONT_BASEURL.replace("FONT_TYPE",fontType.replace(' ', '+'))
.replace("CSS_FONTTYPE", fontType)
.replace("FONT_SIZE", fontSize)
.replace("INPUT_TEXT", inputText);
return output;
}
そしてこのデータをWebViewにロードします。
WebView webview = (WebView) findViewById(R.id.webview);
webview.setBackgroundColor(Color.TRANSPARENT);
webview.loadDataWithBaseURL(null, createUrl(), "text/html", "utf-8", null);
実行するとWeb Fontが表示されました!
フォント一覧の取得方法
Web Fontの表示だけならAPI_KEYもいらないのですが、一覧を取得する際には必要となります。RESTFulなので、以下URLでリクエストするとJSONでレスポンスが返ってきます。
https://www.googleapis.com/webfonts/v1/webfonts?key=YOUR-API-KEY
JSONの構造はこんな感じです。
{
"kind": "webfonts#webfontList",
"items": [
[...]
{
"kind": "webfonts#webfont",
"family": "Anonymous Pro",
"variants": [
"regular",
"italic",
"bold",
"bolditalic"
],
"subsets": [
"cyrillic",
"cyrillic-ext",
"greek",
"greek-ext",
"latin",
"latin-ext"
]
},
{
"kind": "webfonts#webfont",
"family": "Anton",
"variants": [
"regular"
],
"subsets": [
"latin",
"latin-ext"
]
},
[...]
]
}
これをごりごりパースします。JsonPullParserとか使うと幸せになれるかもしれません。
API KEYの取得方法
API KEYを取得してない人のために取得方法も残しておきます。
- API Consoleにアクセス
- プロジェクトを作成しますか?と聞かれるので作成する
- プロジェクトのサービス一覧が表示されるので下のほうの「Web Fonts Developer API」をONに。ちなみにここに利用制限が書いており、Web Fonts Developer APIの場合は1日10000クエリ。
メリットとデメリット
Androidでは普通アプリでシステムフォントと別のフォントを使いたい場合、assetsフォルダ配下におくのが定石です。しかしフォントを組み込むと、どうしてもアプリの容量が大きくなってしまいます。一般的に、アプリは5MBを超えると、ユーザはストレスを感じるといわれてます。そのためデベロッパーは、容量を犠牲にして美麗なアプリにするよりも、容量が大きくなることを避けがちな傾向にあります。
しかし、その点、Web Fontsだとアプリが軽量ですみます。ただデメリットとしては、通信が必要でローディングに少し時間はかかることがあげられます。またWebViewかブラウザでしか使用できません。メリット/デメリットに応じて使い分けてください。
最後に
今回初心者向けの内容になってますが、Google Web Fonts APIをいろんなところで積極的に使っていただきたくて、あえて書きました。個人的な意見ですが、Androidアプリはもっときれいで心地よいものになる余地が残されていると思います。
ていうか、もっと使おうぜ!チープだけどViewerアプリ作ったからさ!(ダウンロードはコチラ)これで電車の中でもAndroid端末からFont眺めてアプリの構想練れるぜ!作りが粗いのは勘弁してください時間がなかったんだもん。
サンプル
今回のサンプルソースを全文掲載しておきます。
kanzmrsw
2011/12/02 00:43
固定文のみで使うなら&text= inputTextとしてみるのもいいかもしれない!です!
20111124
■[memo]MecabのJavaバインディング 
注意)今回のpostはめずらしくAndroidはぜんっぜん関係ありません。また自分用メモとして残しただけなので間違いがあってもご容赦願います。
日本語形態素解析ライブラリを使おうと思い立ちました。Javaで形態素解析するにはSenやGoSen、lgoなどがあるようですが、まずはMecabを使ってみるということで。mecab-0.98.tar.gzをダウンロード。
Mecabの辞書作成はこの辺。
私はJavaが一番使い慣れてるので、Javaでバインディングすることに。でもオフィシャルではぜんっぜん詳しく書いてません。まずはここでmecab-java-0.97.tar.gzをダウンロードします。
mecab-java-0.97.tar.gzを解凍し、makeしてやるとjavaバインディングに必要なファイルが作成できます。私の環境(Mac OS X(Lion))では、Makefileを以下の赤字のように書き換えるとmakeがうまく行きました。環境に応じて変えてやってください。
TARGET=MeCab JAVAC=javac JAVA=java JAR=jar CXX=c++ INCLUDE=/System/Library/Frameworks/JavaVM.framework/Headers PACKAGE=org/chasen/mecab LIBS=`mecab-config --libs` INC=`mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE)/linux all: $(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx $(INC) $(CXX) -shared $(TARGET)_wrap.o -o lib$(TARGET).so $(LIBS) $(JAVAC) $(PACKAGE)/*.java -J-Dfile.encoding=UTF8 $(JAVAC) test.java -J-Dfile.encoding=UTF8 $(JAR) cfv $(TARGET).jar $(PACKAGE)/*.class -J-Dfile.encoding=UTF8 test: env LD_LIBRARY_PATH=. $(JAVA) test clean: rm -fr *.jar *.o *.so *.class $(PACKAGE)/*.class cleanall: rm -fr $(TARGET).java *.cxx
これでmakeすると、新規に2つのファイルが作成されます。
Eclipseで実行する時はJavaプロジェクトを作成しMeCab.jarを外部ライブラリとして追加します。そして、mecab-java-097フォルダ内のtest.javaをEclipseを取り込み、以下のように書き換えます。
File f = new File("/Users/hogehoge/mecab-java-097/libMeCab.so"); System.load(f.toString());
これで、ライブラリがロードでき、実行できます。





