カリー化と部分適用の違い
以下の記事とtwitterで頂いたコメントから自分なりに整理 (自分が悩んでいるときコメント頂けるのとても助かります。ありがとうございます)
参考にした記事 weblike-curtaincall.ssl-lolipop.jp
頂いたコメント抜粋
カリー化が fun f(x: X, y: Y): Z を fun f(x: X): Y -> Z に変換することで、部分適用はこの前者または後者にXを適用することです🙆
val x: X = 何か val g: Y -> Z = f(x) // 部分適用
つまるところ、カリー化は「Xを適用する」という意味を持たない……みたいな!
-
例えばレキシカルクロージャを使えば部分適用は実現できるんじゃないですかね。boostのbindとかもカリー化はしてないけど部分適用していたような。 どっちかというとカリー化の方が実現は困難と思いますけどね。言語によっては実現できないので。
自分の理解
- カリー化は部分適用可能な状態に関数を定義すること
- カリー化を用いなくても部分適用自体はやろうと思えばできる(bindなどを使用して)
部分適用自体の恩恵はまだよく見えていない。 たとえば引数を全部用意しなくても部分的に適用して使えるようなオブジェクトを用意するときに適用すればいいのだろうか
ECS触った際の雑記
雑多メモ
・docker-composeでビルドしても、生成されるイメージはそれぞれDockerfile分生成される
・ECSはdocker-composeみたいなもの?(というかTaskDefinitionがそう?)
https://qiita.com/HiromuMasuda0228/items/2170032142ae1c33adcc
・ecs-cli使えばdocker-compose.yamlのオーケストレーションをそのまま使える?
https://qiita.com/furu8ma/items/6a7bd4d85617ef55f2c6
https://qiita.com/toshihirock/items/824a86da51015350a051
(試したがエラーが出て休み中に進められなかった)
・ECRとDockerhub、すでにAWSで運用しているならECRのほうがいいか
https://tracpath.com/works/devops/docker_hub_and_amazon_ec2_container_registry/
・ただまだ仕組みがわかっていないがecs-cliでdocker-compose.yamlを利用できるならそれが一番楽そう
・クラスタ内のタスクをすべて停止する
・(VPC消すと消せるようになるケースがある?以前VPCが影響してクラスタ作れないケースがあったので何かしら影響している可能性がある。クラスタで使ってるインスタンスと関係している?)
・ECSクラスタ消して、同名で作ったあとに ecs-cli ls叩くともとのサービスが表示される(なぜ?)
・AWSの問い合わせでどこまで聞いていいのか(聞けるのか)よくわからない
・「これ使ってないと思うのだけどなんで料金かかっているのか」の質問に微妙な回答が来たため
ちょっと読んだほうがいいかも
https://aws.amazon.com/jp/premiumsupport/faqs/
・ecs-cli もっとちゃんとドキュメント読みたい
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_CLI_reference.html
・これさわってみたい
http://www.mpon.me/entry/2018/03/29/200000
この図わかりやすい
シェルスクリプト備忘録
環境構築用のシェルスクリプトを組んだ際の備忘録。
実施した内容は基本的にgithubのリポジトリやdockerコンテナの準備、設定ファイルのとりまわし。
どこかのサーバに何かをインストールする、みたいなものは行っていないので(それはすでにDockerで用意されている)冪等性を保つのが楽だった
(リポジトリやコンテナの破棄が楽なため)。
軽くハマったところは
・sedコマンドの仕様(macの場合は-iオプションでバックアップをとらなくてはいけない)
・curl叩く際にエラー。()でコマンドをくくらなければいけない
・Docekrの同期したディレクトリを削除してつくりなおしたら同期先のディレクトリがない的なエラーが出た
(一度docker落として立ち上げ直さないといけない)
その他
コマンドが成功したかを成果物(ディレクトリが存在しているかなど)で見ようとしていたが、
$?のステータスコード見れば済むことを忘れていた
(厳密にチェックしたい場合などでは二重に見てもいいかもしれない)
(ただバックで動いてプロセスチェックするような処理はループしてチェックみたいな処理が必要そう)
sedの区切り文字は/でなくてもよい(なんでもいいらしい。なので/を置換したいときなどは@など使えばいい(sedで覚えたことはvimでも使えるので嬉しい)
以下参考にした記事
--
Bashの便利な構文だがよく忘れてしまうものの備忘録
https://qiita.com/Ping/items/57fd75465dfada76e633
連結するには演算子などは必要なく、つなげれば良い。
ダブルクォーテーションマークで囲んだ文字列では、式が展開される5。
`curl -i`の出力結果(レスポンスヘッダ)をシェルスクリプトの変数に代入したい
https://teratail.com/questions/67052
【bash】現在の日付時刻 がファイル名
https://qiita.com/moonsubaru/items/7e51446db8b570e21c65
bashコーディング規約
https://qiita.com/mashumashu/items/f5b5ff62fef8af0859c5
#!/bin/shは実行環境によって様々なシェルにシンボリックリンクになっているので、bashなら#!/bin/bashと明示しよう
インデントは半角スペース2つ
Googleの肩に乗ってShellコーディングしちゃおう
https://qiita.com/laqiiz/items/5f72ca668f1c58176644
小さいツールやスクリプト実行時のラップ程度にShellの利用を抑えること。
100行超えるとPythonとか他の言語を使おうこと。
MacとLinuxでは、sedの動作が異なるので注意
https://it-ojisan.tokyo/mac-linux-sed/
Macのsedのmanにも説明があるのですが、Macのsedの場合は、-iオプションの後に、必ずバックアップ用の拡張子をつける必要があります。
そこで、下記のように-iオプションの後に拡張子をつけると、実行できます。
sedで指定行(特定の行)だけ置換する、指定行(特定の行)に文字列挿入する
https://qiita.com/nii_yan/items/c93ab315f78a069f988d
docker exec を使いこなす
https://unicorn.limited/jp/item/347
VPSや仮想マシンと同様の使い方をしたい場合にコンテナログインは直感的ですが、コンテナ上のコマンドを実行するには単にdocker execに直接コマンドを指定するだけで足りるため、ログインしないオペレーションに慣れた方が良いでしょう。
bashでファイルやディレクトリの存在確認方法まとめ
https://qiita.com/nii_yan/items/73f4caacdc2ca6f45135
コマンドラインで文字色をつける? シェルスクリプトで文字色を変えて表示
https://shell-script.info/show-color-text/
何もしない組み込みコマンド ":" (コロン)の使い道
https://qiita.com/xtetsuji/items/381dc17241bda548045d
スクリプト中で実行しているコマンドを表示する
http://sig9.hatenablog.com/entry/2015/12/15/220312
#!/bin/sh -x
これを実行すると以下の結果になります。結果だけで無く、実行しているコマンドも表示されているのが分かります
ポケットがチケットでいっぱい
再ansible
ansible触ろうとvagrantを立ち上げようとしたらまた同じようなエラーが出た http://addictionwhite.hatenablog.com/entry/2018/08/05/191236
というかずいぶん前から出続けていて、合間に対応試みたのだけど全然直らないでいた。
結果いうとvagrantのプラグイン全部消したらなおった。
エラーで検索してもあまりヒットせず、自分の以前書いた記事が上の方にくると嫌気がさす。
vagrantやvirtualbox再インストールなど試行錯誤の結果エラー文言にpluginとか書いていたので思い至った
エラーはnfs_exportあたりばかり見ていてplugin云々はパスだったので無視していた
ひとまず上のエラーが消えたところで気を取り直し、
本を参考に最低限のplaybookを用意してvagrantにむけてレシピを叩いてみるのだけど以下のエラー(一部抜粋)
$ansible-playbook -i hosts site.yml fatal: [vagrant-machine]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts.
.ssh/configや.ssh/known_hostsあたりをいじってみたけど、以下のように--ask-passのオプションを指定してパスワードを聞くようにすれば通るようになった
ansible-playbook -i hosts site.yml --ask-pass
でエラーが変わって以下のようになった
fatal: [vagrant-machine]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: 省略 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
環境変数指定して解決
$export ANSIBLE_HOST_KEY_CHECKING=False $ansible-playbook -i hosts site.yml --ask-pass SSH password: PLAY [playbook_tutorial] ******************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************* ok: [vagrant-machine] PLAY RECAP ********************************************************************************************************************************************* vagrant-machine : ok=1 changed=0 unreachable=0 failed=0
ansibleというか、ssh周りの知識が疎くてはまってしまった感。
ただこれに関しては.ansible.cfgファイルで明示していたと思うので効いていなかったように見える(配置場所が悪かった?)
なんかまた何かの拍子に壊れそうで怖いなと感じる。
参考
MySQLのexplainメモ
MySQLのExplain叩くたび指標を忘れてしまうのでメモ。
ほとんど引用文です(一番下の参考参照)。まず自分の頭に定着させたいものを抜擢した感じです。
とりあえずexplainしたときに見る列
- type
- rows
- extra
type:
ALL: フルテーブルスキャンされているので最高に遅い。
index: 一見するとインデックスが使われているような感じがする値だが、実はフルインデックススキャンされているということ。
rows:
行数が少ないほどいい
extra:
Using where: indexだけではwhereを解決できないことを示している
Using temporary: テンポラリーテーブルを作成することを示している。あまり良くない
Using filesort: レコードがクイックソートされていることを示す かなり良くない
もちろん後になればなるほど処理が重くなるので、出来るだけそのようなクエリはさけて1番目や2番目の実行計画になるようにすると良いわけである。
1番目や2番目の実行計画になるようにするには、次のような点に注意しなければいけない。
最も大切なことはWHERE句における検索条件とソートする対象のカラムを一つのテーブルに集中させることである。
表示されているとステキな値
Using index
他にも考慮すべきところ多々あると思うのですが、
少しずつ積み上げていこうと思います(毎度一気に詰め込もうとして結局全て流れてしまうので)
参考(引用元)
MySQLのexplainとかについてしらべたときのメモ
https://qiita.com/lastcat_/items/de7b530a94fbcf9ba646
explainした時の重要ポイント(実例つき)
http://www.24w.jp/blog/?p=250
漢(オトコ)のコンピュータ道
http://nippondanji.blogspot.com/2009/03/using-filesort.html
vimの使い方見直し
vimの復習
奇しくもvimconf当日(狙ったわけではない)
定期的に使い方は見直しているのだけど、繰り返さないと忘れたりして元の習慣に戻ってしまうので、
見直したいもの一旦整理
正規表現
vimの正規表現はややこしそうなので回避していたが、
vi使っているとき困ったので反省として(とはいっても自分はガッツリ正規表現する機会はあまりない。。)
# オプションの確認 (デフォルトはmagic) :set magic? /\(foo\|bar\) # \v以降がvery magicとして扱われる (vary magicを使うとパターン検索が楽になる) /\v(foo|bar) nnoremap / /\v
参考: Vimでパターン検索するなら知っておいたほうがいいこと
http://deris.hatenablog.jp/entry/2013/05/15/024932
ctrlSF
https://github.com/dyng/ctrlsf.vim
もともと入れていれていながら、以前試した際にあまり速度が出ずに使用を止めていたのだけど
最近試してみたらとても早い(gitに管理されているファイルを見ていたりする?マシンスペック?)
ので積極的に使っていきたい
(厳しかったら:ggrep 使おう)
特定の単語を数えたい( n:置換コマンドに置換させないオプション)
:%s/hoge//gn
参考 https://blog.kawa-xxx.jp/entry/20140511/1399818512
helpを積極的に読む
とはいっても用意されたhelpを闇雲に見るまでは今の所したくないので
参考: おすすめの :helpまとめ
http://cohama.hateblo.jp/entry/2013/07/28/235823
折りたたみ機能
自分はあまり使わないと思っていたけど
プラグインのhelpで使われているものあったので(開けなくて読めない)
za : 折りたたみの開閉
参考: vim標準機能の折りたたみを駆使して、.vimrcを整理しよう
https://qiita.com/jiro4989/items/12a41fb58cc42287092f
ブックマーク機能
以下のプラグインを使わせて頂いているのだけど
https://github.com/MattesGroeger/vim-bookmarks
ただ、このプラグインでマークしているのはよく使用しているファイル(たとえばconfigなど)で
作業中に一時的にマークしたい(たとえばサービス、モデルとかを往復するときなど)に使いづらかった
(一時的にマークしたいものと長期的にマークしたいものが混ざるので)。
のでvimのデフォルトのマークも併用して使用する(プラグインの方どうなっているかわからないけど挙動だけみるにかぶってなさそう)。
自分の用途的に基本的にグローバルでマークする形にしそう[A-Z]
かつ作業終わったら定期的に消していく
# mark一覧を表示する :marks # カーソル位置をmarkする # m[a-zA-Z] # マークを全消し :delmarks!
参考 Vimのマーク機能、使い方まとめ
https://qiita.com/syui/items/442fd0905a1f2005c10e
TODO ここらへんいい感じにmap定義したい
map noremap
vimrcに定義しているのに説明できない(パクってきたものなので)のはよくないと思い
基本noremapでよさげ(プラグインで定義されたものはmap)
参考: 【図解Vim】mapとnoremap
https://cocopon.me/blog/2013/10/vim-map-noremap/
set nu 入れる
何かの記事を見て意図的に行数を表示していなかったのだけど以下の理由で設定変更
・helpがどれくらいあるか把握できる
・エラーの位置に飛びたい
・カウントするとき位置を把握できる(:%s/hoge//gn でそれぞれの位置の行数が把握できる。なんとなく把握しておきたい)
TODO (気が向いたときに調べる)
先読み後読み
http://d.hatena.ne.jp/unk_pizza/20140311/p1 https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6
クリップボード
たまに挙動で混乱する。どういうときに困るか忘れた。困ったときにまた確認 http://labs.timedia.co.jp/2014/09/learn-about-vim-in-the-workplace.html