2020/5/22に開催されたJJUGイベントでの登壇資料です。
1.0.0 がリリースされました。やりましたね。 僕の観測範囲内に見えることが増えてきたので、興味本位で少しずつ触っています。 まず、ブラウザだけで試せるチュートリアルが大変素晴らしいので、Kotlin が肌に合うかどうか確認するといいですよ。 Kotlin Koansjs で実装されたエディタなのにシンタックスハイライトだけでなく、入力補完がガンガン効くので凄く良い。 僕の理解#大体 3 日くらいかけて言語仕様やマニュアルの類を読みながらチュートリアルをこなした結果、 Kotlin は 安全な次世代の Groovy であるという理解に到達しました。 僕が Groovy に対して持っていた不満は、大体以下の通り。 ランタイムがデカ過ぎるgroovy-all-2.4.6-indy.jar が 6.5Mバイトコードエンハンス等の危険な黒魔術がカジュアルに動く型がありそうで、実は殆どない型があま
目次 はじめに 技術選択の基本的な方針 技術選択の各論 HTTP Client Dependency Injection View Injection Asynchronous Control Flow Object Relation Mapper Logging Fragment はじめに 技術部の id:gfx です。 Android版クックパッドアプリのリニューアル*1 から約1年たちました。現在はリリースごとに5人程度がコミットし、2週間に1度リリースを行う開発体制となっています。プログラミング言語はJavaで、コメントも含めたアプリのソースコードの行数は約15万行です。 本エントリでは、Android版クックパッドアプリで使っている技術、具体的にはライブラリやフレームワークについて紹介します。また、そのための技術選択のアプローチについても概説します。 技術選択の基本的な方針 まず
Introduction Retrofit turns your HTTP API into a Java interface. public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } The Retrofit class generates an implementation of the GitHubService interface. Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build(); GitHubService service = retrofit.create(GitHubServ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 今から Android やるならチェックしておきたい、厳選イカしたオープンソースライブラリ一覧。 support-v4 や support-v7-appcompat などは公式のものなので割愛。 開発環境 Android SDK Android SDK Installer 公式からダウンロードしてポチポチとチェックを入れてはダウンロードして…が面倒くさいならコレ。 シェルからコマンド一発でダウンロード出来るので、CI で使うのにも便利。 ADB Idea AndroidStudio および IntelliJ 用のプラグインで、IDE か
秘密鍵やプライベートな情報などを秘匿するためにパスワードでデータを暗号化・復号したい場合があります。このとき、暗号化と復号するアプリケーションが同じであれば簡単ですが、例えばCで暗号化してJava、Perl、Rubyで復号するといった風に異なるプラットフォームで暗号データをやりとりする場合には、いくつか気 をつけなければいけないポイントがあります。 OpenSSLによる暗号化 OpenSSLはWebサーバのSSL/TLSサポートに利用されますが、その他にも付属しているopensslコマンドから基本的な暗号アルゴリズムを利用できます。次のような簡単なコマンドで、パスワードを使ってデータを暗号化したり復号したりすることができます: $ echo 'Hello World!' | openssl enc -e -aes-128-cbc > cipher.txt enter aes-128-cbc
追記1: コメントでの指摘を受け、gvmに関する記述を削除 この記事は、日経ソフトウェア 2013年 06月号 04/24発売 のステマ記事です。 6月号に、@keiji_ariyama(前座部分担当) と 僕(Gradle概要担当) と @sys1yagi(Android対応部分担当) という分担でGradle入門的な記事を書きました。 ですが、僕の目的としてはトップゲート社員への布教を主目的と考えて書いたため、本来要求されている分量を(わざと)大幅にオーバーして書いていました。雑誌に掲載されなかった溢れ分をネットで公開して良いか打診した所、「全文掲載でも良いですよ」という豪気なお許しを頂いたのでここに公開します。この場を借りてお礼申し上げます。 プロの編集さんの手を経て、だいぶわかりやすく噛み砕かれたものが雑誌のほうには掲載されていますので、ここに書いてある内容が難しいなぁ…と思ったら
先日僕の誕生日だったのですが、思いがけず、色々な方々に祝ってもらえて、ものすごく嬉しかったので一年間でやったことをまとめてみようと思いました。 チームの方がたにも祝ってもらえた涙。本当にありがたい!! pic.twitter.com/w5QrLfmdnk— Yosuke FURUKAWA (@yosuke_furukawa) December 11, 2013 ありがたい!!! pic.twitter.com/lTrNI1hrnf— Yosuke FURUKAWA (@yosuke_furukawa) December 11, 2013 さて、一昨日、12/11は僕の誕生日であり、DeNAに転職して丸一年経ったという事で、どういうことしてきたかという事を書いていこうかと思います。 以下のエントリに触発された面もある。 フリークアウトに転職して丸2年が経った - myfinderのはてなブロ
なんで? 正規表現で使われる=~の実態はRegexp#=~なんですが、この時 右辺に使えるのはStringだけ です。 ついでに、String#=~はRegexp#=~のシンタックスシュガーで、これによって辺を交換しても動作します。 (参照: http://osdir.com/ml/lang.ruby.japanese/2007-05/msg00058.html ) 世間(というか自分の周り)では、"Hello" =~ /e/と書くほうが圧倒的に多く、 それどころか/e/ =~ "Hello"と書けるのかどうか自信ない、なんて人もいました。 ところで、Object#=~があるのもあって、一応5 =~ /5/なんて書くこともできます。 結果はnilです。 これは"5" =~ /5/あるいは5.to_s =~ /5/と書けば意図通りです。 もちろん/5/ =~ 5とは 書けません。前述のとおり
※コラ画像削除しました ビッグデータ、データサイエンティスト、そろそろ過渡期ブームも終わりつつあるように見えてきたのは結構なことです。なので私はデータベース・トンガリストに鞍替えします。嘘です。行けませんでしたがマニアックなDB話を聞きたかったです。 どっちにしても普通に粛々とやるしかないんすから騒いでも絶望しても仕方ないんですよ。実務してない奴ほど騒ぐもの。(←非常に見識の狭いダメ発言) 日頃、扱っているデータ。それビッグデータでしょ、と言われるだけで、やる気がなくなる昨今。スモールデータでもいい(←それこそが重要ですよね)と思うし、何度も繰り返される、「いままで1ヶ月かかってたデータを1日にしました」とか言う話も、ビッグデータと関係ないんじゃないの、単に多段承認フローというかステークホルダー減らしただけではと思ったりしますよね。逆にそっちのほうがすごいと思うんだけども。 で、ビッグデー
「[Android] Android で Google Analytics - adakoda」の書き込みのとおり、 Google Analytics では、Android 1.5 標準のブラウザからのアクセスは、Safari / Android と認識されるのですが、 プログラム的にもユーザーエージェントを調べてみました。 UserAgentを取得するには、 android.webkit パッケージ - WebSettings クラスを使用することで、UserAgent を取得することができます。 具体的なサンプルソースコードは、以下のとおりです。 WebView webView = new WebView(this); WebSettings webSettings = webView.getSettings(); String userAgentString = ""; userAg
Android 4.4 (Kitkat) のソースコードが公開されました。話によるとDalvikを置き換えるARTというものが開発者向けに使えるようになっているそうです。面白そうなので調べてみました。以下は全て推測と個人の感想です。 ART とは 公式な情報はこれ https://source.android.com/devices/tech/dalvik/art.html Dalvikと置きかえて使えるランタイム まだ開発中。開発者のフィードバックを得るために公開した Dalvikがデフォルトであると強調。 Dalvikのランタイムはlibdvm.soで、ARTではそれがlibart.soに置き換わるらしい。開発者メニューでどちらを使うのか切り替えることができるようだ。 http://gigaom.com/2013/10/22/google-buys-frances-flexycore-
Androidでの開発ではAndroid OSをある種のフレームワークと捉えてその作法に則ってうまく「使われる」プログラムを書かなくてはならない。なのでそのフレームワークがどういう仕組で、どういう流れで僕らの書いたコードを呼び出すのかということを理解することがよい設計に結びつく。と、大風呂敷を広げているが僕もさほどAndroidに精通していないのでこれは努力目標みたいなもんです。 大雑把に割愛して、今回のテーマに関係の深いところをピックアップする感じでいきますか。 テーマのAsyncTaskだけども、要は非同期処理をしたい時に使う。Javaで非同期処理といえばThreadなんだけどもAndroidでは一般にAsyncTaskを使う。AsyncTaskではUIスレッドを使った非同期処理を簡単に(?)実装できるという触れ込み。 UIスレッドとは? そこでまずUIスレッドとは何かを理解せねばなる
ライブドアブログの PSGI 化の話 は良いはなしだと思う。一方で、私はあんまり Perl が好きじゃないので、10年にわたって生き続けた Perl アプリケーションが、次の10年にむけてアップをはじめているのは、ちょっとしたホラーでもある。 Twitter と Ruby と JVM ライブドアブログが、将来に向けて mod_perl から PSGI + Starlet にかえたように、将来に向けてプログラミング言語をかえる人達も存在する。最近の事例で有名なのは、Twitter の Ruby から JVM 言語群への移行だろう。 OSCON Java 2011 の Twitter: From Ruby on Rails to the JVM では、JVM への移行に至った理由として Ability to handle server workloads A real concurrency
ソフトウェアキーボードによって画面の領域がせまくなってしまうので、それに配慮した設計を行わないと、入力できなーい!なんてことになってしまいます。 そこで、画面上に出てくる入力メソッド(=ほとんとソフトウェアキーボード)についてまとめたいと思います。 元ネタはこちら Onscreen Input Methods Android 1.5 から Android プラットフォーム で Input Method Framework (IMF) が提供されるようになりました。これによって、開発者は ソフトキーボードのような画面上からの入力方法を作成することができるようになりました。 ・ Android input method editors (IMEs) の概要 ・ IMF, IMEs と一緒に動くアプリケーションにはなにが必要か について簡単に説明してきます。 ■ What is an input
Android Advent Calendar 2012 に参加しています。 本エントリはDependency InjectionによるAndroidアプリケーションの実装とテストの一方法について述べています。 文中に出てくるコードは全てgithubから取得できます。 Dependency Injectionとは簡単にいうと、あるオブジェクトが依存しているオブジェクト(以下、Dependency)を別の誰かが注入(以下、Injection)してあげることでオブジェクトの関係を疎結合にする方法です。 Dependencyを誰かがInjectionしてくれると、なにがいいのか? まず、逆に誰もInjectionしてくれない場合を考えてみます。 Dependency Injection 前 誰もInjectionしてくれない場合は自分でDependencyを設定するしかありません。 たとえば、天
だるすぎ— 高意識エネルギー体さん (@mizchi) 12月 1, 2012 “はじめてのDependency Injection - _development,” htn.to/yoYFMc— 高意識エネルギー体さん (@mizchi) 12月 1, 2012 人間はだるくない開発がしたい。 そこで、DIフレームワークを使うことにした。 Deep dive into RoboGuice beyond “Hello World apps” “RoboGuice 2 smoothes out some of the wrinkles in your Android development experience and makes things simple and fun!” ということらしいので、RoboGuice入れてみた。 インストール maven使ってないので Instal
CPUのクロックアップに限界が訪れ、マルチコア化することで処理性能向上を目指す時代になりました。これからのプログラマには、マルチコアで処理性能が向上するプログラム=マルチスレッドで並列処理が可能なプログラムを書く能力が必要になります。今回は「関数型」でプログラムを書くことによって、いとも簡単に並列化ができることを実例を元に解説します。 関数型プログラミングと並列処理 「関数型でプログラムを書くことで簡単に並列化できる」と書きましたが、そもそもここで言う「関数」とは何なのでしょうか? 関数型プログラミングの特徴 関数型プログラミングの「関数」を理解するためには、数学における「関数」を想像するとわかりやすいでしょう。 例えば三角関数を用いた y=cos(x) という式を考えてみます。この式に入力値 x=0 を与えた場合、いつでも必ず結果は y=1 になります。x= π/3 の場合は y =
Javaにはstaticというキーワードがあります。staticを日本語に直すと「静的な」という意味です。例を見てみましょう。 staticな変数 static int staticVariable = 1; staticなメソッド static void staticMethod(int arg) { //... } staticな内部クラス class OuterClass { static class innerClass { //... } } こんな所でしょうか。staticな変数やメソッドは見たことがあると思います。「何故かstaticメソッドの中には、staticな変数しか使えない」とか思っている人も多いのではないでしょうか。staticを図にすると、こんな感じです。 Dynamicな領域は、インスタンスが生成される時に確保されます。インスタンスが消滅する時(JavaにはG
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く