すごいHaskellたのしく学ぼう!を読みました.

すごいHaskellたのしく学ぼう!(通称:すごいH本)を読みました.ためになりすぎて,いろいろこれからの人生が楽しくなりそうだったので感想を書きます.

shop.ohmsha.co.jp

環境周りについては,こちらの記事を参考にしました.

qiita.com

Haskellという言語のシンプルさ

この本で出てくるHaskellのコードは,非常にシンプルで短いです. なので,読者の写経する心も折れない親切設計です. かつ基本的にファイルを作って,コンパイルして実行みたいなことをするのは8〜10章くらいだと思います. それ以外の章では,どこかのファイルに関数などの定義を書いて,それをREPL上にロードするだけで動きます. だからすぐに試せて,やってる感がでるので良いです.(ここ重要)

ちなみにロード方法は,REPL上で下のような感じに打つとロードできます.

*Main Lib> :l function.hs

関数型言語の特有の概念の習得

この本は,Haskellを学ぶのが主ですが,同時に関数型言語特有の概念も学べると思います. 特に僕が感動したのは, モナド です. このモナドとは,ある条件を満たしたもののことを指します. モナドは,Haskellの標準ライブラリとして提供されており,多くの種類があります. ざっくり言うと,与えられた型の文脈を損なうことなくいろいろできるすごいやつです. 正直,僕もまだぺーぺーなので,あまり詳しくは言えません.😇

まとめ

結構古い本ですが,今でもやはり関数型言語という概念を学ぶことには非常に新鮮味があり,みんなにお勧めできるぐらいにはすごかったです. Haskellを学びましたが,Scalaが書きたくなりました.(おいおい)

MiSTEL BAROCCO MD600を買いました.

👇のキーボードを買いました.

www.archisite.co.jp                           

買ったきっかけ

僕は普段使いとしてHHKBを利用しているのですが,ホームポジションFキーJキーの感覚が少し狭いと感じて来てしまいました. この問題の解決策として,分離式のキーボードを買えば良さそうと思いました. しかしamazonで分離式で検索するとあまり出てこなく,とりあえずすぐに目についたこれをお試し感覚で買いました.

初期設定

このキーボードは初期のままだとCapslockMacの左Ctrlの場所に配置されており,Macユーザ的にはつらみが激しいので設定を変更します.

こちらのブログを参考にして設定を行いました.

nillpo.hatenablog.com

一応書いて置くと,

  • FN + < or > or ?の三レイヤーがあり,好きなレイヤーを選択する.すると右下の二番目のランプが点灯すると思います.
  • FN + 右下Ctrlを押すと,三番目のランプが点灯します.
  • 上書きしたいキーを叩きます.(今回だとCaps
  • 変更後のキーを叩きます.(今回だと左下Ctrl
  • PNキーを押して変更を確定し,その後FN + Ctrlを押して三番目のランプを消して変更完了です.

打ち心地

今回,僕は青軸のキーボードを買ったのですが,なかなか軽い感じで打てて今のところは最高です. しかしながらスペースをだいぶ取っており,少し窮屈になった気がしています. 次は机をより良いものにする案件が生えて,人生はなかなか難しいです.

まとめ

キーボードは,本当にたくさん種類があり,今後もいろいろ試していきたいと思います. みなさんもぜひキーボードライフをエンジョイしてくださいね.

学内でGitについてのハンズオン勉強会を行いました

発表資料

speakerdeck.com

スライドを作成するときの参考にした資料

gihyo.jp

今回のスライドは大体の部分を,GitHub実践入門を見て作成しました. この本の4章では,非常に小さなケースを対象にして,Gitコマンドを叩きながら覚えていくことが記述されていました. 小さなケースというのはREADME.mdをガシガシいじっていくやつです. やっぱREADME.mdすげぇなという感想です.

スライドには載せなかったのですが,コンフリクトも小さいケースで起こしていて,感動を覚えました.あとrebaseなどの歴史改変系も.

またgit-challengeは,一回も行ったことがなかったのですがこの機会に調べることができたので, 良い機会だったかなと思います.

まとめ

普段使いこなせているつもりでも意外と知らないものが多かったりして,改めて身近なものでもアウトプットすることは大事だなと思いました.

参考にしました.

github.com

VuePressを触ってみた

VuePress

vuepress.vuejs.org

VuePressは,Vue.jsが使える静的サイトジェネレーターです.今回はVuePressを使って,デモサイトをデプロイするまでやります.

準備

さっそく準備をしていきます.

以下のコマンドを実行します.

# create working dir
mkdir vuepress-test

cd vuepress-test

# install VuePress
yarn add -D vuepress

# create index page
mkdir docs

echo '# Hello VuePress' > docs/README.md

package.jsonに以下の記述を追加しましょう.

"scripts": {
  "docs:dev": "vuepress dev docs",
  "docs:build": "vuepress build docs"
}

その後,以下のコマンドでbuildやらができるようになります.

# make a dev server
yarn docs:dev

# build static site
yarn docs:build

他のページを作成し,リンクを貼ってみる

まずページを作成します.

cd docs

# 設定ファイル置き場もついでに作成
mkdir .vuepress

echo "# first page" > First.md

echo "# second page" > Second.md

README.mdにリンクを貼るため,以下の記述を追加します.

[First](./First.md)

[Second](./Second.md)

これはマークダウンなので,マークダウンと同じ構文で書けます.

navbarにもリンクを貼るために.vuepress/config.jsを作成し,以下の記述を追加します. ついでにサイトのタイトルも設定しています.

module.exports = {
  title: 'VuePress-Test',
  description: 'Just playing around',
  themeConfig: {
    nav: [
      { text: 'Home', link: '/' },
      { text: 'First', link: '/First.md' },
      { text: 'Second', link: '/Second.md' },
    ]
  }
}

その後,ビルドすると以下のような画面になっていると思います.

f:id:MitubaEX:20180515020454p:plain

faviconについて

fiviconに使いたい画像は,.vuepress/publicに配置しておきます. そして.vuepress/config.jsに以下の記述を追加します.

head: [
  ['link', { rel: 'icon', type: 'image/png', href: '/fivicon.png' }],
]

deployについて

www.netlify.com

今回はnetlifyを利用します.

デプロイのためにあらかじめリポジトリを作成して,pushしておいてください.

対象リポジトリとして,作成したサイトを選択し,Build commandは以下のように設定してください.

yarn add -D vuepress; yarn docs:build

その後,Publish directoryにdocs/.vuepress/distを指定します.

後はデプロイされるのを待って完了です.

まとめ

今回はVuePressを使って,雑な静的サイトを作成しました. マークダウンで文字を書いていけるので,すごくお手軽感がありますね.

まだcomponentなど,Vue.jsの機能を利用した拡張を行なっていないので,また今度触っていきたいと思います.

5/13 (日) ビットサミットに行って来た

5/13(日)のビットサミットに行って来ました.

ビットサミットって?

bitsummit.jp

5/12~13の二日間,京都のみやこめっせで開催されたインディーズゲームの祭典です.インディーズゲームを実際に触ったり,開発者のトークセッションなんかも見れたりと面白みに溢れたイベントです.

気になったゲームたち

CARTO

制作はSunhead Gamesさんです.

どういうゲーム?

  • フィールドを探索して地図の断片を手に入れていく
  • マップを開いて,その地図の断片を好きな場所に配置する
  • 新しい場所に行けるようになるので,その場所を探索する

Sunhead Gamesさんが動画を投稿していたので,これを見たらだいたいわかると思います.

面白いと思った点

地図のーマスーマスを自由に移動や回転させたりできるので,基本的にキャラクターを操作して目的の場所に向かうという時間を地図を操作することで,大幅に短縮できます.

マップを探索するゲームは個人的に大好物なのですが,一工夫をすることで効率よくゲームを進められる点が新しいなと思いました.

よくあるマップ移動として特定の場所をワープできる機能などはよくあると思うのですが,自分でワープする場所を決めるような感覚で地図の断片を操作できる点が非常に自由度が高くて良いです.

リリースされるのが楽しみです😍

ghostpia

制作は超水道 さんです.

どういうゲーム?

  • ジャンルはデンシ・グラフィックノベルというジャンル
  • ビットサミットで見せてもらったものは,多くのイラストでアニメーションのような躍動感を持ったノベルゲームという印象でした.

面白いと思った点

繊細なイラスト,音楽から作り出されるすごく幻想的な世界を感じました.まだシナリオは読んでないのですが,隙間を見つけてやって行きたいと思います.

Switchでのリリースも予定しているとのことなので,そちらも楽しみです😍

入れました💪

他やってないけど気になったゲームたち

まとめ

13日のみの参加でしたが,非常に楽しく過ごすことができました.また来年も行って,面白いゲームを探して行きたいと思います🙏

tmux + zsh + fzf + ghqでセッションを作成して,指定リポジトリに移動する処理

挙動

  • tmuxを開いている状態で,C-gを押すとghqでgetしてきたリポジトリのリストを取得する.
  • 移動したいリポジトリを選択する.
  • 新規セッションが作成され,そのセッションに移動する.

コード

これを.zshrcに書いたら動くと思います.

function create_session_with_ghq() {
    # fzfで選んだghqのリポジトリのpathを取得
    moveto=$(ghq root)/$(ghq list | fzf)

    if [[ ! -z ${TMUX} ]]
    then
        # リポジトリ名を取得
        repo_name=`basename $moveto`

        # repositoryが選択されなかった時は実行しない
        if [ $repo_name != `basename $(ghq root)` ]
        then
            # セッション作成(エラーは/dev/nullへ)
            tmux new-session -d -c $moveto -s $repo_name  2> /dev/null

            # セッション切り替え(エラーは/dev/nullへ)
            tmux switch-client -t $repo_name 2> /dev/null
        fi
    fi
}
zle -N create_session_with_ghq
bindkey '^G' create_session_with_ghq

エラーもみ消している感

こんな感じで動く

f:id:MitubaEX:20180502234529g:plain

参考にしました

ghq+fzf on tmux | matsub

blog.chairoi.me

Mobile Act OSAKA #4に参加してきた

mobileact.connpass.com

参加してきたので,まとめます.

サービス開発とアプリ開発 nory_kanameさん

クックビズのマネージャー

  • 作ったあとどうして行くか
    • ソフトウェア開発のV字モデル
    • データを見ることが多い
    • ログを見て何をするか?
      • ボタンのタップ率を調査
      • 縦スクロールなのに横スクロールのやつをなおす
      • 空の画面としては,コンテンツが追加されたらどうなるかなどの画像があるとわかりやすい

感想

データからわかるUI改善について,いろいろなパターンを知ることができました. ユーザの目線の動きに着目する例が多く,勉強になりました.

Firebaseとモバイル開発 1amageekさん

クックパッド

  • komerco
    • firebaseでサーバーレス
    • 短い時間で作るためのfirebase
    • firestoreを利用している

感想

FirebaseのFirestoreの利点に関して色々勉強になりました. Firestore使ってみようと思います.

Kotlinコンバートと戦った話 TakuyaOhashiさん

フェンリルAndroidエンジニア

  • java Android エンジニアには人権がない
  • Java を kotlin にコンバートして行く

  • Lombok

  • Icepick
    • Activityの破棄で入力した値が破棄されるやつをなんとかしてくれるやつ.
    • android-state
  • SAM変換
    • 一つだけの抽象メソッドを持つインターフェース
  • kotlinだとコメント入れ子が可能

感想

JavaからKotlinに変換する時の罠がたくさん知れて勉強になりました. ライブラリ周りでKotlinと相性が悪いと大変ということがわかりました.

Charlesで通信デバッグ izuchyさん

株式会社インパス

  • 運用の悩み

    • API間の通信が見えづらい
    • ログは出るけど・・・
  • Charlesで通信デバッグ

    • 間にプロキシ立てて通信を確認できる
    • 利用するとき変更すること
    • できること
      • 通信の内容を変更することができる -> ブレークポイント
      • 3G回線の再現
      • 通信のリトライ
      • API設計を変更して,施行が可能

感想

Charlesすごい.いろいろできそう. ちょっと触ってみます.

制約付きレイアウトと仲良くする itokさん

そらかぜの中の人

  • constraintLayout
    • 制約を守りつつ,可変のレイアウトが実現できる

感想

複雑なレイアウト周りをあまり知らなかったので,あまり理解ができず申し訳ない.

ペダルのある生活 Hironさん

株式会社MetaMoji

タブレットを利用してノートをかけるアプリ

  • iRig BlueTurn

感想

iOSでキー入力をとる話が非常におもしく,かつペダルでやる感じもネタ感があったよかったです.

@objcとは何だったのか hokuronさん

フェンリル株式会社

感想

@objc周りが完全にわからなくて,非常に申し訳ない.

QR Code Recognition on iOS 11 Satoshi Hachiyaさん

  • ios11では標準でQRコードを読み取れるようになった
  • wifiQRコードで配布できる
  • カレンダー登録もできる

感想

QRコードWiFiまで繋げるだって!?と一人感動していました. 少し興味があるので,触ってみようかと思いました.

まとめ

ネイティブの機能周りいろいろ触って見たいなぁと思ったので精進します.

おまけ