2019/03/21

PowerShellで抽出したオブジェクトに、自分でプロパティ名を付けたい

PowerShellでは、SELECT-OBJECT(SELECTと省略可能)でオブジェクトから好きなプロパティ(列名)だけを選ぶ事が可能です。

たとえば、GET-CHILDITEMでもって、ファイル/フォルダの一覧を取得した時に、数多くのプロパティ(列名)の中から3つだけ、NameとLengthとPsIsContainerだけを選びたい!!というような時です。

これだけで終わるのであれば、べつに何の事は無いわけですが、たとえばこの例ですと「Lengthプロパティはバイト単位なのでKB単位に計算し直したい」という時もあろうかと思います。

こんな時には、SELECT-OBJECTコマンドレットの中に {[Math]::Ceiling($_.Length/1024)}と書くだけじゃん?となるわけですが、なんと計算式がそのままプロパティ名に変わってしまうのです。


■計算式がそのままプロパティ名になる


#ファイルの一覧を取得
$V = GET-CHILDITEM C:\TEMP

#ファイルの一覧から、Name、LenthをKB単位で計算、PSIsContainerプロパティをSELECT
$V | SELECT-OBJECT Name,{[Math]::Ceiling($_.Length/1024)}, PSIsContainer



C:\>$V | SELECT-OBJECT Name,{[Math]::Ceiling($_.Length/1024)}, PSIsContainer

Name                        [Math]::Ceiling($_.Length/1024) PSIsContainer
----                        ------------------------------- -------------
.vscode                                                   1          True
Program                                                   1          True
CHECKDIGIT.js                                             3         False
CODE_SAMPLE_EBCDIC.DAT                                    1         False
CODE_SAMPLE_SJIS.DAT                                      1         False
configuration.xml                                         1         False
FILELIST.CSV                                             22         False
FILELIST2.CSV                                            18         False
FILE_LIST.TXT                                             2         False
FREE.PS1                                                  1         False
mori.txt                                                  1         False
MY_SETTING.xml                                            1         False
MY_SETTING_TEMPLATE.xml                                   1         False
NodeJs - ショートカット.lnk                               2         False
OuterTest.js                                              1         False
Regex.js                                                  2         False
SAMPLE_SJIS.DAT                                           1         False
SAMPLE_UTF8N.DAT                                          1         False
setup.exe                                              5068         False
SQL1 - コピー (2).js                                      2         False
SQL1 - コピー.js                                          2         False
SQL1.js                                                   4         False
TEST.CSV                                                  1         False
TEST.html                                                 1         False
TEST.js                                                   1         False
test.ps1                                                  0         False
test.sql                                                  0         False
TEST.TXT                                                130         False
TEST.xlsx                                                10         False
TEST000.js                                                1         False
TEST2 - コピー.html                                       2         False
TEST2 - コピー.js                                         4         False
TEST2.html                                                2         False
TEST2.js                                                  6         False
test_test.txt                                             0         False
unEditor_Shift_JIS.txt                                    1         False
ナレッジベース.xlsx                                      35         False
手順.txt                                                  1         False



↑このように、Lengthを÷1024し端数を切り上げる事でKB=キロバイト単位に再計算したわけですが、計算式がそのまんまプロパティ名になってしまいます。

この場で結果を目で確認して終わり・・・というのであれば別に気にしなくとも良い(計算式が分かる分むしろ良い所もある?)のですが、このまま次の処理にチェーンしたり、結果をOUT-FILEコマンドレットでファイル書き出ししたりすると、プロパティ名は分かりやすい名前を付けたいものです。


■プロパティ名は連想配列で付けられます



#ファイルの一覧を取得
$V = GET-CHILDITEM C:\TEMP

#ファイルの一覧から同じくSELECTした内容に自分でプロパティ名を付けます。
$V2 = ($V | SELECT-OBJECT @{Name="名前";Expression={$_.Name}},@{Name="容量KB";Expression={[Math]::Ceiling($_.Length/1024)}}, @{Name="フォルダ";Expression={$_.PSIsContainer}})

#自分で付けたプロパティ名で抽出する。
$V2 | ?{$_.名前 -match "TEST" -and $_.容量KB -gt 1}




C:\>#ファイルの一覧を取得
C:\>$V = GET-CHILDITEM C:\TEMP
C:\>
C:\>#ファイルの一覧から同じくSELECTした内容に自分でプロパティ名を付けます。
C:\>$V2 = ($V | SELECT-OBJECT @{Name="名前";Expression={$_.Name}},@{Name="容量KB";Expression={[Math]::Ceiling($_.Length/1024)}}, @{Name="フォルダ";Expression={$_.PSIsContainer}})
C:\>
C:\>#自分で付けたプロパティ名で抽出する。
C:\>$V2 | ?{$_.名前 -match "TEST" -and $_.容量KB -gt 1}

名前                容量KB フォルダ
----                ------ --------
TEST.TXT               130    False
TEST.xlsx               10    False
TEST2 - コピー.html      2    False
TEST2 - コピー.js        4    False
TEST2.html               2    False
TEST2.js                 6    False

↑どうすれば自分でプロパティ名をつけられるのかというと、連想配列を使います。

本来のプロパティ名を列挙する場所に、連想配列@{Name="つけたいプロパティ名";Expression=計算式}を書くと、自分で付けたプロパティ名を使う事が出来るという寸法であります。

さすがに連想配列を書くとコマンドがとても長くなってしまうので、対話式の入力は若干辛くなってしまうのが難点ですが・・・。

もちろん、一度付けたプロパティ名は次の処理にチェーンしても使えます。

連想配列はこのようにコマンドレットのパラメーター指定に使ったりするので、書式を覚えておくのはおすすめです。

ASUS ZenFone Max Pro M2が欲しい!

ついにASUS ZenFone Max Pro M2が発売されましたね!!

しかも東京限定のディスカウント価格などではなく、東京よりも遥かに高価になる仙台価格でもれっきとした消費税込み3万円台を実現する快挙で、個人的には史上最高のモバイル端末となりうるマシンとなっています。

と言いつつ、まだ自分では実機を手に取った事がなく残念なのですが、このマシンは既に台湾では発売済なので最先端ユーザーさんたちのレビューを色々と拝見して期待を高めていました。

いよいよ国内でも発売になったため、レビュー記事はますます身近になり、拝見するのを毎日楽しみにしているほどです。


■バッテリーがガラケー並みにもつ!!

ZenFone Max Pro M2のレビューは軒並みかなり好評なのですが、その中でもひときわ嬉しかったレビューが「レビュー中、一週間に一回しか充電しなかった」(すげぇ!!)というスタミナもりもり。

一週間に一回だけ!?

完全にガラケーに喧嘩売れますね。

ガラケーはスマホと比べて異常に長持ちのスタミナを誇りますが、それもこれも下手にネットを使わない(使えない)から。

スマホから電話を分離出来るため、今やガラケーはすさまじいアドバンテージを持つ機器に昇華していますが、それはまた別のお話で・・・。

ともあれ、そのガラケーに匹敵するスタミナを、ネットガンガン、(ガラケーと比較にならない)重たい処理バンバンのスマートデバイスで使って、一週間に一回とは一体何が起きているのか!?

性能的には半分以下のZenFone max plus M1で大満足なので、あとはバッテリーが持てばいいなぁとホンワカ思ってましたがいきなり願いがかなってしまいました。

すげーなASUSは・・・。

ちなみに、ZenFone max plus M1でとても気に入っていたZenUIが廃止されたのも大きいみたい。

ZenUIはとても使いやすくて便利なのだけど、バッテリーを余計に消費していたみたいで、ZenFone max plus M1は、搭載されている大容量バッテリーの割には効率が悪い(個人的には大満足)とは言われていましたが・・・なるほど。


■外観が美しい!!

外観の評判もかなり高いですね。

外観で評判をとるというと、どうしてもコストを存分にかけたハイエンドモデルばかりになってしまうものですが、ZenFone Max Pro M2は、ウェーブ・フィニッシュと呼ばれる独特の光沢仕上げがかなり目を楽しませている様子。

ASUSは、PCからしてそうですが光沢仕上げにかなりの手腕を発揮していますね。

その分、指紋べたべたとの闘いでもありますが、個人的には、透明ソフトケースを装着して使うので気にしなくて良さそう。


■台湾から来てくれた救援隊

しかし、良いか悪いかは別として、とにかく日本という国は極端から極端に振り切れる国民性じゃないですが。

その国民性で、今は本当に値上げ大ブーム。

スマートフォン、スマートデバイスにもその波が襲い掛かっていて、良いスマートフォンを手にしようと思ったら本体価格10万円オーバーは当たり前、むしろ20万円をめざしてGoみたいなバイオレンスにボッコボコ状態。

そんな絶望の中、さっそうと台湾から救援に来てくれたのがASUS。

PCでもASUS E203MAは救世主だったし、ほんと輝いているのがASUS。

スマートデバイスは百花繚乱ですが、これからもASUSのスマートデバイスを買い続けたい!!

GoogleのSTADIA発表で日本の家庭用ゲーム機は大きな転換点に?

ついにGoogleがストリーミングによるゲーミングサービス「STADIA」を発表しました。

コントローラーだけ買えば、PCもスマホもどんな端末でもゲーム機になるという(一見すると)夢のようなサービスです。

もちろんこのストリーミングによるゲーミングサービスは、とっくにプレイステーションがやっているような事ではありますが、Googleがやり始めてから初めてこの方式を知る方もおられるようで訴求力は相当に凄い様子。

日本の家庭用ゲーム機はただでさえ大きな流れが出来ています。

ソニーがヴィータ(全携帯型プレイステーション)を正式撤退したため、携帯型ゲーム機は任天堂の専売となり、すなわちプレイステーションから任天堂スイッチへの転換が急速に進んでいる最中です。

時代がソニーから任天堂に急激に移り変わろうとしている中、突然Googleの「超」カジュアルなストリーミングサービスが横から殴り込んで来るわけで、今後どうなるのか? なかなか先が分からない時代になりました。

ただ、STADIAが万全か?というと、性能面でどれくらいか??体験してみないと分からない点が多いですね。

ストリーミングサービスは、自己責任でどれだけ品質の良い回線を用意出来るのかにかかっています(Googleなのでサーバー側は大きな問題はなさそう)ので、手元にゲーム機を置いてプレイするよりもかなり個人差が出そうです。

Aさんは快適だけど、Bさんはダメとか、そういう個人差が容易に考えられます。

この個人差を吸収しようとしてるのが家庭用ゲーム機なので、カンタンに無くなっても良いとか言っていると回り巡って自分の首をしめそうな予感はします。

とは言え、世の中というものは、イメージや勢い一つで、良いも悪いもなく踏み潰して先に進んでしまうもの・・・日本の家庭用ゲーム機は大きな転換点を迎えるかも知れませんね。

2019/03/19

PowerShellでとても大切な「連想配列(ハッシュテーブル)」について

PowerShellは、もはやWindowsだけのものではないオープンソースに進化していますが、何はともあれ、まずはWindowsユーザー(7以降)なら100%全員が今すぐに使える環境として他には無い絶大メリットを持っています。

そんなPowerShellですが、今回は「連想配列(ハッシュテーブル)」について書かせて頂きたいと思います。


■連想配列とは?

普通の配列は、@(1,2,3,4,5)、あるいは@(1..5)のように単純に値を何個も連続して「要素(=値)」を格納している配列オブジェクトです。

対する連想配列は、要素に名前(キー名)がつけられる配列オブジェクトです。

$変数=@{"名前";"値"}という具合に定義しておくと、$変数["名前"]や、$変数.名前 という書き方で値を取得する事が可能です。

また、値の部分には何でも格納出来るので、たとえば、配列をまとめて格納しておく入れ物としても使えて、応用範囲がとても広がります。

さらに、SORTの昇順・降順混在のように、パラメーターを連想配列でセットするコマンドレットも存在するため、パッと使えるようにしておくと良い感じです。


■連想配列を使ってみる

とりあえず、Windowsフォルダの直下にあるファイル/フォルダの一覧を連想配列に格納してみたいと思います。

ファイル/フォルダ名を名前(キー)にして、値には、配列の形式でもって、長さ[0],最終更新日[1], フォルダかどうか($True,$False)[2]を格納してみます。




#連想配列の定義
$V = @{}

#連想配列に値のセット
GET-CHILDITEM C:\WINDOWS | %{$V.Add($_.Name,@($_.Length,$_.LastWriteTime.ToString("yyyyMMdd hhmmss"),$_.PSIsContainer))}

#連想配列からの値の取り出し(1. foreachステートメント)
foreach($I in $V.Keys) { WRITE-HOST (($I).PadRight(30) + " 最終更新日時=" + $V[$I][1])}

#連想配列からの値の取り出し(2.foreach-objectコマンドレットによる値の取り出し)
$V.GetEnumerator() | %{ WRITE-HOST $_.Key.PadRight(30) $_.Value[1]}



↑連想配列は@{}で定義出来て、Addメソッドでもって、どんどんと名前,値を追加して行く事が出来ます。

ポイントは連想配列を作るのは良いけど、取り出すのはどうするのか??という話です。

まずは、プログラミングライクに、foreachステートメントで取り出してみます。

foreach(取り出したキー in 連想配列.Keys) { 連想配列[取り出したキー]... }という書き方です。

単純に$連想配列 | %{$_.Key}という書き方は出来ない(1件づつ値を取る事が出来ない=出来るようにする方法は後述)ので注意が必要です。


■ソートはどうやるの?
foreach-objectコマンドで値を取り出したい


ところが、foreachステートメントだと、ソートなどが大変になります。

そもそもコマンドレットを使いたい!!

そんな時は、$連想配列.GetEnumerator()メソッドを使います。

$連想配列.GetEnumerator()メソッドを使うとコマンドレットで一件づつの取り出しやソートが可能になります



#連想配列の定義
$V = @{}

#連想配列に値のセット
GET-CHILDITEM C:\WINDOWS | %{$V.Add($_.Name,@($_.Length,$_.LastWriteTime.ToString("yyyyMMdd hhmmss"),$_.PSIsContainer))}

#連想配列からの値の取り出し(2.foreach-objectコマンドレットによる値の取り出し)
$V.GetEnumerator() | %{ WRITE-HOST $_.Key.PadRight(30) $_.Value[1]}

#さらにGetEnumerator()メソッドはソートにも対応
$V.GetEnumerator() | SORT @{Expression={$_.Value[1]};Descending=$True},@{Expression={$_.Name}} | %{ WRITE-HOST $_.Key.PadRight(30) $_.Value[1]}

↑GetEnumerator()メソッドを使った後だと、パイプラインで次のコマンドレットにチェーンし一件づつ取り出す事が可能です。

平たく言うと、GetEnumeratorは「オブジェクトを列挙可能な状態にする」というような感じです。

パイプラインでチェーンが可能になると、SORT-OBJECT(SORT)コマンドレットで最終更新日時の降順、名前の昇順でソートし、foreach-object(%{})コマンドレットに送り込めて平易な書き方で一件づつ取り出して処理出来るようになります。

2019/03/17

PowerShellで、超簡単にコマンドを指定回数だけ繰り返し実行する方法

PowerShellは、肩ひじ張ったプログラミングではなく、気軽に手軽に対話式でコマンドを実行出来るのも良い点の一つなんです。

それで、たとえば5回とか10回とか、コマンドを繰り返し実行したい!!なんて事も簡単に対話式でこなせてしまうのです。

ポイントは、配列とパイプラインです。


たとえば、CPUコマンド(これは自作)を、1秒間隔で5回連続で実行したい!!というような時は以下のように一発で書けます。



@(1..5) | %{ CPU; (START-SLEEP -m 5000); }

↑PowerShellは、プログラミング言語でいう所のJavaScriptに比肩するくらい自由度の高いシェルスクリプトで、その秘訣は「結果が常にテキストじゃなくてオブジェクトで出力される事」にあります。

最初に@(1..5)で、1から5までの配列を作ります。

この1から5というのが味噌で、配列の要素数=繰り返しの回数を意味します。

5個の要素を持った配列を、PowerShellの味噌であるパイプラインでチェーンし、次のチェーンでその配列を繰り返すコードブロックを設けるわけです。

そのコードブロックの中にコマンドを書きさえすれば、あとは自動的に回数分が繰り返されるという寸法です。

ちなみに、(START-SLEEP -m 5000)は、5秒間次のコマンドの実行をしないで待つ!というコマンドです。

このウェイトを入れないと、猛烈な速度で次々にコマンドを実行します。

PowerShellは、プログラミングではなく、コンピューターとの対話の中で配列を作って使えるのですが、この手法は覚えておいて損はないです。

必ず役に立つ時が来ます。

なお、この配列の発展形として、連想配列(ハッシュテーブル)というものがあり、こちらは単純な繰り返しだけでなく、キーとそれに対応した値を入れておけるので、さらに可能性が広がります。

プログラムの開発者は、ただものを作るだけではなく、突発的な緊急対応に対応できないといけないため、いざとなったら対話式だけでも深い事が可能になるPowerShellは本当に生命線となりうる必殺の決戦兵器です。

特に、Windows 7ユーザーと10ユーザーであれば、本当に何もせずとも100%全員の環境で使えるのは果てしも無くドドデカいものです。

PowerShellで、たとえば設定ファイルの内容を変更して保存したい時の簡単なやり方 (連想配列を使うよ)

設定ファイルの内容を変更して保存したい・・・こういうケースはとても多いと思います。

プログラムを組んで処理すればどうにでもなりますが、状況によっては、PowerShellを使うと数行くらいで簡単に済ませる事も可能なので、今回はそれをやってみたいと思います。


■設定ファイルのテンプレートを用意

やり方は千差万別ありますが、まずは話を簡単にするため、ここでは以下の仕様でやってみたいと思います。

  • 設定ファイルはUTF-8(BOMなし)テキスト
  • 設定ファイルの元になるテンプレートを用意
  • テンプレートの内容をリプレース
  • リプレース後のテンプレートで設定ファイル更新
■設定ファイルの内容



<?xml version="1.0" ?>
<setting>
    <machineid>{0}</machineid>
    <macineid2>{0}</machineid2>
    <machinespeed>{1}</machinespeed>
    <machinelocation>{2}</machinelocation>
</setting>

↑こんな感じでテンプレート(C:¥TEMP¥MY_SETTING_TEMPLATE.xml)を用意します。

ここの{0}※2箇所あります、{1}、{2}を必要なパラメータ値にリプレース(設定)してあげるわけです。


■PowerShellコマンドは6ステップだけ



#(1)テンプレートのパス指定
$PATH1="C:\TEMP\MY_SETTING_TEMPLATE.xml"

#(2)結果ファイルのパス指定
$PATH2="C:\TEMP\MY_SETTING.xml"

#(3)テンプレートの読込
$F1=GET-CONTENT $PATH1

#(4)リプレースしたいパラメータと値を定義
$PARAMS=@{"{0}"="00123"; "{1}"="M001"; "{2}"="010538"} 

#(5)テンプレートの内容をリプレース
foreach($P in $PARAMS.Keys){$F1=($F1.replace($P,$PARAMS[$P]));}

#(6)結果をファイル出力(BOMなしUTF-8)
$ENC=NEW-OBJECT System.Text.UTF8Encoding -ArgumentList @($false)
[System.IO.File]::WriteAllLines($PATH2,$F1,$ENC)

#結果表示
GET-CONTENT $PATH2



↑PowerShellは、たったの6ステップ (7行)だけです。

BOMなしUTF-8でファイルを出力するため少し込み入った記述をしていますが、BOMありで良ければ、単純にOUT-FILEコマンドレット一発でも良いためさらにシンプルに出来ます。

ただ、リプレースしたいパラメータは、連想配列(ハッシュテーブル)として直書きしているので、ここをどうするか?で手間は増減しそうです。

PowerShellは、文法は独特のものがありますが、あくまでもプログラミング言語のC#がベースになっているため、DOSのように過度な記号化を受けたり、逆に難しくなる省略表記を受けたりしないので、流れが掴みやすく分かりやすいと思います。




<setting>
    <machineid>00123</machineid>
    <macineid2>00123</machineid2>
    <machinespeed>M001</machinespeed>
    <machinelocation>010538</machinelocation>
</setting>


↑GET-CONTENTコマンドレットで設定ファイルの中身を読むと、パラメータがちゃんと設定されているのが分かります。

ちなみに設定ファイルを書き換える時は、ケースバイケースですが、実体に直接更新をかけないでテンプレートを用意して毎回リプレースが良い気がします。

実体を間違って破壊されても、毎回復元が可能だからです。

愛車のアイちゃん日記「春のフッ素コート」

いよいよクルマが凍結しない朝を迎えられる季節の到来!!

と思ったら、朝方の気温は2℃とかで、まだ若干ルーフとフロントシールドに薄い氷の幕が張ったりしてますが・・・。

とにかく春の到来と判断して、春最初のフッ素コートを愛車のアイに施工しました。


↑ワックスがけをやめてフッ素コートに切り替えてからしばらく経ちますが、輝きはワックスに劣らないものがありますね。

施工時間が本当に短くて済むのでありがたい事だらけです。


↑フッ素コートがワックスよりも圧倒的に優れる点は、樹脂部分へ正式にコーティング可能という点です(SOFT99のミラーシャインの場合)。

なんでこれもっと早く使わなかったかなぁと言うくらい圧倒的です。

ワックスって、間違って黒い樹脂パーツに施工してしまうと最悪で、凹凸に白いワックスカスが残存して、黒い樹脂パーツを薄っすらと白化したようにしてしまう上に元に戻すのが困難になったりします。

フッ素コートなら、そのまま樹脂を輝かせる事が出来るので比較にならないほどです。


↑アイにぞっこんのまま、まったく衰えないどころか年々アイが大好きになりつつ6年経過しましたが、フッ素コートで気になる点が一つだけ。

錆を防ぐ効果が、ワックスよりは薄いかも知れない!?

飛び石で傷ついた場所があって、ワックスだと施工すると、それ以上錆の進行って無かったんですが、フッ素コートだと月に2回、3回ペースで施工しても、なんか錆が微妙に進行するような。

実際、最低でも月に2回のペースでコーティングしていた錆の面積が少し膨らんだので、あわててペイントを追加しました。

まぁ環境とか、やり方の問題かも知れず、フッ素コートそのものの問題ではないのでしょうけど・・・。


↑春といえば、庭の水仙が咲きました!

今年初めて咲いた日の記念に、PowerShot G9X Mark2で撮影しました。

EOS KISS Mで今年初めての梅を撮って来ました

EOS KISS Mを持って、仙台農業園芸センサーを訪れ、今年初めての梅を撮って来ました。

PowerShot G5Xも持っていこうと思ったのですが、人と一緒に歩く予定があり、ちょっと機材に振り回されるとまずい事情でEOS KISS Mのみにしました。


↑EF-M 15-45mm F3.5-6.3 IS STMで撮影。

全体的にまだ季節的に施設の準備中という雰囲気でしたが、この準備中の空気がまた良い感じなんですよね。


↑ここからは全てEF-M 55-200mm F4.5-6.3 IS STMで撮影しました。

これこれ、今しか撮れない、水玉のようなつぼみと梅の花の競演です。

これはむしろ花満開よりも心に残るかも知れないですね。

EOS KISS Mは、EOS 7D Mark2などを経験した上で、過去最高のカメラと断言できます。

スペックの数値がどうこう、性能がどうこうじゃないんですよね。

一緒に歩けるカメラという、相性というか心の話で満点カメラです。


↑キヤノンは怒るかも知れないですが、EF-Mレンズのこの軽くて、小さくて、素晴らしい写りを知ってしまうと、重くて高額ででかい(ミラーレス専用だったとしても)フルサイズシステムはもう導入する気持ちは切れてます。

むしろ、あれこれと自分の基準を変えず、背骨は一本だけ、キヤノンAPS-Cシステムで統一してそれを基準にブレないで写真を撮って行った方がいいなと。


↑性能どうこうじゃない、とは言いましたが、EOS KISS Mは、もうこれ以上必要が無いくらいレスポンスも満足行きます。

ただ、意図的にかどうか、フルスリープからの復帰に約2秒を要するため、一旦フルスリープに入ると、昔の一眼レフEOS 10Dに戻る感覚はあります。

このあたりは、単純に慣れで乗り越えられる問題ですが、納品義務のある一瞬を逃す事の出来ないプロさんなんかは、あと一段階進化したEOS Mを待つ必要はあるかも知れないですね。

ただ、そこまでシビアなら、ミラーレスそのものが力不足であり、何の心配もない一眼レフは軽々にクローズ出来るジャンルではないなとも思えますね。


↑これから始まる桜の季節はもちろん最高ですが、その前を彩ってくれる梅も心が華やぎますね。

東北ではまだまだ寒い季節に花開くものであり、その季節と合わせて独特の美と思い出を残してくれます。


↑梅の風景を静かな空気の中で楽しめる今は、想像以上に素晴らしい時間でした。

それと、EOS KISS Mは、本当に素晴らしいカメラですね。

明らかに一眼レフに負ける部分があるのに、それを実感している上で、個人的に過去最高のカメラと断言出来ています。

なんでも見える化すれば勝ちみたいな、画一的な価値観に支配された現代ですが、数値化が出来ない心の部分でEOS KISS Mはベストカメラです。

2019/03/16

ZenFone max plus M1笑ってしまうくらい凄い

今日、急いでクルマで目的地に着かなければならない事があったんですが、いやぁ本当にZenFone max plus M1は凄い。

笑ってしまうくらい凄い。

カーナビ使ったわけですが、あの操作性の素晴しさと、機能の進化っぷりはもうとんでもないですね。

渋滞を右に左に見事に回避して、間に合わないかも知れないというギリギリの状態から逆転ホームラン、余裕で時間が余るリッチな時間を過ごせる到着時間になりました。

ZenFone max plus M1に助けてもらった回数は、もう数えるのをやめてしまったくらい多いです。

今回も助けられたー。

恩義ポイントがドンドン積み重なって、もうスマートデバイスは今後買うのもZenFoneだけで、他ブランドには浮気しないぞって思えるくらい。

思えば、ZenFone max plus M1ってドラマチックっす。

そもそもが、ハイエンドZenFone(5)までのつなぎ的なマシンだったのに、今やヒーローになってます。

また、個人的に史上最高のゲーム機であるヴィータ終焉の悲しみも完全に払拭してくれているマシンになってます。

いくら絶賛してもまるで足りぬ・・・!!

ただ、今や生活必需品になっているので、破損するとまずい。

一刻も早く、後継機のZenFone Max Pro M2を手に入れて、2台体制で安心したいです。

2019/03/15

PowerShellでファイルの更新日時を書き換えたい

普段は簡単に書き換えられないファイルの更新日時ですが、管理上の問題でどうしても書き換えたい時があったりします。

しかし、PowerShellを使うといともあっさり簡単に書き換える事が可能です。


■直接時間を指定して書き換えたい

仮にC:¥TEMP¥TEST_TEST.TXTというファイルがあったとします。



SET-ITEMPROPERTY C:\TEMP\TEST_TEST.TXT LASTWRITETIME "1999-12-31 23:59:59.997"

↑SET-ITEMPROPERTY ファイルパス LASTWRITETIME 反映したい日時

で行けます。

ポイントは、このPowerShellに限らずSQL-Serverとかもそうなんですが、"yyyy-MM-dd hh:mm:ss"という書式でもって文字列を書くと、処理系から日時として認識してもらえるという点です。


↑あっさりとファイルの更新日時が書き変わりました。


■本日の日時をセットしたい時


SET-ITEMPROPERTY C:\TEMP\TEST_TEST.TXT LASTWRITETIME (Get-Date -Format "yyyy-MM-dd hh:mm:ss")

↑本日の日時の時は、反映したい日時の所に「Get-Date -Format "yyyy-MM-dd hh:mm:ss"」と書くだけです。

ただ、-Formatオプションだと何か落ち着かいないという場合は、(Get-Date).ToString("yyyy-MM-dd hh:mm:ss")とも書けます。


↑ファイルの更新日時が、実行時の本日の日時に書き変わりました。


■先月の日時をセットするなど、日付に計算を施したい


SET-ITEMPROPERTY C:\TEMP\TEST_TEST.TXT LASTWRITETIME (Get-Date).AddMonths(-1).ToString("yyyy-MM-dd hh:mm:ss")

↑Get-Dateに計算を施す時は、(Get-Date).AddMonths(-1).ToString("yyyy-MM-dd hh:mm:ss") という風に、Get-Dateコマンドレットの各種日付計算メソッドで結果を計算してから、ToStringメソッドで日付用の書式を整えます。

Get-Dateコマンドレットは日付を扱う時の必殺技というくらい強力で、たとえば先月(-1ヵ月)の日時を求めたい時は(Get-Date).AddMonths(-1)だけでOK。


↑ファイルの更新日時が先月になりました。

ちなみに、Get-Dateにどんなメンバー(プロパティやメソッドなどをいっしょくたにメンバーと呼びます)があるのか?を知りたい時は以下のコマンドで分かります。



Get-Date | GET-MEMBER



   TypeName: System.DateTime

Name                 MemberType     Definition
----                 ----------     ----------
Add                  Method         datetime Add(timespan value)
AddDays              Method         datetime AddDays(double value)
AddHours             Method         datetime AddHours(double value)
AddMilliseconds      Method         datetime AddMilliseconds(double value)
AddMinutes           Method         datetime AddMinutes(double value)
AddMonths            Method         datetime AddMonths(int months)
AddSeconds           Method         datetime AddSeconds(double value)
AddTicks             Method         datetime AddTicks(long value)
AddYears             Method         datetime AddYears(int value)
CompareTo            Method         int CompareTo(System.Object value), int CompareTo(datetime value), int IComparab...
Equals               Method         bool Equals(System.Object value), bool Equals(datetime value), bool IEquatable[d...
GetDateTimeFormats   Method         string[] GetDateTimeFormats(), string[] GetDateTimeFormats(System.IFormatProvide...
GetHashCode          Method         int GetHashCode()
GetObjectData        Method         void ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo ...
GetType              Method         type GetType()
GetTypeCode          Method         System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
IsDaylightSavingTime Method         bool IsDaylightSavingTime()
Subtract             Method         timespan Subtract(datetime value), datetime Subtract(timespan value)
ToBinary             Method         long ToBinary()
ToBoolean            Method         bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte               Method         byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar               Method         char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime           Method         datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal            Method         decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble             Method         double IConvertible.ToDouble(System.IFormatProvider provider)
ToFileTime           Method         long ToFileTime()
ToFileTimeUtc        Method         long ToFileTimeUtc()
ToInt16              Method         int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32              Method         int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64              Method         long IConvertible.ToInt64(System.IFormatProvider provider)
ToLocalTime          Method         datetime ToLocalTime()
ToLongDateString     Method         string ToLongDateString()
ToLongTimeString     Method         string ToLongTimeString()
ToOADate             Method         double ToOADate()
ToSByte              Method         sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToShortDateString    Method         string ToShortDateString()
ToShortTimeString    Method         string ToShortTimeString()
ToSingle             Method         float IConvertible.ToSingle(System.IFormatProvider provider)
ToString             Method         string ToString(), string ToString(string format), string ToString(System.IForma...
ToType               Method         System.Object IConvertible.ToType(type conversionType, System.IFormatProvider pr...
ToUInt16             Method         uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32             Method         uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64             Method         uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
ToUniversalTime      Method         datetime ToUniversalTime()
DisplayHint          NoteProperty   DisplayHintType DisplayHint=DateTime
Date                 Property       datetime Date {get;}
Day                  Property       int Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       int DayOfYear {get;}
Hour                 Property       int Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       int Millisecond {get;}
Minute               Property       int Minute {get;}
Month                Property       int Month {get;}
Second               Property       int Second {get;}
Ticks                Property       long Ticks {get;}
TimeOfDay            Property       timespan TimeOfDay {get;}
Year                 Property       int Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version 1; $this.DisplayHin...


↑PowerShellは、プログラミングしたいなぁ・・・という時に、JavaScript級におすすめです。

というか、自分が学生時代にPowerShellとJavaScriptがこうやってバリバリ使える環境になっていたらなぁと、うらやましくて大変です。

漠然とやりたい事をひねり出さなくても、Windows(などのOS)と対話しながら、実際にこうやって作業をしながらコンピューターに親しめるのは本当に大きい。

今後の機材を色々考えてみる

■家庭用ゲーム機について

今年はやはりゲーム機について個人的に大きな変化がありましたね。

常々、ソニーがヴィータをやめた時は、もう家庭用ゲーム機もやめる!!と言っていた私でしたが、まさにそうなりました。

もちろん、手持ちのゲームは捨てたりせずに大切にして行きます。

しかし、ごく一部の例外を除き、もう新しいゲームは買わない事にして、これをもって「家庭用ゲーム機はやめた」としたいと思います。

最後のゲーム機が、本当に心の底から好きになれたヴィータだった事は幸せで、ソニーには感謝しかありません。

これから発売されるのが確定しているPS5ですが、どうするのか?

その前に、今、自宅のPS4ですが、ゲーム機としては使っていません。

その代わり家族が地デジレコーダーとして毎日ヘビーに使っている状態(家族はナスネの存在は知らないのでPS4がレコーダーだと思っています)。

このPS4が経年劣化で壊れた時は、地デジレコーダーとしてPS5を検討するという流れはありそう・・・ですが、併売が見込まれ、PS5より値段が安い(と思われる)PS4 Proにする可能性も80%くらいありますね。

🔶まぁヴィータの後継機なんてぇものが出てきたら話の次元が完全に変わりますが、そんなもの出るわけねぇやな!!はははっ。


■やはりPCとZenFone

ゲーム機をやめたので、今後は、スマートデバイスのZenFoneとPCに集中したい!!

ZenFoneは、やっぱりZenFone Max Pro M2の日本正式発表がドドでかい!!

今後はハイエンドにシフトして行くらしいですが、ハイエンドも楽しみ。

やっぱりZenFoneの存在感はすさまじいものがあります。

心底恐ろしい日本の通信キャリアから解放された自由な存在であること(黄金期のウィルコムを超えた存在)、何から何まで実用性が高く十分に生活必需品になれている事は大きい。

カメラの画面付きリモートコントローラーとしても実用性が高いのには感動です。

ただし、ゲームは今後も(メインでは)やらず、残されたヴィータの資産を活用して行きたいと思います。


■最重要なPC!!

やっぱりPCは生命線ですので最重要視して行きたいです。

ただASUS E203シリーズがあれば安心だ!!という状況が出来たので、以前のように、手持ちのPCが壊れたらどうしようという恐れはなくなったってのは果てしなくドドデカい。

7年も使い続け経年劣化が心配されるマザーシップPCも、メインRAMの16GB化と1TBのSSD化で見違えるほどに快適になったし、あわてずに良いPCを探して行きたいと思います。

今後は、もうゲーム機やゲームに出費が無いので、その分をきちんとPCとZenFoneに乗せて行けたらいいなぁとホンワカ考えています。


■カメラ

業界はフルサイズミラーレスが盛況ですが、その素晴らしさは十分に分かった上で、個人的にはフルサイズはやっぱり必要ないなぁと。

やはり、あのセンサーの大きさはちょっと馴染めない。

PowerShot G9X Mark2と、EOS KISS Mの良さを知ってからは、過度なセンサーの巨大化は・・・。

もちろん必要な用途があるわけだし進化して欲しいけれど、そのあおりを食らってフルサイズ以外は軽視するような流れが作られそうなので怖い。

EOS KISS MとEF-Mレンズの小さくて優秀なシステムは伸ばして欲しい。

最近もゲーム機業界が優秀な携帯機を捨てるさまを目撃しているので恐怖感は高まっていますね。

🔶まぁヴィータの後継機なんてぇもんが出たら、全ての話が変わるわけですが、まぁ出せるわけがないやな。

出ない出ない。

いやーヴィータ後継機なんて出るわけがないですよ。

ヴィータ後継機かぁ・・・さすがのソニーの力をもってしても、開発が出来るわけがない。

ヴィータ後継機は出ない!

やっぱりヴィータ後継機は出せないため、ゲーム機の業界は厳しい。

まぁソニーの高い技術力を持ってしてもヴィータ後継機は作れるわけがないんだなと思う。

ヴィータ後継機はソニーは出せない!?

2019/03/14

PowerShellでキー名を取得したい

PowerShellの中で、押したキーを値で判定したい時があります。

どのキーがどういう値を持っているのかを、連続的にコンソールに表示して確かめたい場合、以下のコマンドで行けます。



while($True){$Key=([Console]::ReadKey()).key; Write-Host (" => "+$Key);}

↑[Console]クラスのReadKey()だけで、一回限りのキー入力待機をしてくれます。

キー入力待機中に何でもいいからキーを入力すると(F11だとPowerShellが最大化・戻る表示になるので注意)、結果が返されます。

これをwhileでループさせて連続的に表示するようにしています。

終了する時は、Ctrlキー+Cキー+Enterキーの3キー同時押しです。



C:¥>while($True){$Key=([Console]::ReadKey()).key; Write-Host (" => "+$Key);}
  => F1
  => F2
  => F3
  => F4
  => F5
  => F6
  => F7
  => F8
  => F9
  => F10
1 => D1
2 => D2
3 => D3
4 => D4
5 => D5
6 => D6
7 => D7
8 => D8
9 => D9
0 => D0
- => OemMinus
^ => Oem7
\ => Oem5
 => Backspace
         => Tab
q => Q
w => W
e => E
r => R
t => T
y => Y
u => U
i => I
o => O
p => P
@ => Oem3
[ => Oem4
 => Enter
a => A
s => S
d => D
f => F
g => G
h => H
j => J
k => K
l => L
; => OemPlus
: => Oem1
] => Oem6
z => Z
x => X
c => C
v => V
b => B
n => N
m => M
, => OemComma
. => OemPeriod
/ => Oem2
\ => Oem102
  => LeftWindows
  => Spacebar
  => Applications
  => LeftArrow
  => UpArrow
  => DownArrow
  => RightArrow


↑実行結果ですが、終了するまで、キー入力を延々と受付るようになっています。

ちなみに、[Console]::ReadKey()の::というのは、Consoleクラスのスタティックメソッド(インスタンス化せずに使えるメソッド)なのですが、どんな種類のスタティックメソッドがあるのかを知りたい時は以下のコマンドでOKです。


[Console] | get-member -static -membertype method



   TypeName: System.Console

Name               MemberType Definition
----               ---------- ----------
Beep               Method     static void Beep(), static void Beep(int frequency, int duration)
Clear              Method     static void Clear()
Equals             Method     static bool Equals(System.Object objA, System.Object objB)
MoveBufferArea     Method     static void MoveBufferArea(int sourceLeft, int sourceTop, int sourceWidth, int sourceH...
OpenStandardError  Method     static System.IO.Stream OpenStandardError(), static System.IO.Stream OpenStandardError...
OpenStandardInput  Method     static System.IO.Stream OpenStandardInput(), static System.IO.Stream OpenStandardInput...
OpenStandardOutput Method     static System.IO.Stream OpenStandardOutput(), static System.IO.Stream OpenStandardOutp...
Read               Method     static int Read()
ReadKey            Method     static System.ConsoleKeyInfo ReadKey(), static System.ConsoleKeyInfo ReadKey(bool inte...
ReadLine           Method     static string ReadLine()
ReferenceEquals    Method     static bool ReferenceEquals(System.Object objA, System.Object objB)
ResetColor         Method     static void ResetColor()
SetBufferSize      Method     static void SetBufferSize(int width, int height)
SetCursorPosition  Method     static void SetCursorPosition(int left, int top)
SetError           Method     static void SetError(System.IO.TextWriter newError)
SetIn              Method     static void SetIn(System.IO.TextReader newIn)
SetOut             Method     static void SetOut(System.IO.TextWriter newOut)
SetWindowPosition  Method     static void SetWindowPosition(int left, int top)
SetWindowSize      Method     static void SetWindowSize(int width, int height)
Write              Method     static void Write(string format, System.Object arg0), static void Write(string format,...
WriteLine          Method     static void WriteLine(), static void WriteLine(bool value), static void WriteLine(char...


↑実行結果はこんな感じになります。

StaticメソッドはC#言語の知識がそのまま生かせるので直感的に使えるのがとてもありがたいですが、入力がとても長くなりがちなので、コンソールから入力するのはちょっと・・・という悩みがありますね。

2019/03/10

パワーアシストスーツにめっちゃ惹かれる!!

自分の体に装着することで、身体能力をサポートしてくれる「パワーアシストスーツ」ですが、めっちゃめちゃめちゃ惹かれます。

ロボットの進化を待つにはあまりにも遠く、仮に鉄腕アトムみたいなロボットが完成しても、とても買える気もしない。

パワーアシストスーツであれば、基本的には自分が動くわけで、とんでもなく汎用的。

逆に、何にどう使うか分からないようなロボットより、自分の動きをアシストしてくれるスーツの方がむしろ要望にマッチしてる気もする。

まだまだ機能はピンキリで、まさに「黎明期」という感じですが、これを昇華していければもしかすると日本の新しい産業になるかも知れない??

よく日本からiPhoneが出なかった事を嘆いたり自虐したりする声が聞かれますが、パワーアシストスーツはまさに挽回のチャンスではないですか。

ぶっちゃけ、スマートなパワーアシストスーツが出てきたら、それこそ介護の現場から軽作業まで、どんだけ役に立つのか考えただけで震えが来るレベル。

なんか、単発でポコポコ打って出て「やっぱ売れねぇからやめるわ・・・」からの、海外企業がそのスピリットを吸収して日本市場席巻!!のいつものパターンになりそうな気もするけど・・・。

ASUS E203シリーズで相変わらずストレージ残量との闘い

今やもう個人的に押しも押されもしないメインPCになっている「ASUS E203MA」と[ASUS E203NA」ですが、ストレージ残量との闘いは続いています。


↑PowerShellで手製のコマンドでもって確認すると、残量が20GBを切っています。

個人的に20GB切りをストレージの整理のサインとしていますので、さっそく整理にかかりたいと思います。

まず、ASUS E203MAのeMMC-64GBの負担になっているのは、「仮想メモリの容量」だったりします。

手製のコマンド「VMEM」で確認すると、827MBのストレージを消費している事が分かりましたので、同じく手製のコマンド「VMEM_RESET」にてリセットしました。

コマンドの内容につきしまては、過去のブログに書かせて頂きましたので今回は割愛させて頂きます。

ちなみに、仮想メモリのリセットですが、実際の反映はPC再起動後になります。



↑仮想メモリ以外のストレージの整理ですが、今までは何も考えずに「ディスククリーンアップ」でやってました。

しかし、もうこのディスククリーンアップは近い将来廃止するみたいで、ストレージセンサーの使用が推奨されているようです。

このストレージセンサーは、Windows 10の「設定(歯車アイコン)」>システム>ストレージから選択出来ます。

ちなみに、ストレージセンサーは自動で稼働させる事も出来るのですが、ASUS E203MAの処理能力だと、まだまだ裏で勝手に色々なものが動くというのは許容しにくいので手動オンリーでやっています。


↑再起動後に仮想メモリの状況を確認するとリセットされています。

eMMC-64GBは残量との闘いが続きます。

大型Windows Updateのために常に10GBは残しておかないといけないので、実質、自分で自由に使えるストレージは10GB以下だったりします。

このストレージとの闘いは、とても2018年や2019年のPCとは思えないカツカツぶりですが、その代わり、Windows 10が消費するストレージの様子について色々と勉強になっているため逆に良かったかなと思っています。

2019/03/09

免許更新時、安全協会2500円払うべきか・・・?

詳しい日付は言えないのですが、免許更新に行ってきました。

免許更新のタイミングは5年毎なので、毎回手続きの流れとかを忘れてしまうのが難点。

ただ今回は今までにないくらいスムーズでラクチンでした。

ポイントは交通安全協会 2500円を払うかどうかですが、これ、Webとかを見ると「払わなくてもいい!」というアドバイスもあるわけですが、正直、本当にお金がギリギリで払う余裕が無いというのならしょうがないですが、ぶっちゃけると「絶対に払った方がお得だと今回しみじみ思いました。

今回は、安全協会になぜ2500円払った方がお得だと思うのか?について書かせて頂きたいと思います。


■あからさまに精神的にラクラク

まず、身も蓋もない所から始めますと、精神的にラクラクになります。

最初の手続きである「申請書の交付窓口に行列」ってありますが、並んでいる時にチラシが配られるわけです。

お、一日の手続きの流れとか書いてあるチラシかな??と思うわけですが、実はまさかの「安全協会に入ってくださいね」というだけのフルカラー勧誘チラシだったりします。

き、き、気合入ってるじゃねーか。

この時点で薄々気が付くわけです。

軽い感じで「入ってね!」じゃなくて、フルカラーチラシ作成してまで勧誘に来る気合の入った相手に逆らうにはなかなか精神力が必要。

断るのはもちろん簡単なんですが、正直、これから続く手続きの間じゅう「なんか、払わない人って差別とかされるのかなー(実際はそういう事は無いにしても)」という心配が発生するのは人情。

そういうネガティブな事だけでなく、窓口の方の機嫌も良くなる上に、なんか更新手続きの間じゅう安心感があってなんか闇雲に良い事をひとつした!という小さな満足感があるだけでも、もう結構良いのかなという心境。


■あからさまに手続きがラクラク

実利面でも、安全協会に入ると手続きが格段に楽になります。

安全協会に入った人だけの窓口に案内されますが申請書をサービスで書いてくれます。

いや別に簡単だから自分で書けるからとは思うのですが、思うのですが、立ってるだけで、手馴れたプロが超スピードで書類仕事してくれるのはスマホ時代にピッタリというか何というか。

ただし、病歴とか「はい/いいえ」でチェック入れて最後に署名する用紙だけは自分で記入しないといけないですが、ホントそんだけで、後はスムーズに視力検査へ案内されて終わり。

あと、案内係みたいな方が立っていて、耳の聞こえにくいお年寄りのために呼び出しの声を聞いてあげてたり、本当の昔と比べてすげー親切。

そういう親切方面の人件費に使われる(かも)なら安全協会の2500円は十分良い感じ。


■半日快適代金だけでも良いかも

2500円の価値があるのかどうかと言われれば何とも答えにくいですが、少なくとも、警察関連の施設の中で半日過ごすのはかなりの非日常感があります。

実際は何もなくとも、安全協会に入った事で、精神的に楽になるだけでも結構な価値はあると思いました。

仕事とか生活とかで悩まないといけない事が多いのに、さらに免許更新でまで悩むのかと思うと、安全協会に入るくらいはむしろいい事なのかなぁと。

少なくとも、入って当たり前という事ではなく、入ると窓口の方の機嫌は良くなるし、今の冷たい世の中良い反応があるだけでも価値がある。

プラス思考過ぎますかね。

ちなみに私はもしかすると今回が最後の免許更新になるかも知れないですが、もし生きていて次(また5年後)があれば、次も安全協会には入ります。

もう一つちなみに、平成は今年の4月末日をもって終了するのに、免許証はまぁしょうがないですが「平成xx年まで」ってなってますね。

平成もうなくなるんやけどこれはしゃあないか。

やった!! ZenFone Max Pro M2が日本正式発表!! 夢の税込み3万円台でパラダイス!!

やった!! ZenFone Max Pro M2が日本正式発表!!

夢の税込み3万円台で史上最高スマートデバイスまっしぐら!!


↑ASUS公式サイトより
このブログで何回も書かせて頂いた通り、今、手持ちのZenFone max plus M1は、個人的に史上最高のモバイル製品。

調べもの、Excelによる計算、カーナビゲーション、バーコードリーダーなどなど本当にどんだけ助けてもらったか知れません。

ソニーが大好きなプレイステーション・ヴィータをやめて撤退した時も、本来ならショックで厳しかったのに、ZenFoneのお陰で全く平気でした。

そんなドド外れたスーパーマシン、それをさらに超える「超・強化新型!!」


↑公式サイト(痺れるくらいカッコ良いZenFone観られるよ!)より
このマシンは、既に台湾では発売されていて、イノベーターの方のレビューなども拝見する事が出来ていたため、期待は高まっていたものの・・・。

最近日本で鬼のように怒っている値上げブーム(地獄)トレンドに乗っかって来て、日本で「だけ」激烈に高い値段でぶっこんで来る恐れがあって、イマイチ乗り切れない所がありました。

でももう心配ない!!

ASUSってホント凄いメーカーだな・・・うおおお!! 税込みでも3万円台なので、最高値のお店でもちゃんと3万円台で買える事が分かり、もう安心してへなへなになりそう!!


■ここが凄いぞZenFone Max Pro M2!!

値段が夢の税込み3万円台確定で、ZenFone Max Pro M2の輝きはもうとどまる所を知らない。

なんかこう、かつてあの初代プレイステーションが発表されて、大興奮で友達と一緒に並んで発売日に買ったわけですけれど、あの時のときめきを軽く超えている。

大満足のZenFone max plus M1から見ても、早く買っておいてM1の破損に備えて2台体勢で安心したい衝動にかられます。

ということで、このスーパーマシンの凄さを一覧にしてみました。

ポイント 内容
バッテリー容量 スタミナばっちり5000mAh
OS ピュアandroid Oreo搭載!!
パネル素材 ゴリラガラス6で安心(2.5D曲面)
重量 175gで何とか軽量を維持
外装 高級感あるウェーブフィニッシュ
カメラセンサー ソニーIMX486センサー(外側1200万画素)
カメラ構成 イン(1300万画素)アウト(1200万画素+深度測定用2カメラ構成)
カメラレンズ構成 6層 明るさはF/1.8
オートフォーカス方式 位相差AF !!(最速0.03秒)まじか
カメラシステム AIカメラ搭載
パネル解像度 2280x1080ピクセル
パネルNTSC色域 94%でかなり綺麗
オーディオ NXP9874スマートアンプ搭載
ヘッドフォンジャック もちろんあり!!
microSDカード もちろんあり!!(2TBまでOK)
デュアルSIM もちろんSIM2枚差し2電話番号OK!!
メインRAM 4GB (ピュアandroidなので安心)
ストレージ容量 64GB(十分で嬉しい)
CPU 8コア(スナップドラゴン660)


↑書きたい事は尽きないのですが、とにかく、見た目がとても美しく、重さもZenFone max plus M1と大差ないくらいに抑えられていて軽く、スタミナばりばり!!

どんな高性能マシンでも、バッテリーがあっという間に切れてしまってはちょっと厳しいですが、もう全く文句なしです。

性能もかなり上がっていて、CPUのスナップドラゴン660は、私にはちょっと過剰なくらいのパワー。

メインRAMは6GBではなかったですが、これやると本体がかなり高くなってしまうので回避したという所でしょうか。

ただ、ASUSもアピールしている通り、OSが余計なメインRAM容量を食わないようにピュアandroidという事で、相対的にかなり良い感じだと思われます。

そもそも、Windowsパソコンですら4GBあれば行けますからね。

より軽量なandroidならば十分パラダイス!!

早く手にとって色々と操作してみたい!!

2019/03/08

ZenFone max pro M2の日本正式発表が迫る!

個人的に、モバイル関連で最高に楽しみなのがニューZenFone!!

いやーZenFone、本当に誕生してくれてありがとうという感謝の気持ちでいっぱいです。

かつてZenFone持ってなかった頃は、「iPhoneユーザーいいなぁ」とうらやましさでいっぱいでした。

iPhoneって、毎年素晴らしいマシンが必ず出てくれるもんねぇ。

しかし!! ZenFoneもiPhoneに負けないくらい毎年良いものが出てくれるので胸のつかえがとれた!!

今年も「ZenFone max pro M2」の日本正式発表が迫っているようです。

台湾ではもうとっくに発売されていて、イノベーター(最先端ユーザー)のレビューをネットで拝見する事も可能になっていますが・・・。

正直、激すごっっっっ日本の国内価格次第(3万円台なら)では、史上最高モバイル端末の可能性すらある。

という感触。

業界挙げて暴力的な10万円超えハイエンド端末発売ブーム襲来の中で、キラッと良心価格の良マシンが出てくれるというこの絶妙なタイミングも素晴らしい。

手持ちのZenFone max plus M1に大満足しているのでこれが基準ですが、バッテリー容量は5000mAh、ベンチマークでも軽く2倍を超える数値、ガラスの質感を湛えた艶やかな外装、 カメラもハイエンドに近いAIカメラ搭載、軽さも170gと許容範囲!

日本正式発表が待ち遠しいです。

もちろんハイエンドのZenFone 6も楽しみですが、ZenFone max plus M1で大満足なので、ハイエンドまで突き抜けたパフォーマンスまでは無くても大丈夫かなというところ。

バッテリーのスタミナが大きい方がありがたいかな。

ソニー本当に携帯ゲーム機完全撤退した!!

ZenFone max plus M1のすさまじい魅力のお陰で個人的にはダメージなしで済みましたが、なんと、本当にソニーが携帯ゲーム機から完全に撤退しましたね。

ゲーム機に限らず、一度撤退したジャンルは、後から急にやりたくなっても、その頃にはノウハウも技術も四散しているから難易度が高くなりがち。

未来を見据えて、低空飛行でもジャンルの維持だけはするのかな?と思ってましたが、思い切りましたね。

ただ、ソニーの判断は納得できる所があります。

やはり、androidマシンとiOSマシンのレベルが、とても単独の携帯ゲーム機なんかでは勝てるどころか後を追うことすら出来ないほど隔絶した高レベルになっており、開発そのものが虚しくなるところでしょうね。

単純にスペックの数字だけならまだしも、システムとしての親切さや思いやり、気づかいのような深い部分さえも、ゲーム機はandroid、iOSマシンには、ほんの少しの相手も務まらない現実があります。

今後のソニーに求められるのは、PS4とPS5のリモートプレイを、真剣にフォローすることだと思います。

逆に、ゲーム機はもうスペックも、思いやりさえも、androidマシン、iOSマシンの相手にならないのであれば、任天堂がかつて出していた名機「ゲームボーイアドバンスSP」を復活させればどうか?という気持ちはありますね。

カセット差して一発起動、化粧品のコンパクトサイズ、複雑さを排したシンプルゲーム特化マシンは、もしかするとゲーム機の未来なのかも知れませんね。

2019/03/02

プレミアムOneDrive本当に性能凄い気がする

Office 365 SOLOのサブスクリプション購入をして以来、自動的にプレミアムに移行したOneDriveですが、オンラインストレージの容量が1.01TBに爆増するだけと思っていたら、性能がかなり上がっている気がする。

今、ZenFone max plus M1で写真撮ってOneDriveに格納しても、迅速に全マシンに反映されるので、完全に生活の質が変わるほどのインパクトです。

性能が上がるとかいう宣伝は特にマイクロソフトやってないので、たまたま自分の環境が良くなっただけなのかも知れないですが、無料版の時は、反映の速度がまちまちで安定しなくて(涙)。

他のパソコンで作業しようとしたら前のファイルがダラダラ古いままおかしな事になったりして「こういうのはアップルじゃないとダメなのかなー」と気落ちしてました。


今回のOffice 365 SOLOだって、容量が1.01TBもオマケ程度の期待でしたが、今やもう大変なことになってます。

手持ちのPC、ASUS E203MAがあるんですが、一つ前のASUS E203NAも持ってて、新しいMAの登場を機会にして、古いNAはいざという時のバックアップに回す予定でした・・・が!!

プレミアムOneDriveの性能があまりにも良くて(私の場合)、シームレスで2台を連携させる事が可能になってしまい、なんと二台を同時に稼働させています。

MAを使っている間、NAを充電しておき、出かける時にMAは閉じて充電していたNAの方を持ち歩くとか、一台が重たい作業をしてる時は間髪を入れずに別の一台で作業を続けるとか、少し前なら「絵に描いた餅」みたいな使い方が全然普通に出来ています。

ここにスマートデバイスのZenFoneも絡んで来るわけで、もう環境的には何の申し分もないドリーム状態です。

プレミアムOneDriveをバックにつけると、PCやスマートデバイスを買い替えるのではなく、数を増やしてパワーアップというとんでもない選択しが生まれるわけです。

うおおおー

カメラはPowerShot G9X Mark2最強説!?

日本の数多くの誇りの一つであるカメラ産業。

スマホの躍進でカメラ専用機の肩身が狭い時代とは言え、スマホは、悪く言えばもう物理的な形状については、カメラとしてはすごく不自然な「板チョコレートスタイル」のままもう思考停止してますから、握りやすく撮りやすい専用機の魅力はギリギリで廃れないと思います。


そんな中ですが、やはりカメラはPowerShot G9X Mark2最強説!?を推したい。

レンズ交換式カメラとしては、EOS Mシリーズが断然ぶっちぎりで最強かと思うのですが、全カメラの中ではやはりPowerShot G9X Mark2かなと。

性能・使いやすさ・ルックス・質感・全部超一流なのに、無意識に鞄やポケットに突っ込める携帯性の良さ!という事で、キング・オブ・デジタルカメラと言いたい。

いやー、先日、体調不良が続いて、とてもカメラどころじゃない(超優秀なEOS KISS Mですらも重くて持ち歩けない)心境に落ちたんですけど、PowerShot G9X2だけは無意識にカバンに入れてましたね

それで、急に写真を撮りたいシーンに遭遇した時に「あっこんな時にカメラがあったらなぁ」・・・あったわ!! 妥協のない画質で一枚をしっかり撮れる!!

うっうれしー。


↑PowerShot G9X2は、とにかくさすが本物のカメラだけあって、形状が自然で厚みも自然、握りやすくて撮りやすい。

スマホに比べると、お便利パワーは落ちますが、結局はスマホと敵対する存在ではなく、写真撮影後の作業はスマホと連携出来るので問題なし。

欠点としては、カメラ専用機のカメラは、写真撮影にしか使えないという所でしょうか。

スマホのカメラは、バーコードリーダーやスキャナなど、写真撮影だけのものじゃない利点ありますし。


↑PowerShot G9X Mark2は、フルマニュアル撮影でも快適なのに小さい、タッチパネルの良さとハードウェアキーの良さのハイブリッド、とにかく良いものです。

スマホ(スマートデバイス)のカメラも進化を続けているので、今後は、PowerShot G9X Mark2とスマートデバイス、EOS KISS Mとスマートデバイスという組み合わせが多くなりそうですが、どんなにカメラを持ち歩く気分にならなくとも、自然にカバンに入れておけるこの絶妙な存在感は素直に感動します。

どんな超高画質・超高性能カメラでも、持ち歩く気になれないものは何の意味もない!!というのは昔から言われている事ですが、PowerShot G9X mark2は、全く関係のない言葉です。

愛車のアイちゃん日記「今シーズン初の凍結しない朝」

今回の記事は、愛車のアイちゃん日記です。

先日、PCVバルブが劣化故障し、かなり凹みましたが交換でなんとか治り今は逆に以前よりもさらに調子が良くなった気がします。

↑そして、いよいよ待望の今シーズン初のクルマが凍結しない朝がやって来ました。

いやー心から嬉しい。

さっそくアイを磨きました。

東北と言っても、仙台は凍結レベルでは東北最弱レベルではありますが、それでもなんやかんやと一年のうち4ヵ月くらいは凍結です。

猛熱を誇る(?)第二世代Core i7ですらも、早朝だと何分かですが空気に冷やされて冷却ファンが始動せずにPCが無音(SSD機)というくらいの威力はあります。

↑PCVバルブ故障の時はかなり凹んだのですが、復活してからは、ただでさえ大好きだったアイがさらにますます好きになりました。

あれほど欲しかったホンダのS660も、アイの魅力の前にちょっと今は考えるのをやめた状態ですね。

下回りも、凍結しない朝が来たからウキウキで磨きました!!

とりあえず、自分でフッ素コーティングしているので、泥の飛沫汚れは避けられないものの軽い水拭きで落としやすくなってます。

タイヤの内側も磨きます。

アイは、ミッドシップエンジンですが、エンジンが45度傾斜して後部座席の下に潜り込んでいるため、他のクルマよりも足回りの露出が多い感じ。

しっかり磨かないとかなり目立ってしまうところ。


↑タイヤハウス内もしっかり磨いています。

下回りは、少し走るとすぐに汚れてしまうので綺麗にしておくには生半可な気合では足りないですが、もう行くところまで行く覚悟です。

PowerShellで、任意の日付文字列を付けたフォルダを沢山作りたい

たとえば、写真の整理などで、日付の文字列(2019年3月1日なら20190301、2019年3月なら201903)を付けたフォルダを沢山作りたい!という時、PowerShellならびっくりするくらい簡単です。


0..100|%{ NEW-ITEM ("写真_"+(Get-Date '2018-01-01').AddDays($_).ToString("yyyyMMdd")) -ItemType Directory}

↑たとえば、日付を2018年1月1日から始めるとして、つまり「写真_20180101」フォルダから始めて、毎日分、100日先までのフォルダを作りたい時のコマンドです。


↑一瞬でフォルダが一気に作られました。

この手の作業はコマンドさまさまですね。



0..100|%{ NEW-ITEM ("写真_"+(Get-Date '2018-01-01').AddMonths($_).ToString("yyyyMM")) -ItemType Directory}

↑日数だと細かい場合、日付を2018年1月から始めるとして、「写真201801」フォルダから始めて、毎「月」分、100ヵ月先までのフォルダを作りたい時のコマンドです。


↑またまた一瞬でフォルダが一気に作られました。

PowerShellは、ちょっとだけ凝った事をやりたい時、元々がC#言語から派生したようなコマンドシェルであるため、記述が直感的で分かりやすいのが本当に素晴らしいです。

多少長くともプログラム言語ライクに書く事も出来るし、とにかく、状況に応じて色々な書き方が出来る。

これからプログラミング教育が本格的に世の中でスタートしますが、どのプログラミング言語をすべきか論議するよりも先に、もう何も考えずにPowerShellとJavaScriptをやるべきだと思います。

プログラムの開発現場は、いざという時の緊急対応に即応できないとかなり地獄の業火に包まれるのですが、PowerShellとJavaScriptは、咄嗟の時の逃げ道にもなるので絶対にやっておくべき命の綱です。

PowerShellで、連番を付けたフォルダを沢山作りたい

フォルダに連番を付けたものを沢山作りたい!というような時、PowerShellだと驚くほどに簡単にシンプルに書く事が出来ます。


$V=@(1..10);$V|%{NEW-ITEM ("F"+$_.ToString("00")) -ItemType Directory}

↑たとえば、1から10までの連番を付けた「Fxx」というフォルダを作りたい時は上記のように書くだけです。

あえて、変数や配列を使ってみましたが、実はもっともっと簡単に書く事が出来ます。



1..10|%{NEW-ITEM ("F"+$_.ToString("00")) -ItemType Directory}

↑PowerShellは、なんと、(たとえば)1..10と書くだけで1から10までの10個要素を持った配列を暗黙で作成する事が出来ます。

ただ、他の言語でもそうなんですが、あんまり省略し過ぎるのも微妙なのでなかなか悩ましいところです。



Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2019/03/02     11:34                F01
d-----       2019/03/02     11:34                F02
d-----       2019/03/02     11:34                F03
d-----       2019/03/02     11:34                F04
d-----       2019/03/02     11:34                F05
d-----       2019/03/02     11:34                F06
d-----       2019/03/02     11:34                F07
d-----       2019/03/02     11:34                F08
d-----       2019/03/02     11:34                F09
d-----       2019/03/02     11:34                F10

↑実行すると、連番付きフォルダが一気にできます。


削除したい時は色々なやり方があるのですが、シンプルに同パターンでREMOVE-ITEMすれば良いかなと。



1..10|%{REMOVE-ITEM ("F"+$_.ToString("00"))}

↑これで削除されます。

ASUS ZenFone max pro M2が日本でも登場確実!! 楽しみで血圧上昇。

ついに、ASUS ZenFone max pro M2が日本でも登場確実になったようです。

うおおおやったぁ!!

まず、今、手持ちの「ZenFone max plus M1」ですが、これもう個人的なモバイル機器史上他の追従を全く許さないナンバーワンになってます。

ピンチを何度も救ってくれたり、もはやPCに肩を並べる生活必需品。

逆に言うともはやZenFoneは失う事を恐れるリスト入りしてしまったのです。

ロストしたらどうしよう・・・と思っていたところに、この朗報がもたらされた!!

ZenFone max plus M1と2台体勢で行けたらいいなぁ。

楽しみで血圧上昇レベルだけど、勢いだけではなくて、このZenFone max pro M2があれば何の心配もなくなると思えば、心の平穏が得られる事の方がデカイかも知れない。

それにつけても、個人的に、ZenFone maxシリーズは・・・日本のスマートフォンの始祖ウィルコムW-ZERO3を遂に超えた存在になっています。

おそらく、一般的にスマートフォンのはじまりはiPhoneになるんでしょうが、どっこい、ウィルコムW-ZERO3が先だぜっ!!

スマホとスマートフォンは違う!というくらい、W-ZERO3は素晴らしかった。

あれを超えるのがZenFone。

SIMフリーによって、通信キャリアの束縛を一切受けない自由な翼。

軽量でも大容量バッテリー搭載でスマートウォッチよりスタミナ安心太郎。

そして、何でもかんでも地獄のような値上げトレンドに反逆した良心価格(カメラとかPCのように日本だけ急に高くなる第二の地獄コースもあるけど)。

スマートフォン、スマートデバイスの夢をちゃんと届けてくれるのがZenFone。

ハイエンドのZenFone 6も発表が近いとされているし、最大限に注目して行きたいと思います。

2019/02/28

バッチファイルを管理者権限で実行する方法!!

いやー、苦労しました。

Windows7では楽々出来ていた、たとえば自作DLLをレジストリ登録するバッチファイルの自動実行とかって、Windows 10では出来なくなっているんですよね。

セキュリティがしっかりしているというか、とにかく、普通にバッチファイルを実行するとコマンドがアクセス拒否されます。


■バッチファイルを管理者権限で実行!

ではどうするかというと、実際に自作DLLのレジストリ登録をするバッチファイルを「MAIN.BAT」とすると、そのバッチを管理者権限でコールする親のバッチを「START.BAT」として用意します。

バッチファイル2本かよと思われるでしょうが、長々と難しく書くよりもシンプルに2本に分けた方が後々メンテが分かりやすいかなぁと。



powershell Set-ExecutionPolicy -SCOPE CurrentUser RemoteSigned
powershell start-process (フルパスで)MAIN.BAT -verb runas

↑START.BATは上記のように記述しました。

バッチファイルの中から、PowerShellのコマンドを投げるわけです。

一応、まだPowerShellのコマンドファイルが無効なユーザーのため、有効にするコマンドを最初に投げています。

次が本命で、MAIN.BATを「管理者権限で実行する」実行しています。

RunAsというのが管理者権限というわけです。

これで、今までアクセス拒否食らっていたレジストリ登録なども出来るようになりました。

Windowsって、CMDとPowerShellという新旧二つのコマンドシェルがありますが、どちらか一方だけで良いとはいかないですね。

両方をまんべんなく使わないと、結構落とし穴にはまります。

2019/02/27

朝起きてみると、i-MiEVのカタログが落ちてた。

今朝起きてみると、なんとi-MiEVのカタログが本棚から落ちていて、ついつい見入ってしまいました。


↑うむむむー、自分が惚れているからって贔屓しまくりかも知れないけど、やっぱりアイはめちゃくちゃカッコ良いですね。

2006年登場ほやほやの当時は、あまりにも未来的過ぎて、いくらなんでも丸すぎやしないか??と思ったけど、オンリーワンの繭型クーペスタイルは結局オンリーワンのままだったし、時が経つにつれて味が出て来てもう大変。


↑おはっ、と声が出てしまうくらいカッコいい。

ミッドシップエンジンにしか出来ない骨格。

等長ドライブシャフト、ブレーキング時に重量配分が限りなく50:50に近づく設計など、見えない所が凄いという理想形。

エンジンて・・・i-MiEVはミッドシップモーターだけど・・・。


↑しかしアイすげぇですね。

元々は2006年に誕生したマシンなんだけど、古さが全くゼロというか、むしろこれから出るクルマが全然追いつけないというか。

量産車なのにここまでプロトタイプマシンの雰囲気を纏ったまま来ているのも珍しい。

i-MiEV、アイミーヴは、市販電気自動車第一号、初号機という誉もあるんですよね。

三菱だからマスコミも冷たいけど、もしもアイ、i-MiEVを、トヨタとか欧州メーカーが出していたら、今でも事あるごとに話題にしてもらえるくらいの大名車だったと思います。

2019/02/26

ASUS E203シリーズ、ZenFone、Officeが噛み合って大快適に

もしかして、もしかすると、個人的には今がPCライフ・・・というよりも、全ての情報機器ライフの黄金期かも。

ASUS E203シリーズ(NAとMA)で資料やプログラムを作り、ZenFoneで持ち出して見て、軽い編集も行う。

ZenFoneは極めて優秀なテザリング能力もあるので、ASUS E203シリーズをどこでも快適にネットにつなげる役割も請け負ってくれる。

そして、それらをつなぐ、Office 365 SOLO (Office + プレミアムOneDrive)。

全てが噛み合ってとても素晴らしい環境になっています。

特に、Office 365 SOLOは、サブスクリプション購入してて良かった、どころの話じゃないです。

プレイステーションの有料サービスをやめて、その分をOffice 365 SOLOにぶっこんだわけですが、心から良かった。

Excel 2019(相当)が所有全マシンに自由にインストール出来るのは果てしなくデカいし、プレミアムサービスに昇格したOneDriveは、無料版よりもやはり性能が上がっているような感じで(個人的な感覚)す。

情報を全てネットに置いて、スムーズに読み書きする・・・これが、ただの遊びや絵に描いた餅ではなくて本当にスムーズに出来るようになっており、完全にPCライフ、情報ライフの質を変えてくれています。

2019/02/24

PowerShellで、簡単な記述でファイル変換のコード変換をしたい

今回の記事では、PowerShellでもって、ファイルのコード変換を簡単にやってみようというものです。

PowerShellは、シェルスクリプトと言いつつ.NET Frameworkが使えるために完全にプログラミング言語の性質も持っています。

その気になれば、C#言語やJavaScriptの勢いで突き進む事も可能ですが、シェルスクリプトの気軽さも併せもっているのが本当に驚異。

今回は、たとえば、BOMなしUTF-8のファイルを、WindowsおなじみのShift_JISに簡単な記述で変換してみます。




$CONVF1="C:\TEMP\SAMPLE_UTF8N.DAT"
$CONVF2="C:\TEMP\SAMPLE_SJIS.DAT"

$ENC1=NEW-OBJECT System.Text.UTF8Encoding -ArgumentList @($false)
$ENC2=[System.Text.Encoding]::GetEncoding("Shift_JIS")

$DATA1=[System.IO.File]::ReadAllLines($CONVF1,$ENC1)
[System.IO.File]::WriteAllLines($CONVF2,$DATA1,$ENC2)

↑たったこれだけで(も)OKです。

変数名や文字コードオブジェクトの名前は、分かりやすいように末尾1が変換前、末尾2が変換後としました。

バイトストリームクラスを使って1行づつ読んで書く・・・というのも可能ですが、単純な変換であれば、変換元のコードで一気にファイル内容を配列に読んで、変換先のコードで配列をファイルに一気に書き込む・・・でOKです。

ちなみに、BOMなしUTF-8のエンコードをしたい時は、System.Text.EncodeクラスのスタティックメソッドGetEncodingではだめなので注意が必要です(BOM付きになってしまう)。


↑変換前は、BOMなしUTF-8です。


↑変換後は、Shift_JISに変換されました。

文字コードを入れ替えるだけで、他のパターンでもコード変換が簡単に出来るようになります。