2014年02月23日

墓標としてのオンラインソースコードホスティングサービス

Ruby WeeklyIssue 183 で知ったが、Ruby製ビルドツール「Rake」の開発者である Jim Weirich 氏が亡くなられたそうだ。

Unless you've already heard the news on Twitter, it's with much sadness I pass on the news that Jim Weirich has died. Jim was not only a well known Rubyist as the creator of Rake, but also a respected teacher, speaker, mentor, and friend to many.

氏はGitHubに、2月20日0時46分にcommitしたコードをpushしている。氏の最後のcommitのページには、彼の死を悼む人々のコメントが沢山投稿されている。GitHub社も、特別にコメントをページ上部に掲載している

さながら、このページが氏の墓標としての役割を果たしているかのようだ。

コードを書き生きるプログラマとして、その様は羨ましくもある。個人の最後の成果物が墓標のように機能する可能性には今まで気づかなかったが、割と「アリ」なのかも知れない。

願わくば、私も何時の日にか、その死に際して「墓標」に沢山の人々が集うような人間になりたいものだ。

GitHub社も、特別にコメントをページ上部に掲載している
GitHubはRubyを使っているとか使っていたとか聞くので、Rakeのお世話になっている/いた人も多いのだろう。
posted by 天井冴太 at 15:00| Comment(0) | TrackBack(0) | Programmers | 更新情報をチェックする

2014年02月15日

やったー!Vimでヒアドキュメント実装出来たよー!

この記事は、「Vim Advent Calendar 2013」の第77日目、通算2回目の担当記事である。

なお、昨日はosyo-manga(@manga-osyo)さんの「Vim Advent Calendar 2013: KaoriYa 版 Vim の +migemo を試してみた」だった。

更に、私のVAC2013担当記事1つめは「closesomewindow.vim – 条件に合うウィンドウを閉じる Vim plugin」だった。


最初に言っておく。

ごめんなさい

ヒアドキュメントとは何か?

シェルスクリプトやその他大体のスクリプト言語に実装されている、以下のような機能のことである。

var = <<EOS
↑こういう風に、
  "<<" + 識別子
という形式で書いたら、
次に識別子と同じ文字列が現れるまでの、
全ての行の内容を、
一つの文字列として取得出来る

↓この"EOS"までがヒアドキュメント
EOS
続きを読む
posted by 天井冴太 at 15:00| Comment(0) | TrackBack(0) | Tool | 更新情報をチェックする

2014年02月10日

PowerShell でコマンドレットの履歴を保存する (TB: このコマンドレット、この前実行した、ような・・・・・・)

どうも、PowerShellと出会ってからというもの、オブジェクト指向型でないコマンドラインシェルが時代遅れに見えて仕方ない天井冴太です。

Zshだと、ターミナルを開き直しても以前やったコマンドの履歴が参照出来て地味に便利。確かBashもそうだった気がする。PowerShellでは出来ないのか?とググって、以下の記事に辿り着いた。

PowerShell - このコマンドレット、この前実行した、ような・・・・・・ - Qiita

ふむふむ成る程。prompt関数内でGet-Historyした結果をExport-Csvして、それをImport-Csvするコードを自分のプロファイルのファイルに書き込めば可能と。

で、上記記事中のコードには、記事自体でも明記されているが、幾つかの問題点が残されている。

上2つは解決出来そうだ。3つ目もある程度は緩和出来そう。という訳でチャレンジ……出来た!

$historyFilePath = "~/.posh_history.csv"

Import-Csv $historyFilePath | Add-History

function prompt {
	$latestHistory = Get-History -Count 1
	if($script:lastHistory -ne $latestHistory) {
		$csv = ConvertTo-Csv $latestHistory

		if( -not(Test-Path $historyFilePath)) {
			Out-File $historyFilePath -InputObject $csv[0] -Encoding UTF8
			Out-File $historyFilePath -InputObject $csv[1] -Encoding UTF8 -Append
		}
		Out-File $historyFilePath -InputObject $csv[-1] -Encoding UTF8 -Append

		$script:lastHistory = $latestHistory
	}

	return "$pwd >"
}
  • 入力無しEnterで重複する履歴が保存されるのは、その時には履歴情報の更新が行われないから。毎回、直前の履歴を$script:lastHistoryに格納しておき、それと現在の最新の履歴を比較する事で、履歴の更新の有無を判断している。
  • 元のコードでは、追記するレコードをマニュアルで構築してる。故にエスケープ処理の抜けが発生しているのだが、CVSへの変換だけであればConvertTo-Csvが使える。ConvertTo-Csvの結果の最終行を取り出せば、それが求めるレコードの内容となる。
  • 同様に、元のコードではマニュアルで構築しているCSVファイルのヘッダ(シリアライズした型の名前、各フィールドに対応するメンバの名前)2行も、ConvertTo-Csvの結果の先頭2行が使える。

後は、現状prompt関数に直書きしているのを別の関数に独立させれば、なおシンプルになるだろう。

しかし、そもそも履歴のファイルへの保存が追記でないといけないのかは疑問。PowerShellで記憶出来る履歴の最大件数は$MaximumHistoryCountに設定された値(デフォルトは64)で、それを超えると古いものから捨てられる。ファイルに保存されている履歴の件数が$MaximumHistoryCount以下であれば問題ないが、それを超えると、古い情報は無意味になり、しかもファイルは際限なく太っていく。情報を追加するだけのAdd-Historyではなく、実行も行うInvoke-Historyを使うというならば話は別だが、毎回上書きした方が良いのではないかと思う。エクスポートの為のコードも、「Get-History | Export-Csv -Path $historyFilePath」だけで済むしね。

オブジェクト指向型でないコマンドラインシェルが時代遅れに見えて仕方ない
えーマジテキスト出力型コマンドラインシェルー? テキスト出力型コマンドラインシェルが許されるのは2009年までだよねー!
Bashもそうだった気がする
Bash使ってたの昔過ぎて憶えてない。
Export-Csv
勿論Export-Clixmlでも良い筈である。以降のCVS読み書き周りについても同じ事が言えるが、特に断りは入れない。
exit以外の方法でPowerShellを終了させると、直前の履歴が保存されない。
これは、どういう意味かよく分かってない。
ConvertTo-Csv

CSVに限った話ではないが、ConvertTo-Csvが在るのに何故Export-Csvなんて物があるんだろう。要はExport-Csvの内容をファイルにリダイレクトすればいい訳で、専用のコマンドレットが必要とは思えない。

(そういう意味では、Out-Fileの存在も謎だ。)

ラベル:PowerShell CLI CUI
posted by 天井冴太 at 20:47| Comment(6) | TrackBack(0) | Other | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。