Dart・Flutterを学ぶ日々 その3
json_serializable
JsonをパースしてModelに変換したいぞ
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
pub run build_runner build
上を実行してもずっとbuildが終わらなくて、pubspec.lockを削除して、pub getし直して、再度実行したらbuild終わった!
json_serializableのためにpub run build_runner build実行してもずっとbuild終わらなくて、色々試したけど、pubspec.lockを削除して、再度pub getして再実行したら、build終わった
— shinobu.aab (@operandoOS) 2020年9月30日
はーん🤔https://t.co/OMjkHiYfzR
これと途中まで挙動は似てたけど、解決策が違った
null safety
Dart 2.10から入るっぽく、まだStableじゃなかったのかーって思った
LIstをfilterしたい
filterじゃなくて、whereなのね
File Write
この辺に書いてあった
ドコモ口座の不正利用問題に関してフェンリルさんのツイートで思ったことをつらつら書いておこう
ドコモ口座の不正利用問題に関した以下のツイートについて、パッと見た時に感じたことを雑に書いておく
株式会社NTTドコモ「ドコモ口座」に関し、一部の銀行においてドコモ口座を利用した不正利用が発生しております。フェンリルではデザインリニューアルのみ担当しており、アプリ開発およびシステム開発には携わっておりません。
— フェンリル (@fenrir_official) 2020年9月10日
本件に関してはNTT報道発表資料https://t.co/KJzaKpZ807
をご覧ください。
ちなみにフェンリルさんはプロフェッショナル集団な印象があり、開発者ブログも読んでいてとても参考になる
フェンリルさんの印象を全く知らないで書いているわけではないことを理解してほしい
また、不正利用問題に関してフェンリルさんにも落ち度があったかどうかを追求し、責めたてる話ではないことも理解してほしい
ドコモ口座の不正利用問題に関する詳細はこちらの記事を参照するといいと思います
デザインリニューアルの過程で...
フェンリルさんがシステム開発ではなく、デザインリニューアルのみ担当したことは事実だと思う
しかし、デザインリニューアルを担当していく過程で、ドコモ口座の仕様を少しずつでも理解していくと思う
仕様を理解しつつデザインする中で、「この機能を提供するのに、XXXみたいな画面やXXXみたいな機能に関するデザインや要件がないぞ🤔大丈夫なのかな?」とか何かしら違和感に気づく機会があったかもしれない
デザインリニューアルをする過程で、多少だとしてもシステム開発をしているベンダーさんとコミュニケーションする機会があったのであればなおさらである(機会があったかは不明)
つまり、安心・安全なサービスを提供することもデザインの一部であり、フェンリルさんがそこも意識した上でデザインした結果であれば、関係ないとは言いづらい
理念 と 発言
フェンリルさんのサイトに以下の理念が書かれている
デザインと技術でユーザーにハピネスを
フェンリルは、ユーザーを幸せにするプロダクトをデザインしています。
徹底したユーザー目線で、想像を超えるアイディアを生み出すプロたちが、 そのデザインと技術で最高の形へと導きます。
この理念を考えると、今回のツイートはもう少し違った内容にできてのではないかと思う
例えば、以下のようなニュアンスの内容ではどうだろう(細かい点はここでは省略)
「フェンリルではデザインリニューアルのみ担当しましたが、その過程で今回の不正利用につながるような問題点を見つけ、改善に向けた提案ができず、ユーザさんやクライアントさんが大変な思いをしてしまったことを我々も反省しています。この経験から学び、今後の機会に活かしていきます。」
理念で言っている「デザイン」を広い視点で捉えているはずのフェンリルさんだからこそ、クリエイティブ(前向き)な発言を期待したわけです
デザインとはなんであるか
フェンリルさんのドコモ口座実績サイトの内容から、デザインとは「ただただ言われるがままにいい感じに作ります!」ってことではないのがわかる
サービスを使う人の気持ちになって、よりよいものを作ることを意識されている
もちろんその意識の中には、使いやすさだけではなく、安心・安全に使えるという観点も含まれているはずである
それを踏まえると、「我々はデザインリニューアルのみ担当してるので、システム面での問題は関係ありません」とも取れるようなツイート内容はちょっと違うんじゃないかと思った
システム開発には携わっていないことを言うのは大事なことなのだが、問題が起きて困ったのはユーザさんとクライアントさんである
そのことを考えた上で、「我々がもっとこうできたら、この問題を未然に防げていたかもしれない」と思い、クリエイティブ(前向き)な発言をするのがフェンリルさんらしいのではないかと思った
おわりに
私が当事者(フェンリルさんの立ち位置)だった場合、どうすれば周りから誤解されず、クリエイティブ(前向き)な発言ができただろうか、とツイートを見て考えたまとめでした
企業の信用問題でもあるため、はっきり断言し、誤解を招かないようにすることも大事なので、私が考えたことがすべて正しいわけではありません
それでも、理念に沿った発言を心がけることができたら、もっと素晴らしいと思いました
Flutterを学ぶ日々 その2
画面遷移
アプリの基本である画面遷移を学ぶ
Navigator使うんだよ
事前にRouteを登録しておくのが基本っぽい
Button
実装の参考になりそうなもの
その他
Flutterを学ぶ日々 その1
雑にしかFlutterを学んでいなかったので、改めてFlutterをしっかり学んでいこうかと思う
それもメモ書きです
手元のFlutterを最新にする作業から開始(flutter upgrade)
itomeさんのFlutter 全部俺 Advent Calendar 2019をまず読み漁ってみる
間違ってアーカイブしちゃったRedashのQueryを元に戻す方法
結論
※ ただし、アーカイブしちゃったQueryがダッシュボードから参照されている場合、ダッシュボードからQueryが消えたままになる。頑張って手動で戻さないといけない
Redashとは
こちら読んでください
何をやらかしたか
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_archived
が true
になっていることがわかった
じゃRedas APIのQuery更新APIのパラメータにis_archived
をfalse
で実行すれば、元に戻せるのでは?と考えた
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が元に戻りました🎉
よかった😆