- Go Concurrency Patterns: Context - The Go Blog
- context - The Go Programming Language
- semaphore - GoDoc
- sync.ErrGroupで複数のgoroutineを制御する | SOTA
- Go1.7のcontextパッケージ | SOTA
- errgroup - GoDoc
- Go Concurrency Patterns
- Run strikingly fast parallel file searches in Go with sync.ErrGroup - O'Reilly Media
- How to correctly use context.Context in Go 1.7 – Jack Lindamood – Medium
- Example for using go's sync.errgroup together with signal detection signal.Notify to stop all running goroutines · GitHub
なんだかんだでvirtualenvが使いやすかったのでメモ
% pip install virtualenv
% mkdir -p ${HOME}/.venv/default % virtualenv -p python3 ${HOME}/.venv/default % echo 'source ${HOME}/.venv/default/bin/activate' >> ${HOME}/.zshrc
% mkdir -p ${HOME}/.venv/myproject % virtualenv -p python2.7 ${HOME}/.venv/myproject % source ${HOME}/.venv/myproject/bin/activate (myproject) % python --version Python 2.7.10
【Webpack】TypeError: Cannot read property 'watchRun' of undefined
問題
% ./node_modules/.bin/webpack # 中略 TypeError: Cannot read property 'watchRun' of undefined
調査
- webpack - TypeScript issue - TypeError: Cannot read property 'watchRun' of undefined - Stack Overflow
- webpack 4.0.0-alpha.5 feedback · Issue #6357 · webpack/webpack · GitHub
解決
% ./node_modules/.bin/webpack --version 3.11.0 % npm install --save-dev -D webpack@4.0 % ./node_modules/.bin/webpack --version 4.0.1
% ./node_modules/.bin/webpack
# うごいた
Pythonの開発環境立ち上げメモ(virtualenvを使った最小構成)
現状確認
% which python
/usr/bin/python
% python --version
Python 2.7.10
% which easy_install
/usr/bin/easy_install
% which pip
pip not found
%
% sudo easy_install virtualenv
% virtualenv -p /usr/bin/python ~/.venv/default
% source ~/.venv/default/activate (default) % pip install awscli
PROMPTが変わるのうざいな
% export VIRTUAL_ENV_DISABLE_PROMPT=1
デフォルトでdefault
を使うようにしたい
% echo 'source ${HOME}/.venv/default/activate' >> ~/.zshrc
また、何かのプロジェクトで切り分けたい環境があれば
% virtualenv -p /usr/local/bin/python3 ~/.venv/another-project % source ~/.venv/another-project/bin/activate
とかする。
Chrome拡張の開発でwebpackを使わずにES6のimportを有効にしたい
追記 2018/10/29
chrome
モジュールが使えなくなる、という指摘は半分正しくて半分間違ってる(いくらでもやりようがある)のでもうちょっとちゃんとした記事を書きました。
以下原文ママ。
背景
- JSのプロジェクトで、特に僕はChrome拡張を作ることが多いんですが、ES6 syntaxを使いたい
- だいたいのES6 syntaxは、Chrome(現在 65.0.x)で使える
- ただし、問題は
import
です
Background Script でimportを使う
つまりHTML5準拠のブラウザでは<script type="module" src="..."></script>
とすれば、これをエントリポイントとして以下import
は解決されるんだけど、ということは逆にmanifest.json
のbackground.scripts
でBackgroundスクリプトを指定するとtype="module"
属性を与えられないので、わざわざbackground.page
を使ってそこから<script>
しましょうね、という話。
manifest.json
{ "background": { "page": "src/html/background.html" } }
src/html/background.html
<script type="module" src="src/js/background.js"></script>
Use ES6 import in Background Script · otiai10/chrome-extension-es6-import@ecf1267 · GitHub
Content Script でも、importを使いたい、のだが
同様の理由で、manifest.json
のcontent_scripts[i].js
でいきなりimport
を使っても
Uncaught SyntaxError: Unexpected identifier
となる。 Uncaught SyntaxError: Unexpected identifier · otiai10/chrome-extension-es6-import@154b321 · GitHub
どうにかして、HTMLを起因としたjsのロードをしたい。
scriptタグのインジェクション
manifest.json
の表現力では、どうにもcontent_script
のjsをtype="module"
でロードさせることができないので、<script>
タグそのものをページのHTMLに挿入すればよかろう、という発想。
まず、manifest.json
ではinject.js
を読ませる
manifest.json
"content_scripts": [ { "matches": ["<all_urls>"], - "js": ["src/js/content.js"] + "js": ["src/js/inject.js"] } ], "permissions": [
inject.js
では、<script>
タグの動的挿入を行う。
src/js/inject.js
(() => { const src = chrome.extension.getURL('src/js/content.js'); console.log(src); const script = document.createElement('script'); script.setAttribute('src', src); script.setAttribute('type', 'module'); document.body.appendChild(script); })();
いい感じに動きそうだが、これでも以下のエラーが出る。
GET chrome-extension://invalid/ net::ERR_FAILED
どうやらネットワークっぽいエラーで、jsのpathが正しく指定されていないか、あるいはもっと別の原因が考えられる。なお、inject.js
にconsole.log
させたsrc
のURLをクリックすれば正しくcontent.js
の内容が見えるので、pathが正しく指定されていない、ということはなさそう。
web_accessible_resources を指定すればよい
manifest.json
のweb_accessible_resources
というフィールドでは、ウェブからのリダイレクトなどの参照を許すChrome拡張内のリソースのパスを指定することができる。まさに今回、Chrome拡張側から見れば第三者の立場であるHTMLから、Chrome拡張内のリソースを<script src="...">
でロードさせようとしているので、これに該当する。
このとき、content.js
だけではなく、content.js
を起因とするすべてのimport
で参照されるリソースをweb_accessible_resources
に指定する必要があるので、ワイルドカードを使った。
], "permissions": [ "<all_urls>" + ], + "web_accessible_resources": [ + "src/js/*" ] }
いい感じに動いた。
ソースコードまとめ
懸念
node_modules
以下にあるパッケージをどうやってimpotするか- full pathを書けばimportできるだろうけれど、Chrome拡張としてリリースビルドにどう含めるか
- そもそもリリースビルドにnode_modules以下のすべてを含めるわけにはいかない
リリースするときminify・uglifyしたいという需要を考えたら、結局webpackなりのbundler使うのがよい、という結論なんだよな... くやしいけど。
— エロリツイート先生 (@otiai10) 2018年3月27日
結論
webpack使お...
DRY
初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
- 作者: Ethan Brown,武舎広幸,武舎るみ
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/01/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質
- 作者: Cody Lindley,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/06/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
速習ECMAScript6: 次世代の標準JavaScriptを今すぐマスター! 速習シリーズ
- 作者: 山田祥寛
- 出版社/メーカー: WINGSプロジェクト
- 発売日: 2015/08/28
- メディア: Kindle版
- この商品を含むブログを見る
Dockerコンテナ同士のNFSのサーバ・クライアント疎通サンプル
サーバの起動
イメージはこれ → docker-nfs/server at master · otiai10/docker-nfs · GitHub
% docker-machine create \ --driver amazonec2 \ --amazonec2-region ap-northeast-1 \ --amazonec2-security-group otiai10-test \ otiai10-server % eval $(docker-machine env otiai10-server) % docker run \ -it --rm \ --net host \ --privileged \ otiai10/nfs-server [s6-init] making user provided files available at /var/run/s6/etc...exited 0. [s6-init] ensuring user provided files have correct perms...exited 0. [fix-attrs.d] applying ownership & permissions fixes... [fix-attrs.d] done. [cont-init.d] executing container initialization scripts... [cont-init.d] 00-config: executing... [cont-init.d] 00-config: exited 0. [cont-init.d] done. [services.d] starting services [services.d] done. rpc.mountd: Version 1.3.0 starting
あるいはこれ → daapミドルウェアを使ったGoのソースコードからのNFSサーバの起動 · GitHub
クライアント×2の起動と疎通確認
% docker-machine create \ --driver amazonec2 \ --amazonec2-region ap-northeast-1 \ --amazonec2-security-group otiai10-test \ otiai10-client-test % eval $(docker-machine env otiai10-client-test) % docker pull otiai10/nfs-client
イメージはこれ → docker-nfs/client at master · otiai10/docker-nfs · GitHub
% docker run -it --rm \ --name client_1 \ --privileged \ -e SOURCE=172.31.16.219:/ \ otiai10/nfs-client root@e2b6f924bda5:/# echo "Hello! Hello! This is ${HOSTNAME}!" >> /root/mountpoint/greeting.txt root@e2b6f924bda5:/#
% docker run -it --rm \ --name client_2 \ --privileged \ -e SOURCE=172.31.16.219:/ \ otiai10/nfs-client root@91f46eeb21d3:/# ls -la /root/mountpoint/ total 12 drwxrwxrwx 2 root root 4096 Mar 22 07:55 . drwx------ 3 root root 4096 Mar 14 11:08 .. -rw-r--r-- 1 nobody nogroup 36 Mar 22 07:55 greeting.txt root@91f46eeb21d3:/# root@91f46eeb21d3:/# cat /root/mountpoint/greeting.txt Hello! Hello! This is e2b6f924bda5! root@91f46eeb21d3:/# root@91f46eeb21d3:/# echo "How's it going? I'm ${HOSTNAME}. Nice to meet you!" >> /root/mountpoint/greeting.txt root@91f46eeb21d3:/#
root@e2b6f924bda5:/# cat /root/mountpoint/greeting.txt Hello! Hello! This is e2b6f924bda5! How's it going? I'm 91f46eeb21d3. Nice to meet you! root@e2b6f924bda5:/#
いけてる。雑に構成。
各イメージの挙動は、以下のDockerfileの通り。
DRYな備忘録として
Amazon Web Services実践入門 (WEB+DB PRESS plus)
- 作者: 舘岡守,今井智明,永淵恭子,間瀬哲也,三浦悟,柳瀬任章
- 出版社/メーカー: 技術評論社
- 発売日: 2015/11/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2018/04/11
- メディア: 大型本
- この商品を含むブログを見る
- 作者: 佐野裕
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2016/08/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
【メモ】【NFS】DockerコンテナをクライアントとするNFSの疎通確認
背景
- Public/Privateネットワーク上にNFSサーバが立っており、AmazonLinuxクライアントからの疎通は確認できている
- これを、Dockerコンテナをクライアントとして疎通確認したい。たとえばimageはdebianで。
ログ
サーバは、同VPN内に立っている前提で、クライアントを作っていく。
# 準備 % docker-machine create \ --driver amazonec2 \ --amazonec2-region ap-northeast-1 \ --amazonec2-security-group otiai10-test \ otiai10-container-client-test % eval $(docker-machine env otiai10-container-client-test)
% docker run -it --rm debian root@1dd362335dc0:/# mkdir foobar root@1dd362335dc0:/# mount 172.31.23.148:/root/export foobar mount: permission denied
permission denied
と出る。
mount: permission denied
docker run
に--privileged
を追加。
% docker run -it --rm --privileged debian root@eea3be2246c4:/# mkdir foobar root@eea3be2246c4:/# mount 172.31.23.148:/root/export foobar mount: wrong fs type, bad option, bad superblock on 172.31.23.148:/root/export, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so.
wrong fs type
と出る。
mount: wrong fs type
# さっきのつづき root@eea3be2246c4:/# apt-get update -qq root@eea3be2246c4:/# apt-get install -y nfs-common root@eea3be2246c4:/# mount 172.31.23.148:/root/export foobar root@eea3be2246c4:/# # お、いったか? root@eea3be2246c4:/# cat foobar/foobar.txt おっぱい! root@eea3be2246c4:/#
いきましたね。
まとめ
Dockerfile ↓
DRYな備忘録として
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/19
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
- 作者: 末安泰三
- 出版社/メーカー: ソーテック社
- 発売日: 2016/12/20
- メディア: Kindle版
- この商品を含むブログを見る
TCP IPとNFS―UNIXでのインターネットワーキング (アジソン ウェスレイ・トッパン情報科学シリーズ)
- 作者: M.サンティフェラー,Michael Santifaller,野間泉,西田佳史,高橋伸彰,藤原一博
- 出版社/メーカー: トッパン
- 発売日: 1993/12
- メディア: 単行本
- この商品を含むブログを見る