shellscript

Fri, Apr 27, 2018

2018/04/27 最近読んだ記事

最近読んだ記事で気になったものを幾つかピックアップ。 ERC20に準拠したトークンコントラクトの脆弱性問題について 独自実装した箇所のSolidityのプログラムにバグがあった。 ERC20自体に欠陥があるわけではない。 算出処理はzeppelin-solidityというコントラクト開発ライブラリ群のSafeMath.sol を利用することが定石となっています。 計算処理で意図しない処理を弾くのには SafeMath 使うのが良さそう。 シェルスクリプトで排他・共有ロック&セマフォ POSIX標準のshell scriptでロックを作る。(どんなOS上でも動くという話) ポイントはアトミックに(単一操作で)作るという点である。つまり存在確認処理と作成処理が同時ということだ。もし存在しないことを確認できて、いざ作成しようとした時に他のプロセスに素早く作成されてしまったら、ロックファイルを上書きできてしまうのでアクセス権が唯一のものではなくなってしまう。 作成と確認アトミックであれば良い。 $ mkdir /tmp/lockfile # ロック作成/確認 $ echo $? #=> 0 # 成功 $ mkdir /tmp/lockfile # => mkdir: ディレクトリ `/tmp/lockfile' を作成できません: ファイルが存在します $ echo $? #=> 1 # 失敗 ちなみに以前の会社ではmkdirでロック書いてた。 確か他と比較して早いというのが理由。 【翻訳】サイドプロジェクトから収益性のあるスタートアップに育てる方法(前編) Nomad List 作った人の話。毎月1つのペースでサービス作るのは楽しそう。 Nomad Listはノマドワーカーに必要なネットや電源、生活費を含めた都市毎のランキングがメインのサイト。 コワーキングのリストとかもある。 ログインしてチャットチャンネルに参加する部分は有料。 サインアップしたらフリーミアムとかはなくて全て有料プラン。 あと、remoteok というサービスも作っていてこちらも稼ぎを出してる模様 数を撃つこと自体は当てるためには必要。個人的にかなり参考にしたい。 アマゾン・エコーが、英会話の練習相手になってくれた 日常会話的な内容が練習出来ると良さそう。 最近まったくSpeakingの練習してない。まずEcho Dotを箱から出さないと。
Mon, Jan 23, 2017

簡単にHugoのブログポストのテンプレを生成するシェルスクリプトを作った

表題の通り。 いつもコマンドを忘れるので。 ちなみにデプロイもシェルスクリプトで書いてる。 hugoの記事作成 hugo new "path/to/article.md" コレだけなのだが、記事ソースが配置されるcontent配下にpostと階層が有る場合、 hugo new "content/post/article.md"とやってしまう。 しかしcontent/content/path/to/article.mdに作られてしまう。 正しくはhugo new "post/article.md"だ。contentを除いておく必要が有る。 「久々にブログ書くか」という時(いつも)こうなる。しんどい。 shellscriptで生成を自動化 ということで自動化しよう。 shellscriptを書く。new_post.shと言う名前にした。 #!/bin/bash echo -e "\033[0;32mCreating new post...\033[0m" if [ $# -eq 1 ]; then title="_$1" else title="" fi formatted_date=$(date "+%Y-%m-%d") full_path="posts/${formatted_date}${title}.md" hugo new "$full_path" vi "content/$full_path" タイトルに日付を付けてエディタを起動するまで自動化した。 ./new_post.sh title で./content/posts/2017-01-23_title.mdが生成されてviで開く。 これでブログ書き出しの障壁が小さくなった。もっと頻度を上げたい。 ちなみにbashのlintとしてshellcheckを入れてる。 さらにVimのWatchdogsに組み込んで使うと、非同期でチェックを行い、警告を出してくれて大変便利。 変な書き方すると怒ってくれて、自分のような半端者にはたいへん助かる。 使ってない人はぜひインストールしよう。
Fri, Apr 15, 2016

特定のアプリケーションにスイッチするシェルスクリプトを作る

Web開発を行っていて、ターミナルとブラウザを行き来することが非常に多い。 一度のキーアクションでターミナルに移動、ブラウザに移動できる方法がないかと考えた上で、作ってみた。 思いつきから作ってみたが意外と便利だった。一日に多用するショートカットとなった。 ブラウザとターミナルを交互に切り替えたい Web開発している時にターミナルとChromeを何度も行き来することがある。 Alt-tabもあるけれど、他のウィンドウが邪魔で何度Alt+tabを入力すればよいかわからない。 Alt-tabを押す、該当の画面がターミナル(Window)であるかを確認、もう一度Alt-tabを押すという繰り返しが非常に面倒。 特定のキー1回でブラウザとターミナルをトグルできればベスト。 xdotoolを使ってみる できる事は下記があるらしい。 ウィンドウ ID の取得 名前やクラスによる検索 現在アクテイブなウィンドウ ウィンドウ ID で指定されたウィンドウの操作 リサイズ 移動 最小化 最全面へ マウスイベントの模倣 マウスカーソル移動 マウスクリック キーイベントの模倣 文字入力 ショートカットキー入力 NOTE: xdotoolを使い特定ウィンドウの表示をワンキーでトグル(http://d.hatena.ne.jp/mooz/20101228/p) $xdotool Usage: xdotool <cmd> <args> Available commands: getwindowfocus getwindowname getwindowpid getwindowgeometry getdisplaygeometry search selectwindow help version behave behave_screen_edge click getmouselocation key keydown keyup mousedown mousemove mousemove_relative mouseup set_window type windowactivate windowfocus windowkill windowmap windowminimize windowmove windowraise windowreparent windowsize windowunmap set_num_desktops get_num_desktops set_desktop get_desktop set_desktop_for_window get_desktop_for_window get_desktop_viewport set_desktop_viewport exec sleep 結構いろいろある