セクティゴ EV認証で exeに署名する方法 Explzh利用版

昔と違ってwebから必要ファイルをダウンロードできなくなった。
わざわざカナダからUSBメディアで送付されてくる。

Safenet Authentication クライアントソフトウェア(EV スタンダード)をインストール

インストール関連 | サポート | セクティゴ・コモドSSL
ここの下のほうにダウンロードリンクがある。
インストールしたら一回PC再起動

USBトークンをPCに接続

セクティゴから送られてきたトークンUSBをPCにつなぐ。
署名するときは必須

コードサイン証明書 - 中間証明書をダウンロード

マニュアル | サポート | セクティゴ・コモドSSL
2021年6月1日以降に発行した新基準のコード証明書のEVタイプをダウンロードする

Explzhの証明書設定

ソフトウェア発行証明書に↑でダウンロードしたcrtを指定
あとは画像の通り。PC環境のよってキーコンテナはちょっと違うけどおなじようなの選んで。

最初だけ認証するときに認証パスワードを聞かれる。
3回間違えると使えなくなるので慎重に。

python pandas既存データ上書き

以下のようなコードでCSV読み込んで既存のデータに上書きして出力したい時、

combined_data = existing_data.combine_first(new_data)
だけだと、存在しない日付のデータを埋めてくれるだけ。

combined_data.update(new_data)
もやらないと上書き更新してくれないよ

print('取得開始...')
# 既存のCSVファイルを読み込む
try:
    existing_data = pd.read_csv(aOutPath, index_col=0, parse_dates=True)
    print('既存のデータを読み込みました')
except FileNotFoundError:
    print('既存のファイルが見つかりませんでした。新しいファイルを作成します。')
    existing_data = pd.DataFrame()

# 新しいデータを取得
new_data = yf.download(aCode, start=aStart, end=aEnd)

print('取得完了')

# 前日比と前日比率作成
new_data['Diff'] = new_data['Close'].diff()
new_data['DiffRate'] = new_data['Close'].pct_change() * 100

# 既存のデータと新しいデータを結合(上書き)
combined_data = existing_data.combine_first(new_data)
combined_data.update(new_data)

楽天証券で外貨と円の変換方法

変換

  • メニューから「外国為替」を選択


  • ドル円なら、米ドル取引(リアルタイム)の買い/売りをクリック 預り金か保証金かを選ぶ


  • 金額指定するか、全部を選んで「確認」をクリック


出金

普通に 入出金・振替>出金 を選ぶ。
換金したばかりだと当日出金には反映されてないので「指定日出金」を使う必要あり

\と/は割り算の演算子ですが、VBAではその使い分けに違いがあります

\と/は割り算の演算子ですが、VBAではその使い分けに違いがあります。
/ - 浮動小数点数による割り算

結果は実数になる
例: 10 / 3 => 3.3333333333333335

\ - 整数による割り算

結果は整数部分のみ
剰余は切り捨てられる
例: 10 \ 3 => 3

つまり、\は整数値の割り算に使われ、あえて小数部分を無視して整数値のみを求める場合に適しています。

.NET Frameworkで作ったDLLのエントリ(関数)を確認する方法

ILDASM(IL Disassembler)を使用する

ILDASMは、.NET Framework SDKに含まれているツールで、DLLやEXEファイルの中身を調べることができます。以下の手順で使用できます。

コマンドプロンプトを開く:

Windowsの検索バーに「cmd」と入力してコマンドプロンプトを開きます。
ILDASMを起動する:

コマンドプロンプトで以下のコマンドを実行します。

ildasm path\to\your.dll

DLLの内容を確認する:

ILDASMのウィンドウが開き、DLLの内容が表示されます。
ツリー構造を展開して、エントリポイント(関数)を確認します。

excel vba 右クリックメニューに階層付きで追加する方法

コード

Sub AddCustomMenuItem()
    Dim commandBar As CommandBar
    Dim mainMenu As CommandBarPopup
    Dim subMenu As CommandBarButton
    Dim foundMenu As Boolean
    
    ' セルの右クリックメニューを取得
    Set commandBar = Application.CommandBars("Cell")
    
    ' 既にメニューが追加されているか確認
    foundMenu = False
    For Each ctrl In commandBar.Controls
        If ctrl.Caption = "追加メニュー" Then
            foundMenu = True
            Exit For
        End If
    Next ctrl
    
    ' メニューがまだない場合は追加
    If Not foundMenu Then
        ' 親メニューを作成
        Set mainMenu = commandBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
        mainMenu.Caption = "追加メニュー"
        
        ' チャートサーフィン(コード選択必須)サブメニューを追加
        Set subMenu = mainMenu.Controls.Add(Type:=msoControlButton)
        With subMenu
            .Caption = "サブメニュー"
            .OnAction = "hogehoge_func"
        End With
    End If
End Sub

pythonからSlackに通知する

まずはこちら参照してアプリを作る
blog.systemjp.net

Webhooksを使うための準備方法

・Incoming Webhooksを有効にする:

アプリの設定ページで、「Incoming Webhooks」を選びます。
画面の指示に従って、Incoming Webhooksを「On」に切り替えます。

・Webhook URLを作成する:

「Add New Webhook to Workspace」ボタンをクリックします。
ポストしたいチャンネルを選択して、アプリにそのチャンネルへのアクセス権を付与します。
これにより、特定のチャンネルにメッセージを送信するためのWebhook URLが生成されます。

・Webhook URLをコピーする:

生成されたWebhook URLは、アプリの設定画面の「Webhook URLs for Your Workspace」セクションに表示されます。このURLをコピーして、安全に保存してください。

pythonコード

def send_slack(message):
    try:
        webhook_url = 'https://hooks.slack.com/services/*******'
        payload = {'text': message}
        response = requests.post(webhook_url, json=payload)
        if response.status_code == 200:
            print("Slackにメッセージが送信されました。")
        else:
            print("Slackメッセージ送信失敗。")
    except Exception as e:
        print(f"Slack送信エラー: {e}")

WebRequestで失敗するようになったらTLS1.2有効にすると治るかも C#

C# いままで問題なかったプログラムで

System.IO.Stream reqStream = req.GetRequestStream(); の行で
以下エラーが出ました。

System.Security.Authentication.AuthenticationException
  HResult=0x80131501
  Message=SSPI への呼び出しに失敗しました。内部例外を参照してください。
  Source=System
  スタック トレース:
   場所 System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)

内部例外 1:
Win32Exception: 要求された関数はサポートされていません


このコード行を、WebRequest を作成する前に追加したら治りました。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Excel VBAでOpanAI apiで質問して受け取る関数

Microsoft XML, v6.0 (MSXML6) ライブラリを利用して HTTP リクエストを実行します

JsonConverter ライブラリをVBAにインポートする必要があります。このライブラリは、GitHubから「VBA-JSON」としてダウンロードできます。

Function GetOpenAIResponse(prompt As String) As String
    
    Dim json As Object
    
    Dim httpRequest As Object
    Set httpRequest = CreateObject("MSXML2.XMLHTTP")
    
    Dim url As String
    url = "https://api.openai.com/v1/chat/completions"
    
    Dim apiKey As String
    apiKey = "set api key"  ' API キーを設定してください

    ' Prompt内のダブルクォートと改行をエスケープ
    Dim safePrompt As String
    safePrompt = Replace(prompt, """", """""")  ' ダブルクォートのエスケープ
    safePrompt = Replace(safePrompt, Chr(10), "\n")  ' 改行のエスケープ
    safePrompt = Replace(safePrompt, Chr(13), "")  ' キャリッジリターンの削除

    ' JSON Bodyの作成
    Dim jsonBody As String
'    jsonBody = "{""model"":""gpt-3.5-turbo-0125"",""messages"":[{""role"":""system"",""content"":""You are a friendly assistant designed to output a string of answers.""},{""role"":""user"",""content"":""" & safePrompt & """}]}"
    jsonBody = "{""model"":""gpt-4-turbo"",""messages"":[{""role"":""system"",""content"":""You are a friendly assistant designed to output a string of answers.""},{""role"":""user"",""content"":""" & safePrompt & """}]}"

    With httpRequest
        .Open "POST", url, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & apiKey
        .send jsonBody
        
        ' ステータスコードの確認
        If .Status = 200 Then
            ' JSONレスポンスのパース
            Set json = JsonConverter.ParseJson(.responseText)
            
            ' レスポンスから回答を取り出す
            Dim answer As String
            answer = json("choices")(1)("message")("content")  ' 配列のインデックスやキーはレスポンスの構造に依存します

            'MsgBox "Response: " & answer
            GetOpenAIResponse = answer
            
        Else
            Set json = JsonConverter.ParseJson(.responseText)
            Dim error_message
            error_message = json("error")("message")
        
            GetOpenAIResponse = "Error: " & .Status & " " & .statusText & "mess=" & error_message
        End If
    End With
End Function