読者です 読者をやめる 読者になる 読者になる

fresh digitable

セミコロンたちが躍動する おいらのコードを 皆さんに 見せたいね

VideoViewとその周辺のコードを読んだり調査した #m_android_fcr

今作っているツイッタークライアントが、N(Android 7.0)になった辺りからContextをリークさせるようになってしまったのでいろいろと調査した。 コードーディング会にもお邪魔して集中して取り組んだ。主催者の@operandoOSさん、会場を提供してくださったメル…

ViewAnimationUtils.createCircularReveal()にはアニメーションさせたいviewの左上を基準にした座標を渡す

ViewAnimationUtils.createCircularReveal()はcircular reveal animatorのオブジェクトを作成するためのユーティリティクラスで、 API Level 21(Lollipop)で追加された。 ViewAnimationUtils | Android Developers アニメーションさせたいviewと、円の中心座…

2016年に見たアニメ

去年も書いたので今年の分も書いて振り返る。読みが五十音順になるよう並べていますが、そうなっていないところがもしあればそれは間違いです。 冬クール アクティヴレイドとか昭和元禄落語心中は放送が終わった頃にようやく録画したやつを一気に見たけど素…

ImageSpanを使って画像をTextViewの中にいい感じに表示する

(これはAPI Level 25(Android 7.1.1)のNexus5XおよびAPI Level 23(Android6.0)のNexus5(エミュレータ)で確認した) TextViewはsetCompoundDrawables(Drawable, Drawable, Drawable, Drawable)を使うと文字領域の上下左右に一つずつDrawableを置くことができ…

Html.fromHtml()はカジュアルに使うものではない?

拙作のツイッタークライアントが、起動して3時間ほど放置しておくと全く動かなくなってしまうようになった。どこか触るとANRが出て落とせるので、その都度traces.txtを見ると、いつもHtml.fromHtml()を呼んでるところで止まっている様子。 内部ではパーサー…

FragmentManager is already executing transactionsと言われた時、Fragmentの初期処理で例外が起きていないか確認する

(この現象はAndroid6.0, support-lib ver.24.2.1で確認した。) 次のような例外が出た。メッセージを読むと「トランザクションをすでに実行しているところだ」と言われているようなので、commit()するタイミングが悪かったのかななどを考えていろいろ試して…

Twitter cardとOpen graphのデータを取ってくる

Twitterカードのデータは個々のwebページのmetaタグなので、ページをフェッチしてhtmlを解析すればよい。AndroidではXmlPullParserを使えばお手軽にhtmlを解析できる。 dev.twitter.com developer.android.com ちなみに、上のサイトには KXmlParser via XmlP…

RecyclerViewの中の要素をshared elementsにしてアニメーションする

今作っているツイッタークライアントは、タイムラインのユーザアイコンがタップされたらユーザ情報Activityに遷移するのだが、そのときにタップされたユーザアイコンが移動してユーザ情報Activityのユーザアイコンに重なるアニメーションを実装した。現時点…

ViewPagerで表示するviewのclickがひろえないなと思ったら

Twitter公式クライアントの画像プレビューに限りなく近いものを作りたくて、ViewPagerにわたすFragmentの中でImageViewを作って、OnClickListenerをセットしてクリックイベントをとろうと思って次のように書いたのだが、だめだった。 @Override public View …

SYSTEM_UI_FLAG_IMMERSIVEとSYSTEM_UI_FLAG_IMMERSIVE_STICKYとの違い

API Level 19からは全画面表示をしたいときにどっちかのフラグをセット(View.setSystemUiVisibility())することで没入感をより高めることができる。 SYSTEM_UI_FLAG_HIDE_NAVIGATIONとSYSTEM_UI_FLAG_FULLSCREENとを合わせてセットすることで、システムUIが…

カスタムビューに独自のスタイル属性を定義する

メディアのサムネイルを同じ大きさで横一列に並べるコンテナクラスを作ったので、中にいれるサムネイルの数をレイアウトリソースで定義できるようにした。 res/values/attr.xmlにdeclare-styleableを追加する <resources> <declare-styleable name="MyCustomView"> <attr name="thumbCount" format="integer" /> </declare-styleable> </resources> layoutリソースファイルで次のように使う

TextViewをextendsする

Viewを継承して自分のカスタムビューを作ろうとする時、3種類のコンストラクタをオーバーライドしなければならない。今までは何も考えずに public HogeView(Context context) { this(context, null); } public HogeView(Context context, AttributeSet attr…

FloatingActionButtonのBackgroundTintにselectorを使うには

FloatingActionButtonにsetEnabled(false)とかいう邪道なことをしようとしていて、状態に合わせて色を変えたかったのでcolorリソースのselectorを次のような感じで指定しようとした。 ColorStateList colorList = ContextCompat.getColorStateList(getContex…

Custom ViewがRecyclerViewの何番目にあるかをEspressoでさがす

この記事はEspresso 2.2.2時点のもの。 ポイントは次の二つ。 Espresso.onView()にcustom viewのクラスを探すcustom matcherを渡す BoundedMatcherの型引数にcustom viewのクラスを渡してやると便利 TreeIterables.breadthFirstViewTraversal(View)でcustom …

Github flowを始めた

4月末に会社をやめてからというもの、毎日家でコードを書いているか、アニメを見ながらコードを書く生活をしている。知らないことが多くて進みは良くないが、それでも着実にできあがりつつある。 縁あって5月末に一週間だけインターンさせてもらったのだが、…

AndroidのIntent.ACTION_DATE_CHANGEDを受け取れない人へ

次のStack Overflowのやりとりが答えの全て。 stackoverflow.com Intent.ACTION_DATE_CHANGEDはリファレンスによると日付が変わった時(つまり毎日0時0分)に飛んでくるブロードキャストインテントらしいのだが、時刻を求める処理にバグがあって、夜中ではな…

AndroidPuzzlers) RecyclerViewとFloatingActionButtonを共存させるには

次のレイアウトファイルをActivityでsetContentView()に渡すとどうなるでしょうか。 <LinearLayout android:id="@+id/linear_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </linearlayout>

2015年にみたアニメ

アニメによって生かされていると言っても過言ではない気もしているので、2015年のまとめエントリとして、2015年にみたアニメを振り返ってみようと思う。全部見たものもあれば、途中から見始めたもの、途中でやめてしまったものなどあるが、とりあえずフラッ…

RecyclerViewのデータとビューを更新するnotify系メソッド

ユーザストリームに対応したAndroidのツイッタークライアントを作っている。 ユーザストリームを表示するためにRecyclerViewを使っているのだが、Twitter4JのTwitterStreamにセットしたリスナでStatusを受け、RecyclerView.AdapterにStatusを渡した後、デー…

作文技術を学んだ本

これは技術系文章Advent Calendar 2015 13日目の記事です。 私が読んだことのある文章の書き方の本について、いろいろ思い出そうとしたが、1冊しかないということに気づいた。 理科系の作文技術 (中公新書 (624))作者: 木下是雄出版社/メーカー: 中央公論新…

内容に即したタイトルをつける

これは技術系文章Advent Calendar 2015 12日目の記事です。 文書のタイトルは、本文の内容に即したものであるのが好ましい。論文にしてもブログにしても、それについての情報を手に入れたいと思っている人がタイトルを見て読むかどうするかを決められると良…

最近の日本語IMEについて

これは技術系文章Advent Calendar 2015 11日目の記事です。 最近はソーシャルな漢字変換のIMEが流行っており、私も使っている。固有名詞やネットスラングなどの語彙が豊富ですごいなと思う反面、間違った用法の言葉が出ることがある。誤字を積極的に受け入れ…

熟語を使うか、書き下すか

これは技術系文章Advent Calendar 2015 10日目の記事です。 熟語を使うとなんとなく格調高くなる。これは間違いない。 「測る」よりも「測定する」、「置く」よりも「配置する」「設置する」、「取る」よりも「取得する」など。主たる動詞の用言で終わる文章…

漢字の密度

これは技術系文章Advent Calendar 2015 9日目の記事です。 日本語の文章を書く上で避けては通れないことの一つに漢字を使うということがある。もし避けて通ろうとすると、 にほんごのぶんしょうをかくうえでさけてはとおれないことのひとつにかんじをつかう…

送り仮名のこだわり

これは技術系文章Advent Calendar 2015 8日目の記事です。 皆さんは「行う」と「行なう」とで悩んだことはありませんか。皆さんにはなくても私にはありますのでこのまま続けますね。 私の観測範囲では「行う」の方が圧倒的に多い気がする。私も最近はもっぱ…

係り受けの関係にある言葉をなるべく近づける

これは技術系文章Advent Calendar 2015 7日目の記事です。 艦これとモバマスとデレステのイベントが被っていると死ねますね。 文章の中の係り受けには結構気を使う。この言葉がどの言葉にかかっているのか、書いた本人はよく理解していても読み手には伝わら…

漢数字とアラビア数字の使い分け

これは技術系文章Advent Calendar 2015 6日目の記事です。 昔は縦書きなら漢数字、横書きならアラビア数字と習った。それも使い分けのための一つの切り口かもしれないが、今日は別の分け方を考えてみたい。縦書きの文章も最近書かないしな。 ある程度有効桁…

話し言葉と書き言葉

これは技術系文章Advent Calendar 2015 5日目の記事です。 ブログでは意識していないが、それなりに形式ばった文章を書くときなどは話し言葉をなるべく使わないように気をつけている。論文だったり、上司へのメールだったり。書き言葉で統一できれば、フォー…

主語と述語を対応させる

これは技術系文章Advent Calendar 2015 4日目の記事です。 今日のテーマも文章が長くなるにつれて起きやすくなる失敗ではないかと思う。単純に主語と述語以外を取り去って、それだけでも意味が通じるかということを確認すればよい。 これだけかよと思っただ…

日本語での無生物主語

これは技術系文章Advent Calendar 2015 3日目の記事です。 技術関係なく普通に文章を書くときのネタになっている気がする。だがそんなことは気にしていられないなぜなら私はあと15日分余りのネタを考えなければならないのだ!(必死) 英語の無生物主語のよ…

てにをはとが

これは技術系文章Advent Calendar 2015 2日目の記事です。 難しい文章を書いていると、一つの文が長くなってしまう。複雑な状況を説明したり、ことこまかに説明しようとしたりすると起きやすい。 簡単にチェックする方法としては、 一つの文章に「は」や「が…

文書を作る時の大ざっぱな流れと自分が大切だと思うこと

これは技術系文章Advent Calendar 2015 1日目の記事です。 勢いだけで立ててしまったので若干後悔しているが、いい経験だと思って完走を目指すことにする。 当初の予定を変更してネタを小出しにしつつ時間を稼ぐのでこうはん だれか たのむ *** 技術系文章の…

Github Contributions の緑化活動を始めた

仕事でコード書かない日が常になりつつあってこのままじゃなんとなくいかんと思いたち、毎日コードを書くことにした。書いたのがわかるように、また、様々な人の取り組みを参考にして、どんなにクソなコードでもいいからgithubのリポジトリにコミットして草…

速く走るために必要な三つのこと

年齢とともに体力の衰えを感じていて、今までできたことも体で表現できなくなったり忘れていったりしてしまうんだろうなという寂しさが湧いてきたので、頭だけででも覚えていられるように文章に残す。誰が得するかはわからないけど。ちなみに私の100mのベス…

AndroidAnnotationsをプロジェクトで使うためのGradleメモ

このページにかいてあること。自分用のメモ。 excilys/androidannotationsgithub.com APTを使えるようにするために、トップレベルのbuild.gradleに追記 buildscript { dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } } 素のa…

Windows7におひとりさまtracの環境をつくった

以前から自分用のTodoリストというか、今やってる仕事の気になる点とか経緯とかを追いかけるためのissue/bug tracker的なものがほしいと思っていて、Redmineを入れようとしてRubyのインストールで挫折したりしてたんだけど、trac...そういうのもあるのか…と…

vagrant upのmountでコケたのでvboxaddした時のこと

vagrant upの最後でディレクトリのマウントをやるんだが、それがコケたので、メッセージに従ってvboxaddした。ゲストOSはvagrantbox.esからとってきたCentOS7。落としてきてすぐ起きたのでほぼフレッシュな状態。 まずはエラーメッセージに書いてあるmountコ…

go.mobileアプリのビルド環境をfreshなubuntu14.04の上につくる

go.mobileアプリのビルド環境はDockerイメージで配布されている。 Windows 7(64bit)でVirtualboxにUbuntuを入れてビルド環境を作った。その手順をメモっておく。 ホストOS上で仮想マシンを作る ホストOS(Win7)上でhttp://vagrantbox.esからdocker readyなbox…

ここ最近で定位が面白かったCD

最近アニソンばかり聞いている気がする。アニメがすごく面白くて曲もノリがすごく良かったりすると買ってしまう*1。 アニソンは複数のキャラが一緒に歌っているものが面白い。最近聞いたものだとヤマノススメセカンドシーズンOP"夏色プレゼント"とかご注文は…

ポートフォリオ的なものを作りたい

今の私ができることのキーワードを適当に拾って何か作ってみようと思った。思いつくところは、 Androidアプリ Go 頭外音像定位 あたりなので、昔作ってしばらくはちゃんと動いていたけどだんだんおかしくなっていった「Android端末で動く頭外音像定位アプリ…

今年のこと

ざっくりとやりたいことを書いてみる。 webでなにかやる バックエンドもフロントエンドもそれなりに出来る人になりたいので、n番煎じでもなんでもいいから見えるものを作ってみる。webサービス的なものを作ったことはないし、今のところ仕事でもそんな機会は…

golangでpcmファイルを読む

ポイントだけ。 os.Open(fname) でファイルを開く binary.Read(file, binary.LittleEndian, array) を、エラー(EOF)が帰ってくるまで繰り返す 全てのコードは以下を参照。 akihito104/sspg これから各コードは極力上げていきたい。 横浜に越して来てすぐ買っ…

VRとかに効くかもしれない頭外音像定位

仮想現実(Virtual Reality)とか拡張現実(Augmented Reality)の技術ネタがAndroid界隈でにわかに盛り上がりつつあるので自分も何かやってみようと思っているんだけど、私にはOpenGLとかUnityとかいったところの視覚まわりのツールの知識がほとんどない。 やっ…

iOSとかAndroidのアプリをストアで公開するために米国輸出規制法について調べたこと

App StoreやGoogle Playでアプリを公開する時に、「アプリの中でデータの暗号化を行っているものはアメリカの輸出規制なんだが大丈夫か」的なことを聞かれる。 該当のアプリはいわゆる「暗号品目」というやつであり、App StoreやGoogle Playからアプリを配布…

覚えたてのJavaのenumを多用しすぎて変な実装になってた話

Javaのenumクラスは次のような感じで実装をもてる。 enum ResultType { NONE, ONLY_ID, ALL; abstract Map<String, String> createResult(User data); } このままだとコンパイル通らないけど、例えばONLY_IDを次のようにすると ONLY_ID(){ @Override Map<String, String> createResult(User d</string,></string,>…

納品前にインタフェースが変わるようなリファクタリングをしないでくだされ

カッとなったので書く。ただの愚痴です。 public static CalcResult execute(int i1, int i2, Param1 p1, Param2 p2){ ... } みたいなJavaのコードがあった。そこそこ汎用的に使えるようにつくろうとしているライブラリだが、引数の数が多いし、そもそもPara…

振り返りと来年のこと

今年の振り返り 今年の初めに書いた抱負を読み返して愕然としている。ぜんぜん達成できてないのな。進捗だめでした。 ただ去年と違って、仕事でそこそこプログラム書けたのでよかった。腕が上がったかどうかはよくわからん。 今年の前半はライフログアプリや…

Xperia Z1のSensorEventのタイムスタンプがナノ秒単位のUNIXタイムだった件

以前、SensorEventのtimestampについてのメモ - fresh digitableで、SensorEventのタイムスタンプはシステム起動からのナノ秒単位の時間なので何時何分におきたイベントか知りたいときは一工夫必要だというようなことを書いた。しかし、Xperia Z1(Android 4.…

byte[]からdouble[]への変換でByteBufferを使う

昔とった私のHRTF(Head-Related Transfer Function)のインパルス応答(以降, hrir: head-related impulse response)を音楽に畳み込みながら再生するアプリを作り始めた。 hrirはdoubleのバイナリ形式で保存してあったので、ファイルからbyte[]形式で読み込ん…

Androidのtimestampについて勉強したこと

SensorEventのtimestampについてのメモの続きっぽいもの。いわゆるRTCとセンサとかGPSのタイムスタンプはそれぞれ違うものだという話。このへんはLinuxの基本的なことだと思うがよくわかってなかったし、今もいまいちよくわかっていないので、間違ってたら教…