オリンピックに合わせて、サマータイムの一時導入を検討しているとのことです。猛暑を避けるアイディアとしては理解できますが、コンピュータシステムの観点からはかなり危険と思います。システムエンジニア、セールスエンジニアとしてどのような点がリスクなのか説明させていただきます。
(1)予算
予算とりを3年単位で行う場合がよくあります。サマータイムの大規模改修の予算など取られていません。また物理的にとることができません。
(2)無駄な投資
予算を無理やり確保して対応しても、投資は無駄になります。技術的に面白いものではありませんし、サマータイムが終了したらお役御免です。
このような無駄な投資をするなら、AI、ディープラーニング、ビッグデータ、IoT、セキュリティなどに投資するべきです。日本の技術が(ただでさえ遅れているのに)2年遅れることになります。
(3)生命の危機
当然病院のシステムにも改修が入ります。もし不具合がありオペの時間や診察の時間に混乱が発生した場合、生命が危険にさらされることになります。日本はサマー対応想定の機能は原則ありません。新規に開発する必要があるのです。
(4)時間が戻る、戻す
サマータイムの切り替えで時間が戻る、戻す作業が発生します。その間にジョブがスケジュールされていた場合、ジョブを飛ばすのか戻すのか不具合の原因となりやすくなります。ジョブが二重に実行される懸念もあるでしょう。
うるう秒ですら大変なのに、これは真剣な問題です。
(5)個人
DVDプレーヤー、時計、炊飯器などの家電など小型機器は当然サマータイムに対応していません。1億2000万の国民が手作業で変更することになります。全く無駄な作業だとは思いませんか。競技の時間を繰り上げるのとどちらが簡単でしょうか。
(6)経済活性化にはならない。
(1)で述べた通り予算はありません。他の予算を削って付け替えるだけなので活性化にはならないでしょう。しかもIT業界は万年人手不足。さらに混乱することでしょう。
(7)スケジュールを入れ替え
2020年〇月×日の***時から打ち合わせ、なんて事前に予定を入れていた場合、すべて入力しなおしになります。これで大事なクライアントとの打ち合わせをすっぽかしたりして。
(8)2000年問題と同じレベル
原則は2000年問題と同じと考えてください。もしバイナリ(Binary)しかないプログラムが動いてたら最悪です。入れ替えとなるでしょう。
参考:20xx年問題は色々大変
(9)2度危ない
サマータイム適用、除外の2度のドキドキを味わうことになります。
(10)「欧州などできていて、日本でできない訳ない」への反論
欧州などはサマータイムを想定した開発、設計が行われています。日本は全く想定していません。本の気まぐれの発言です。想定していないシステムなので今から作りこむ必要がありますが、もともと想定していない設計のため、無理やり機能を付けるのは厳しいし危険です。
ITエンジニアとして、捨て金でしかないサマータイムは大反対です。このようなお金があるなら、是非 AI 分野にぶっこんでほしいです。ただでさえ日本は大幅に遅れているのですから。
2018年8月14日火曜日
Windows 10 集中モードとは
自宅で勉強したり仕事したりしていても、SNSの更新が入ったりメールを受信したりすると作業が中断します。
これらの割り込みを一時的に保留することができます。(重量なトラブル以外はタスクトレイに通知されません)
これをWindows 10の集中モードと呼びます。
Windows 10の集中モードとは
これらの割り込みを一時的に保留することができます。(重量なトラブル以外はタスクトレイに通知されません)
これをWindows 10の集中モードと呼びます。
Windows 10の集中モードとは
2018年8月13日月曜日
2018年8月11日土曜日
Powershell で Excelの操作を行った場合、excel のプロセスが残る件
現象:
Powershell で Excel により操作し、操作が終了しても以下のとおりプロセスが残る場合があります。オブジェクトを確保した場合、Excelを終了してもその確保したオブジェクトが残存しているようです。
tasklist コマンドで確認すると、以下の通り excel.exeのプロセスが残留しているのが分かります。
C:\>tasklist | findstr -i excel
EXCEL.EXE xxxx RDP-Tcp#7 2 51,644 K
解決方法:
コードの中で変数を定義したら開放する必要あります。
例えば$excel、$book、$sheet変数を定義したら以下のように確保したオブジェクトをリリースします。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)
その他便利な Powershell のサンプルコマンドを紹介します。
■[PowerShell サンプルコード]
Powershell で Excel により操作し、操作が終了しても以下のとおりプロセスが残る場合があります。オブジェクトを確保した場合、Excelを終了してもその確保したオブジェクトが残存しているようです。
tasklist コマンドで確認すると、以下の通り excel.exeのプロセスが残留しているのが分かります。
C:\>tasklist | findstr -i excel
EXCEL.EXE xxxx RDP-Tcp#7 2 51,644 K
解決方法:
コードの中で変数を定義したら開放する必要あります。
例えば$excel、$book、$sheet変数を定義したら以下のように確保したオブジェクトをリリースします。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)
その他便利な Powershell のサンプルコマンドを紹介します。
■[PowerShell サンプルコード]
Excel で新規に book を作成し値を編集するサンプルコード
VBA により Excel の新規シートを作成、編集、保存するサンプルコードです。
--------------------------------------------------------
#Excel を起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $true
#Workbookを追加
$book = $excel.Workbooks.Add()
#追加されたsheetを取得
$sheet = $book.Sheets("Sheet1")
#セルとセルの数値の演算 -----------------------------------------------------------
$sheet.Cells.Item(1, 1) = 1
$sheet.Cells.Item(1, 2) = 2
#数値の足し算
$work=$sheet.Cells.Item(1, 1).value() + $sheet.Cells.Item(1, 2).value()
$sheet.Cells.Item(1, 3) = $work
#セルとセルの文字列としての足し算--------------------------------------------------
$sheet.Cells.Item(2, 1) = "1"
$sheet.Cells.Item(2, 2) = "A"
#文字列結合
$work=$sheet.Cells.Item(2, 1).Text + $sheet.Cells.Item(2, 2).Text
$sheet.Cells.Item(2, 3) = $work
#ファイルを保存,一時的に上書きの警告を非表示にする
$excel.DisplayAlerts = FALSE
$book.SaveAs("c:\temp\test.xlsx")
$excel.DisplayAlerts = TRUE
#Excelを終了
$excel.Quit()
#プロセスを終了。これを実行しないと Excel.exe が残存してしまう。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
--------------------------------------------------------
#Excel を起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $true
#Workbookを追加
$book = $excel.Workbooks.Add()
#追加されたsheetを取得
$sheet = $book.Sheets("Sheet1")
#セルとセルの数値の演算 -----------------------------------------------------------
$sheet.Cells.Item(1, 1) = 1
$sheet.Cells.Item(1, 2) = 2
#数値の足し算
$work=$sheet.Cells.Item(1, 1).value() + $sheet.Cells.Item(1, 2).value()
$sheet.Cells.Item(1, 3) = $work
#セルとセルの文字列としての足し算--------------------------------------------------
$sheet.Cells.Item(2, 1) = "1"
$sheet.Cells.Item(2, 2) = "A"
#文字列結合
$work=$sheet.Cells.Item(2, 1).Text + $sheet.Cells.Item(2, 2).Text
$sheet.Cells.Item(2, 3) = $work
#ファイルを保存,一時的に上書きの警告を非表示にする
$excel.DisplayAlerts = FALSE
$book.SaveAs("c:\temp\test.xlsx")
$excel.DisplayAlerts = TRUE
#Excelを終了
$excel.Quit()
#プロセスを終了。これを実行しないと Excel.exe が残存してしまう。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
その他実践で役に立つ PowerShell のサンプルを多数紹介しています。
こちら。
【Powershell】Excelで $book.SaveAsで確認なしに上書きする方法
少子化、業務効率化、人手不足、働き方改革、自動化にともない、Excel を自動で操作したい場合もあるでしょう。Excel を VBA で操作する場合、$book.SaveAsでシートを保存すると、「上書きしますか?」ダイアログが表示されユーザの入力待ちになってしまいます。自動化の場合困りますよね。そんな場合、この警告を表示しないでクローズする方法を紹介します。
$book.SaveAsで新規に作成したファイルをファイル名を使用して上書きする場合、警告を非表示にする方法を紹介します。
以下の場合、c:\temp\test.xlsxでsave使用とすると Excel画面で上書きの確認がされてしまいます。
#Excel を起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $true
#Workbookを追加
$book = $excel.Workbooks.Add()
#追加されたsheetを取得
$sheet = $book.Sheets("Sheet1")
#値を設定
$sheet.Cells.Item(1, 1) = 1
#ファイルを保存
$book.SaveAs("c:\temp\test.xlsx")
#Excelを終了
$excel.Quit()
#プロセスを終了。これを実行しないと Excel.exe が残存してしまう。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)
以下の行をSaveAsの前に追記します。これで上書き確認はされません。
以上
現象
$book.SaveAsで新規に作成したファイルをファイル名を使用して上書きする場合、警告を非表示にする方法を紹介します。
以下の場合、c:\temp\test.xlsxでsave使用とすると Excel画面で上書きの確認がされてしまいます。
#Excel を起動
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $true
#Workbookを追加
$book = $excel.Workbooks.Add()
#追加されたsheetを取得
$sheet = $book.Sheets("Sheet1")
#値を設定
$sheet.Cells.Item(1, 1) = 1
#ファイルを保存
$book.SaveAs("c:\temp\test.xlsx")
#Excelを終了
$excel.Quit()
#プロセスを終了。これを実行しないと Excel.exe が残存してしまう。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet)
対処
以下の行をSaveAsの前に追記します。これで上書き確認はされません。
$excel.DisplayAlerts = $FALSE
登録:
投稿 (Atom)