2012年7月29日日曜日

iCloudを使わずに、iPhoneからAndroidに無料で連絡帳を移行する。

iPhone5、、、出ないなぁ。。。
ということで、スマートフォンをAndroidに代えて見ることにしました。

で、最初に必要なのが連絡帳のお引越しですね。
巷ではiCloud使ったお引越しが主流みたいなんですが、私はちょっとした理由でiCloudが使えませんでした。

試行錯誤の末、iCloudを使わずに、iPhoneからAndroidに連絡帳を引越しすることに成功したので、手順をここで公開します。もちろん、無料でできます。

ざっくりとした手順は、
1. iPhoneの連絡帳データをファイル(CSV)に書き出し+メールで送信。
2. ファイルをgmailの連絡先にアップロード
3. gmailの連絡先をAndroidに同期
です。
必要なのは、連絡帳データをファイルに書き出すアプリと、gmailのアカウントです。

手順詳細
1. iPhoneの連絡帳データをファイル(CSV)に書き出し+メールで送信。
iPhoneの連絡先をCSV出力してくれるiPhoneアプリを使います。私はIS Contacts Kitの無料版を使いました。オシャレで便利です。
↑赤丸の部分を押していって、自分のメールアドレスにメールを送信すれば、CSVが書き出せます。

2. ファイルをgmailの連絡先にアップロード
↓GMailで、連絡先を開きます。

↑連絡先の左メニューの一番下、「連絡先のインポート」から、メールで送信したCSVをアップロードします。コレでiPhoneの連絡帳データがGmailに取り込まれました。

3. gmailの連絡先をAndroidに同期
Androidの設定→アカウントと同期から、連絡帳のデータを取り込んだGmailのアカウントを設定します。「連絡先を同期」にチェックを入れれば、完成です。

上記の手順で、iPhoneの連絡帳データがAndroidに引越しできます。
最近はやっとiPhoneよりも(私が)いい(なぁと思える)Android端末が出てきました。
ちょっとお試しに、Android端末を買ってみてはいかがですか?





2011年12月6日火曜日

GlassFish3.1.1 + SAStrutsの動かし方

GlassFish上でSAStrutsを動かすと、以下のようなエラーが発生することがあります。
java.lang.NullPointerException
at org.apache.jasper.compiler.TagLibraryInfoImpl.toString(TagLibraryInfoImpl.java:129)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at java.util.AbstractMap.toString(AbstractMap.java:490)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuffer.append(StringBuffer.java:219)
at org.seasar.extension.filter.util.RequestDumpUtil.dumpContextAttributes(RequestDumpUtil.java:86)
at org.seasar.extension.filter.RequestDumpFilter.dumpAfter(RequestDumpFilter.java:191)
at org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:129)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:86)
at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
at org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
at org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:152)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.seasar.framework.container.hotdeploy.HotdeployFilter.doHotdeployFilter(HotdeployFilter.java:99)
at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:67)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:680)
原因を調べてった所、問題が2点あって、
①requestDumpFilterが動いてない。
②jar中のtld(タグライブラリの記述)を読み込めていない。

で、なおし方。
以下の2つをやるとうごきます。
requestDumpFilterが動かないようなので、Webアプリの/WEB-INF/web.xmlの以下の場所をコメントアウトします。


<!-- requestDumpFilter が動かないので、コメントアウト
<filter-mapping>
<filter-name>requestDumpFilter</filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
-->

②jarの中のtldが読み取れないので、外に出します。
tldsa-struts-X.X.X-XXX.jar(Xはバージョン番号。多分皆さんのWebアプリのWEB-INF/libの中に入ってます。)をZIP解凍ツールで解凍して、中の/META-INF/s.tldと、/META-INF/f.tldを取り出します。で、WebアプリのWEB-INF直下においてください。同じく、struts-1.2.9.jarの中から/META-INF/struts-html.tld、/META-INF/struts-bean.tld、/META-INF/struts-tiles.tldを取り出して、WEB-INF直下においてください。
で、web.xmlのjsp-configタグの中に、以下を入れます。

<jsp-config>

<!-- ここから-->
<taglib>
<taglib-uri>http://struts.apache.org/tags-beantaglib-uri>
<taglib-location>/WEB-INF/struts-bean.tldtaglib-location>
<taglib>

<taglib>
<taglib-uri>http://struts.apache.org/tags-htmltaglib-uri>
<taglib-location>/WEB-INF/struts-html.tldtaglib-location>
<taglib>

<taglib>
<taglib-uri>http://jakarta.apache.org/struts/tags-tilestaglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tldtaglib-location>
<taglib>

<taglib>
<taglib-uri>http://sastruts.seasar.orgtaglib-uri>
<taglib-location>/WEB-INF/s.tldtaglib-location>
<taglib>

<taglib>
<taglib-uri>http://sastruts.seasar.org/functionstaglib-uri>
<taglib-location>/WEB-INF/f.tldtaglib-location>
<taglib>
<!-- ここまで -->

<jsp-property-group>

これで動くようになります。
Glassfish3.1は、アプリケーションバージョニングがとても便利で、Webアプリケーションの無停止バージョンアップが可能になっています。
ぜひお試しあれ。

2010年12月7日火曜日

速報! Android2.3 Gingerbreadの新機能!

ついに、Android2.3 Gingerbreadが、Nexus S と共に公開されました。

新機能は以下の様になっています。

・UIの刷新 画面が、簡単で早くなった。
・新入力方式 入力方式が新しくなり、文字が選択できるようになった。
・バッテリー管理の改善 電池のもちがよくなった。
・VoIP もう、電話番号なんてなくても電話ができる。
・NFC お財布携帯になる!!(お財布携帯用アプリが載れば。。。載るかな?)。
・ダウンロード改善 WebやE-Mailのダウンロードがしやすくなった。
・マルチカメラ対応 画面側のカメラにも対応。(テレビ電話できる!)

また、上以外にも、ゲームが開発しやすくなったり、新しい動画方式(WebM)に対応するなど、新しい機能が目白押しです!

さあ、ついにくるぞ!Android!

最高のAndroid - Nexus S 発表!!

2010年の終わりに、ついに、ついに、最高のAndoird、Nexus SがGoogleから発表されました!

それは、最新のAndroid OS、Android 2.3 Gingerbreadを搭載し、
それは、1Gのプロセッサを積み、
それは、16Gのストレージを持ち、
それは、近接センサーを備え、
それは、新しい入力方式で構え、
それは、VoIPを標準で装備しています。



※画像はGoogleの紹介ページより

アメリカに居る人は、12/16から購入可能。
12/20からオンラインでも購入可能!!

未来に行くなら、Nexus Sを持て!!!

2010年12月6日月曜日

Channel API - Google App Engine で Push

わぁ!

いつの間にか、Channel API がリリースされてる!

という訳で、本日はGoogle App Engine SDK 1.4よりサポートされたChannel API のお話です。

Channel APIとは、Google App Engine 上でサーバプッシュを実現する仕組みです。

サーバプッシュとは、サーバの状態に変更があったときに、クライアント(ブラウザ)に変更を通知する手段です。

サーバプッシュを使うと何がよいか、というと、Webアプリケーションにリアルタイム性を取り込むことができるのです!

Webアプリケーションでチャットとか、ソーシャルゲームが可能になるのです!

サンプルコードを、書くぞ!!
(今日は、寝ます。。。コメントいただけたら、優先順位を上げてサンプルコード書きます。)


2010年11月29日月曜日

Nexus S(多分)が、アメリカの連邦通信委員会に登録されてる!

Nexus Sは、GoogleがNexus Oneの後継機として世に送り出すとされているAndroidスマートフォンです。

販売される、販売される!って噂が出ているのですが。。。。

最近、Nexus Sの画像とされる情報を載せている「Engadget」によると、アメリカの連邦通信委員会(アメリカで通信機器の許認可をしているところです。)にNexus Sとされる登録がされたとのこと。

もうすぐ、最高のAndroidがお目見えする!

デュアルコアとの情報もあり、とても楽しみです。

ソース:Engadget

2010年11月28日日曜日

【入門】Androidを飼う前に、ちょっとだけ知っておくべきこと。

GAGA女史も声高に叫んでいますが、Androidの時代が日本でも来ましたね。すばらしい。
でも、Androidについての誤解がまだ多いので、ちょっとここでまとめをしておきましょう。
①Androidって携帯じゃないの。ソフトなの。
②Androidは「無料」なの。
③Androidがバージョンアップできなくなるのは、「つなぎ」を作るのに飽きちゃってるからなの。


①Androidって携帯じゃないの。ソフトなの。
Androidとは、ソフトウェアです。OS(オペレーティングシステム)という種類の。
OS(オペレーティングシステム)とは、コンピュータの基本的なコントロールをしてくれるソフトウェアです。通信とか、画面表示とか。Windowsとか、Max OSXとかも、OS(オペレーティングシステム)です。iPhoneでも、iOSというOSが動いています。
絵にすると、↓な感じです。

図 Android携帯構成

補足すると、OSだから、ファームウェアさえあればどんなところでもAndroidは動くのです。今動くのは、ロボットとか、TVとか、タブレットとか、PCとか。


②Androidは「無料」なの。
Androidは、「オープンソース」の、無料のソフトウェアなのです。
「オープンソース」とは、誰でもソースコードを取得することのできるソフトウェアのことです。
ソースコードとは、コンピュータに入力すると、ソフトウェアが出来上がるようになるデータです。
つまり、Androidは、だれでも、無料で入手できるのです。
ソースコードはここで公開されています。


③Androidがバージョンアップできなくなるのは、「つなぎ」を作るのに飽きちゃってるからなの。
Android自体は、常にバージョンアップしています。現在(2010/11/28)時点では、最新バージョンが2.2で、あと数週間後に2.3が公開されるとの情報があります。楽しみ。
でも、Xperiaはバージョン2.1で、IS01はバージョン1.6だったりします。なんで最新バージョンが動かないのか?
AndroidがOSであることは①で記しましたが、Androidが携帯上で動くためには、「ファームウェア」が必要なのです。
ファームウェアは、Androidと、携帯をつなぐためのものです。
Androidはファームウェアを通して携帯とつながることで、いろいろな携帯上で動くことができるのです。
で、Androidが新しくなると、ほとんどの場合、ファームウェアも新しくしなければなりません。
ので、その携帯用のファームウェアがないと、Androidはバージョンアップすることができないのです。XperiaもIS01も、Android2.2用の公式ファームウェアがないので、Android2.2にすることができないのです。


Androidはすばらしいです。Androidのことをちょっとだけ知っておくと、その素晴らしさをもっと味わえると思います。