Surface book 2についてくる Office Home & Business 2016は、Office 365に契約している場合ゴミになるのか?

ゴミです。

本製品は、本製品が付属していたパソコンでのみ使用できます。本製品のみをネットオークションなどで転売したり、他のパソコンで使用することはライセンス契約違反です。

って書いてあるし。

せっかくOffice 365でMicrosoftに貢ごうと思っても、目の前に未使用の Office Home & Business 2016 があるとなんか躊躇するよね、何なんだろうこの商法は。大嫌い。

C# WPF で BitmapImage (BitmapSource) のピクセルにアクセスし書き換える方法

BitmapImage (BitmapSource) のピクセルにアクセスし書き換える方法

例として、コントラストを変える処理を紹介する。

BitmapSource ApplyContrast(BitmapSource image, double contrast)
{
    if (contrast == 0) return image;
    var bitmap = new FormatConvertedBitmap(image, PixelFormats.Gray8, null, 0);
    int width = bitmap.PixelWidth;
    int height = bitmap.PixelHeight;
    byte[] pixcels = new byte[width * height];
    int stride = (width * bitmap.Format.BitsPerPixel + 7) / 8;
    bitmap.CopyPixels(pixcels, stride, 0);
    var offset = 256 * contrast;
    for (int x = 0; x < pixcels.Length; x++)
    {
        pixcels[x] = (byte)Math.Min(Math.Max(pixcels[x] * (1 + contrast) - offset, 0), 255);
    }
    return BitmapSource.Create(width, height, 96, 96, PixelFormats.Gray8, null, pixcels, stride);
}

そんなに早くないから大量の処理には向かないよ

Portable版 Visual Studio Code (VSCode)における Open with Codeの追加方法 (Windows)

Portable版 VS CodeC:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe に展開したとする。 このままでは右クリックしたときの便利な設定を使えないので、手動でレジストリに追加する。

ファイルを右クリックしたときに有効になる設定

  • HKEY_CLASSES_ROOT*\shell\Open with Code
    既定に Edit with Code
    Icon 文字列に C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe,0
  • HKEY_CLASSES_ROOT*\shell\Open with Code\command 既定に "C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe" "%1"
    または、C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe "%W" "%1"

フォルダを右クリックしたときに有効になる設定

  • HKEY_CLASSES_ROOT\Directory\shell\VSCode
    既定に Open with Code
    Icon文字列に C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe,0
  • HKEY_CLASSES_ROOT\Directory\shell\VSCode\command
    既定に "C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe" "%1"

フォルダ内の空白部分を右クリックしたときに有効になる設定

  • HKEY_CLASSES_ROOT\Directory\Background\shell\VSCode
    既定に Open with Code
    Icon文字列に C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe,0
  • HKEY_CLASSES_ROOT\Directory\Background\shell\VSCode\command
    既定に "C:\Users\Masahiro\OneDrive\Software\VSCode\Code.exe" "%V"

%1 は1個目の引数、%V はそのファイルのフルパス、%W は親フォルダのフルパス が帰ってくるらしい。 qiita.com

ファイル単体を開きたい場合の引数は %1 、ファイルをフォルダ内で開きたい場合の引数は "%W" "%1" とするとよいだろう。

Anaconda updateでのエラー

conda update -all

で最後に

Preparing transaction: done
Verifying transaction: done
Executing transaction: | DEBUG menuinst_win32:__init__(196): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\%username%\Anaconda3', env_name: 'None', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(320): Shortcut cmd is C:\Users\%username%\Anaconda3\python.exe, args are ['C:\\Users\\%username%\\Anaconda3\\cwp.py', 'C:\\Users\\%username%\\Anaconda3', 'C:\\Users\\%username%\\Anaconda3\\python.exe', 'C:\\Users\\%username%\\Anaconda3\\Scripts\\jupyter-notebook-script.py', '%USERPROFILE%']
/ DEBUG menuinst_win32:__init__(196): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\%username%\Anaconda3', env_name: 'None', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(320): Shortcut cmd is C:\Users\%username%\Anaconda3\python.exe, args are ['C:\\Users\\%username%\\Anaconda3\\cwp.py', 'C:\\Users\\%username%\\Anaconda3', 'C:\\Users\\%username%\\Anaconda3\\python.exe', 'C:\\Users\\%username%\\Anaconda3\\Scripts\\jupyter-notebook-script.py', '%USERPROFILE%']
done

というエラーが出るのはなぜだろう

Slackのあるチャンネルの投稿を全て消すpythonコード

import time
from slackclient import SlackClient
slack_client = SlackClient('****-************-************-************-********************************')
target_channel ="channel"

def list_channels():
    channels_call = slack_client.api_call("channels.list")
    if channels_call.get('ok'):
        return channels_call['channels']
    return None

def channel_info(channel_id):
    channel_info = slack_client.api_call("channels.info", channel=channel_id)
    if channel_info:
        return channel_info['channel']
    return None

if __name__ == '__main__':
    channels = list_channels()
    if channels:
        for channel in channels:
            print(channel['name'])
            if channel['name'] != target_channel:
                continue            
            while True:
                detailed_info = channel_info(channel['id'])
                if not detailed_info['latest']:
                    break                
                message_ts = detailed_info['latest']['ts']
                slack_client.api_call("chat.delete", channel=channel['id'], ts=message_ts)
                time.sleep(1)
    else:
        print("Unable to authenticate.")

削除は出来るが、Total messagesの数は減らない。

Appleのアカウント(AppleID)が使用不可になりかけた話

AppleIDって、秘密の質問を完全に忘れてしまっても、クレカの登録があれば、クレカの番号でも認証できる。期限切れでも大丈夫。

OKIのプリンターでトナーの使う量を減らす(節約する)

OKI C811の場合

f:id:onsanai:20180613144845p:plain:w400

ログイン -> 管理者設定 -> 印刷設定 -> トナーセーブ -> トナーセーブ量 -> やや多い

選択肢は オフ・少ない・やや多い・多いの4つある

OKI B841の場合

f:id:onsanai:20180613145334p:plain:w400

ログイン -> プリンタ -> 印刷メニュー -> 印刷品質 -> トナーセーブモード -> オン

選択肢はユウコウ・ムコウの2通り

ちなみに初期パスワードは「aaaaaa」

WindowsでVPNを使うために必須の機能 RAS 接続マネージャー管理キット (CMAK)

今まで使えていたVPNが突然使えなくなった。

ユーザー は終了した  という接続をダイヤルしました。終了時に戻された理由コードは 829 です。

が出てVPNが接続できなくなったが、原因は Windowsの機能の有効化または無効化で

RAS 接続マネージャー管理キット (CMAK)

をオフにしたのが原因だった。オンにして再起動でVPNが使えるようになった。

ツイッターで検索したときにキーボードショートカットで「j、k」でツイートを選択したときにツイート内容が隠れるバグ

ツイッター公式には、ホーム画面や検索画面でキーボードショートカットを使うことが出来る。どういうショートカットか有効かは「?」を画面で押してみると良い。

f:id:onsanai:20180610014929p:plain:w500

ホーム画面では、このショートカットで次のツイートを表示する「j」前のツイートを表示する「k」はよく働いている。しかし、検索画面でこの機能を使うと、どういう内容で検索したかというバーが邪魔をし、選択したツイートが隠れてしまうと言うバグが存在する。この1年ほどこのバグが修正されていないのだけれど、だれか解決方法知っている人はいませんか?

Windows10でシステムの冷却ポリシーや最大のプロセッサの状態を表示させる

ascii.jp

この内容はWindows10でも有効である。

Surface Pro 3 のOSのアップデートをすると、以前有効にした電源の詳細設定の項目がなくなってしまう。上記の記事を参考に、以下の項目の Attributes キーを作成し、 DWORD2 を追加した。

  • 最大のプロセッサの状態 bc5038f7-23e0-4960-96da-33abaf5935ec
  • システムの冷却ポリシー 94D3A615-A899-4AC5-AE2B-E4D8F634367F

冷却ポリシーは、ざっくり言えばファンの挙動を変えてくれる。

f:id:onsanai:20180528100303p:plain

表示されましたね。

Windows 10 で 3Dオブジェクトフォルダを削除する

アップグレードのたびにフォルダが作成されるのがウザいので、レジストリから削除するスクリプトを作った。 delete_3Dobj.reg とでもして管理者権限で実行されたし。

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{24ad3ad4-a569-4530-98e1-ab02f9417aa8}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{d3162b92-9365-467a-956b-92703aca08af}]

デスクトップ {B4BFCC3A-DB2C-424C-B029-7FE99A87C641} ダウンロード {088e3905-0323-4b02-9826-5d99428e115f}

は残したいので入れず。

全部消す場合は以下のように。上から順に3Dオブジェクト ドキュメント 音楽 ピクチャー ビデオ デスクトップ ダウンロードです。

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{24ad3ad4-a569-4530-98e1-ab02f9417aa8}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{d3162b92-9365-467a-956b-92703aca08af}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{088e3905-0323-4b02-9826-5d99428e115f}]

参照

blog.yuizi.com

Windows 10 Fall Creators Updateにて現れた 3Dオブジェクトフォルダを削除する – 友蔵保管庫

Geant4で原子核乾板 (10の12乗チャンネル) を実装した

ミクロンの空間分解能を持ちながら、ミリメートルからメートルのサイズを持つ放射線検出器は原子核乾板以外に存在しない。通常、チャンネル数はある特定の数になるが、原子核乾板の場合はそういう概念はないに近い。1平方センチあたり10の14乗を程度チャンネル数が存在するとみなしてもよい。

高エネルギー粒子をシミュレーションするときは、乾板の表面に入ってから出ていくまでを直線と仮定して差し支えないが、低エネルギー粒子の飛跡をシミュレーションで再現しようとするときは、PhysicsListが低エネルギー側でどの程度現実の物理を反映しているかどうかは別にして、それなりに細かいStepで飛跡の位置情報を出力したいと誰しも思うだろう。

Geant4でこのような検出器を実装するには、 G4PVReplica という機能を使う。

G4PVReplicaG4VPhysicalVolume から継承されているクラスで、先に作った箱(例えば G4Box)をある方向に分割する機能である。X軸、Y軸、Z軸の3回分割を繰り返せば、細かい要素に箱を区切ることができる。シミュレーションしたい内容に応じて、細かさは調整すればよい。 コメントで指摘があったとおり、最小要素(Elmt)を四角柱(Stick)に詰め、それを平面に伸びる四角柱(Srfc)に詰め、さらに箱(Box)に詰めている、という考え方の方が分かりやすい。

次の例では、簡単のために一辺100ミリメートルの立方体を、一辺10ミクロンの立方体で区切る。計10の12乗のチャンネル数がGeant4にできていることになる。

G4double leng_EmulsionBox = 100.0*mm;     // X-full-length of emulsion box 
G4double leng_EmulsionElmt = 0.01*mm;     // X-full-length of emulsion element
G4int nDiv = std::round(leng_EmulsionBox / leng_EmulsionElmt);

//Emulsionを格納するBOX
auto* solid_EmulsionBox =
    new G4Box("Solid_EmulsionBox", leng_EmulsionBox / 2.0, leng_EmulsionBox / 2.0, leng_EmulsionBox / 2.0);
auto* materi_EmulsionBox = materi_Man->FindOrBuildMaterial("G4_AIR");
auto* logVol_EmulsionBox =
    new G4LogicalVolume(solid_EmulsionBox, materi_EmulsionBox, "LogVol_EmulsionBox", 0, 0, 0);

//XYに伸びる四角柱(平面)
auto* solid_EmulsionSrfc =
    new G4Box("Solid_EmulsionSrfc", leng_EmulsionBox / 2.0, leng_EmulsionBox / 2.0, leng_EmulsionElmt / 2.0);
auto* materi_EmulsionSrfc = materi_Man->FindOrBuildMaterial("G4_AIR");
auto* logVol_EmulsionSrfc =
    new G4LogicalVolume(solid_EmulsionSrfc, materi_EmulsionSrfc, "LogVol_EmulsionSrfc", 0, 0, 0);
new G4PVReplica("PhysVol_EmulsionSrfc", logVol_EmulsionSrfc, logVol_EmulsionBox, kZAxis,
    nDiv, leng_EmulsionElmt);

//X方向に伸びる四角柱(棒)
auto* solid_EmulsionStick =
    new G4Box("Solid_EmulsionStick", leng_EmulsionBox / 2.0, leng_EmulsionElmt / 2.0, leng_EmulsionElmt / 2.0);
auto* materi_EmulsionStick = materi_Man->FindOrBuildMaterial("G4_AIR");
auto* logVol_EmulsionStick =
    new G4LogicalVolume(solid_EmulsionStick, materi_EmulsionStick, "LogVol_EmulsionStick", 0, 0, 0);
new G4PVReplica("PhysVol_EmulsionStick", logVol_EmulsionStick, logVol_EmulsionSrfc, kYAxis,
    nDiv, leng_EmulsionElmt);

//最小単位 (Element)
auto* solid_EmulsionElmt =
    new G4Box("Solid_EmulsionElmt", leng_EmulsionElmt / 2.0, leng_EmulsionElmt / 2.0, leng_EmulsionElmt / 2.0);
auto* materi_EmulsionElmt = materi_Man->FindOrBuildMaterial("EmulsionE373");
auto* logVol_EmulsionElmt =
    new G4LogicalVolume(solid_EmulsionElmt, materi_EmulsionElmt, "LogVol_EmulsionElmt", 0, 0, 0);
new G4PVReplica("PhysVol_EmulsionElmt", logVol_EmulsionElmt, logVol_EmulsionStick, kXAxis,
    nDiv, leng_EmulsionElmt);

auto threeVect_LogV = G4ThreeVector(0, 0, 0);
auto trans3D_LogV = G4Transform3D(G4RotationMatrix(), threeVect_LogV);
new G4PVPlacement(trans3D_LogV, "Emulsion", logVol_EmulsionBox, physVol_World, false, 0);

こういう使い方は、Geant4の開発者が想定する使用方法ではないと思うが、大丈夫ですか? (エラい人へ)

参考文献

https://wiki.kek.jp/display/geant4/Geant4+Japanese+Tutorial+for+Detector+Simulation+2017