• 作成:

ゆうちょダイレクトのログインが不便, haskellの例外時処理に悩んだ, slackにそこそこの容量のファイルが送れない不具合が発生してしまった

鼻血が止まらない

数カ月前から風呂に入るたびに鼻血が出るし, 寝てる間も自然と鼻血が出て迷惑しています. むかしから鼻血は出やすかったが, ここ数ヶ月のは特に多い. 心療内科で血液検査を定期的に行っているため, 血液の病気ではないでしょうが. 耳鼻科に行くべきでしょうか… 正直面倒くさい.

散髪に行きました

作業コアタイムに備えて起きたら今日は休みだった. 忘れてた.

髪の毛がうざったくなってきたことを思い出しました. 散髪に行きます.

自転車の鍵が所定の場所に無かった. そう言えばちょっと前に父親が自転車を使った. 父親はよく自転車の鍵を所定の場所に戻してくれないので, 鍵が行方不明になる. 使うのは全然構わないけれど, 鍵は元の場所に戻しておいてほしい. 普通に使えなくてこまる. 自転車を見てみたら鍵は刺さったままでした.

テクノロジーの力で忘れることを防止できないかな, HoloLensみたいなのでメモを貼り付けるとか. とか考えていましたが, 自転車の鍵を指紋認証にして鍵をなくすほうが楽そうですね.

散髪のバリカンが皮膚に触れる感触が好きです.

モスカードを作りました

これまでモスバーガーをよく使ってましたが, 面倒だったのでモスカードは作っていませんでした. この間ふと調べたらカード会員限定のクーポンが配られたりすることがあるそうなので, 作っておくことにしました. チャージは日時限定でポイントがよく溜まる日があるそうなのでその日にやっていこうと思います.

ゆうちょダイレクトのログインが不便

ゆうちょ銀行のゆうちょダイレクトのID入力がパスワードと同じページにないのでオートコンプリートは作動しない. わざわざinput fieldがハイフンごとに分けられているのでID入力に三回のコピペが必要. とても不便. 普通のフォームを使いたい. ログインに手間がかかる上にログイン時のセッションが短くて, さらに常にセッションを有効化していないとログアウトされて滅茶苦茶使いにくい. セッション関連はすぐに変えるのは難しいだろうけど, ログインフォームだけでも普通の形式にしてほしい. もともとゆうちょ銀行の口座があったから使っておいたけど, この使いにくさで銀行を乗り換えようかと悩むレベル.

errorを使わない方法に切り替え

起きてしまったので他の仕事をやろうと思いました. やることはerrorを出すだけになってた例外処理を独自の例外型にすることと, ユニットテストを追加することです.

実は私, haskellの例外は自分が飛ばす側としては, errorを使うか精々ioErrorぐらいしか使ったことがないので, よくわかってないんですよね. 復旧可能なエラーはMaybeを使った方が例外を持ち込まないので簡単ですし, 復旧不可能なエラーはどうせ無理なのでerrorでスレッドごと終了してしまって問題ないという判断をよくしています. むしろ例外をtryEitherに変換することの方が多いですね.

errorを取り除けば良いわけだけど, 例外をthrowするか, IO (Either String ())でも返すように変更するか, 悩みどころですね.

とりあえず, slackの返すHTTPステータスだけ見ていてjsonを見ていなかったので{ok : false}の時も正常終了してしまっていたところをjsonのパースをして変更しようと思いました. httpJSONを使って内部のjsonをData.HashMap.Lazy.HashMapだとしてlookupDefaultすれば普通にパースできた.

例外処理どうしよう, IO EitherにするかEither T IOにするか…MaybeT IOの場合はIO Maybeの方が自然な気がするのでそちらをよく使っていますが, 今回はエラーが起きた時は計算を取り止めて終了させたいのでEitherTの方が良いのだろうか, Errorを使うべきなのだろうか…

Errorを使うほど重量級のプログラムとも思えないし, 普段はIO Eitherを使うけど, 今回は計算脱出が行いたいのでEitherTを使うことにしますか.

slackにそこそこの容量のファイルが送れない不具合が発生してしまった

slackのファイル投稿APIでmultipart/form-dataを使う方法がわからなくてurlパラメータのcontentで処理すればいいかと思ってそのようにしていたら普通に容量を超えて投稿できなくなる問題が発生しました.

tokenはurl queryで送らないといけないしどうするんだろうと思ってググってみたら, どうもfiles.uploadの場合formDataでtokenを送るみたい. setRequestQueryStringからsetRequestBodyURLEncodedに切り替えても投稿できた. 当初出来ないと思ってたのは何だったんだろう.

setRequestBodyURLEncodedに切り替えても向こう側では大きいファイルが投稿できないらしい. こちらでは投稿できて全く再現出来ないので謎になってしまっている.