閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

TwilogでN年日記

Twilogには「1年前の今日のTweet」を見返すリンクがあり、暇潰しになんとなく見ているけど、N年日記としてみるなら「N年前の今日」も一緒に見たい。Twilogには、そういう「すべての年の同日ツイート」を見られるURLもあるけど、トップから飛びにくい。

というわけでブックマークレットを書いた。URLはシンプルで https://twilog.org/ユーザ名/date-MMDD なので、MMDDだけ動的に求めて突っ込んでやればいい。

javascript:var dt=new Date,m=("00"+(dt.getMonth()+1)).slice(-2),d=("00"+dt.getDate()).slice(-2);location.href="https://twilog.org/wata_d/date-"+m+d;

Twitterは2007年くらいからやってて、Twilogで遡れるのは2010年までだけど、それでも結構ボリュームあるなあ。

マネーフォワードの家計診断

マネーフォワード MEは収入が同じくらいの他のユーザの支出と自分の支出を比較する機能があるけど、いつも税金が多いと言われる。

f:id:wata_d:20190601203928p:plain

しかしどう見ても理想の税金が安すぎて、天引きされる層は入力してないだけっぽいし、いまいち実用性に欠けているように思う。まぁ、正確な数字を見せられても、それに合わせて生活を変えたりはしないと思うけど。

f:id:wata_d:20190601204052p:plain

ただそれ以外の数字も相当乖離があったりして、食費とかみんなちゃんと抑えているんだな……。ココイチが高いと言われてしまうのもわかりそうだけど、世知辛いなぁ。

Google Chartで草を生やす

Google ChartにはCalendar Chartというものがあるらしい。GitHhubとかにある、日付と値のペアを表にプロットして、値の大きさでセルに色を付けるチャート。

これで血液検査の結果を描いてみた。

// 血液検査の結果(非公開)
let bloods = Frame.ReadCsv("blood.csv")
let date = bloods.GetColumn<DateTime>("日付") |> Series.values
let P = bloods.GetColumn<double>("無機リン(P)") |> Series.values

let options =
    Options(
        height = 800,
        calendar = Calendar( cellSize = 12 ),
        colorAxis = ColorAxis(
          colors = [| "green"; "blue"; "red" |],
          maxValue = 7,
          minValue = 4,
          values = [| 3;5;7 |]
        )
    )

Seq.zip date P
|> Chart.Calendar
|> Chart.WithOptions options

f:id:wata_d:20190601181717p:plain

血液検査は毎週やっているからデータはあるけど、月曜だけなのでスカスカな図になってしまった…。リン(P)の値は概ね6.0未満に保つべしとされていて、個人的には5.5未満を目指している。平均は5.1だけど、ちょくちょく油断して上がってしまう。あと、食べてるものはそんなに変えてないはずなのに年初は赤くなってしまう傾向にある。帰省とかもしないんですけどねぇ。

FsLabを入れてみた

F#で書いたコードを実行結果付きでHTMLとか、レポートに吐ける的なやつ。

fslab.org

Downloadページに全部書いてあるけど、Windowsで.NET Core SDKが入っていれば書いてあるコマンド(dotnet new -i FsLab.Templates)を実行するだけで入れられる。そのあとも、書いてあるコマンドをコピペして

dotnet new fslab-journal -lang F# -n sample

とすればsampleフォルダの下に必要なファイルが一式できるので、sampleフォルダに移動してbuildコマンド*1を実行するとHTMLが生成される。HTMLはsample/sample.fsxファイルを評価した内容(sampleはフォルダと同じ名前になる)が出力される。

.\build.cmd html # outputフォルダの下にHTMLが作られる
.\build.cmd run # sample.fsxの変更を監視し、上書きされる度に自動でビルドを行う

runしておくとレポートが自動で更新され、レポートをブラウザで表示していると自動でリロードもしてくれるので結果をすぐに確認できる。……けど、ちょっと重いのでそこまでインタラクティブな感じはないかも。あと、たまにOutOfMemoryで落ちることがある。

エディタとブラウザを横に並べておけば、コードを書きながらその結果を確認できる。色々検索してみたけど、まだVSCode内に直接結果を表示することはできないっぽい。要望はあるみたいなので、そのうち対応されるかも?

Notes on how advanced interactive charting/editing/.... tooling is implemented · Issue #6484 · dotnet/fsharp · GitHub

上記ページにもあるけど、VSCodeBrowser Preview拡張などを入れてVSCode上でプレビューすることもできるけど、正直横にブラウザ置くだけでも十分かな…という印象。

f:id:wata_d:20190601185523p:plain

*1:Windowsの場合build.cmd

食費が嵩む

家計簿を見ていると1ヶ月の食費が5~6万とかいっててヤバいなと思うけど、しかし1日2食としても1食あたり1000円にしかならないと考えるとむしろ安いのでは? という気もしてくる。時給1500円はオッと思うけど年収にすると300万にもならない、みたいな感じだろうか(?)。

とはいえ外食で1000円なら安いだろうけど、中食でそれはちょっとなぁ。

それほど節約しなければと言うプレッシャもないし、いつまで生きられるかわからないし年取るほど食事制限も厳しくなるだろうからむしろいまのうちに好きなもの食べていた方がいいのでは、みたいな刹那的な考えもなくもないけど、破産しない程度にバランスは取らないとなぁ。せっかく可視化しているのだし。

F#でグラフ(チャートを描く)

.NETのライブラリも使えるので色々方法あるみたいですが、NuGetでFSharp.Chartingを入れると以下のようなコードでサクッと描ける。

#I "packages/FSharp.Charting.2.1.0"
#load "FSharp.Charting.fsx" 
open FSharp.Charting
[   "400万", 400;
    "800万", 800]
|> Chart.Column
|> Chart.Show

f:id:wata_d:20190527221221p:plain

ただ、上の図のように新しいウィンドウが出てきてしまう(いかにもWinFormっぽい画面だ)。これをVS Code内に出す事はできないのだろうか。Atomではできるみたいだし、VS CodeでもJupyter Notebookの拡張だとできるっぽいので、できそうではあるけど。

FsLabも試してみるかな。

VS Codeを電卓にする

まあLINQPadで十分なんですが、たまに色々遊んでみたくなるわけです。

Visual Studio Codeで拡張子が.fsxのファイルを作って保存するとF#の実行に必要な環境が自動的にインストールされ、F# Run Scriptコマンドでいま開いているファイルのコードが実行できる。つまり、電卓になる。

f:id:wata_d:20190523224508p:plain

Visual Studioでも良いんですがプロジェクトを作るのは大げさだし、VS Codeはターミナルがくっついてて実行結果が同じ画面内で確認できるので練習には良いのかも。.pyなファイルを作るとPython拡張が自動でサジェストされたり、随分賢いなぁ。AIって感じ(?)。