大チェッカーでモバイルアプリ開発についてのアンテナを作った

大チェッカーすばらしい。こういうのがほしかった。Mobile Application Developmentなおフィードはだれでも追加できるようにしてあります。

Maven Centralが依存ライブラリの "3.+" のようなバージョン表記を認めなくなってた

http://central.sonatype.org/articles/2014/Oct/28/enforcing-valid-dependency-versions/2014年10月の話ですが、これのせいで手元のライブラリのアップロードが失敗するようになってました。これからは、依存ライブラリのバージョンは "3.+" ではなく"[3,4…

AndroidエンジニアとJavaの関係

Androidエンジニアは初心者に対して「Javaくらいできるよね、さてそれではAndroidについて学ぼうか」みたいな態度をとってしまうことがよくあります。しかし実際にはAndroidアプリケーションを書くにはJavaの知識が必要不可欠で、Javaについては学ばなければ…

Swift訳語集をつくった

https://github.com/gfx/swift-wordsWEB+DBのSwift特集を書くときに訳語を決める必要があったので作ったものです。順次改定しているので必ずしも特集記事と一致しているわけではないですが、今後日本語でSwiftの記事を書くときはこれに従うつもりです。

WEB+DB PRESS Vol.84にSwiftの入門記事を書きました

WEB+DB PRESS Vol.84作者: 藤吾郎,桑野章弘,福永亘,谷井靖史,野村晋之介,蛭川皓平,岡田友輔,藤本真樹,伊藤直也,宮崎靖彦,佐藤健太,高橋俊幸,佐藤太一,海野弘成,佐藤歩,泉水翔吾,渡邊恵太,舘野祐一,中島聡,橋本翔,はまちや2,竹原,伊賀敏樹,WEB+DB PRESS編集部…

Android依存ライブラリバージョン固定システムの構想

Androidのビルドシステムには、BundlerとかCartonみたいに推移的な依存関係*1のバージョンを固定するものがありません*2。これをなんとかしたいと思っています。で、メモ。Gradleには「ビルドスクリプトの依存関係(Gradle plugins)」と「モジュールの依存…

Template Engine Nightで「Xslate振り返り」をしました

このあたりで一度まとめておこうと思ったのでいい機会でした。@moznionさん、ありがとうございました。なお、スライド中の「arity」は、この直前のトークで「ASTのnodeの種類を表すのにarityという単語を使っているのは意味が違うのではないか」と質問された…

Travis CI meets Swift!

There's an absolutely great news for Swift developers: The Travis CI Blog: Status update on the Xcode 6 and iOS 8 rolloutMeaning that now Swift libraries can be tested on Travis. Here is a Swift library with working .travis.yml: https://gi…

comaint(1)でCPAN moduleのcomaintainerを追加する

Perlを書かなくなるなどの理由でCPANモジュールをメンテしなくなるということはあるもので、そういう場合は App::PAUSE::Comaint を使うと簡単にcpan authorをcomaintに加えることができます。 comaint UNIVERSAL::DOES SYOHEX 私のCPANモジュールも最近は積…

fb-adb - 改良版adb shell

Facebookが adb shell の改良版を開発しているみたい。https://github.com/facebook/fb-adb"adb"とつけてはいるけど、実際には"adb shell" と "adb rcmd" だけを処理して他のサブコマンドはadbにフォワードしているだけ。改良したところはREADMEによれば以下…

The Renaissance of TypeScript in Ruby

More and more TypeScript toolchains emerge in these days but unfortunately it was not true in the Ruby world: typescript-rails didn't work on Rails4.Now it works on Rails4. typescript-rails, which provides us with the power of TypeScript i…

YAPC::Asia 2014でninjinkunといっしょにモバイルアプリ開発について話します

以下のトークが採択されました。2日目の藤原洋記念ホールにて、15:20からです。Mobile First Development for Perl Mongers最近はPerlはあまりやっていないのですが、サーバーサイドとクライアントサイド(モバイルアプリ)をいい感じに協調して働くための仕…

maven artifactsのupload/downloadサーバは簡単につくれる

Androidのエコシステムをなんとかしないといけないとの思いから、maven repository serverを作り始めた。https://github.com/android-frontier/tiny-maven-repository要は、特定のパスにPUT(bodyはjarなどのbinaryがそのまま渡る)でアップロードし、GETでP…

DalvikバイトコードのMethod数65k制限について

Androidアプリケーションにはアプリケーションのメソッド数が65kを超えられないという制限があるのだけど、その詳細を知らなかったので調べた。参考: Does the Android ART runtime have the same method limit limitations as Dalvik?まとめると メソッド数…

WEB+DB PRESS Vol.81にAndroidの記事を書きました

Google I/O 2014が来週に迫った今日このごろですが、I/Oの前日に発売されるWEB+DB Vol.81に同僚たちとAndroidの特集記事を寄稿しました。私の担当はAndroid Studio+Gradleについてです。とにかく変化の早いAndroid開発環境ですが、この一年で開発環境周りは…

最近作ったAndroid用ライブラリ

すべてMaven Centralに公開している。 https://github.com/gfx/android-power-assert-plugin Androidでpower assertするためのgradle plugin 出力フォーマットはまだそんなにわかり易くないが、すでに欠かせないものになっている https://github.com/gfx/Jav…

Android StudioでのコーディングにAndroidStyle.xmlを適用する

curl -L https://raw.githubusercontent.com/android/platform_development/master/ide/intellij/codestyles/AndroidStyle.xml > ~/Library/Preferences/AndroidStudioPreview/codestyles/AndroidStyle.xml これでAndroidStyleを使えるようになる。XMLのイン…

Bakusoku Iterations Tokyoで話したりrebuild.fmで話したりしました

Mobile First Development at COOKPAD ブランチングモデルの話で、頻繁にデプロイするweb appではgithub-flowを、リリース間隔が長いmobile appではgit-flow(を簡略化したもの)を使ってるという話です。このへんはウェブかアプリかというよりは、kazuhoさ…

Macbook Air 2014を買った

Mid 2011からの乗り換えなので快適。とあるAndroidプロジェクトをビルドしてみたところ、2011機だと30秒かかるビルドが2014機だと20秒で終わった。これは効率上がりそう。もっとも、2014機は本当にマイナーチェンジのようで、型番はMid 2013と変わらないらし…

Maven CentralにdeployするときのgroupIdについて

結論:groupIdはプロジェクト名を含めるべきPOM referenceには以下のように書いてあります。 groupId: This is generally unique amongst an organization or a project. For example, all core Maven artifacts do (well, should) live under the groupId o…

Travis-CIがandroidをサポートしたので試した

potatotips #7 で、 Travis-CIのandroid supportが始まったことを知った。 いまさら Travis CI Android Build Support Now in Beta (2014-05-07) そこで、werckerを使っていたプロジェクトをtravisに乗り換えることにした。理由は、Chrome extensionのMy Tra…

Android用Gradle pluginのテンプレをつくった

https://github.com/gfx/gradle-plugin-template こんな感じの構成だと、実際のAndroid app/lib moduleで `apply plugin` をしつつプラグインの開発ができる。実際に、android-power-assert-pluginは上記構成をとっている、というかgradle-plugin-templateは…

potatotips #7 at DeNA で Power Assert について発表しました

potatotips #7 at DeNA を開催しました! 今回も面白い話が多く大変勉強になりました。 さて!私はここ二週間ほど開発していたAndroid Power Assertについて発表しました。 https://speakerdeck.com/gfx/jun-hapower-assertwozhi-tuteiruka-number-potatotip…

Maven Centralに代わるAndroid Archive Networkが必要だ

Android のライブラリプロジェクトを爆速で Maven Central にデプロイする をやってみたが、手順が複雑すぎて心が折れる。しかも、初回だからPGPの鍵を作ったり設定をいろいろ調べたりと作業は多かったが、それを差し引いても手作業でしなければならないこと…

Javassistのメモ

Getting Started with Javassist Javassistはバイトコードを操作するもの 細かな操作はExprEditorで行う。この時操作できるのは、以下の式だけ。これらは副作用を起こしうる式にほぼ相当する。言い換えると、副作用を起こさない int z = x + y のような式はE…

Android的には、LevelDBはSharedPreferencesの高速な代替として使えそう

参考: LevelDB入門 (基本編) - from scratch AndroidにおけるLevelDB bindingは複数あるようだけど、今回はMaven Centralに上がっていてかつ読み書きAPIがわかりやすい以下のものを使った*1。 https://github.com/googolmo/Leveldb-Android dependencies { c…

JavassistでAndroidメタプログラミングする

三行まとめ JavassistはJavaのクラスファイル(バイトコード)を操作するライブラリ バイトコード注入をJava風の構文で行えるのが特徴 Androidでも、Gradleに仕込みをすることでJavassistを使うことができる 詳細 Gradleはビルドプロセスのカスタマイズがし…

Bolts-Androidで連続したHTTPリクエストをウォーターフォールにする

Facebook (Parse) が開発している Bolts-Android は asyn.js のように、ネストしたコールバック呼び出しをウォーターフォールで記述できるライブラリである。コールバックのネストをウォーターフォールで記述できるというのもありがたいが、処理をTaskに分割…

android.compileOptions.targetCompatibility は sourceCompatibility と一致していなければいけない

(追記: 最初targetCompatibilityを1.6, sourceCompatibilityを1.7にするのがベストだと考えたが、ビルドできなかったので修正)Android Studio (as of 0.5.5) で新規プロジェクト作成のとき、Java7を選ぶことができる。しかし、Java7に対応しているのは And…

ASMをつかってdex前にclass fileを覗き見る

Manipulating Java Class Files with ASM 4 - Part One : Hello World! をAndroidのプロジェクトにやってみた。 https://github.com/gfx/Android-AsmExample まず /buildSrc/build.gradle *1 に ASM の依存を書く。 apply plugin: 'groovy' repositories { m…