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
デフォルトがそうなんだから最初からデフォルトにしとけば良いのに
日めくりカレンダー
日めくられというべきかもしれない。
自分でめくるわけじゃないので
GitHub - hs9587/date_calender: Desktop date by date calender (Windows)
こんなの
手元 Windows機で Git
いまさらながら Git。
手元 Windows 機でもやりたいかと、ブラウザだけじゃなく。
- 日本語でWeb上から無料で読める書籍としては Pro Git が有名です
そして
「GitHub for Windows」で「GitHub Desktop」を入れて、
そのリードで「Git for Windows」を入れると「Git GUI」が入るのがいいみたい。
その後それで入ってる「Git Bash」を適宜調整する、透過性等のクライアントの設定と、rcファイル等の設定ファイル
普段使いのGUIには「Git GUI」がいい感じ、pullがないので Toolメニューに「git pull」を追加する。
ファイルの編集はその Bash の vim が性に合うかも、上記調整でその使い勝手もやっとく、
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)
- Importing a VM as an Instance Using VM Import/Export - VM Import/Export
- http://docs.amazonwebservices.com/AWSEC2/2011-12-15/CommandLineReference/ApiReference-cmd-ImportInstance.html
そして 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)」がいつの間にか「¥(¥、¥)」にすり替わっていた(それは「¥(全角円マーク、'¥'.ord # => 65509)」でもない)。
で、.Run で実行しようとしてもそんなファイル見つからずエラーになる。
xyzzy の編集画面では、「¥(¥、¥)」も半角幅の表示で、はじめ違うとは思いもしなかった、疑ってよく見るとフォントフェイスがちょっと違うのだけど。
別にコピー&ペーストしても「\(バックスラッシュ、"\\".ord # => 92)」になるし、いろいろ動いたり動かなかったりでなんか大変混乱した。Windows の Shift_JIS(Windows-31J) をコピーしてきて xyzzy で UTF-8N にコード変換するときになんかあったんだろうか。
分かってしまえばよく目を凝らせば良いことなんだけど、それまで随分時間掛かった。