Dart・Flutterを学ぶ日々 その3

json_serializable

JsonをパースしてModelに変換したいぞ

github.com

qiita.com

qiita.com

toJsonを実装しないと、jsonEncodeでエラーになったのがちょいハマった。

import 'package:json_annotation/json_annotation.dart';

part 'channel.g.dart';

@JsonSerializable()
class Channel {
  @JsonKey(name: 'id')
  final String id;
  @JsonKey(name: 'name')
  final String name;
  @JsonKey(name: 'is_channel')
  final bool isChannel;
  @JsonKey(name: 'is_archived')
  final bool isArchived;
  @JsonKey(name: 'is_general')
  final bool isGeneral;
  @JsonKey(name: 'is_private')
  final bool isPrivate;

  Channel(this.id, this.name, this.isChannel, this.isArchived, this.isGeneral,
      this.isPrivate);

  factory Channel.fromJson(Map<String, dynamic> json) =>
      _$ChannelFromJson(json);

  Map<String, dynamic> toJson() => _$ChannelToJson(this);
}

build_runner

github.com

pub run build_runner build

上を実行してもずっとbuildが終わらなくて、pubspec.lockを削除して、pub getし直して、再度実行したらbuild終わった!

これと途中まで挙動は似てたけど、解決策が違った

blog.dalt.me

null safety

Dart 2.10から入るっぽく、まだStableじゃなかったのかーって思った

dart.dev

LIstをfilterしたい

filterじゃなくて、whereなのね

api.dart.dev

File Write

この辺に書いてあった

api.dart.dev

ドコモ口座の不正利用問題に関してフェンリルさんのツイートで思ったことをつらつら書いておこう

ドコモ口座の不正利用問題に関した以下のツイートについて、パッと見た時に感じたことを雑に書いておく

ちなみにフェンリルさんはプロフェッショナル集団な印象があり、開発者ブログも読んでいてとても参考になる

フェンリルさんの印象を全く知らないで書いているわけではないことを理解してほしい

また、不正利用問題に関してフェンリルさんにも落ち度があったかどうかを追求し、責めたてる話ではないことも理解してほしい

ドコモ口座の不正利用問題に関する詳細はこちらの記事を参照するといいと思います

piyolog.hatenadiary.jp

デザインリニューアルの過程で...

フェンリルさんがシステム開発ではなく、デザインリニューアルのみ担当したことは事実だと思う

しかし、デザインリニューアルを担当していく過程で、ドコモ口座の仕様を少しずつでも理解していくと思う

仕様を理解しつつデザインする中で、「この機能を提供するのに、XXXみたいな画面やXXXみたいな機能に関するデザインや要件がないぞ🤔大丈夫なのかな?」とか何かしら違和感に気づく機会があったかもしれない

デザインリニューアルをする過程で、多少だとしてもシステム開発をしているベンダーさんとコミュニケーションする機会があったのであればなおさらである(機会があったかは不明)

つまり、安心・安全なサービスを提供することもデザインの一部であり、フェンリルさんがそこも意識した上でデザインした結果であれば、関係ないとは言いづらい

理念 と 発言

フェンリルさんのサイトに以下の理念が書かれている

デザインと技術でユーザーにハピネスを

フェンリルは、ユーザーを幸せにするプロダクトをデザインしています。

徹底したユーザー目線で、想像を超えるアイディアを生み出すプロたちが、 そのデザインと技術で最高の形へと導きます。

www.fenrir-inc.com

この理念を考えると、今回のツイートはもう少し違った内容にできてのではないかと思う

例えば、以下のようなニュアンスの内容ではどうだろう(細かい点はここでは省略)

フェンリルではデザインリニューアルのみ担当しましたが、その過程で今回の不正利用につながるような問題点を見つけ、改善に向けた提案ができず、ユーザさんやクライアントさんが大変な思いをしてしまったことを我々も反省しています。この経験から学び、今後の機会に活かしていきます。」

理念で言っている「デザイン」を広い視点で捉えているはずのフェンリルさんだからこそ、クリエイティブ(前向き)な発言を期待したわけです

デザインとはなんであるか

フェンリルさんのドコモ口座実績サイトの内容から、デザインとは「ただただ言われるがままにいい感じに作ります!」ってことではないのがわかる

www.fenrir-inc.com

サービスを使う人の気持ちになって、よりよいものを作ることを意識されている

もちろんその意識の中には、使いやすさだけではなく、安心・安全に使えるという観点も含まれているはずである

それを踏まえると、「我々はデザインリニューアルのみ担当してるので、システム面での問題は関係ありません」とも取れるようなツイート内容はちょっと違うんじゃないかと思った

システム開発には携わっていないことを言うのは大事なことなのだが、問題が起きて困ったのはユーザさんとクライアントさんである

そのことを考えた上で、「我々がもっとこうできたら、この問題を未然に防げていたかもしれない」と思い、クリエイティブ(前向き)な発言をするのがフェンリルさんらしいのではないかと思った

おわりに

私が当事者(フェンリルさんの立ち位置)だった場合、どうすれば周りから誤解されず、クリエイティブ(前向き)な発言ができただろうか、とツイートを見て考えたまとめでした

企業の信用問題でもあるため、はっきり断言し、誤解を招かないようにすることも大事なので、私が考えたことがすべて正しいわけではありません

それでも、理念に沿った発言を心がけることができたら、もっと素晴らしいと思いました

Flutterを学ぶ日々 その1

雑にしかFlutterを学んでいなかったので、改めてFlutterをしっかり学んでいこうかと思う

それもメモ書きです

手元のFlutterを最新にする作業から開始(flutter upgrade)

itomeさんのFlutter 全部俺 Advent Calendar 2019をまず読み漁ってみる

adventar.org

間違ってアーカイブしちゃったRedashのQueryを元に戻す方法

結論

※ ただし、アーカイブしちゃったQueryがダッシュボードから参照されている場合、ダッシュボードからQueryが消えたままになる。頑張って手動で戻さないといけない

Redashとは

こちら読んでください

redash.io

何をやらかしたか

Redashでとある作業をしてて、Redash API経由で1000Queryくらいをアーカイブしてしまった...

RedashのUI上ではアーカイブから元に戻す導線が見つからなかった...

さあ、どうしたもんか🤔

間違ってアーカイブしちゃったQueryをRedash APIで元に戻す

「Redash APIを使えば元に戻せるのでは?」と考えた

まずは、Redash APIを使ってアーカイブされたQueryのレスポンスを確認してみた

{
    "can_edit": true,
    "version": 1,
    "is_archived": true,
    "query": "",
    "id": 1149,
    "data_source_id": 1,
    "name": "New Query"
}

is_archivedtrueになっていることがわかった

じゃRedas APIのQuery更新APIのパラメータにis_archivedfalseで実行すれば、元に戻せるのでは?と考えた

if __name__ == '__main__':
    try:
        for i in range(100, 1100):
            data = {
                "id": i,
                "is_archived": False,
            }
            response = requests.post(
                'https://redash.test.com/api/queries/{}'.format(i), json=data, headers=auth_headers('API_KEY'))
            response.raise_for_status()
    except Exception as ex:
        logging.exception(ex)

こんな感じのPythonスクリプトを書いて実行してみたところ、アーカイブされていたQueryが元に戻りました🎉

よかった😆