2012年4月23日月曜日

第1回Android開発者のための初めてのiPhoneアプリハンズオン勉強会に参加したよ

参加というか、正確にはチューターとしてひーこら言いながら働いていました。
イベントはこちらで告知されていたものです。

第1回Android開発者のための初めてのiPhoneアプリハンズオン勉強会[女性枠] #andiphone #andronjo

第1回Android開発者のための初めてのiPhoneアプリハンズオン勉強会[男性枠] #andiphone


講師:@corosuke_kさん
講師の模様をメモを取る係:@muo_jpさん
愉快な仲間1号:@yoichinejiさん
愉快な仲間2号:@corruptexさん
愉快な仲間3号:@f_megmeg5(私)

また、こちらでtogetterのまとめがあります。
第1回Android開発者のための初めてのiPhoneアプリハンズオン勉強会

私はイベントの模様は写真を撮っていないのですが、他の方が写真を撮っていると信じています。
というか、あの状況では撮れませぬ…。
色々やっていたのでそういう暇がなかったなんですよね。

さて、本題です。
ハンズオン自体は、ハッシュタグとmup_jpさんのメモやコードをWebサービスを使って表示させていたので、情報共有は強固にできたのではないかと思います。
こちらは参加者の方やmup_jpさんのおかげで本当に助かりました。
コンソールアプリでひたすらログを出す時は、苦戦されている方も多かったようです。
よくよく見ていますと、Android(というよりもJavaかな?)の命名規約とobjective-cの命名規約が異なるので、メソッド名のスペルが合っていても大文字小文字でエラーが出るといったこともありました。
これに関しましては、ソース補間をやれば少しは軽減できたのではないかと思いました。
escボタンでXcodeは補間ができますしね。

実際にiPhoneアプリを作るときになりますと、InterfaceBuilderとクラスの補間能力の違いで楽しんでくれている方が多かったと思います。
私もちゃんとは扱っていなかったのですが、IBOutletやIBActionも先に.hファイルに定義しないでも、みーっと引っ張って、そこで定義を行えば.mや.hに自動的に書かれるんですね!
これは便利すぎます。
ただ、その便利さのおかげで弊害として起きたのは、実はいらないIBOutletをソースから消しても.xibファイルに残っているために、実行時にエラーが起きてしまうパターンにはまっている方も多かったようでした。
ここは今回の経験を活かして、次から気を付けてもらえれば良いのかなってなりました。

チューター組はてんやわんやしていましたが、結構楽しんでもらえたのではないかと思っています。
お約束事はAndroidとiPhoneとでは違うことも多いですから、そこは慣れるしかないですしね。

参加者の方がかなり詰まっていたというか、理解するのに時間がかかっていたなと思ったのはメモリ管理部分です。
JavaですとGCのおかげで、メモリ管理を気にしないですみます。
Androidの場合ですと、GCだけではなく自分で適宜色々やらないといけないですが。
ただobjective-cですと、メモリ管理が重要になります。
iOS5からARCが入ってきましたが、基本的なことですし、ライブラリによってはARCに対応していないものもありますので、どのように行っていくのかが重要になります。
「releaseとautoreleaseの違いはなんだ?」となっている方もいましたし、retainとreleaseの使いどころもよくわからない方も多かったと思います。
今までC関連の言語を扱ったことがある方なら理解しやすかったかもしれませんが、そうではない方ですとチンプンカンプンだったと思います。
私も最初はわかりませんでしたからね…。

このメモリ管理の部分に関しましては、Twitterを見ていたらしい@splhacksさんがハッシュタグ付きで書かれていましたので、参考書として読むのが一番良いと思います。
というか、むしろ会場に来て話してほしかったね、ところすけさんと話していましたw


後、今回の反省点というか次に活かせたら良いのではないのかなとなったことです。

資料やソースコードの共有は早めに行う

これは大事です。
実際に、当日になるまで何をやるのかをチューター組は把握できていませんでした。
また、
「なんでこういう書き方をするんだろう?」
となってしまった部分も多かったですので、そこの理解をチューター側がもてるようにする時間も欲しかったのです。
ころすけさんも忙しいようでしたから高望みなのかもしれませんが、次はもうちょっと余裕を持って準備していけたら良いな!となりました。
そういう面で、私が本当に書き方やちょっとしたテクニックを忘れまくっていて、あばばばばばとなっていたんですよね…。
本当に参加者の方には申し訳なかったです。
さすがに1年以上触っていなくて、まともに最新情報を追えていないと大変なことになることを実感しました。
む、難しかったな…!

ソースコードが見やすい机配置にする

今回、ちょくちょく聞こえたのが、
「ソースが見えにくい」
というものでした。
そのため、次は大きなディスプレイが見やすい位置に机を配置した方が良いのかなとなりました。
途中から、全体的に前に詰めましたしね。


チューターの人数を増やす

今回はチューターが3人でしたが、もう一人二人いてほしかったなーとなりました。
わからない方を長時間放置することになってしまう時もあったので、そういうことを無くすためにも人手が欲しかったです。
ころすけさんの魅力なら人が集まるよ!!!


とりあえずはこんなところです。
立ちっぱなしで疲れもしましたが、参加された方が楽しそうだったので良かったです。
次回もあればお手伝いしたいなと思っています。

2012年4月18日水曜日

TextViewでリンクを付けてみよう

開発中のアプリで、
「テキストの途中にリンクを入れて欲しいなー。ほら、htmlみたいに!」
といったことがありましたので、備忘録です。

TextView内でリンク処理を入れるには大まかに分けて3つのパターンがあります。

  1. Linkify.addLinksで行う
  2. TextViewの属性であるandroid:autoLinkを使う
  3. TextViewにhtmlの文字列を読み込ませる
こんな感じです。
で、最終的には3を使ったのですが、最初に1を使ってはまってしまいました。


1.Linkify.addLinksで行う


TextView textLink = (TextView)findViewById(R.id.textLink);
textLink.setText("頑張ってぐぐるよ!");
Pattern pattern = Pattern.compile("ぐぐる");
String scheme = "https://www.google.co.jp/";
Linkify.addLinks(textLink , pattern, scheme);

これだけです。
これで「ぐぐる」の部分にリンクが表示されます。
まあ、便利。
ただ、Linkifyはちょっとした問題があります。
それは「スキーマで指定したURLの後にパターンで指定した文字列がくっついて表示される」ということです。
これには地味にはまりました。
Applies a regex to the text of a TextView turning the matches into links. If links are found then UrlSpans are applied to the link text match areas, and the movement method for the text is changed to LinkMovementMethod.
と思いっきり「into links」ってあるやん!となってしまいまして、ふりだしに戻りました。

2.TextViewの属性であるandroid:autoLinkを使う

これはよくある方法です。
この中で定義されている「android:autolink」の属性で自動的に読み取ってリンク化してくれます。
とっても便利。
ちなみに設定できる値は下記の通りです。
  • web:リンクにURLを貼り、ブラウザを起動させる
  • email:メールアドレスにリンクを貼り、メーラーを起動させる
  • phone:電話番号にリンクを貼り、電話を起動させる
  • map:住所にリンクを貼り、マップを起動させる
  • all:上記全てにリンクを貼り、各リンクに合わせた挙動を行ってくれる
うん、とっても便利ですね。
でも、これだけですとhtmlのような文字リンクが実現できません。
そのため、最後にこの方法で実現させました。

3.TextViewにhtmlの文字列を読み込ませる

大雑把に言うとこんな感じですので、コードを載せます。

TextView textLink = (TextView)findViewById(R.id.textLink);
CharSequence charSequence = Html.fromHtml("がんばってぐぐるよ!");
MovementMethod mMethod = LinkMovementMethod.getInstance();
textLink.setMovementMethod(mMethod);
textLink.setText(charSequence);  

こんな感じで書いていきますと「ぐぐる」の箇所にリンクが貼れます。
最終的にはこれで行きまして、なんとかうまくいきました。
ただ、2で説明しました「android:autolink」属性をxmlに定義しますと、リンクが表示されなくなってかなりはまってしまいましたので注意してください。

ちょっと長くなりましたが、このようにして私は実装を行ってきました。
そのうちネタが集まったら改めて更新しようっと。

Androidアプリ開発者のためのiPhoneアプリ開発ハンズオンに参加します

来る4/22に渋谷で行われるイベントにチューターとして参加します!

第1回Android開発者のための初めてのiPhoneアプリハンズオン勉強会[女性枠] #andiphone #andronjo

第1回Android開発者のための初めてのiPhoneアプリハンズオン勉強会[男性枠] #andiphone

講師はCoronaSDKのエバンジェリストであるころすけさん(@corosuke_k)です!


ころすけさんと愉快な仲間達でやることになっていますので、お時間のある方はまだ残席があるようですのでぜひぜひー。


今気付いたけど、愉快な仲間達になった経緯はねじさん(@yoichineji)のさいたま勉強会な気がするんだな。
さいたま勉強会は蕨の商工会議所で不定期に行われていますので、もし行われるのでしたら告知しますね。


あああ、頑張ってobjective-cの勉強をしなくっちゃ!