大学・院・留学進学準備のための放送大学

長らく放置してたhatenaだけど最近Twitterはてなで若いITエンジニアの方々が計算機科学や情報工学の学士、修士を目指される方をお見かけすることが増えたので、そうゆう方々の参考になるんじゃないかと思い私が通っている放送大学について書いてみることにしました。

私は一応社内SEやただの事務やらでぼちぼち働いてたおばちゃんなんだけど子育て一段落したアラフィフになったタイミングで、大学で基本的な計算機科学(以下CS)を基礎からきちんと勉強したいという動機で放送大学情報コースに2019年4月から入学しました。放送大学は文部省か承認する正規の通信制大学で情報以外に6つのコースが有り。卒業すると学士(教養)がとれます。詳細な情報はサイトで確認してください。

www.ouj.ac.jp

情報コースのシラバスは以下

放送大学 授業科目案内 コース科目 情報コース

受けた実感では情報系科目に関しては物凄く難しくはなかったです。ただ他の一般教養科目や数学に関しては業務で得た知識通用しないし勉強した積み上げもないので正直しんどかったです。高校数学結構真面目に練習問題ときましたw

それを踏まえて今後、IT業界の方が他の院や大学に進学された方の記事読んで思うのは、「IT業界の方は情報科目はともかく他分野の科目は予習しといたほうがいいかも」です。将来ある若い方がアメリカの通信制大学に英語で受けたり、スキップして院進学は当然あり得る選択なんですが、いざ勉強となると情報科目はともかく他分野(数学とか一般教養)だと正直英語で授業受けたり準備しないで行くと、理解不足を痛感する事態になりうる、当然単位を取得しないといけないのでそのプレッシャーもあります。それの対策として先に放送大学で勉強しとく手もありかなと思います。今すぐ高等教育期間の進学は考えてなくてもCSの勉強がてら単位とってれば他の大学や留学に行きたくなった時単位移行できるので少しでも楽になりますしね。

1科目2単位1万1千円、または1単位5500円とっとくと他の全科目オンラインで放送授業見れちゃうので、もし通われてる大学で他科目が辛くなった時、予備の勉強として日本語で授業受けれる効果はあると思います。講義や教科書は入学試験がない大学という性質上ものすごく基礎からきちんと書かれていて、ちゃんと入門が「入門」の内容範囲になっていて勉強しやすかったです。あ、あと学籍あればおばちゃんでも学割ききますよw、AWS educateすぐとれましたからw

正規の大学なので他の通信大学に編入する際も単位は認められます。アメリカの大学でも認められるようで、どうやら留学希望の際放送大学で単位をとって費用や期間を節約するのは割とよくある方法みたいです。苦手な科目を日本語で勉強できるだけでもメリットあると思います。

www.ryugaku.com

lindablog.net

通信制大学で最近話題のUniversity of People でも単位移行できるみたいです。ただし外部の評価機関に単位認定の委託はする必要はあるようです。そこは留学と同じですね。

universityofpeopleforjapanese.blogspot.com

spearer.hatenablog.com

留学まで行かなくても他大学の編入狙いで費用負担が軽く全国に学習センターがあってスクリーニングや試験のための移動負担が軽い放送大学は助けになるのではないか?私も他の通信大学は検討したんですがほとんど首都圏でスクリーニングがあり費用や時間の負担を考えた末での選択でしたので、特に地方在住で通信制を考えてる方はご検討されてはどうでしょうか?

あと放送大学の単位でも大学改革支援・学位授与機構に申請して試験受けると教養以外の学士も取れる可能性あるかもです。工学も以下のパンフ確認するとありました。ここらへんは私がまだ入学して1年立ってないのでちゃんと調べてないのでご興味あれば。

新しい学士の途 https://www.niad.ac.jp/media/005/201902/no7_5_gakushi2019.pdf

www.niad.ac.jp

放送大学は必ずしも卒業しなくてもいい生涯学習のための大学なので、上記のような勉強方法にも比較的寛容ですよ。この記事が若い方の勉強の一助になれば幸いです。

ニンジャの父兄からCoderDojoメンター、チャンピオンになった訳

こちらはCoderDojo Advent Calendar 2017、12月9日の記事となります。 adventar.org

そういえばはてなBlogのアカウント持ってたので久々にこちらで。初めての方はじめまして。私はCoderDojo堺でメンター、CoderDojo富田林ではチャンピオンしております。FBやTwitterではhorinoAというアカウント名でやっております。 実は先日12月3日CoderDojo堺で、でかドージョーin泉北を開催して約120名の方々に参加していただくDojoを開催しました。ご参加していただいた皆様ありがとうございます

www.facebook.com

このDojoの開催時Coderdojo小平のチャンピオンとがぞのさんとの打ち合わせ中「ニンジャの父兄からメンターになった経緯は他の父兄にも共有すれば、Dojoを知るきっかけになるのでは?」という感じの投げかけがあり、アドベントカレンダーで書いてみようと思った次第です CoderDojo堺に参加したのは3回目か4回目だったかな?弟息子がMineCraftで遊んでるうちにコマンドなども触りだしPCに興味持ったのきっかけに、一人でやるより先輩メンターや同世代のPC好きな子がいる方がやりやすいだろうと、通いだしたのが理由でした。私もそんな言葉もない時代でしたが独身時代、社内SEで働いてたり個人開発でモバイルアプリ作ってたんで、まあプログラミングはしてましたし覚えて損するもんでもなしと、軽い気持ちで子ども連れてったんですよ。 3回目ぐらいに12月2日の記事を書いてるCoderDojo堺メンターmiho makiさん CoderDojo行ったら人生変わったwww(ちょっとだけ) - Qiita

に「メンターやってみませんか?」とお声がけいただきました。軽い感じでOKしたのを覚えてますね。そのころから堺はニンジャの応募が増えてきて参加しにくい状況が始まってました。ぶっちゃけ 「あーーメンターなら抽選落ちないし、周りの父兄の方からも毎回参加しててもメンターなら文句言われにくいなーーーー!!」 みたいな雑な理由で参加決めたんですよ。まじ雑。それでチャンピオンまでやる事になるとは、その時は思っていませんでしたが。

私はたまたま社内SEの経験があった上、4、5年地元で親子支援NPOのスタッフの経験もあったので、フィットしたスキル持ってただけで、ただ今までの経験を横滑りさせてるだけ、本当にPTA参加ぐらいの気軽さで活動してます。「プログラムした事ないし」ってニンジャの父兄の方でも例えば「広報してる」って方はブログの更新(地味に大変です・・・)手伝っていただいたり、事務経験の方は経理や場所を抑えていただいたりと、今までの経験横滑りしていただくだけで全然メンター参加していただけますよ。プログラムの知識は後から勉強できますし、ご興味ある方はぜひメンターにお声がけをしていただければと思います。ちな普通のPTAより集まり楽ですよwwwミーティングはオンライン(ハングアウトやzoom)だし細かい打ち合わせはチャット(Slack)だし、みんないちいちオフラインで集まんないんで。飲み会はオフラインだけどねwww

チャンピオン始めたのもCoderDojo堺のメンターの皆がいなきゃやらなかったですね。堺チャンピオンが参加する富田林のNPONPO法人 志塾フリースクール ラシーナ - ホーム | フェイスブックを会場スポンサーしてもらってるし、他のメンターも手伝ってくれてるからDojoやれてるので、これだけラッキーな、確実に他の方々より有利な状況であんまり何かやらないのは逆に勿体無いような気がしたんですよ。

まあ私の経験が他のメンターやチャンピオンの方々の参考になるかはわからないですけど、Dojoにちょっとでも興味持っていただけたら嬉しいですね。メンターはDojoでいつでも待ってますんで。お気軽に相談どうぞ。

そういえばこのAdeventerに参加する時聞かれてました。「あなたがDojoに来る理由はなんですか?」私が参加し続ける理由ですか。

実は私、一応進学校いったんですけど大学進学できなかったんですよ。親が脱サラ失敗しちゃって。女が大学行くなんてって時代でしたし。就職してラッキーな事にPC-98触らせてもらったのが、この道のきっかけ。私みたいな貧乏人の子がPCに関われたのなんか本当にラッキーでした。結婚してからも家族病気になっちゃって治るのに6年かかっちゃった。そりゃもっと大変な方いるのは知ってるけどそれなりに生きるの必死な日々で落ち着いたのここ4、5年ですかね〜〜。色々あったけど良い時も悪い時も、そばにいたのはコンピューター・サイエンスでした。そんな一生の友達を子ども達に作ってあげたいですね。コンパイラはいつもそばにいて裏切らないですから。

子ども達には私みたいに生き抜くために時間すり潰すようなやり方ではなく、できれば夢をもってそれに向かって進めるような生き方を進んで欲しいです。CoderDojoがそのきっかけになれば、こんな嬉しいことはないですね。

明日はCoderDojo枚方の角田一平さんです。

StoryBoardの箱入りっ娘ぶりに泣かされたので注意点メモ

もうStoryBoard辛い(;_;)

まじ許してください、Androidxmlは基本枠のみでviewの紐付けやらビジネスロジックの実装やらは基本全部コードで役割が分かれててコード書きには楽ですが、iosのUI周りはStoryBoardとViewControllerで両方設定できるため混乱しやすかったです。辛タン・・・

遷移はあんまNavigationControllerとか使わないでviewをaddsubviewしてます。その方がdelegateとか使いやすいんで。基本はこのスライドが激参考になります!

www.slideshare.net

注意1:User Interaction Enabledは忘れるな!

プロはm9(^Д^)プギャーーーッでしょうが・・・StoryBoardチェック抜けるのよ!!こんなんしらん!!これのチェック抜けるとsubviewのイベント拾いませんので注意です。こんなしょうもないことでどはまり・・・コードでも設定できるけどね

f:id:poTracy:20160716053722p:plain

注意2:UIコンポーネント(特にPickerView)は辛い

iosのUIコンポーネントは基本的には色ぐらいしか、弄っちゃいけない設計思想らしく(や、Appleやね)StoryBoardにあるコンポーネントならサイズや行数はコードで設定し直さないといけないっぽいです。おかげでCGAffineTransformMakeTranslation(ビュー変形や移動のためのクラス)という長い名前のクラスを知りました・・・

iphone - UIPickerView Height customisation - Stack Overflow

がっつり設定したかったらStoryBoardでなくコードでビューのインスタンス作ってビューの設定書いてaddsubviewする方法もあるようです。あんまStoryBardの意味ないよな・・・

iosでUI作るのはTableViewで行設定するのが一般的っぽいですが、cellにpickerView追加するのもStoryBoardで直接配置はできないようでコードでコンポーネントインスタンスを追加しなければいけないようです。あんまStoryBardの意味ないよな(大事なことなので2回言いました)

ios - UIPickerView in UITableView - Stack Overflow

注意3:でもWebviewでもつらい

あんまり辛かったのでhtmlで画面設計してJsonで値受け渡しすればAndroidでも使いまわせるしいいやんとばかりに組み出したんですがiosはwebviewのクラスが

  • UIWebView

  • WKWebView

  • SFSafariViewController

となんか3種類あり( ;´Д`)、UIWebviewはJavasprictグダグダとか!WKWebViewはローカルファイルは/tmp以下じゃないと読まない!とか、そもそもモバイル用htmlの書き方弱いので時間かかるとか、色々あり無駄〜に時間がかかってしまいました。でも画面設計はJqueryMobileとか使えばこっちの方が手軽なんで楽かもしんまい。

と完全に自分用のメモでStoryBoardのハマりどころを書きましたが、

結局自分の調べ不足なんですけどと反省しつつやっぱい辛いのでこれ聞きながら辛さを我慢しました。このままじゃ〜気が狂いそうさ、Oh!Girl

youtu.be

アマチュアでもできるKotlin-Android3「Callbackをお手軽に」

AndrodJavaで面倒くさい処理の一つが非同期処理、Thread作ったり、AsyncTask使ったりすればいいわけですが、例えば1つ非同期処理を走らせて、帰って来た結果を判定しまた別の非同期処理を走らす、みたいなことになるともう猛烈に書くの大変なわけです。できればもうチョッと簡単に非同期をすましたい、コールバックを簡単にかければあとは賢いライブラリに非同期処理をやっていただければいいわけです。AndroiderにはおなじみのHTTPクライアントRetrofit

square.github.io

を使って今回は写真共有サービス「フォト蔵」さんのsearch_publicAPIを叩いてみたいと思います。事前に取得キーなどは不要です

photozou.jp

Retrofit用のインターフェースと実装を準備

も、細かい実装方法は上記のリンクを読んでください。も、びっくりするぐらい簡単、まず、パラーメータを受け取ってRetrofitのどのコマンドを使うか指定するインターフェースを指定します

public interface PhotoZoApi {
    @GET("/rest/search_public.json?limit=5")
    Call<mainSerchPhotoZo> getPotoZo(@Query("keyword") String keyword,@Query("limit") Integer limit);

}

んで、あとはRetrofit本体とインターフェースのインスタンスを作って、実際にリクエストを投げる命令を書くだけです。

override fun retrofitCall(keyword:String,limit:Int,callback:(mainSerchPhotoZo?) -> Unit) {
        val retro = Retrofit.Builder()
                .baseUrl("https://api.photozou.jp")
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        val service = retro.create(PhotoZoApi::class.java)
        val call = service.getPotoZo(keyword,limit)
        call.enqueue(object : Callback<mainSerchPhotoZo>{
            override fun onResponse(response: Response<mainSerchPhotoZo>?, retrofit: Retrofit?) {
                if (response?.body()?.stat == "ok"){
                    callback(response?.body())
                }else{
                    callback(null)
                }
            }
            override fun onFailure(t: Throwable?) {
                callback(null)
            }
        })

    }

Retrofirの実装部分を関数化してるんですが、引数に関数リテラル(いわゆる無名関数)を詰めるのがポイントで、リクエストした結果が返ってきた際、無名関数の引数に結果を詰めてやります。で、実際にこの関数をリクエストするコードが以下

これが高階関数の威力か・・・(CV:池田 秀一)

retrofitCall(keyword, limit, { callback ->
       callback?.info?.photo?.let { photo ->
           v.mPhoto = photo
           val adapter = PhotoAdapter(photo, v.activity.applicationContext)
           v.my_recycler_view.adapter = adapter
       }
})

引数、関数リテラルの部分にHTTPリクエストが返ってきてからの処理、この場合は返ってきたJsonをRecycleViewのAdapterにはめる処理を行っています、関数リテラル内の実行部分はmeinThreadになるのでこの中でビュー操作をすればエラーになりません。も、非同期処理これだけで済みます。( ・`ω・´)ドヤァ!、もう私はこれだけでKotlinに移行してよかった!むしろ非同期処理だけはKotlinで書きたい!という感じです。あ、でも高階関数使ったらJavaクラスから読めないかも?と思った皆さん、そんなことはありません。KotlinはJavatとの強力な連携が売り。

public class TestFragmentUI {
    protected void test(String keyword, Integer limit,RecycleFragment v){
        RestApi restApi = new RestApi();
        restApi.retrofitCall(keyword, limit, new Function1<mainSerchPhotoZo, Unit>() {
            @Override
            public Unit invoke(mainSerchPhotoZo mainSerchPhotoZo) {
                if (mainSerchPhotoZo != null){
                    for (Photo photo : mainSerchPhotoZo.getInfo().getPhoto()) {
                        Log.d("photoArray",photo.toString());
                    }
                }
                return null;
            }
        });
    }
}

関数リテラルの部分の引数はFunctionでインスタンスを作ってUnit部分はInvokeメソッド以下で指示すればおk。Javaとの連携が以下のスライドで詳しく述べられてます。すごくわかりやすい解説です。

www.youtube.com

この記事で作ったプロジェクトはGitHubにあげてあるのでご参考にどうぞ、

github.com

せっかくGit入門#関西Java女子に行ってきたのでまとめてみる

4月24日、いつもお世話になっている関西Java女子部 #javajok でGit入門というテーマで勉強会&ハンズオンが開催されたので、参加しました。

javajok.connpass.com

充実の基礎公演とハンズオンだったので、IDE経由でしか操作したことなくてかなり薄ぼんやりしたイメージしか持てなかったGitがかなり具体的につかめたので主に全部じゃないけど自分用でまとめてみました。当日の資料は以下です。豊富なイラストで大変わかりやすい!

www.slideshare.net 以下のURLで当日のハンズオンのレジュメが公開されています。主なGitコマンドがほぼ網羅されていて早見表にもいいです https://github.com/ihcomega56/git-handson/blob/master/documents/HandsOn.md

リポジトリを作成する

リポジトリとはファイルの変更履歴を補完する箱みたいな物という解釈です。

git init

プロジェクトのディレクトリに新規にリポジトリを作成

cd リポジトリを作成したいフォルダ
git init

git clone

すでにあるリポジトリから複製してくる

cd リポジトリを複製したいフォルダ
git clone すでにあるリポジトリのURL

Gitのリポジトリには2種類あって自分専用のローカルとサーバーにあって他の開発の方も反映できるリモートがあります。この2種類があるためGitは分散型バージョン管理とよばれます。

ローカルリポジトリでの作業

ローカルリポジトリーはワークツリーとローカルリポジトリという状態に分かれています。ワークツリー状にあるある対象ファイルをまずリポジトリに追加できるようにし(git add) そののちリポジトリに追加します。(git commit)。 f:id:poTracy:20160428170119p:plain

図は「Gitはじめの一歩」より引用。以下図は全てこのスライドより引用させていただきます

git add

対象ファイルをcommit対象へ

git add 対象ファイル

git commit

git commit -m "コミットコメント、ちゃんと書かないとわからない"

f:id:poTracy:20160428171232p:plain

こみっちゃん爆誕。

調子乗ってコミットします

f:id:poTracy:20160429064637p:plain

f:id:poTracy:20160429063448p:plain

リポジトリの中にこみっちゃんが連なります。この連なりが(メイン)ブランチになります。

取り消し系コマンド

デンジャラス系コマンドですね。コミット取り消しをやってみます

git revert HEAD

ちゃんとIDEでも歴史が戻ってます!削除系コマンドはこちらでまとまっています。sinkin' in the rain — Gitの取消練習

リモートリポジトリへ追加

まずリモートリポジトリ用のWebサービスGitHubリポジトリを作成します。レジュメのハンズオンhttps://github.com/ihcomega56/git-handson/blob/master/documents/HandsOn.mdリポジトリを作って、コミット・プッシュしよう。−6の手順通り、進めます。 リポジトリ作成後、GitHubでこのコマンド叩かんかいとメッセージが出ます

git remote add

ローカルとリモートリポジトリを紐つけます

git remote add リモートリポジトリの名前 リモートのURL

git push

ローカルからリモートへコミットをあげます

git push リモートリポジトリの名前
git push -u リモートリポジトリの名前 ブランチの名前

f:id:poTracy:20160429155937p:plain

とりあえずkt分だけGitHubにあげました

長くなってきたので・・・・

結構ボリュームのある勉強会だったのでブランチ以降の記載は次回に分けます。(スタッフの皆さんお疲れ様です)スタッフの皆さんオススメのGit書籍をあげておきます。

Excel関数、VBAポケットリファレンスでもポケット入らないです

アマチュアでもできるKotlin-Android2「RecycleViewをKotlinで」

RecycleViewを書いてみよう

RecycleView全然手出ししてなかったのでやってみようという単純かつおばかな理由でKotlinで実装する事にしました。以下資料

Developer http://developer.android.com/intl/ja/reference/android/support/v7/widget/RecyclerView.html

チュートリアル http://developer.android.com/intl/ja/training/material/lists-cards.html

Googleのサンプル https://github.com/googlesamples/android-RecyclerView

や〜Googleデベロッパーは英語が簡単でいいな〜、This is a Pen〜I am Pen〜レベルの英語。Appleデベロッパー行った時英語の難しさで(T . T)泣きましたもん。基本的にはlistViewみたいにAdapter作ってxmlはめればいいんですが多少注意が必要です

調べれば調べるほど「普通のやつはListViewでいいんじゃね?」と思いました。 http://sys1yagi.hatenablog.com/entry/2015/01/09/090000

Kotlinで実践的にAndroid実装する時のポイント

Kotlinは覚えやすいけど当然Javaと違うので幾つか注意点抑えとかないとです

Nullの扱い方

NullSaftyな言語なんで当然扱い方にルールがあります。@yy_yankさんのこのページが大変参考になりました。Swiftでもこういうページが欲しかった

【Nullいことしてんじゃねぇ】声に出して読みたいKotlin http://yyyank.blogspot.jp/2014/12/nullkotlin-ktac2014.html#Pbp3acE.twitter_tweet_box_count

・Nullじゃなけりゃ手短に(If not null shorthand)

・Null如何にせよ手短に(If not null and else shorthand)

・Nullじゃなけりゃ、やっちまえ(Execute if not null)

・ユー、whenで返しちゃいなよ(Return on when statement)

・ユー、ifで返しちゃいなよ(Return on if statement)

・ユー、tryブロックごと返しちゃいなよ(Return on try catch block)

・非Nullだってばよ(Not-Null)

・マップにお任せ(Storing Properties in a Map)

・Null安全(Null Safety)

・安全なキャスト(Safe Casts)

・安全呼び出し(Safe Calls)

エルビス演算子(Elvis Operator)

コンストラクタ

Kotlinのコンストラクタはめちゃ簡単、

class CustomAdapter(cardview : Array<card_View>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>(){
    protected val mCardView : Array<card_View>  = cardview

セカンダリ及びsuperつきだとこんな感じ

class ViewHolder : RecyclerView.ViewHolder {
        constructor(v: View):super(v) {}
}

ちょっと面食らうくらいシンプルなんで逆に迷いました。JavaからKotlinで一番面食らうかも。詳しくは以下のサイトで解説されているのでご一読をhttp://dev.classmethod.jp/smartphone/android-kotlin-introduction-04/

スコープ関数

Kotlinに用意されてるパッケージの中でインスタンスをいじる時に用意される便利関数。エバンジェリスト@ngsw_taroさんの解説が詳しい。

デベロッパーのサイトでもスコープ関数以外もあるまとまった解説がありました。

詰まった時はAndroidStudioのコード補完が教えてくれます。コード補完でメソッド名にあたりをつけたらググってデベロッパーなり優秀な方がの記事で調べてます。実装の段階になればNullチェックに使うlet、インスタンスをいじるapplyあたりは必ず使う感じです

実装コード見本

以上の点を抑えつつ実装に入ります。今回は例としてRecycleViewのAdapterクラスのコードを晒してみます

class CustomAdapter(cardview : Array<card_View>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>(){

    protected val mCardView : Array<card_View>  = cardview

    class ViewHolder : RecyclerView.ViewHolder {
        constructor(v: View):super(v) {
            //SAM変換がもろにきいてます
            v.setOnClickListener { print("Element " + getAdapterPosition() + " clicked.") }
        }
        //KotlinExtentionを使ってるのでfindViewByIdはなし
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder? {
        val v : View = LayoutInflater.from(parent.context).inflate(R.layout.recycle_card,parent,false)
        return ViewHolder(v)
    }


    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        Log.d("test",mCardView[position].card_title)
        //setter,getterは書かなくてもインスタンスについてくる
        holder.itemView.card_title.text = mCardView[position].card_title
        holder.itemView.caption1.text = mCardView[position].caption1
        holder.itemView.caption2.text = mCardView[position].caption2
    }

    override fun getItemCount(): Int {
        return mCardView.count()
    }
    
}

コード少ない!軽いプロジェクト1個書いたんですが体感でコード量は2/3に感じます。同じ内容をJavaでもかいてみます

public class CustomAdapterJava extends RecyclerView.Adapter<CustomAdapterJava.ViewHolder>{

    private ArrayList<card_View> mCardview = null;
    private  static final String TAG = "CustomAdapterJava";

    public CustomAdapterJava(ArrayList<card_View> cardview){
        mCardview = cardview;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private TextView mTitle = null;
        private TextView mcaption1 = null;
        private TextView mcaption2 = null;

        public ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d(TAG, "Element " + getAdapterPosition() + " clicked.");
                }
            });
            //以下三行はDataBindingしてればいらない
            mTitle = (TextView)itemView.findViewById(R.id.card_title);
            mcaption1 = (TextView)itemView.findViewById(R.id.caption1);
            mcaption2 = (TextView)itemView.findViewById(R.id.caption2);
        }

        public TextView getmTitle(){return mTitle;}
        public TextView getMcaption1(){return mcaption1;}
        public TextView getMcaption2(){return mcaption2;}
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recycle_card, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.getmTitle().setText(mCardview.get(position).getCard_title());
        holder.getMcaption1().setText(mCardview.get(position).getCaption1());
        holder.getMcaption2().setText(mCardview.get(position).getCaption2());
    }

    @Override
    public int getItemCount() {
        return mCardview.size();

    }
}

setter,getterいらないだけでもかなり可読性違うと思います。以上AndroidをKotlinで実装する際の最初のポイントっぽいのをまとめてみました エミュレーターで実行したらこんな感じです。 f:id:poTracy:20160423200457p:plain

アマチュアでもできるKotlin-Android1「プロジェクトをKotlin化」

Kotlinでコード減らしたい!アマグラマの手抜き戦略

趣味でほそぼそAndroidいじって一応アプリ公開までいきましたが、AsyncTaskうぅ〜ん、なんでBundleにやたら詰めるんだろう、そもそもJava7(´Д` )ってありがちな課題でうろうろ調べていた去年末、Kotlinが熱いらしいとググりつけ調べてみました。ぱっと見Swiftに似てるし比較的早く習得できるかなと、去年の年末あたりから調べだしたらドンピしゃで個人的にはこれからKotlin中心で頑張りたいなあと思っています。気軽に新し目の技術に触れれるのがアマチュアのいいところですね。

そもそもKotlinって何?

IntelliJ IDEAとかいけてるIDEの開発元JetBrains社が新しく作ったJVM言語。2月に晴れて正式リリース。Java7でうんうんいってるAndroid界隈中心にBetterJavaの一角としてにょきにょき話題になってます。Null-Safety(ぬるぽなし)でPragmatic(実用的)なところがお気に入り。本当覚えること少ないんだよね。言語の特徴はこないだ参加したKotlin 1.0リリース記念勉強会 in 京都 http://kanjava.connpass.com/event/27758/ で発表していただいたこのスライドがわかりやすかったです。

www.slideshare.net

じゃAndroidでKotlin始めてみよう

といってもAndroidStudioでPreferences->PluginでKotlinのプラグインインストール後プロジェクト内のJavaファイルをKotlinにコンバートするだけでbuild.gradleまでKotlin用の設定に書き換えてくれます。IntelliJ IDEA さんまじカッケー。あ、KotlinはJetBrainsさん開発だった(・ω<) テヘペロ。手順詳細はhttps://www.gaprot.jp/pickup/tips/kotlin_for_androidで確認どうぞ

f:id:poTracy:20160419155238p:plain

変換したbuild.gradleの主要部分は以下です。今回はHTTPclientのRetrofitと画像読み込み、キャッシュのライブラリPicasso、Kotlin入れると使えるDataBindingのプラグイン Kotlin Android Extensionsも入れてみます。

    //KotlinExtention追加
    apply plugin: 'kotlin-android-extensions'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.3.0'
        compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
        //今回はRetrofit2と
        compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
        compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
        //Picassoを使ってみます
        compile 'com.squareup.picasso:picasso:2.5.2'
    }

    buildscript {
        ext.kotlin_version = '1.0.1-2'
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        }
    }
    
    repositories {
        mavenCentral()
    }

で、紐つけたいActivityにimport分追加するとバイバイfindViewByIDできます。

import kotlinx.android.synthetic.main.activity_main.*

f:id:poTracy:20160419154141p:plain

簡単です。IntelliJ IDEAの強力なサポートは超魅力的。次回はFragmentあたりを実装していきたいと思います