簡単に使えるプランニングポーカーのwebサービスを作りました

これです

poker-kun.herokuapp.com

使い方

  • roomを作ってurlを人に教えるだけで使えるようになります
  • 投票後、同じroomの投票数が見れるようになります
  • reset roomを押すとroom内の投票がリセットされます

説明

  • socket.ioを使ってます
  • herokuの無料プランで動いてます

足し算ゲームアプリをリリースしました

play.google.com

スクリーンショット

よく見たらボタンの位置おかしいですね(笑)

f:id:lisp719:20170812003542j:plain:w200

f:id:lisp719:20170812003547j:plain:w200

f:id:lisp719:20170812003538j:plain:w200

docker-compose execとrunの使い分け

bashを立ち上げてコンテナの中で色々作業したい時にどう使い分けるか整理した

docker-compose exec

  • docker-compose.ymlのportを使いたい時
  • すでに立ち上がってるコンテナに入るのでportの競合はしない
  • 基本こっちでいいと思う

docker-compose run

  • docker-compose.ymlのportを使いたくない時
  • オプションでportを指定できる(docker-compose.ymlに書いたportも使える)
  • 新しくコンテナを立ち上げるのでportが競合していると失敗する

解説

最初はMakefileにdocker-compose runで書いてたけど、2つbashを立ち上げたい時にportの問題に気付いた

ruby:
    docker-compose run --service-ports ruby bash

なのでexecを使う方式に変えた

ruby:
    docker-compose up -d ruby
    docker-compose exec ruby bash

upしてもコンテナがすぐに終了してしまう場合は、docker-compose.ymlでtty: trueにしておく必要がある

なお、docker-compose upは変更がなければ2回たたいても特に問題ない模様。

fedoraで論理ボリュームの拡張

vagrantで立てたfedoraがディスク不足になってしまったので拡張した

やり方

1行目で容量を30Gに拡張している、2行目はファイルシステムのサイズを拡張している

2行目はファイルシステムによって違うらしい

sudo lvextend -L 30G /dev/mapper/fedora-root
sudo xfs_growfs /dev/mapper/fedora-root

容量の確認はdf -hとか

参考

誕生日専用のカレンダーアプリ(android)をリリースしました

人の誕生日をよく忘れるので作りました。

play.google.com

コンセプト

  • Googleカレンダーより少ない手間で登録できるようにする
  • 何日前に通知するかは設定したい

このアプリはGoogleカレンダーに登録するの面倒だという気持ちから生まれました。なので入力の手間は少なくしてます。

また、誕生日専用アプリなので特に設定しなくても毎年通知してくれます。ただ当日通知されても手遅れなこともあると思うので、何日前に通知するかは設定できるようにしてます。

ただし通知機能は現状挙動が怪しいです。

スクリーンショット

f:id:lisp719:20170710012625j:plain

その他

  • デザインとかはやる気が出たら改良されていくと思います。
  • アプリを終了すると通知が来ないという問題があるのでやる気が出たら修正したいです。
  • アプリ作りながら勉強したことはやる気が出たら記事にしていきたいです。

linuxで指定サイズのファイルを作成する

fallocateコマンドにlengthオプションを付けて実行する

$ fallocate -l 1g foo
$ du -sh foo
=> 1.0G foo

参考

linux - 1GBのダミーファイルを作成するコマンドは? - スタック・オーバーフロー

elmでhttpパッケージを使ってajax

メッセージを定義

メッセージは2種類用意する。一つはリクエストを投げるメッセージでもう一つはレスポンスを受け取るメッセージ。

分かれている理由はelmが純粋関数型で非同期処理はランタイムで処理することになってるからだと思う。

type alias User =
    { name : String
    , company : String
    }

type Msg
    = ReqUser
    | FetchUser (Result Http.Error User)

リクエス

Http.getでリクエストを作成してHttp.sendでCmdを発行する。レスポンスを処理するメッセージとDecoderも必要。

Http.getの時点でCmdが発行されないのが不思議だなと思ったけどそういうものらしい。

            let
                url =
                    "https://api.github.com/users/octocat"
            in
                ( model, Http.send FetchUser (Http.get url userDecorder) )

レスポンス

ここはわたってきたデータをよしなにするだけ。

        FetchUser (Ok data) ->
            ( toString data, Cmd.none )

        FetchUser (Err _) ->
            ( model, Cmd.none )

Decoder

jsonのdecodeは前やったので省略。

elmでJSONをEncode/Decode - lisp719のブログ

userDecorder : Decoder User
userDecorder =
    map2 User
        (field "name" string)
        (field "company" string)

その他

  • getとpostは関数が用意されてるけどそれ以外のMethodはrequest関数で行う
  • 並列でリクエストを投げるようなときはどうするのか。Taskを使う?

参考