パルカワ2

最近はFlutterをやっています

Shape Shifter雑感

アノテーションプロセッサで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);
}