What I found

よわよわセキュリティエンジニアの落書き

plotlyでグラフを描いてみた

これまではpythonでグラフを書くときにはmatplotlibを使っていたのですが,plotlyというライブラリが良さそうなので少し使ってみました.

plotly.com

Sample graph

試しにsin, cosを出力するグラフを書いてみました.気が向いたらもう少しいろんなグラフを作ってみようと思います.

f:id:im2nnn:20211211134840p:plain
sin, cos

Sample code

import plotly.express as px
import numpy as np
import pandas as pd

pd.options.plotting.backend = "plotly"

x = np.linspace(start=0, stop=10, num=101)

df_exp = pd.DataFrame(dict(x=x, y=np.cos(x), func="cos"))
df_sin = pd.DataFrame(dict(x=x, y=np.sin(x), func="sin"))
df = pd.concat([df_exp, df_sin])

fig = px.line(data_frame=df, x="x", y="y", color="func", markers=True)
fig.show()

Powershellで再生デバイスを切り替える

概要

AudioDeviceCmdletsというPowershellでAudioDeviceを操作するためのModuleを使って,GUIではなくPowershellから再生デバイスを変更できるようにします.

手順

  1. Module AudioDeviceCmdlets のインストール.管理者権限のpowershellで実行します.

     ❯ Install-Module -Name AudioDeviceCmdlets -V -Force
    

    -Forceオプションなしだと自分の環境だと失敗しました.原因はよくわかっていませんがインストールがスキップされてしまいます.

      ❯ Install-Module -Name AudioDeviceCmdlets -V
     ...
     VERBOSE: The specified Location is 'https://www.powershellgallery.com/api/v2' and PackageManagementProvider is 'NuGet'.
     VERBOSE: Searching repository 'https://www.powershellgallery.com/api/v2/FindPackagesById()?id='AudioDeviceCmdlets'' for ''.
     VERBOSE: Total package yield:'1' for the specified package 'AudioDeviceCmdlets'.
     VERBOSE: Skipping installed module AudioDeviceCmdlets 3.0.0.4.
    
  2. AudioDeviceCmdlets のインポート

    インストールしただけではまだ使えないのでインポートします.Get-Moduleコマンドを叩いた時にAudioDeviceCmdletsがあれば,インポートに成功しています.

    # import module
    ❯ Import-Module AudioDeviceCmdlets
    
    # check module
    ❯ Get-Module
    
    ModuleType Version    PreRelease Name                                ExportedCommands
    ---------- -------    ---------- ----                                ----------------
    Binary     3.0.0.4               AudioDeviceCmdlets                  {Get-AudioDevice, Set-AudioDevice, Write-AudioDevice}
    ...
    
  3. AudioDeviceのリストを取得する.

    インポートに成功したら各種Cmdletsが使えるようになるので,実際にAudioDeviceのリストを取得します. 使うCmdletsはGet-AudioDevice -Listです.

    こんな感じに接続しているデバイスの情報を取得できます.

     ❯ Get-AudioDevice -List
    
     Index   : 1
     Default : False
     Type    : Playback
     Name    : Speakers (Realtek(R) Audio)
     ID      : {0.0.0.00000000}.{52736375-a7ca-fdf8-3b5d-9218beaab35a}
     Device  : CoreAudioApi.MMDevice
     ...
    
  4. AudioDeviceを切り替える

    先ほど取得した情報をもとにSet-AudioDeviceを使って,デバイスを切り替えます.今回はindexをもとに切り替えます.

     ❯ Set-AudioDevice -Index 3
    

    コマンド実行後,再生デバイスが切り替わっているはずです.

windows11でApple Magic Trackpad 3 を使う

概要

デスクトップでもトラックパッドを使いたくなってWindows対応製品を探してみたが,ぱっとするものがなかったのでApple Magic Trackpad 3(現行のやつ) を買ってみた.

導入に少しだけ手間取ったので備忘録として手順を残しておく.

手順

  1. driverのダウンロード

    https://github.com/imbushuo/mac-precision-touchpad から最新版のReleases(Drivers-amd64-ReleaseMSSigned.zip) をダウンロードして展開する.

    f:id:im2nnn:20211207125019p:plain
    zip展開後のディレクトリ内容

  2. driverのインストール

    windows 10以前ではドライバを手動インストールする場合に,infファイルを右クリックして「インストール」を選択できたらしいのだが,自分の環境(windows 11)では,クリックしても「インストール」の項目がなかったので管理者権限のPowerShellからインストールを実行した.

    # <EXTRACTED_DRIVER_DIR_PATH>は各自の環境に合わせて書き換える必要あり
    ❯ Get-ChildItem "<EXTRACTED_DRIVER_DIR_PATH>" -Recurse -Filter "*inf" | ForEach-Object { PNPUtil.exe /add-driver $_.FullName /install }
    

    この時点でPCとUSB接続すると,ジェスチャー含め操作可能になっている.

  3. bluetooth接続

    普通のBluetoothバイスを追加するときの手順と同じ.

    Settings -> Bluetooth & devices -> Add device

    Magic TrackpadにペアリングモードはないのでWindows側の設定だけで十分.もし"Add device"を実行しても,Magic Trackpadが認識されない場合,Trackpadの電源をつけなおしてみると認識されるかも.

    f:id:im2nnn:20211207125148p:plain
    Bluetooth設定画面

bitFlyer Lightning API - "Invalid signature"の原因と解決方法

概要

bitFlyer Lightning APIを使って,botを書いていた時に,Invalid signature Errorが発生して少し解決に手間取ったのでここに書いておきます. 今回の自分の場合は,認証が必要なPrivate APIを使ったときに,認証が通らず以下のようなエラーレスポンスが返ってくる,という状況でした.

{ status: -500, error_message: 'Invalid signature', data: null }

原因

いろいろ原因を調査してみましたが,結局,コード中のAPI secretに不備があったことが原因でした.具体的にはコピーの失敗でAPI secretの末尾がなくなっていました. しょうもない原因ですが,Invalid signature Errorが発生した場合にまず,認証情報を確認してみると解決するかもしれません.

解決策

コード内部のAPI secretをしっかりと確認して正確に使用する.