jqでURL取り出してCurlに引き渡したかった。(しかも1件だけ)
「curl (標準出力 OR パイプ)」とかでggってもPostするデータをtextからとかそんなんばっか。
結論
# cat url_list.txt | xargs -n1 curl
xargsコマンドを使って指定したコマンドを並列実行させる - 技術メモ帳
xargsの使い方を探しに行ってやっと見つけたんだけど、この情報のたどり着けなさ、みんなマジで困らなかったの…?
jqでURL取り出してCurlに引き渡したかった。(しかも1件だけ)
「curl (標準出力 OR パイプ)」とかでggってもPostするデータをtextからとかそんなんばっか。
# cat url_list.txt | xargs -n1 curl
xargsコマンドを使って指定したコマンドを並列実行させる - 技術メモ帳
xargsの使い方を探しに行ってやっと見つけたんだけど、この情報のたどり着けなさ、みんなマジで困らなかったの…?
エラー処理という名のガードレールが無いプログラミングを続けてきた。 慣れないことを考えたので思案のログを残す。
あるコレクションのメソッドにて、引数の識別子に一致する要素を探し、仕事をさせる。 この時、引数が存在しないとき(undefined, null)デフォルトの値を使用する。
class Worker { digOilfield(): boolean{}; } class WorkerCollection { workerList: Worker[]; digOilfieldWithId(id: number): boolean{ } takeDefaultId(): number { } } let workerCollection = new WorkerCollection();
digOilfieldWithId の引数に対して、どこまで不安になればいいのか考えていた。
class WorkerCollection { workerList: Worker[]; digOilfieldWithId(id: number): boolean{ if(!id){ id = this.takeDefaultId(); } this.workerList[id].digOilfield(); } takeDefaultId(): number { } } let workerCollection = new WorkerCollection(); /* workerをかき集めたりする */ workerCollection.digOilfieldWithId(id);
一旦書いて、undefinedやnulllが問題じゃなく、Workerが逃亡しているかどうかのほうが重要だなと思った。
class WorkerCollection { workerList: Worker[]; digOilfieldWithId(id: number): boolean{ if(!this.workerList[id]){ id = this.takeDefaultId(); } this.workerList[id].digOilfield(); } takeDefaultId(): number { // 必ず有効なIDを返す } } let workerCollection = new WorkerCollection(); /* workerをかき集めたりする */ workerCollection.digOilfieldWithId(id);
「指定のIDに仕事をさせる」という名称なのに、居ないからという理由で他のIDに仕事をさせるのは、名前に嘘をついており”無責任”なのではと思う。
いると思ったID:10に仕事をさせたつもりが、じつはID:1が仕事をしてしまうのは使う側に対して無責任。*1
class WorkerCollection { workerList: Worker[]; digOilfieldWithId(id: number): boolean{ this.workerList[id].digOilfield(); } takeDefaultId(): number { // 必ず有効なIDを返す } existsWorkerWithId(id:number): boolean{} } let workerCollection = new WorkerCollection(); /* workerをかき集めたりする */ if( !workerCollection.existsWorkerWithId(id) ){ id = workerCollection.takeDefaultId(); } workerCollection.digOilfieldWithId(id);
確かに使う側が気を使って引数を厳選すれば回避できるかもしれないが、それは責務が違う。 それにdigOilfieldWithIdがまた隙だらけになってしまった。
class WorkerCollection { workerList: Worker[]; digOilfieldWithId(id: number): boolean{ if( !this.workerList[id] ) { throw Error("そんな奴ァいねぇ!!"); } this.workerList[id].digOilfield(); } takeDefaultId(): number { // 必ず有効なIDを返す } existsWorkerWithId(id:number): boolean{} } let workerCollection = new WorkerCollection(); /* workerをかき集めたりする */ if( !workerCollection.existsWorkerWithId(id) ){ id = workerCollection.takeDefaultId(); } workerCollection.digOilfieldWithId(id);
メソッドの名前と異なることをしちゃあいけない。でも有効な値だけをもらえるかもわからない。 いざ無効な値が来たときどうする。
もう怒るしかない。怒ることを使う側は知るべきだ。
class WorkerCollection { workerList: Worker[]; digOilfieldWithIdOrDefaultId(id: number): number{ if( !workerCollection.existsWorkerWithId(id) ){ id = workerCollection.takeDefaultId(); } return this.digOilfieldWithId(id); } digOilfieldWithId(id: number): boolean{ if( !this.workerList[id] ) { throw Error("そんな奴ァいねぇ!!"); } this.workerList[id].digOilfield(); } takeDefaultId(): number { // 必ず有効なIDを返す } existsWorkerWithId(id:number): boolean{} } let workerCollection = new WorkerCollection(); /* workerをかき集めたりする */ workerCollection.digOilfieldWithIdOrDefaultId(id);
引数IDが無効ならばデフォルトIDを使うことを明言した。*2
この処理を使うということはデフォルトIDが使用されるかもしれないことを、使う側に認識させることができた。
とりあえずここで止め。
「あーたいぷすくりすとの環境つくろー」つって2時間かかってるのアホ過ぎてプッチン来たぞ
— 焼きニー (@Yajamon) October 30, 2016
tscそのまま使ってwatchでもかけて居れば良かったのでは
— 焼きニー (@Yajamon) October 30, 2016
「まずコード書こうよ」って時にlessだの別ディレクトリに吐こうとか雑念湧きすぎ
— 焼きニー (@Yajamon) October 30, 2016
でもやめられない。
好みの構成はある。既存のコピーじゃ環境が古いままになるのはイヤ。
yeomanやってみようかと思ったけどまた学習コスト積むのもまたドツボに嵌りそうなのでシェルスクリプトでやる。
lessとかぜんっぜんないけど。
なお計測したところこのスクリプト作成に4時間かかったらしい。3回作ればもとが取れるわけだ。
generate project for typescript
時が来た。 ここ3年ほど荒れていた布団事情が改善され、抱きまくら封印を解く時が。
ファーファの中性洗剤でカバーを手もみ洗い。汚れる桶。 封印前からの汚れが出るわ出るわで謝罪した。
封印期間も長過ぎたので週一で洗って改善したほうがよさそうだ。
乾くの待ってるぞ。 天使ちゃんマジ天使。
Mac使ってると、spotlight検索でパパっとアプリケーションを起動できる点が本当に便利に感じる。
Windowsでも似たようなことできないかと思ってEverythingを取り出した。
MacのApplicationディレクトリと違ってProgram Files中にある.exeの深さがまちまちだったり、.exeで検索すると求めていないものがマッチしたりする。*1
なので、使いたいアプリケーションへのショートカットリンクを集め、そこを検索する方針にした。
メニューからブックマークを追加した。
Launch
にしたpath:C:\Users\username\Desktop\shortcuts file:
と指定したCtrl+L
としたLaunch
ブックマークを編集する
launch
と設定
launch:
を指定Win+F
を指定
いい感じだ
おもった。
まぁchromeでWebページをアプリっぽく開くショートカットはスタートメニューに出てこないから……
WinMergeまでのPath
-e -u -wl -wm -fr -dl 'Base file [read only]' -dm ' Theirs fise [read only]' -dr 'Mine file' -ar $BASE $REMOTE $LOCAL -o $MERGED
3ペイン方式。
ペイン | 役割 |
---|---|
左ペイン | Base file |
中央ペイン | Theirs file |
右ペイン | Mine file |
EscキーでWinMergeを閉じる
左ペイン、中央ペイン、右ペインで開いたファイルが、 最近使用した項目リストに追加されるのを防ぐ
左ペインを読み取り専用で起動する
中央ペインを読み取り専用で起動する
起動時、右ペインにフォーカスする
左ペインのタイトルバーを設定する
中央ペインのタイトルバーを設定する
右ペインのタイトルバーを設定する
右ペインで自動マージを試みる
マージ結果を出力先
$MERGED をセットしておけばいい
マニュアルとにらめっこした後に調べてみると先人の知恵がすぐ出てくる現象
今朝はシンデレラガールズ4thライブの会場限定CDを求めてSSAに突撃した。 目的をまぁまぁ達成し、城とかぴにゃとかドールとか展示を堪能したんだけどやばい。この時点での多幸感がやばい。
さてLVに備えるだけだと息巻けば既にiPhone虫の息。
心許ない電池残量でちょいと調べると、LV現地周辺にはどうも電源カフェなるものがあるらしい。 これが恵みか、などとのたまいコンセント→USBを買って店舗に入ったところ、どうもコンセントが見当たらない。 正確にはコンセントユニットに換装出来そうなプレートしか無かった。
おそらくやめたのだろう。営業戦略あってこその好意は割に合わなければ続ける意味はない。
コーヒーをひとつ頼み、座席回転率に貢献した後は、乾電池式の充電器を買いに走ったのだった。
「コンセントを提供しているかも」とか「充電済みで売ってるモバイルバッテリーは満充電かも」とか、店側の好意をむやみに期待してはいけない。 いや、勝手に期待してもいいけど勝手に憂いておしまいよ、と。
お金で解決できること(浮いたお金)だから今回現地調達したけど、 そもそも備えあれば憂いなしだからな!!
朝からSSAに赴きバッテリーを切らしたPの備忘録
つーかtwitterのバッテリー消費激しい。