nDiki : 環境変数

環境変数

2010年9月15日 (水)

今日のさえずり: 「謎が解けそうだよ!」(代償は大量のデバッグログコード)

  • 09:24Twitter? 目の前には新・午後の紅茶の広告。どこが新しいの(両方とも)?
  • 10:07 Evernote の今回のサイクルではじめて 250MB 弱までいった。今日の午後には新サイクルに入るはず。
  • 10:57 MongoDB におけるアトミック操作について確認。
  • 12:10 弁当 350円。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/9oazrC
  • 12:25 今日は環境変数 ComSpec が comspec から ComSpec に戻ってるよ……。
  • 16:56 もちっとホットケーキ 105円。 (@ ファミリーマート神田佐久間町店) http://4sq.com/biJuCj
  • 17:42 「じっちゃん、謎が解けそうだよ!」(代償は大量のデバッグログコード)。
  • 19:47 会社出ようとしたら雨。
  • 20:14 前のおばちゃんが JTB 箱根パンフレットを上目遣いで激しく睨んでて怖い。
  • 22:57 Berkeley DB って今 Oracle なのか。猫の時代しか知らない。
  • 23:59 MongoDB みたいなドキュメント指向データベースで組み込みデータベースって無いのかな。カジュアルに使いたい。MongoDB を自力で埋め込むのは大変だろうし、GNU AGPLv3 を意識しなければならないし。
  • 24:08 ああ、やっぱり PARKER のエスプリ欲しい。 http://amzn.to/cw8Fnp
  • 24:28 明日 9:00 出社だった。寝る。
[ 9月15日全て ]

2011年3月1日 (火)

Notepad++perltidy する

やっぱり Perl スクリプトは perltidy をかけておかないと気持ち悪いよね。 Emacs からは perltidy を呼べるように設定済み

基本 Perl スクリプトを書く時は Emacs なのだが、Windows 上でさくっと書く時もある。最近は Windows 上のテキストエディタNotepad++ を使っているので、同様に Notepad++ からも呼べるように設定しておこう。

以下 Notepad++ v5.8.7 (UNICODE)、[全般設定] で言語に日本語を指定してある状態での設定手順。PerlStrawberry Perl で cpanm が入った状態。

perltidy をインストール

以下のコマンドで perltidy をインストールする。

 cpanm Perl::Tidy

NppExec v0.4.1 をインストール

Notepad++ v5.8.7 に 外部コマンドを実行する NppExec プラグインが入っていなかったのでインストール。

NppExec_041_dll_Unicode.zip をダウンロードしてきて展開し c:\Program Files\Notepad++\plugins に NppExec.dll をコピーする。

Notepad++ から perltidy を呼び出せるようにする

Notepad++ を起動し以下の設定を行う。途中 Notepad を再起動するように指定されたら指示に従って起動しなおす。

perltidy 呼び出しを定義
 c:\strawberry\perl\bin\wperl.exe -x -S perltidy --quiet --preserve-line-endings --backup-and-modify-in-place "$(FULL_CURRENT_PATH)"
  1. [プラグイン]-[NppExec]-[Execute]。
  2. 開いたダイアログの Command(s): に上記コマンドを入力。
  3. [Save] ボタンを押す。
  4. Script name: に perltidy と入力して [Save] ボタン。
  5. もう1回 [Save] を押してダイアログを閉じる。
[マクロ] メニューに登録する
  1. [プラグイン]-[NppExec]-[Advancecd Options]。
  2. 開いたダイアログの Item name: に perltidy と入力。
  3. Associated script: で perltidy を選択。
  4. [Add/Modify] を押す。Menu items に perltidy :: perltidy が追加される。
  5. [Place to Macros submenu] にチェック。

これで [マクロ]-[perltidy] と指定できるようになる。

.perltidyrc を置く

お気に入りの .perltidyrc (perltidy.ini でも OK)を

 perltidy -dpro

で表示されるディレクトリのどこかに置くか、置き場所を PERLTIDY 環境変数に設定しておくか、コマンドラインオプションに -pro=filename という形で指定しておく。

Naney の .perltidyrc はこんな感じ

実行する

適当に Perl スクリプトファイルを開いて [マクロ]-[perltidy] を実行。ウィンドウの下部に Console 出力が表示される。 処理が終わったら [ファイル]-[開き直す]をすると整形された Perl スクリプトが表示される。

上記の手順を Notepad++ マクロ化しようとしたんだけれど、これは失敗。

[ 3月1日全て ]

2012年10月3日 (水)

ついカッとなって Perl で %ENV を tie した

「ある Perl スクリプトで、ある環境変数を使ってる可能性があるのだけれどどこでどう使ってるのかわかなくて」と言われたので、どこで %ENV から値を読んでいるか探してみることにした。なんか簡単にフックできなさそうなので、ついカッとなって %ENV を tie した。

だいたいこんな感じ。

 #!/usr/bin/perl
 
 use warnings;
 use strict;

 package CarpFetchHash;
 use Carp qw/carp/;

 sub TIEHASH {
   bless {%ENV}, shift;
 }

 sub FETCH {
   carp 'FETCH: $ENV{' . $_[1] . '}';
   $_[0]->{$_[1]};
 }

 # 必要なら EXISTS, FIRSTKEY NEXTKEY も

 package main;

 tie %ENV, 'CarpFetchHash';

 print $ENV{PATH};

環境変数に連動している %ENV (のリファレンス)自身にはさすがに tie できないので (TIEHASH で \%ENV を tie しようとすると Self-ties of arrays and hashes are not supported っておこられる)、%ENV の値をコピーした別の無名ハッシュオブジェクトに %ENV を tie する形になっている。

tie %ENV, '...' した後は、$ENV{$key} から値を取るたびに、どの行で使われたか carp してくれる。

これだと %ENV 経由で環境変数そのものは変更できなくなるんだけれど、読み込みしかしていないようなスクリプトならだいたいうまくいってそう(もし getenv(3) とか直接使ってると駄目だけど)。

[ 10月3日全て ]

2013年2月5日 (火)

リモートホスト上の X クライアントの表示を Windows 7 + Cygwin/X + PuTTY

VirtualBox 上の Debian GNU/Linux BOX から sshfs でリモートホストのディレクトリをマウントして QGit を使って Git リポジトリのグラフ見てたりしてたけど、メモリもパワーも食うし起動も面倒。何げに今はリモートホスト側にも QGit がインストールされているので、Windows 7 に X server を入れることにした。

X server は普通に Cygwin/X で。setup.exe をダウンロードしてきて実行。X 関連も選択してインストール。

普段 PuTTY でリモートログインしていたので PuTTY で X11 forwarding させる。以下の手順で。

  1. Windows 7 上で「XWin Serrver」を起動。
  2. いつも接続に使っている PuTTY で如何を追加設定。
    • 「X11 フォワーディングを有効にする」をチェック。
    • X ディスプレイの場所を localhost:0.0 と設定。
  3. PuTTY でリモートホストにログイン。
  4. リモートホスト上で 環境変数 DISPLAY が localhost:10.0 になっていなければそのように設定する(sshd_config の X11DisplayOffset が 10 でなければ、それにあわせてディスプレイ番号も変更する)。
  5. リモートホストの Git リポジトリ上で qgit & を実行。

あっさり。

[ 2月5日全て ]

2013年3月14日 (木)

今日のさえずり: 「デジタル小作人」というワードがあるのね

  • 09:31 Google リーダー衝撃的すぎる……。
  • 09:54 はてなRSS
  • 10:35 “Official Google Reader Blog: Powering Down Google Reader” http://t.co/DgYjW5Bbkj
  • 13:37 今週は昼休みとか放課後とか出歩いてしこたま花粉吸ってるので、今日はおとなしく社内にいる。
  • 13:40 座席温めてます。 (@ 株式会社ミクシィ (mixi, Inc.)) http://t.co/imGXw7u1zO
  • 14:23 「デジタル小作人」というワードがあるのね。
  • 17:27 健歩大会の紙受けとった。
  • 23:07 CGI 的なパラメータを生環境変数から取ろうとしてウンウンしてる人、早めに気がついて止めるべきであった。
  • 23:23 おっと、床屋の予約まだだった。
  • 24:00 @sseze バグは見切りをつけるんじゃなくてしっかり潰す。それ以前に何のために何をどこまで作るのかをきちんと見極める。
  • 24:05 黄色いのが光っているというのはピカチュウ世代。
  • 24:10 @sseze まあエンジニアっぽくていいですよね。
[ 3月14日全て ]

2015年2月20日 (金)

Developers Summit 2015 2日目

rimage:/nDiki/Flickr/15977907243.jpg

昨日に引き続き今日も Developers Summit 2015 で目黒雅叙園へ。セッション会場では(一般人は)机が無かったので、ノート PC は家に置いてきた。

デブサミはほとんどのセッションが撮影可なんだけれど、スライドを公開すると発表者が言っているのに全スライドをシャッターの電子音を鳴らしてながら撮り続ける人がいて昨日は結構ウザかった。

そういった声は多かったようで、今日は進行の人がシャッター音に配慮するように注意を促していてちょっとは減った感じだった。撮りたかったら無音カメラアプリをインストールしてくるとかした方が良いと思う。

再会

会場でばったり zakwa 氏と再会。まさか来ているとは知らなくてびっくり。今はデータ解析やっているとかいっていたかな。良い再会があったのがデブサミ2日目の一番の収穫。こんど同窓会やりましょう。

「GMOプライベートDMP」の開発にあたって取り組んできた DevOps、更にその反省点と現在進行中のカイゼン事例の紹介 山邉哲生氏(GMOインターネット)

朝一番のセッションは昨日の朝に比べて遅い人出。

Docker や Ansible などの話。いろいろ模索し続けている話。インフラ整備専任者が欲しいとのこと。ローカルホストに開発環境を簡単に構築できるというのは良いのだけれど、やはり管理コストが高い印象。

個人的にはやはりどこかのラックに自分の VM がある方が使う側も楽な気がしている。

「DevOps」やってみた。そして、気づいたこと、陥ること、見直すところ。川瀬敦史氏(日本アイ・ビー・エム)

事前の注意とか言い訳についての前置きが長かった。宣伝セッション。

ドメイン駆動設計再入門 和智右桂氏(グロースエクスパートナーズ)

お昼から帰ってきて会場に行ったら、既にまさかの満席だった。あきらめてソファで本を読んだり、kintone CAFE でコーヒー飲んだり。

高速開発を支えるDMMプラットフォームの作り方 〜DMM.makeの場合〜 濱野正樹氏・清酒渉氏(DMM.comラボ)

プラットフォームの刷新にあたり既存のサービスや機能をきちんと UML を用いてモデリングしなおしてあるべき姿の議論を行ったというのが良いなと。

自分の本部でも今いろいろ可視化を行っているグループがあるのだけれど、散文的に書き出すのではなくてきちんとモデンリングするようにしたい。

世界に展開できるウェブサービスのつくり方 下林明正氏(はてな)・矢野幹樹氏(任天堂)

Miiverse におけるマルチリージョン構成や多言語対応についての話。

各リージョンに対してどういったサーバとDB構成にしているのかについての説明は興味深かった。パフォーマンスもそうだけれど、サービスとしてどこの機能・情報をリージョン別に出し分けるかを念頭におく必要があることがわかった。なおコードベースは1つで環境変数で機能の出し分けをしているのだとか。

L10N については具体的な話で良かった。Miiverse 特有の話というよりは一般的に誰もが通る道的な。

Eraser Button Law など世界展開においてはやはり法的な事情があるというのもやはり大変なところのようだ。監視ポリシーは統一していとのこと。また投稿監視は関係会社がやっているとのこと(どこにアウトソーシングしているのかな)。

Miiverse もそうだけれど、どこも独自にコミュニケーションサービスを提供していくので、汎用コミュニティサイトはどういう路線でいくのが良いのかなと考えたり。

琵琶湖を中心とした世界のようなお話 佐藤由紀氏(マイクロアド)

ガラガラだったし、15分ぐらい経っても本題に入らないし琵琶湖の説明が始まったので途中で出てきた。

Agile TED

  • 司会】高柳謙氏・川添真智子氏(ユニファ)
  • 及部敬雄氏(楽天)
  • 鹿島恵実氏(GMOペパボ)
  • 知花里香氏(ディー・エヌ・エー)
  • 西村直人氏(永和システムマネジメント/一般社団法人アジャイルチームを支える会)
  • 山口鉄平氏(ヤフー/一般社団法人アジャイルチームを支える会)

及部敬雄氏の

Not プロセス導入 自分たちに必要なものは自分たちで選ぶ

という話が良かった。推進者がゴリゴリ推し進めるのではなくきちんとみんなで考えて試行錯誤していくところに本当の学びがあるんだなと。

セッションの一番最後に、スタンディングオベーションの号令があったのでそそくさと退席した。

2日間の発表についての雑感

  • 小綺麗に見せるだけの素材写真を多用しているスライド多かった。FlickrURL と CC に従ったクレジット表示を読み取れない小さな文字で入れている的な。キャッチーだけの飾り。
  • 「いついつのイベントで話します」的なのも結構多かった。この発表はこの発表で完結するのが良いと思う。
[ 2月20日全て ]

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年5月8日 (金)

EmacsGo 環境整備

Go ベースのツール置き場を作る

Go で書かれている各種ツールを go get しておく場所を作っておく。このあたり定番のディレクトリ名が良くわからないので ~/local/golang にしておいた(~/local/go は Go 環境自体を入れてある)。

先日使い始めた ディレクトリ毎に異なる環境変数を設定してくれる direnv を使い、 ~/local/golang に移動したらここに GOPATH が設定されるようにしておき、そこで適宜 go get するようにする。

 $ mkdir ~/local/golang
 $ cd ~/local/golang
 $ echo 'layout go' > .envrc
 $ direnv allow
 $ go get -u golang.org/x/tools/cmd/goimports
 $ go get -u github.com/golang/lint/golint
 $ go get -u github.com/dougm/goflymake

今日は goimports と golint と goflymake をインストール。

goimports は「gofmt + import の自動追加・削除」ツール。golint は Go 用の lint。 goflymake は名前の通り Go の Flymake ツール(on-the-fly 文法チェッカ)。

.bashrc

上の $GOPATH/bin に PATH を通しておく。

 if [ -d $HOME/local/golang/bin ]; then
     PATH=$PATH:$HOME/local/golang/bin
 fi

Emacs の設定

go-mode 自体は package.el でインストール済み(package.el は helm を入れた際に設定済み)。

以下今日いれたツールを Emacs から使う設定を追加。

 ; バッファ保存時に gofmt (あれば goimports) を実行してソースコード整形する。
 (add-hook 'before-save-hook 'gofmt-before-save)

 (let ((goimports (executable-find "goimports")))
   (if goimports (setq gofmt-command goimports)))

 ; M-x golint で golint をかけられるようにする。
 (let ((golint-emacs "~/local/golang/src/github.com/golang/lint/misc/emacs"))
   (if (file-exists-p golint-emacs)
       (progn
         (add-to-list 'load-path  golint-emacs)
         (require 'golint))))

 ; on-the-fly シンタックスチェックが動くようにする。
 (let ((goflymake "~/local/golang/src/github.com/dougm/goflymake"))
   (if (file-exists-p goflymake)
       (progn
         (add-to-list 'load-path  goflymake)
         (require 'go-flymake))))
[ 5月8日全て ]

2018年3月10日 (土)

PopClip for MacDay OneRemember The Milk にさっと追加できるようにした

image:/nDiki/2018/03/10/PopClip.png

Mac 上でテキストを選択すると AndroidiOS のようにメニューがポップアップしていろいろなアクションを実行させられる PopClip を今週試用してみたところまずまず便利だったので購入しました。

エクステンションを追加して Day OneRemember The Milk・Alfred・Buffer へ送れるように設定。特に Day OneRemember The Milk についてはそのアプリケーションの画面を開くことなく処理が完結できるので超捗ります。

ちなみに Remember The Milk にタスク追加するエクステンションは見当たらなかったので rumember (記事)を呼び出すエクステンションをさくっと作ってみました。

  1. ru.popclipext フォルダを作る。
  2. ru.popclipext/Config.plist を作る。
  3. ru.popclipext/ru.sh を作る。
  4. ru.rtm.png を作る。(省略可)
  5. Finder で ru.popclipext を開き PopClip にインストールする。

シェルスクリプト実行時に環境変数 HOME が設定されていなかったのでとりあえず決め打ちで指定しちゃっています。

Config.plist

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
         <key>Extension Identifier</key>
         <string>org.naney.popclip.extension.ru</string>
         <key>Extension Name</key>
         <string>ru</string>
         <key>Actions</key>
         <array>
                 <dict>
                         <key>Title</key>
                         <string>ru</string>
                         <key>Image File</key> ← 省略可
                         <string>rtm.png</string> ← 省略可
                         <key>Shell Script File</key>
                         <string>ru.sh</string>
                 </dict>
         </array>
 </dict>
 </plist>

ru.sh

 #!/bin/sh

 if [ -x /Users/naney/local/rumember ]; then
     HOME=/Users/naney GEM_HOME=/Users/naney/local/rumember /Users/naney/local/rumember/bin/ru "$POPCLIP_TEXT"
 fi

[ 3月10日全て ]

2022年7月27日 (水)

Alfred 5 workflow は Run Script 時に外部の環境変数を渡さない

Alfred workflow の Run Script で呼んでいる mkdocs gh-deploy が git するところで動かなくなっていた。

調べたところ Alfred 5 から Run Script 時に外部の環境変数を渡さないようにしたとのこと。 SSH_AUTH_SOCK が渡らなくなって ssh-agent が働かなくなっていた。

Run Script の中で明示的に SSH_AUTH_SOCK を設定するよう修正して動くようにした。

今日のさえずり: 朝よりべらぼうになった

[ 7月27日全て ]

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

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

Process Time: 0.025115s / load averages: 0.63, 0.51, 0.40