PowerShell とパイプと文字コード

Windows PowerShell でテキストをパイプでやり取りするときなんか日本語化けた。
ちょっと事情よく分かってなくて、取り敢えず対症療法とメモ。

$OutputEncoding = [Text.Encoding]::Default

PowerShell 起動時、$OutputEncoding はこうなってる

PS C:\Users\hs9587> $OutputEncoding


IsSingleByte      : True
BodyName          : us-ascii
EncodingName      : US-ASCII
HeaderName        : us-ascii
WebName           : us-ascii
WindowsCodePage   : 1252
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 20127

そして

PS C:\Users\hs9587> [Text.Encoding]::Default


BodyName          : iso-2022-jp
EncodingName      : 日本語 (シフト JIS)
HeaderName        : iso-2022-jp
WebName           : shift_jis
WindowsCodePage   : 932
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 932
PS C:\Users\hs9587> [Text.Encoding]::GetEncoding('shift_jis')


BodyName          : iso-2022-jp
EncodingName      : 日本語 (シフト JIS)
HeaderName        : iso-2022-jp
WebName           : shift_jis
WindowsCodePage   : 932
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 932
PS C:\Users\hs9587> [Text.Encoding]::GetEncoding('utf-8')


BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001
PS C:\Users\hs9587> [Text.Encoding]::GetEncoding('euc-jp')


BodyName          : euc-jp
EncodingName      : 日本語 (EUC)
HeaderName        : euc-jp
WebName           : euc-jp
WindowsCodePage   : 932
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 51932
PS C:\Users\hs9587> [Text.Encoding]::GetEncoding('iso-2022-jp')


BodyName          : iso-2022-jp
EncodingName      : 日本語 (JIS)
HeaderName        : iso-2022-jp
WebName           : iso-2022-jp
WindowsCodePage   : 932
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 50220
PS C:\Users\hs9587> [Text.Encoding]::GetEncoding('us-ascii')


IsSingleByte      : True
BodyName          : us-ascii
EncodingName      : US-ASCII
HeaderName        : us-ascii
WebName           : us-ascii
WindowsCodePage   : 1252
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 20127

デフォルトがそうなんだから最初からデフォルトにしとけば良いのに

手元 Windows機で Git

いまさらながら Git。
手元 Windows 機でもやりたいかと、ブラウザだけじゃなく。

そして

GitHub for Windows」で「GitHub Desktop」を入れて、
そのリードで「Git for Windows」を入れると「Git GUI」が入るのがいいみたい。
その後それで入ってる「Git Bash」を適宜調整する、透過性等のクライアントの設定と、rcファイル等の設定ファイル

普段使いのGUIには「Git GUI」がいい感じ、pullがないので Toolメニューに「git pull」を追加する。
ファイルの編集はその Bashvim が性に合うかも、上記調整でその使い勝手もやっとく、
tag 切るのはその Bash からの gitコマンドがいいみたい、大tag 小tag とかあるんだっけ、具体的なコマンドは下記

新規レポジトリの作成は「GitHub Desktop」からがいい感じ。
(ユーザ)ドキュメント\GitHub の下に作ってく、ライセンスとか ignore初期設定選べるのもいい。
「Git GUI」で作るとその辺選ぶのないしローカルリポジトリを(ユーザ)直下に作るのは馴染めない。

いずれにしても「Git GUI」起動画面で新しいローカルリポジトリもリストアップしてくれるのはあり難い、
GUI起動した後そのショートカットをメニューから作れるのでデスクトップに配置しとくといいかも。

タグも GitGUIにはない、GitBash から

  • ローカルでタグ git tag -a 名前 -m コメント
  • リモート(マスター)にあげる git push --tags
  • Git - タグ

EC2 のコマンドラインツールと VM Import

今更ながらアマゾンウェブサービスVM Import についてちょっと見てみた。
紹介されたのは結構前 Amazon Web Services ブログ: 【AWS発表】 VMwareイメージをAmazon EC2上へ持ち込めるVM Importの発表
その後どうなったかと思ってマネージメントコンソールを探すもそういうメニューは見当らない。紹介記事等確認すると、コマンドラインツールからの使用だとか(別途APIや、VMware vCenter 用には GUIツールもある模様) VM Import/Export

Amazon EC2 API Tools

という訳でコマンドラインツールをダウンロードする SDKs and Programming Toolkits for AWS
コマンドラインJava(5以降)前提なんだけど、手元 Windows7機には既に入ってた、いつ入れたんだっけか、わりと初めから付けてた様な覚えも。
そしてこの辺の手順に従い環境変数を set する。

但し、IAMアカウントの X.509 Certificate はマネージメントコンソールのメニューにはないので、その辺の Linux機の opensslコマンドで自分で作って登録する。CSR作るときに国とか都市とか組織とかいろいろ訊かれるけどそのへんは適当に

設定した環境変数JAVA_HOM, EC2_HOME, PATH=%PATH%;%EC2_HOME%\bin, EC2_PRIVATE_KEY, EC2_CERT このくらい。

取敢えず「ec2-describe-regions」(ec2dre)とかしてみる、無事リージョンのリストが返って来る、現在 7箇所。

ec2-import-instance (ec2iin)

そして ec2iin コマンド。取敢えず手元の VMware Player のイメージを dry-run してみると format が違うと言われる。

C:\<どこか>>ec2iin <イメージへのパス>.vmdk -f VMDK --dry-run -o <アクセスキー> -w <シークレットアクセスキー>
ERROR: This file appears to be in RAW or flat-VMDK format. Please check the form
at parameter and the User Guide for more information.

説明にもあるが、vSphere とかから特定の形式でエクスポートしてないといけない模様。
また、仮想機自体

とか条件がある。さらに、VPC使わないならインターネットに直接さらされるのでセキュリティには十分気を使えと(ちゃんとしたセキュリティグループ、強いパスワード、等々)

VMware Player の更新時に

手元 Windows機(7、64bit、Pro、SP1)で使っている VMware Player をアップデートした(info)。一度前のをアンインストールし、新しいのをインストールする(聞かれる登録情報が随分少なくなってた、名前とメールアドレスくらい)、Windowsは何度か再起動する。
前使ってたゲストOS(Debian)のイメージは新しいプレイヤーでも引き続き動くが、ネットワークの設定が一新しちゃってるのでその辺は(コンソールで)設定し直さないといけない。

gem と Rails の Gemfile でのプラットフォーム

Windows (7 64bit Pro. SP1) で Rails してみようかと思ったのだけど(by NougakuDo Manual)、ジェムの sqlite3 を入れる所で。
特に何もしないでいるとエラーになる。

Installing sqlite3 (1.3.5) with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

sqlite3 | RubyGems.org | your community gem host を見に行くとウィンドウズ用のバイナリ版もある様なんだけど、どうやってインストールするんだっけ。「gem install --help」をみるとプラットフォームの指定が出来るのか。

  Options:
        --platform PLATFORM          Specify the platform of gem to install

ということで、「gem install sqlite3 --platform x86-mswin32-60」としてみたら何とかなった。

さて Railsの方では、「rails new depot」とかすると、ファイルやディレクトリをいろいろ作った後で最後に「bundle install」になってやっぱり上記と同じエラーになる。ファイルは全部そろっているし、アプリケーションは(能楽堂で)動く、Sqlite3へのデータストアもするんだけど、「bundle install」には失敗する、ジェムの追加が出来ないわけだ。

QA Blog: How to configure gemfile for windows platform によると、Gemfile の中でプラットフォーム指定が出来る模様。はじめ同様に「gem 'sqlite3', '1.3.5', platform: 'x86-mswin32-6'0」としてみたが駄目だった。

The available options are: [:ruby, :ruby_18, :ruby_19, :mri, :mri_18, :mri_19, :rbx, :jruby, :mswin, :mingw, :mingw_18, :mingw_19]

「gem 'sqlite3', '1.3.5', platform: 'mswin'」としたら何とかなった。

NougakuDo 1.2.0
ruby 1.9.3p0 (2011-10-30) [x64-mswin64_100]
gem 1.8.13
Rails 3.2.0.rc1

円マークでの混乱、\、¥、¥

多分組み合わせ的にレアなケースだと思うのだけど、円マークで混乱してしまった。

環境

やりたかった事

# coding: utf-8
require 'win32ole'
wsh = WIN32OLE.new 'WScript.Shell'
wsh.Run '"C:\Program Files\<云々>\<実行ファイル名>" <オプションとか>'

そしてエラー

<Rubyスクリプト>.rb:<行>:in `method_missing': (in OLE method `Run': ) (WIN32OLERuntimeError)
    OLE error code:80070002 in <Unknown>
      <No Description>
    HRESULT error code:0x80020009
      Exception occurred.
        from <Rubyスクリプト>:<行>:in `<main>'

所要の Rubyスクリプトxyzzy で編集していた、その文字エンコーディングは「Unicode (UTF-8N)」(ツール - ローカル設定 - もろもろ)。動かしたかった実行ファイル名は Windowsエクスプローラーからドラッグ&ドロップしてきたもの。そのディレクトリ区切り文字「\(バックスラッシュ、"\\".ord # => 92)」がいつの間にか「¥(&yen;、&#165;)」にすり替わっていた(それは「¥(全角円マーク、'¥'.ord # => 65509)」でもない)。
で、.Run で実行しようとしてもそんなファイル見つからずエラーになる。
xyzzy の編集画面では、「¥(&yen;、&#165;)」も半角幅の表示で、はじめ違うとは思いもしなかった、疑ってよく見るとフォントフェイスがちょっと違うのだけど。
別にコピー&ペーストしても「\(バックスラッシュ、"\\".ord # => 92)」になるし、いろいろ動いたり動かなかったりでなんか大変混乱した。WindowsShift_JIS(Windows-31J) をコピーしてきて xyzzy で UTF-8N にコード変換するときになんかあったんだろうか。

分かってしまえばよく目を凝らせば良いことなんだけど、それまで随分時間掛かった。