addictionwhite’s diary

考え中のことを整理と忘備録のために綴ります。ここに書かれている考えは翌日には変わる可能性があります

カリー化と部分適用の違い

以下の記事と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を利用できるならそれが一番楽そう

 

・ECSのクラスタ消せない(タイムアウトするときがある)

 ・クラスタ内のタスクをすべて停止する

 ・(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

 

この図わかりやすい

http://www.mpon.me/entry/2017/11/19/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とか他の言語を使おうこと。


MacLinuxでは、sedの動作が異なるので注意
https://it-ojisan.tokyo/mac-linux-sed/
Macsedのmanにも説明があるのですが、Macsedの場合は、-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
これを実行すると以下の結果になります。結果だけで無く、実行しているコマンドも表示されているのが分かります

 

ポケットがチケットでいっぱい

http://fukuchiharuki.me/wiki/index.php?%E3%82%B7%E3%82%A7%E3%83%AB/sed%E3%81%A7%E3%82%B9%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%86

エスケープすることもできるが、別の文字で正規表現を書いてもいい。

sed -e "s%hoge/moge%foo/bar%g"

再ansible

ansible触ろうとvagrantを立ち上げようとしたらまた同じようなエラーが出た http://addictionwhite.hatenablog.com/entry/2018/08/05/191236

というかずいぶん前から出続けていて、合間に対応試みたのだけど全然直らないでいた。

結果いうとvagrantプラグイン全部消したらなおった。

エラーで検索してもあまりヒットせず、自分の以前書いた記事が上の方にくると嫌気がさす。
vagrantvirtualbox再インストールなど試行錯誤の結果エラー文言に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ファイルで明示していたと思うので効いていなかったように見える(配置場所が悪かった?)
なんかまた何かの拍子に壊れそうで怖いなと感じる。

参考

qiita.com

www.tanchallenge-glory40.com

qiita.com