Visual Studio Onlineに登録してgitでコードをpushしてみた

MicrosoftのVisual Studio Onlineの初期プランは結構豪勢なことをやってるという話を聞いた。

調べてみると確かになかなかなことに・・・

Visual Studio Onlineでできること
Visual Studio Online の価格

Visual Studio Onlineに登録すると、「Basic 5アカウント分の利用権」と「gitもしくはMicrosoft Team Foundation バージョン管理 (TFVC) のオンラインレポジトリ」を利用できるというもの

gitで、というのは面白い、ということで早速登録してみた。

登録後、プロジェクトをgitで作成。

Linuxからgitでpushするためには、「My Profile」nの「CREDENTIALS」にて「ALTERNATE AUTHENTICATION CREDENTIALS」を設定する必要あり。
参考「Git: Use command prompt」と「Share your Eclipse projects

この際、パスワードのセキュリティ要件が若干きつめな設定なので注意。
「The password provided does not meet the minimum security requirements. The password must have at least 8 characters and contain at least three of the following: uppercase letters, lowercase letters, numbers, and symbols.」

[osakanataro@niselog narou]$ git remote add origin https://~.visualstudio.com/DefaultCollection/_git/narou2epub
[osakanataro@niselog narou]$ git push -u origin --all
Username for '~.visualstudio.com':
Password for '~.visualstudio.com':
Counting objects: 14282, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (13753/13753), done.
Writing objects: 100% (14282/14282), 77.17 MiB | 900 KiB/s, done.
Total 14282 (delta 601), reused 0 (delta 0)
remote: Analyzing objects (14282/14282) (100661 ms)
remote: Storing pack file and index...  done (13364 ms)
To https://~.visualstudio.com/DefaultCollection/_git/narou2epub
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
[osakanataro@niselog narou]$

push完了後、webを確認

gitの更新履歴もきちんと日本語が文字化けせずに登録できている。

Windows7でGet-AzureVM | Out-GridViewが動作しない

Azure環境をCLIで操作するためのMicrosoft Azure PowerShellですが、最近のバージョンでは、Windows 7 SP1のPowerShell 3.0では正常に動作しないコマンドがあるようです。

まず、現在のPower Shellのバージョンは「$PSversiontable」で確認できます。

PS C:\> $PSversiontable

Name                           Value
----                           -----
PSVersion                      3.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.2.9200.16398
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2


PS C:\>

上記の「PSVersion」がPower Shellのバージョンになります。

次に、Azure Power Shellのバージョンは「(Get-Module Azure).version」で確認できます。

PS C:\> (Get-Module azure).version

Major  Minor  Build  Revision
-----  -----  -----  --------
0      9      2      -1

PS C:\>

上記の場合「0.9.2」です

この場合、「$vm = Get-AzureVM | Out-GridView -Title “Select a VM …” -PassThru」を実行すると、

PS C:\> $vm = Get-AzureVM | Out-GridView -Title "Select a VM ..." -PassThru
Get-AzureVM : パイプラインが停止されています。
発生場所 行:1 文字:7
+ $vm = Get-AzureVM | Out-GridView -Title "Select a VM ..." -PassThru
+       ~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzureVM]、PipelineStoppedException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceManagement.IaaS.GetAzureVMCommand

Out-GridView : インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
パラメーター名:index
発生場所 行:1 文字:21
+ $vm = Get-AzureVM | Out-GridView -Title "Select a VM ..." -PassThru
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Out-GridView], ArgumentOutOfRangeException
    + FullyQualifiedErrorId : System.ArgumentOutOfRangeException,Microsoft.PowerShell.Commands.OutGridViewCommand

PS C:\>

Out-GridViewが「ArgumentOutOfRangeException」ということで実行できません。
(「(Get-AzureVM).Name | Out-GridView -PassThue」は実行できるんだけど、得られる出力では次の処理ができない)

この現象はMicrosoftがgithubに開設しているアカウントに報告されている。
Possible breaking change Get-AzureVM breaks pipeline with Out-Gridview (#3047) #13

これによると、どうやら、Power Shell 4.0が必要らしい。

Windows Management Framework 4.0」の一部としてPower Shell 4.0が配布されているので、こちらからダウンロードしてインストールする。
リンク先でダウンロードすると、いくつかのファイルがダウンロードできるが、Windows7の64bit環境で必要なものは「Windows6.1-KB2819745-x64-MultiPkg.msu」だけである。Windows7 32bitの場合は Windows6.1-KB2819745-x86.msu」

インストール&再起動後にPower Shellの状況を確認すると、以下のようになる。

PS C:\>  $PSversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2


PS C:\> (Get-Module azure).version

Major  Minor  Build  Revision
-----  -----  -----  --------
0      9      2      -1


PS C:\>

で・・改めて「$vm = Get-AzureVM | Out-GridView -Title “Select a VM …” -PassThru」を実行!

PS C:\> $vm = Get-AzureVM | Out-GridView -Title "Select a VM ..." -PassThru
Get-AzureVM : パイプラインが停止されています。発生場所 行:1 文字:7
+ $vm = Get-AzureVM | Out-GridView -Title "Select a VM ..." -PassThru
+       ~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzureVM]、PipelineStoppedException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Commands.ServiceManagement.IaaS.GetAzureVMCommand

Out-GridView : インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。
パラメーター名:index発生場所 行:1 文字:21
+ $vm = Get-AzureVM | Out-GridView -Title "Select a VM ..." -PassThru
+                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Out-GridView], ArgumentOutOfRangeException
    + FullyQualifiedErrorId : System.ArgumentOutOfRangeException,Microsoft.PowerShell.Commands.OutGridViewCommand

PS C:\>

・・・あの・・・?

というわけで、当初もくろんでいたPower Shellを4.0にすることで対処できる、というわけではなく
アップデートしても、なんともならない、という救いようのない状態に・・・・

う~ん・・・


2015/07/21追記

githubのissue」にコメントが付いた

It’s a bug in PS 3.0 and 4.0 in that it fails to load the object and/or type info, if TableControl is not correctly configured.

This will be patched on our end for 3.0/4.0 in the incoming release. Stay tune. Thanks.

PowerShell 3.0と4.0におけるバグで、今度のリリースで修正される、とのこと。

Azure上の仮想ディスクを拡張する

このページの内容は「Azure上の仮想マシンのディスク拡張手法 2016年1月版」に置き換わりました。


Azure上にある仮想マシンで使用しているディスクの残り容量が減ってきた。
拡張するための手順を確認すると、一度VHDをダウンロードし、ローカルで拡張操作をした後に、再アップロードする、といったものが出てくる。

そんなバカな、と調べてみたところ、現在はそんなことをしなくてもいようだ。

Resizing Data Disks in the Cloud on Microsoft Azure with Windows PowerShell

Azure Power Shellモジュールのversion 0.8.15.1以降であれば、「Update-AzureDisk」のオプションとして「-ResizedSizeInGB」が追加されており、それを使用することで拡張することができる、とのこと。

ただ、2015/06/01現在、Azureのドキュメントの「Update-AzureDisk」は、version 0.8.10準拠ということで、このオプションが載っておらず、半ば隠しオプションとなってしまっている。

いや・・・ちゃんとしてくれよ・・・

しかも、Windows7で試したところ、Azure PowerShellモジュールを2015/06/01時点での最新ver 0.9.2にしても、このページ記載のコマンドが実行できないという事態も発覚。

「$vm = Get-AzureVM | Out-Gridview -PassThru」が失敗するという・・・

下記の問題と同様のようだ。
Possible breaking change Get-AzureVM breaks pipeline with Out-Gridview (#3047) #13

どうやらPower Shell 3.0では、動かず、Power Shell 4.0にする必要があるらしい。

そして、Power Shellは、Windows Management Framework 4.0に含まれるため
Windows Management Framework 4.0」を導入する必要がある、とのこと。

めんどくさいなぁ・・・・

pcsensor-1.0.3 for TEMPerV1.2/TEMPerV2 with multi device and multi sensor support

昨日、TEMPerV2を使っているユーザから、「githubであなたが改造したpcsensorに対してTERMPerV2対応を加えたものを公開してる人がいる」、ということを教えてもらった。

修正版:https://github.com/waja/pcsensors/blob/master/debian/patches/multiple_temerature_readings

ソースをみてもどういう修正なのかがわからなかったので、教えてくれた人に尋ねた。
TEMPerV2は、温度センサーを2つ持っているが、pcsensor.cの1.0.2では、1つ目の温度センサーの情報しか取得できない。
2つ目の温度センサーからも温度が取得できるようにした修正であるとのこと。

というわけで、自分のところのソース修正を開始

・センサーが2個である、という決め打ち修正はよくないのでMAX_SENSORで定義し
 それ以上の個数がある場合でも容易に対応ができるように変更
・センサーが1個しかないTEMPerV1.2で、2個分取得しようとすると異常な値になるので
 waja’s pcsensor.cの修正だけでは駄目なので、修正

修正したものを「https://github.com/osakanataro/pcsensor」にて公開しました。

また、「http://blog.osakana.net/sw/pcsensor/pcsensor-1.0.3.tar.gz」にtar.gzを置いています。

・マルチデバイス時にデバイス名を出力するオプション “-d”

# ./pcsensor -d
2014/07/11 10:42:13 Bus 002 Device 003 Temperature0 88.47F 31.38C
2014/07/11 10:42:13 Bus 003 Device 003 Temperature0 74.30F 23.50C
#

・接続されているTEMPerのリスト表示 “-D”

# ./pcsensor -D
0 is Bus 002 Device 003
1 is Bus 003 Device 003
#

・接続されているTEMPerの個別表示 “-D番号”

# ./pcsensor -D0
2014/07/11 10:43:48 Temperature0 88.47F 31.38C
# ./pcsensor -D1
2014/07/11 10:44:16 Temperature0 74.30F 23.50C
#

・摂氏/華氏表示の同時指定を可能にした

# ./pcsensor -c
2014/07/11 10:44:49 Temperature0 31.38C
2014/07/11 10:44:49 Temperature0 23.50C
# ./pcsensor -f
2014/07/11 10:44:53 Temperature0 88.47F
2014/07/11 10:44:53 Temperature0 74.30F
# ./pcsensor -f -c
2014/07/11 10:45:02 Temperature0 88.47F 31.38C
2014/07/11 10:45:02 Temperature0 74.30F 23.50C
#

・1つのデバイスに2個の温度センサーがついている場合

# ./pcsensor -c -n2
2014/07/11 10:44:49 Temperature0 31.38C
2014/07/11 10:44:49 Temperature1 23.50C
#

なお、センサーが1つしかないもので、-n2指定すると以下の様な異常値になります。

# ./pcsensor -c -n2
2014/07/11 11:09:41 Temperature0 214.60F 101.45C
2014/07/11 11:09:41 Temperature1 32.00F 0.00C
#

Windowsバッチファイルでping応答の違いで動作をかえる

Windowsバッチファイルで、指定IPアドレスから応答がなくなったら次の作業を実施する、という処理をやりたかったので作った。

普通にping実行時のERRORLEVELを見ればいいか、と思っていたが、試験した環境では応答があってもなくてもERRORLEVEL0だったので判別ができなかった・・・

調べたところ「otnx.jpのコマンド別/ping」に調査した結果と回避方法があったのでそれを使った。

ちなみにotnx.jpではfindで「bytes=32」を引っかけていたが、日本語環境だと「 バイト数 =32」になってしまう。しかし、バッチには日本語文字列を書きたくなかったので、その後ろにある「ms TTL=」の方を引っかけるようにした。

・停止待ちバッチファイル

応答がなかったら終了。
応答があったら3回繰り返す

@echo off

set COUNT=0

:error
set /a COUNT=COUNT+1
echo %COUNT%
if "%COUNT%" == "3" goto errorout
ping -n 1 IPアドレス | find "ms TTL=" > NUL
if ERRORLEVEL 1 goto notrespond
timeout /t 5  > nul
goto error

:notrespond
echo host stopped
goto end

:errorout
echo host not stop

:end

・起動待ちバッチファイル

ping応答があるまで待機する
3回繰り返してもping応答がなければ諦める

@echo off

set COUNT=0

:error
set /a COUNT=COUNT+1
if "%COUNT%" == "3" goto errorout
ping -n 1 IPアドレス | find "ms TTL=" > NUL
if ERRORLEVEL 1 goto error

echo host working
goto end

:errorout
echo host not working

:end