microsotのtodoでタスク管理するようにした

最近microsoftのtodoを使ってるので感想とか。

https://todo.microsoft.com/

最初にまとめ

最初は微妙かなと思ってたけど「私の1日」機能が良いから気に入った。

「私の1日」機能が良い

たくさんのタスクのうち今日やる分だけを登録する機能。

「私の1日」に登録したタスクは1日でリセットされるので毎日登録し直す必要ある。最初はなんじゃそりゃ面倒だなと思ってたけど、これのおかげで自然と毎日タスクを見直す習慣がついた。

タスクの整理がおろそかになりがちだったのが割と単純な仕組みで解決されて目から鱗だった。昨日完了できなかったタスクや締め切りが近いタスクなどを優先して提案してくれるので、今日何をやるべきかも選びやすい。

個人的にはリスト機能はあまり使わなかった

最初はリストを作ってタスクを分類してたんだけど、段々何でもかんでもデフォルトのリストに突っ込むようになった。もともと複雑なタスクはonenoteで整理してたのでそっちと使い分けすることにした。

ウィジェットの同期は不満

android版だと「私の1日」に登録したタスクを見れるウィジェットもあるんだけど、現状アプリを開かないと同期されない。そもそもアプリを開くのが面倒だからウィジェットを使ってるのに、これだと意味ないなと思って削除してしまった。

そのうちいい感じに同期するようにならないかなと期待してる。

fedoraにLightTableをインストールする

libasoundやlibgconfのエラーが出るので入れる

sudo dnf install -y \
  alsa-lib \
  GConf2

githubからダウンロードして解凍

url=https://github.com/LightTable/LightTable/releases/download/0.8.1/lighttable-0.8.1-linux.tar.gz

cd /tmp
wget $url -O lighttable.tar.gz

# 自分はatool使ってるけど解凍できればなんでも良い
atool -x lighttable.tar.gz

pathを通す

sudo mv lighttable-0.8.1-linux /opt/lighttable
sudo ln -s /opt/lighttable/light /usr/bin/

起動

light

vscodeでelmを書く

sublimeからvscodeへ移行を試しているので感想

extensionはこれ github.com

REPLで評価できるようになった

個人的に一番大きい違い

sublimeだと複数行の評価ができなくて実質REPLが使い物にならなかったけど、vscodeだと複数行でも評価できる

補完が賢い

exposingしたパッケージはmodule名を省略して補完してくれる

まとめ

今のところ満足

sublimeの方が良かった点としては、ドキュメントやエラーが若干見やすかったかな?

elmでJSONをEncode/Decode

意外と苦戦したのでメモ

Encode

Recordならobject、Stringならstringのように対応する関数が用意されているので、全部マッピングして最後にencode関数でStringに変換する

公式のサンプルで何となく雰囲気が分かると思う

person =
    object
      [ ("name", string "Tom")
      , ("age", int 42)
      ]

compact = encode 0 person
-- {"name":"Tom","age":42}

Decode

個人的にはDecodeの方が面倒だった

基本的にはEncodeと似たような感じになるんだけど、レコードを扱うときはmapとfield、それにtype aliasで定義した型が必要になる

type alias Point = { x : Float, y : Float }

point : Decoder Point
point =
  map2 Point
    (field "x" float)
    (field "y" float)

-- decodeString point """{ "x": 3, "y": 4 }""" == Ok { x = 3, y = 4 }

kotlinのコルーチンをお勉強

まだ勉強中なので間違いあるかも

注意

コルーチンはkotlin 1.1.2ではまだ実験的な機能です

なぜコルーチンを使うか

非同期処理を同期的に書きたい。Noコールバック

// 理想
val users = Http.getUsers()
println(users)

// 現実
Http.getUsers() { users ->
    println(users)
}

使い方

ライブラリとして提供されているのでdependenciesに追加してください https://github.com/Kotlin/kotlinx.coroutines

// コールバックをラップしたsuspend関数を定義する
// suspendCoroutineってのもあるけどエラーになった(使ってたライブラリとの相性?)
suspend fun req() = suspendCancellableCoroutine<YourHttpClientResponse> { c ->
    YourHttpClient("api url") { response ->
        c.resume(response)
    }
}

// launchでコルーチンを作成
launch(CommonPool) {
    val response = req()
    // val response = async(CommonPool) { req() } 並列呼び出し

    // responseを使ったなんかの処理
}

感想

  • 複数のAPIを並列に呼ぼうが直列に呼ぼうが普通の同期処理的感覚で書けるのは楽ですね
  • ただ自分にはまだまだ難しいなと思いました
  • FuturesやGenerators、Channels辺りは正直さっぱりです

参考

nginxでbasic認証をかける

パスワードのハッシュ値を生成

openssl passwd 12345678
=> /fRAn6eKC1Zkc

# パスワードを8文字より長くしたい時はmd5
openssl passwd -1 123456789
=> $1$F.4yc/Pm$L2UrGFVazVQSYaE7TVtcR.

nginx.confかincludeしてるconfファイルに追記

location / {
    auth_basic "closed site";
    auth_basic_user_file /etc/nginx/conf.d/htpasswd;

htpasswdにユーザー名とパスワードを設定

admin:/fRAn6eKC1Zkc

設定のreload

sudo service nginx reload

参考

webpacker2.0がリリースされてelmがサポートされた

今までrails newの--webpackオプションとしてreact, angular, vueが選択できたが、webpack2.0からなぜかelmも追加された。

 

github.com

 

rails new myapp --webpack=elm

とかやれば使えます。

 

hello_elm.jsとMain.elmが作られるので

<%= javascript_pack_tag "hello_elm" %>

とかで読み込みます。

 

developmentならタイムトラベルデバッガーが使えてproductionなら使えない、みたいな設定もやってくれるのでお手軽ですね。