2020年5月4日月曜日

繰り下げ年数

K=0.01*0.7*12
X:繰り下げ年齢
E:寿命
とすると (1+K(X-65))*(E-X)なので、微分して
X=-1/(2K)+(E+65)/2
E=-65+2*(X+1/(2K))
予測寿命に照らして、適切な繰り下げ年齢は


2020年5月2日土曜日

ELMで月の取得

日付の扱い(とくに月データ)については、ELMは複雑なようです。
import Timeだけではだめで
exposing (Month(..), Posix, Weekday(..), Zone)
をつけることで解決。

https://github.com/ababup1192/elm-firebase-chat/blob/master/src/Main.elm

2020年5月1日金曜日

ELMでのPost & 全角文字処理について

ELMでpostが必要になり、情報をさがしました。
https://nulab.com/ja/blog/nulab/elm-introduction-tutorial-2/
を 参考にさせていただきました。

Http.post
        { url = ”/path”
        , body =Http.stringBody "application/x-www-form-urlencoded"
                ("komoku1="
                    ++ komoku1
                    ++ "&komoku2="++komoku2
                )
        , expect=Http.expectString GotText
        }
のような感じで使えるようです。

bottleと組み合わせて、使っていましたが、bottleのrouteで、全角文字は使えないので、どうしようかと考えた結果、Postで全角データを渡すことで解決。

なお、Pythonでは
urllib.parse.unquoteを使えばデコードができる。
ajaxの送信側では、全角文字のエンコードは自動でやってくれるようだ。

ただ、それでも<img src=...>による画像表示の中に全角文字が入るとどうしようもない。そこで、画像ファイルについては、md5によるハッシュで変換することで解決した。
CybozuLabs.MD5.calcを使わせていただきました。
https://labs.cybozu.co.jp/blog/mitsunari/2007/07/md5js_1.html
なお、Python側でもmd5ハッシュを使おうとしましたが、javascript側での計算値と一致させる方法がわからず、javascript側から、ハッシュ値をpython側に送って使うようにして解決。Hashの基本的使い方がまだ勉強不足。


ELMで URL Encode

ELMで全角データをPostするため、Encodeが必要になりいろいろ調べた結果、percentEncodeを使うとよいことがわかる。Maybe Stringのままで変換する必要があるので、
import Url
urlEncode:Maybe String -> Maybe String
urlEncode ma =
    case ma of
     Nothing -> Just ""
     Just a -> Just (Url.percentEncode a)
このような関数を作って Maybe Stringに適用できるようしてみたら、うまくいく。