nDiki : シェル

シェル - shell

2013年6月16日 (日)

Twitter API v1.1 対応とか、パイプでやりとりするの JSON でいいのとか

Twitter API v1.1 に対応していないスクリプトがあって、たしか OAuth 対応はしてあるけど RSS 形式を使っていたので JSON で取得して処理するようにしなければなーと思ってたんだけれど、そもそも OAuth 対応すらしてなかった。

なので Net::Twitter::Lite を使うように書き換え。

あと、いままで1つのスクリプトで「Twitter API を呼び出してタイムライン取得」「シリアライズしてファイルに保存」「Wiki 形式に整形して書き出し」をしていたんだけれど、UNIX 哲学に従って小スクリプトに分割してパイプで受け渡すように変更するなど。

スクリプト間のやりとりは構造化テキストデータなので JSON にしたんだけれど、若干これでいいのかなぁ感はある。テキスト形式だし最近の主流フォーマットではあるんだけれど、それでもシェルから見ると複雑な形式な気がするんだよね。でもあと軽量な構造化テキストフォーマットだと YAML ぐらいかなぁ。

スポンサード リンク
[ 6月16日全て ]

2013年10月29日 (火)

今日のさえずり: 弊害は知りつつもいわゆる半角スペースいれないと気持ち悪く感じる体になってしまっている

2013年10月29日

  • 09:55 「オーケー。どんな仕事でも場合によっては退屈になるなら、逆にどんな仕事でも情熱をもっていきいきとやることもできる。そうだね?」 -- フィッシュ! p.36
  • 13:12 雨なので。 (@ セブンイレブン 渋谷区渋谷2の南店) http://4sq.com/1g8p7KK
  • 13:57 今年はクリスマスツリー新調したいな。去年11月下旬に店頭・ネットチェックしたら既に出遅れだったので、そろそろ動くか。
  • 19:28 GitHub / GitHub Enterprise で side-by-side diff。 / “Chrome Web Store - Octosplit” http://bit.ly/HsDHxp
  • 19:28 “nifty:デイリーポータルZ:鮫洲運転免許試験場は食べログ2.95点” http://bit.ly/1aDM702
  • 19:58東京都交通安全協会 ピーポくんグッズ” http://bit.ly/1iqV8KH
  • 19:58 「犯罪を見逃さない!」 (個人使用はできません) / “大東京防犯ネットワーク|地域の防犯|地域に密着したクルマによる防犯パトロール その2「動く防犯の眼」” http://bit.ly/1iqV8KG
  • 20:33 理科作。弊害は知りつつもいわゆる半角スペースいれないと気持ち悪く感じる体になってしまっている。 / “出版社に送る原稿には日本語と英単語の間にスペースを入れない方が良いらしいので贖罪のためにシェル芸やります。 | 上田さんのブログ” http://bit.ly/1hpCchR
  • 20:47 雨。 (@ 株式会社ミクシィ (mixi, Inc.)) http://4sq.com/1comKmb
[ 10月29日全て ]

2013年11月20日 (水)

Shibuya Plack/PSGI Conference (shibuya.pl) #1 #plackcon

LINE株式会社で開催された Shibuya Plack/PSGI Conference (shibuya.pl) #1 #plackcon 「秋のPlack/PSGI祭り」に参加してきた。今回は YAPC::Asia Tokyo でもよくトークされている masartz 氏とご一緒させていただいた。ここの会場にくるのは「第3.5回 データ構造と情報検索と言語処理勉強会」「PerlCasual #05」に続き3回目。

開催を知った時には定員60人すでに埋まっていて補欠だったんだけれど、その後定員80人に増やしてくれたようで参加できるようになった。当日時点ではキャンセル等で定員切っていてきたい人はこれるようになってたよ。

普通に使う Plack/PSGI Server @fujiwara 氏

会場アンケートをとりつつ、必須な/便利なモジュールや Plack::Middleware の紹介。

  • だいたい Starlet か Sterman を使っている。
  • リバースプロキシ使っている時には Plack::Middleware::ReverseProxy が便利。
  • Server::Starter の start_server では plackup を実行するシェルスクリプトを作ってそれを指定するようにするとパラメータ変更できるのでいいよ。
  • Devel::NYTProf する時には if $$ % 11 == 0 などで一部のプロセスだけでプロファイリングするようにすると不運な人は遅くなるけど、全体の影響抑えつつできるよ。

『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3 を受けての話題 @kazeburo 氏

YAPC::Asia Tokyo 2013 の発表の続き。

Plack/PSGI のパフォーマンス向上の取り組みが進めば Perl の適用領域を広がるし(リアルタイムな広告系とか)、Perl 使いの仕事も増えるよ。

Plack::BodyParser の話 @tokuhirom 氏

  • 最近のサーバーサイドの開発JSON API開発と管理画面の開発だよね。
  • HTTP ステータスコードの使い方をシンプルに。アクセス自体が成功したら 200 を返して、API の結果の方に API 処理自体のステータスを入れる方がシンプルだし、アクセスログ処理なども楽だよと。
  • JSON API のボディ内で返すステータスも HTTP ステータスコードと同じにしたら覚えることが少なくて楽。
  • URI の /v1/ とか入れたりするけど /v2/ とか出たためしがない。

など。プラクティカルなトーク。

Plack::Request with Encoding @moznion 氏

リクエスト中のパラメータの decode を Plack で一箇所でやってしまう話。

Mojolicious の知りたい 10 のコト @yusukebe 氏

  • morbo と hypnotoad。それほどパフォーマンス悪くない。
  • Mojo::Base は使わなくていい。それほど機能無いし、Web 系以外では Mojo に依存したくないし。

YAPC::Asia 2014 やります!」とのことです。

LT

@bayashi 氏の plackup -e でちょっとしたこといろいろできて便利だよという話や、@azumakuniyuki 氏の Haineko の話や、 @hkoba 氏のコントローラを書く人がいないプロジェクト向けのテンプレートエンジンの話や、@songmu 氏の .psgi からの卒業の話とか、@tasukuchan 氏のきまぐれオレンジ☆ロードについてのラジオみたいなビデオ LT とか。

空気を読まない(読めない)一方通行なビデオ LT は新しく。

[ 11月20日全て ]

2014年1月29日 (水)

git-new-workdir で複数の Git ブランチをチェックアウトして同時に作業する

Git のトピックブランチ開発している時に、他のブランチを同時にチェックアウトしておきたくなる事がままある。

  1. 割り込みで他の人のコードをレビューするため。
  2. 途中で別の不具合見つけたので、別トピックブランチで先に fix するため。
  3. 複数のブランチ上のファイルをつまみ食い的に Emacs で開いて中を見たりしたいため。
  4. 他の人に使い勝手などを確認してもらうため、あるブランチWeb サーバを起動したいため。

いったんテンポラリコミットを作ったり、あるいは stash したりして作業ツリーを保存してチェックアウトしなおして用事を済ませて元に戻すとかはやるのだけれど、ちょっと面倒。3番目のケースは同時にチェックアウトしたいのでこの方法だと駄目だし、4番目のケースだとしばらくそのままにしておかないのでもっと困る。

そのような時はローカルリポジトリから別ディレクトリへ clone して、そちらをサブで使ったりするんだけれど、サブの方でちょっと修正したりした際にローカル間で push/pull とかしなければならなくてこれまた面倒。

なんかいいのないかなと思ったら Git の contrib に git-new-workdir というのがあるのを昨日知った。

 git-new-workdir . ../sub
 あるいは
 git new-workdir . ../sub

で作業ツリーを新しく作れる。/tmp/git/main を /tmp/git/sub に new-workdir すると sub の方の .git の中は

 drwxr-xr-x 3 naney naney 4096  1月 30 00:37 .
 drwxr-xr-x 3 naney naney 4096  1月 30 00:37 ..
 -rw-r--r-- 1 naney naney   23  1月 30 00:37 HEAD
 lrwxrwxrwx 1 naney naney   25  1月 30 00:37 config -> /tmp/git/main/.git/config
 lrwxrwxrwx 1 naney naney   24  1月 30 00:37 hooks -> /tmp/git/main/.git/hooks
 -rw-r--r-- 1 naney naney  104  1月 30 00:37 index
 lrwxrwxrwx 1 naney naney   23  1月 30 00:37 info -> /tmp/git/main/.git/info
 drwxr-xr-x 2 naney naney 4096  1月 30 00:37 logs
 lrwxrwxrwx 1 naney naney   26  1月 30 00:37 objects -> /tmp/git/main/.git/objects
 lrwxrwxrwx 1 naney naney   30  1月 30 00:37 packed-refs -> /tmp/git/main/.git/packed-refs
 lrwxrwxrwx 1 naney naney   23  1月 30 00:37 refs -> /tmp/git/main/.git/refs
 lrwxrwxrwx 1 naney naney   26  1月 30 00:37 remotes -> /tmp/git/main/.git/remotes
 lrwxrwxrwx 1 naney naney   27  1月 30 00:37 rr-cache -> /tmp/git/main/.git/rr-cache
 lrwxrwxrwx 1 naney naney   22  1月 30 00:37 svn -> /tmp/git/main/.git/svn

のような感じで HEAD と index と logs/HEAD 以外はもとのローカルリポジトリへのシンボリックになっている。なので sub での checkout や index の Git 操作など以外は main の方へ反映されるようになっている。わざわざ push/pull しなくて良いのでこれは楽ちん。もちろん作業ツリーはそれぞれ独立しているので、例えばサブの方で Web サーバを起動しておいたり時間のかかるフルテストを走らせておくとかもできる。

ただ複数チェックアウトして作業していると、気がつくと Emacs で違うほうの作業ツリーのファイルを開いて編集していたりして「あれ? 変更したけれどなぜか反映されない……」とかやっちゃうので(実際やった)ちょっと注意が必要ではある。

git-new-workdir は contrib の中(Debian GNU/Linux sid だと /usr/share/doc/git/contrib/workdir/git-new-workdir)にあるみじかいシェルスクリプトなので適当に PATH の通ったところにコピーして実行権限を設定しておけば OK。

Git はこういうところがカワイイよね。

[ 1月29日全て ]

2014年2月19日 (水)

今日のさえずり: 風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか

2014年02月19日

  • 08:41 “ベル研究所が開発するOS「Plan 9」が新たにGPLv2で公開される | SourceForge.JP Magazine” http://bit.ly/1jPdzy3
  • 09:24 iddy 終了。リンクとか外さないと。 / “【重要なお知らせ】iddyサービス終了のお知らせ | iddy 開発者ブログ” http://bit.ly/1feX5Mf
  • 09:24 7,000円台ぐらいまでで出たら即買ってもいいな。iPad 2 での FaceTime のかわりになる。もし国内で出る事があればもっと高くなるんだろうなぁ。 / “数千円で買えて携帯会社と契約不要の「Skypeスマートフォン...” http://bit.ly/1feX7Uk
  • 09:24 「運営者が飽きた」 / “iddy 終了について補足 | WWW WATCH” http://bit.ly/1m7oLnX
  • 10:35 歌うキーボード ポケット・ミク (大人の科学マガジン特別編集)とな。 http://amzn.to/1bjmkNH
  • 21:25 今作っている機能、テーブル1つで済ませるつもりだったけれど、ゴチャゴチャしてきたのでやっぱり明日分ける。
  • 22:53 “大雨・大用に日本野鳥の会バードウォッチング長靴” http://bit.ly/1cpOp4s
  • 24:29 さてこの Subversion で管理しているコードを Git 管理にするかなととりあえず svn log したら「作業コピーではありません」と出て、あれっと思ってみたら CVS/ というディレクトリが。
  • 24:33 そしてなんでこれ /var/www 以下できちんと動いているのに手動で動かすとモジュール見つからないのって思って風呂入って出てきたら、シェル上では perlbrew で別の Perl が動いているのを思い出したとか。
  • 25:03 “文字列検索コマンド「grep 2.17」リリース | SourceForge.JP Magazine” http://bit.ly/1gVu5sN
  • 25:03 “CSRF対策用トークンの値にセッションIDそのものを使ってもいい時代なんて、そもそも無かった” http://bit.ly/1kXbPTN
[ 2月19日全て ]

2014年4月4日 (金)

tmux でペインでの作業をロギングしておく設定

ターミナルでの作業の内容をファイルに書き出しておきたいことがある。特に SSH で入ったリモートホスト上での作業内容を手間をかけずにローカルホスト上にもってきたいことがよくある。

tmux だと pipe-pane コマンドを使うと各ペインでの作業をパイプでコマンドに送っておけると教えてもらったので設定してみた。

パイプからの送り先のコマンドを用意する

cat でもいいのだけれど自分は日付別に保存したいので以下のようなシェルスクリプトを ~/.dotfiles/bin/log-tmux として作る。

 #!/bin/sh

 DATE=`date "+%Y-%m-%d"`
 LOG_DIR=$HOME/var/tmux/log/$DATE
 LOG_FILE=$LOG_DIR/tmux-$DATE-$1.log
 mkdir -p $LOG_DIR
 tmux display-message "Started logging to $LOG_FILE"
 cat >> $LOG_FILE

~/.tmux.conf にキーバインディングを設定する

~/.tmux.conf に以下を追加。

 #
 # logging
 #
 # C-t C-p (toggle)
 bind-key C-p pipe-pane -o '$HOME/.dotfiles/bin/log-tmux "#S-#I:#W-#P"'

これで prefix*1 + C-p をタイプすると

 ~/var/tmux/log/2014-04-04/tmux-2014-04-0-0:bash-0.log

みたいな感じでファイルが作られてそこに pane に出力された内容が書き出されはじめる。もういちど prefix + C-p すると停止。複数のペインで同時に別のファイルにロギングしておける(それぞれで prefix + C-p をタイプして開始させておく)。

ちなみに #S とかは以下。

  • #S: セッション名
  • #I: 現在のウインドウインデックス
  • #W: 現在のウインドウ名
  • #P: 現在のペインインデックス

保存されたファイルにはエスケープシーケンスなども含まれるので見る時は less -R や lv -c あたりを使うとみやすい。

*1自分は C-t

[ 4月4日全て ]

2014年6月18日 (水)

tmux から PuTTY のタイトルバーのタイトルを設定する

PuTTY のタイトルバーの設定をする方法としてシェル上で printf 使うとかあるけれど tmux 起動していると反映されない。

と思ったら .tmux.conf で

  set-option -g set-titles on

しておくだけでよかった。

これで複数 PuTTY を開いている時に Windows のタスクバー上でセッション名で区別できるようになって楽になった。

[ 6月18日全て ]

2014年10月18日 (土)

スーツを処分したり、テレビの配置替えをしたり【日記】

スーツを処分したり

今の会社では仕事でスーツを着る機会が無くタンスの肥やしになっているので、何着か処分しておくことにした。夏スーツ1着と秋冬スーツ1着処分決定。夏スーツはローテーションできるようにあった同じような2着のうち1着を捨て。秋冬スーツパンツがきつくなっているのを1着処分。

これで持っているのは夏スーツ1・秋冬スーツ2・ブラックスーツ1。とりあえず必要になっても一応対応できるはず。

テレビの配置替えをしたり

ちょっと大きな家財を買おうかなという話になっていて、置く場所を考えるとリビングのテレビを反対側に移動した方が良いかなということになった。ということでホームエレクターのワイヤーシェルフと場所を入れ替えることにした。

かかった時間は予想通り2時間ぐらい。3m のテレビアンテナケーブル(ブルーレイディスクレコーダーを去年買った時に一緒に買い替えた JLS3D-P [アンテナケーブル F型プラグ-F型プラグ 3m])はギリギリとどいた。もう少し動かす事になるならもっと長いのが必要。

思ったより違和感なくすぐ馴染めた。

[ 10月18日全て ]

2015年4月30日 (木)

開発ディレクトリ毎に異なる環境変数を設定するのに direnv を使う

シェルで特定の開発ディレクトリ以下に移動すると自動的に設定ファイルで指定された環境変数を設定し、そのディレクトリから別のディレクトリに移動すると戻してくれる direnv が便利。

https://github.com/zimbatm/direnv

Go開発するのに GOPATH と bin への PATH 追加が面倒だったので導入してみた。

インストール

 git clone https://github.com/zimbatm/direnv
 cd direnv
 make build
 cp -a direnv $HOME/local/bin

なお direnv は Go で書かれているのでソースからビルドするには Go開発環境が必要。

Bash の設定

.bashrc に以下を追加。

 if command -v direnv > /dev/null; then
    eval "$(direnv hook bash)"
 fi

その他のシェルでの設定は https://github.com/zimbatm/direnv 参照。

Go プログラム開発ディレクトリでの設定

 $ cd project_dir
 $ export EDITOR=emacsclient # 次のコマンドで開くエディタ
 $ direnv edit .
   .envrc の編集用にエディタが開くので

   layout go

   と入力して保存。

後は Bash でこのディレクトリ以下(サブディレクトリも含む)に移動するとこの .envrc のあるディレクトリが GOPATH に追加され、また bin ディレクトリが PATH に追加される。便利。

なお direnv edit . しないで直接 .envrc を作った場合は、別途 direnv allow . を実行してこの .envrc を使うことを明示的に許可する必要がある。許可したかどうかは ~/.config/direnv/allow/* に保存される(freedesktop.org の XDG Base Directory Specification っぽくなっているので XDG_CONFIG_HOME 環境変数があれば ~/.config ではなくてその下に保存される)。

その他標準で

  • layout go
  • layout node
  • layout perl
  • layout python
  • layout ruby

などが用意されている。また

 PATH_add bin

のようにして PATH への追加も簡単。

その他コマンドの実行も可能なので開発以外にもいろいろ便利に使える。

[ 4月30日全て ]

2015年12月18日 (金)

今日のさえずり: 社内で、宇宙村知っている方にまた声をかけられました

2015年12月18日

  • 19:14 帰宅支援グッズは避難訓練のたびに装着してみているので比較的綺麗です。
  • 19:20 社内で、宇宙村知っている方にまた声をかけられました。宇宙パワーシールも買ったとか。弊社、隕石パワーありすぎ。
  • 20:43 ポビドンヨードで乗り切ります。
  • 21:56 素晴らしい。 / “日清はなぜ10分どん兵衛を作らなかったのか” http://bit.ly/1RWnNMM
  • 21:56鮫洲にギャラリー「アートンシェルター」 ホステルとカフェを併設 - 品川経済新聞http://bit.ly/1RWnMbU
[ 12月18日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・PO をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.058396s / load averages: 0.43, 0.44, 0.42
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker