パルカワ2

最近はFlutterをやっています

アノテーションプロセッサでfieldにNullableアノテーションがついてるのか知りたい

Nullableアノテーションは様々なライブラリで定義されている(android.support.annotationやjavax.annotation)
それらをまとめてNullableとして扱いたい…こっちで定義とかしたくない……と思ったので、以下のようにした。

private boolean isNullable() {
    return element.getAnnotationMirrors().stream().filter(c -> {
        return c.getAnnotationType().asElement().getSimpleName().toString().equals("Nullable");
    }).collect(Collectors.toList()).size() > 0;
}

Bearのタグの切り方

まあまあ長めの文章を書くときや短くても考える必要がある文章を書くときはBearに書いて、イシューなどにコピペすることが多い。 タグをどうやって切るか悩んでたけど、最終的にアウトプットする場所によって分けている。

#hisaichi5518.hatenablog.jp/android# のように #で囲むと.やスペースが使えるようになる。

f:id:hisaichi5518:20180511143926p:plain

別のなにかになりたい

誰しも自分とは違う、別の「なにか」になりたい欲求はあると思う。
おじさんだけど美女になりたいと思う人はいるだろうし、パンダになってゴロゴロしていたいと思う人もいると思う。
僕は浅草を走るパンダバスになりたい。なので、なれるようにした。

f:id:hisaichi5518:20180504151909p:plain

f:id:hisaichi5518:20180504152109p:plain

もどりたかったら戻れる。
f:id:hisaichi5518:20180504152250p:plain

#!/usr/bin/env ruby

require 'twitter'
require 'open-uri'

client = Twitter::Streaming::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

rest = Twitter::REST::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

client.user do |tweet|
  case tweet
  when Twitter::Tweet
    if tweet.text.include?("こうなりたい") && tweet.media? && tweet.media.first.is_a?(Twitter::Media::Photo)

      url = tweet.media.first&.attrs[:media_url_https]

      name = File.basename(url)
      open(name, 'wb').write(open(url).read)

      avatar = File.open(name)
      rest.update_profile_image(avatar)
      rest.update("なった", {in_reply_to_status: tweet})

    elsif tweet.text.include?("もどりたい")
      avatar = File.open("image/hisaichi5518.png")
      rest.update_profile_image(avatar)
      rest.update("もどった", {in_reply_to_status: tweet})
    end

  when Twitter::Streaming::StallWarning
    warn "Falling behind!"
  end
end

requestLayout() improperly called というログが出まくる

requestLayout() を特に呼んでないのに出る。
addOnOffsetChangedListener内で見た目の変更をしているとダメっぽい。
addOnOffsetChangedListener内でHandlerを呼び出す形に変えたら出なくなった。

appBarLayout.addOnOffsetChangedListener((appBar, verticalOffset) -> {
  mainHandler.post(() -> {
    // ...
  });
});

android.support.v7.widget.Toolbarを継承すると見た目が崩れた

android.support.v7.widget.Toolbarを雑に継承すると見た目が崩れる。
ホワイ〜と思ってandroid.support.v7.widget.Toolbarのコードを読むとこんな感じになっていたので同じようにした。

public HogeToolbar(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, android.support.v7.appcompat.R.attr.toolbarStyle);
}

Android Studioでもっとはやく使っとけばよかった的なやつ

Terminal

Android Studioから移動してるの時間の無駄ではと思ったのでAndroid Studioのみで完結するようにしたかった。実際移動するためにSpotlight立ち上げて、iterとか打って移動してたりしていたので、それがショートカット一発で移動出来るのはでかい

Find in Path

今まで慣れてるagで検索してたんだけど普通に時間の無駄でしたね…

ショートカットを追加する

覚えるの大変だしだるいなという気持ちになってやる気が出なかったけど、自分が覚えやすいように追加すればいいなと思い直した。と言ってもそんなに変えてはなくて、打ちにくいなとか覚えられんなと思ったら追加することを許容するようになった。

クラスを検索/ファイルを検索

今までshift+shiftを使っていたんだけど、表示が遅かったり、ショートカットを押してもしばらく反応がないときがあったので待つことがあったけど、大半検索したいのはクラスやファイルなので、こちらを使うようになったら待つ時間がなくなった。

最近単行本で読み始めた漫画

ROUTE END

ROUTE END 1 (ジャンプコミックスDIGITAL)

ROUTE END 1 (ジャンプコミックスDIGITAL)

ROUTE END 2 (ジャンプコミックスDIGITAL)

ROUTE END 2 (ジャンプコミックスDIGITAL)

人の死が日常的となる職業、“特殊清掃業”を生業とする青年・春野。彼が近隣で続発する連続猟奇殺人事件、「END事件」に足を踏み入れて…。生と死の在り方を問うサイコ・サスペンス開幕!!

ここは今から倫理です

「倫理」とは人倫の道であり、道徳の規範となる原理。学ばずとも将来、困る事はない学問。しかし、この授業には人生の真実が詰まっている。クールな倫理教師・高柳が生徒たちの抱える問題と独自のスタンスで向かい合う――。新時代、教師物語!!

ひだまり保育園 おとな組

どこにでもある平和な保育園。でも、その周りの“おとな”たちには、平和ではいられない苦悩や葛藤が――。「産後クライシスの働く母」「将来に不安を抱えるシングルマザー」「ある秘密を抱えた男性保育士」「高齢出産をしたキャリアウーマン」などなど、それぞれがそれぞれに、大きな問題を抱えているようで…!?『ヒヤマケンタロウの妊娠』で話題を呼んだ作者が描く、笑って泣けるオムニバス家族ストーリー!

完結してる

DINER ダイナー

漫然と生きてきた25歳の大場加奈子は、ある日、小銭欲しさから闇サイトのバイトへ足を踏み入れる。犯罪へと巻き込まれ、絶体絶命の窮地に陥った時、謎の男・ボンベロに、その身を買われ命拾いをする。だが、安堵したのも束の間、辿り着いたのは、殺し屋専用の会員制ダイナー(定食屋)だった。冷徹な料理人・ボンベロと凶暴な殺し屋(客)の狭間で、加奈子の残酷なウェイトレス人生が幕を開けた――!!