Deffarm’s blog

底辺レベルの英会話をコツコツと...

てst

curl -X POST "http://>:5601/api/console/proxy?path=_search&method=POST" \ -H "Content-Type: application/json" \ -H "kbn-xsrf: true" \ -d '{ "query": { "bool": { "must": [ { "match": { "process.name": "指定したプロセス名" } }, { "match": { "process.pid": "12345" } }, { "match": { "host.hostname": "指定したホスト名" } } ] } }, "size": 50, "sort": [ { "@timestamp": { "order": "desc" } } ] }'

''' import requests import json

Kibana APIエンドポイント

kibana_url = "http://>:5601/api/console/proxy?path=_search&method=POST"

認証情報

username = "your_username" password = "your_password"

ヘッダー情報

headers = { "Content-Type": "application/json", "kbn-xsrf": "true" # Kibana API利用時に必須 }

クエリ

query = { "query": { "bool": { "must": [ {"match": {"process.name": "指定したプロセス名"}}, {"term": {"process.pid": 12345}}, # 数値はtermを推奨 {"match": {"host.hostname": "指定したホスト名"}} ] } }, "size": 50, "sort": [ {"@timestamp": {"order": "desc"}} ] }

リクエストを送信

try: response = requests.post( kibana_url, headers=headers, auth=(username, password), # 認証情報を指定 data=json.dumps(query) )

# ステータスコードの確認
if response.status_code == 200:
    print("データ取得成功!")
    result = response.json()  # レスポンスをJSON形式で取得
    hits = result.get('hits', {}).get('hits', [])

    for hit in hits:
        print(f"Timestamp: {hit['_source']['@timestamp']}")
        print(f"Process Name: {hit['_source']['process']['name']}")
        print(f"PID: {hit['_source']['process']['pid']}")
        print(f"Hostname: {hit['_source']['host']['hostname']}")
        print("---")
else:
    print(f"エラー: {response.status_code}, {response.text}")

except Exception as e: print(f"リクエスト中にエラーが発生しました: {e}") '''

完成版

import requests
import re
from collections import Counter
import tkinter as tk
from tkinter import filedialog, messagebox

# 投稿を取得する関数
def fetch_posts(mattermost_url, access_token, channel_id):
    headers = {
        "Authorization": f"Bearer {access_token}"
    }

    posts = []
    page = 0
    per_page = 50  # 1ページあたりの投稿数(最大200)

    while True:
        url = f"{mattermost_url}/api/v4/channels/{channel_id}/posts"
        params = {
            "page": page,
            "per_page": per_page
        }
        
        # GETリクエストを送信
        response = requests.get(url, headers=headers, params=params)
        
        if response.status_code != 200:
            raise Exception(f"APIリクエスト失敗: {response.status_code}, {response.text}")

        data = response.json()
        order = data.get('order', [])  # 投稿のIDリスト
        if not order:  # 投稿がない場合は終了
            break

        for post_id in order:
            posts.append(data['posts'][post_id])

        page += 1  # 次のページへ

    return posts

# `command=`に続く部分を抽出して出現回数を計算し、ファイルに保存する関数
def save_commands_to_file(posts, file_path):
    pattern = r"command=(.+)"  # 正規表現: `command=`の後に続く全ての文字を抽出

    commands = []
    for post in posts:
        message = post.get('message', '')  # 投稿の内容
        match = re.search(pattern, message)
        if match:
            commands.append(match.group(1))  # `command=`に続く部分を取得

    # 出現回数をカウント
    command_counts = Counter(commands)

    # ファイルに保存
    with open(file_path, 'w', encoding='utf-8') as file:
        for command, count in command_counts.items():
            file.write(f"{command} (出現回数: {count})\n")

# GUIのメイン処理
def run_gui():
    def execute():
        mattermost_url = url_entry.get().strip()
        access_token = token_entry.get().strip()
        channel_id = channel_entry.get().strip()
        
        if not (mattermost_url and access_token and channel_id):
            messagebox.showerror("エラー", "すべてのフィールドを入力してください")
            return

        try:
            posts = fetch_posts(mattermost_url, access_token, channel_id)
            file_path = filedialog.asksaveasfilename(
                defaultextension=".txt",
                filetypes=[("Text files", "*.txt")],
                title="保存先を選択"
            )
            if not file_path:
                return

            save_commands_to_file(posts, file_path)
            messagebox.showinfo("成功", f"出力が完了しました!\nファイル: {file_path}")
        except Exception as e:
            messagebox.showerror("エラー", f"エラーが発生しました:\n{e}")

    # GUIの設定
    root = tk.Tk()
    root.title("Mattermost Command Extractor")

    tk.Label(root, text="Mattermost URL:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
    url_entry = tk.Entry(root, width=50)
    url_entry.grid(row=0, column=1, padx=5, pady=5)

    tk.Label(root, text="API Token:").grid(row=1, column=0, padx=5, pady=5, sticky="e")
    token_entry = tk.Entry(root, width=50, show="*")
    token_entry.grid(row=1, column=1, padx=5, pady=5)

    tk.Label(root, text="Channel ID:").grid(row=2, column=0, padx=5, pady=5, sticky="e")
    channel_entry = tk.Entry(root, width=50)
    channel_entry.grid(row=2, column=1, padx=5, pady=5)

    tk.Button(root, text="実行", command=execute).grid(row=3, column=0, columnspan=2, pady=10)

    root.mainloop()

# メイン処理
if __name__ == "__main__":
    run_gui()

機能の説明

  • GUI構築 (tkinter)
    • tkinterを使用して、MattermostのURL、APIトークン、チャンネルIDを入力するGUIを作成しました。
    • 保存先を選択する際にfiledialogを利用しています。 出現回数のカウント
    • collections.Counterを使って、各command=の出現回数をカウントします。
    • Counterの結果をファイルに書き出す際には、コマンドと出現回数を一行ごとに保存します。

      ファイル保存

  • 実行後、出力ファイルの保存先をユーザーが指定できるようにしています。

関数2

  • 使用回数が少ない英語をランダムに抽出し、それに対応する日本語を表示するためには、まずC列で最小値を持つ行を特定し、その行から英語をランダムに選びます。

  • ここでは、使用回数が最も少ない行を抽出し、そこから英語と対応する日本語を表示するための関数を一つにまとめます。

  • D2セル (使用回数が少ない英語をランダムに抽出):

=INDEX(A:A, SMALL(IF(C:C=MIN(C:C), ROW(C:C)-ROW(C$2)+1), RANDBETWEEN(1, COUNTIF(C:C, MIN(C:C)))))
  • D3セル (D2セルに対応する日本語を表示):
=INDEX(B:B, MATCH(D2, A:A, 0))
  • 解説:
  • D2セルの関数:

    • MIN(C:C) でC列の最小値(使用回数が最も少ない回数)を取得します。
    • IF(C:C=MIN(C:C), ROW(C:C)-ROW(C$2)+1) は、C列で使用回数が最も少ない行番号を取得します(最初のデータがC2セルにあると仮定)
    • RANDBETWEEN(1, COUNTIF(C:C, MIN(C:C))) は、使用回数が最も少ない値を持つ行の中からランダムに1行を選びます。
    • INDEX(A:A, ...) で、その行の英語をA列から抽出します。
  • D3セルの関数:
    • MATCH(D2, A:A, 0) で、D2セルの英語がA列のどこにあるかを探します。
    • その行に対応するB列の日本語を INDEX(B:B, ...) で取得します。
    • この関数で、C列の使用回数が少ない英単語と、その隣にある日本語をランダムに抽出して表示できます。

マクロ

Dim nextRun As Date ' マクロの次回実行時間を保持する
Dim selectedSheet As Worksheet ' 使用するシートを保持

' スタートボタン1に割り当てるマクロ
Sub StartMacro1()
    ' シートを設定 (Sheet1)
    Set selectedSheet = ThisWorkbook.Sheets("Sheet1")
    ' マクロをすぐに実行して、その後2時間ごとに繰り返し実行
    Call ShowMeaning
End Sub

' スタートボタン2に割り当てるマクロ
Sub StartMacro2()
    ' シートを設定 (Sheet2)
    Set selectedSheet = ThisWorkbook.Sheets("Sheet2")
    ' マクロをすぐに実行して、その後2時間ごとに繰り返し実行
    Call ShowMeaning
End Sub

' スタートボタン3に割り当てるマクロ
Sub StartMacro3()
    ' シートを設定 (Sheet3)
    Set selectedSheet = ThisWorkbook.Sheets("Sheet3")
    ' マクロをすぐに実行して、その後2時間ごとに繰り返し実行
    Call ShowMeaning
End Sub

' ストップボタンに割り当てるマクロ
Sub StopMacro()
    ' 次のスケジュールされている実行をキャンセル
    On Error Resume Next
    Application.OnTime nextRun, "ShowMeaning", , False
    On Error GoTo 0
    MsgBox "マクロが停止されました。"
End Sub

' 意味を表示し、2時間ごとに実行するメインマクロ
Sub ShowMeaning()
    Dim engWord As String
    Dim japWord As String
    Dim foundCell As Range
    
    ' D2の英語を取得
    engWord = selectedSheet.Range("D2").Value
    
    ' A列からD2に表示された英語を探す
    Set foundCell = selectedSheet.Range("A:A").Find(What:=engWord, LookIn:=xlValues, LookAt:=xlWhole)
    
    ' 英語が見つかった場合
    If Not foundCell Is Nothing Then
        ' 対応する日本語を取得
        japWord = selectedSheet.Cells(foundCell.Row, 2).Value
        
        ' 英語を使って「~はどういう意味ですか?」と表示
        MsgBox engWord & " はどういう意味ですか?"
        
        ' 1分後に正解を表示
        Application.OnTime Now + TimeValue("00:01:00"), "'ShowAnswer """ & japWord & """'"
        
        ' 対応するC列の値を+1
        selectedSheet.Cells(foundCell.Row, 3).Value = selectedSheet.Cells(foundCell.Row, 3).Value + 1
    Else
        MsgBox "該当する英語が見つかりませんでした。"
    End If
    
    ' 2時間後にこのマクロを再実行
    nextRun = Now + TimeValue("02:00:00")
    Application.OnTime nextRun, "ShowMeaning"
End Sub

' 正解を日本語で表示するサブマクロ
Sub ShowAnswer(japWord As String)
    ' 正解を日本語で表示
    MsgBox "正解は " & japWord & " です。"
End Sub
  • ExcelのVBAでは、Application.OnTimeメソッドを使って指定した時間にマクロを実行できます。
  • このとき、Application.OnTimeの第2引数にはサブプロシージャの名前を文字列として渡す必要があります。
  • 引数を持たないマクロの場合、サブプロシージャ名だけを文字列で指定すれば実行できます。

  • しかし、マクロに引数を渡したい場合には、次のように引数を含めたプロシージャ呼び出しを文字列として構築し、それをApplication.OnTimeに渡す必要があります。以下の点で違いがあります。

  • 引数なしのマクロ (ShowMeaning):

Application.OnTime nextRun, "ShowMeaning"
  • この場合、ShowMeaningという名前のサブプロシージャがそのまま呼び出されます。ShowMeaningは引数を取らないため、この形で問題ありません。引数を渡さないサブプロシージャの場合、名前だけで実行可能です。

  • 引数ありのマクロの場合:

    • 例えば、ShowMeaningが引数を受け取るサブプロシージャであった場合、以下のようにする必要があります。
Application.OnTime nextRun, "'ShowMeaning """ & 引数 & """'"
  • 上記のように、'で囲んだ形で引数を含めた文字列を作成し、それをApplication.OnTimeに渡します。この方法では、文字列として構築されたサブプロシージャ呼び出しが実行されます。
    • なぜ引数なしで実行できるのか:
      • Application.OnTimeは、文字列形式でサブプロシージャの名前を指定するため、引数のないプロシージャなら単に名前を渡せばよいからです。
      • 引数がある場合は、そのプロシージャを引数込みの完全な形式で文字列として指定し、実行される必要があります。
      • したがって、ShowMeaningが引数を取らない限り、"ShowMeaning"とサブプロシージャの名前だけでOnTimeに渡して実行できます。

â– 

スタートボタンとストップボタンを付けて、VBAマクロの実行や停止をコントロールするためには、Excelの「フォームコントロール」機能を使います。具体的には、ボタンを追加し、そのボタンに対応するマクロを設定します。以下にその手順と、必要なコードを説明します。

手順 1: Excelにボタンを追加する 「開発」タブを表示:

「ファイル」→「オプション」→「リボンのユーザー設定」→「開発」をチェックし、「OK」をクリックして「開発」タブを表示します。 フォームコントロールのボタンを追加:

「開発」タブを開き、「挿入」→「フォームコントロール」→「ボタン」を選択します。
シート上にボタンを配置します。ボタンのラベルは「スタート」や「ストップ」に変更できます。
ボタンにマクロを割り当てる:

ボタンを右クリックして「マクロの登録」を選び、以下のマクロを対応するボタンに設定します。
手順 2: VBAコードの準備
スタートボタンを押すと2時間ごとにマクロが実行され、ストップボタンを押すとその実行が停止するようにします。

修正したVBAコード:

Dim nextRun As Date ' マクロの次回実行時間を保持する

' スタートボタンに割り当てるマクロ
Sub StartMacro()
    ' マクロをすぐに実行して、その後2時間ごとに繰り返し実行
    Call ShowMeaning
End Sub

' ストップボタンに割り当てるマクロ
Sub StopMacro()
    ' 次のスケジュールされている実行をキャンセル
    On Error Resume Next
    Application.OnTime nextRun, "ShowMeaning", , False
    On Error GoTo 0
    MsgBox "マクロが停止されました。"
End Sub

' 意味を表示し、2時間ごとに実行するメインマクロ
Sub ShowMeaning()
    Dim ws As Worksheet
    Dim engWord As String
    Dim japWord As String
    Dim foundCell As Range
    
    ' 使用するシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 必要に応じてシート名を変更
    
    ' D2の英語を取得
    engWord = ws.Range("D2").Value
    
    ' A列からD2に表示された英語を探す
    Set foundCell = ws.Range("A:A").Find(What:=engWord, LookIn:=xlValues, LookAt:=xlWhole)
    
    ' 英語が見つかった場合
    If Not foundCell Is Nothing Then
        ' 対応する日本語を取得
        japWord = ws.Cells(foundCell.Row, 2).Value
        
        ' 英語を使って「~はどういう意味ですか?」と表示
        MsgBox engWord & " はどういう意味ですか?"
        
        ' 1分後に正解を表示
        Application.OnTime Now + TimeValue("00:01:00"), "'ShowAnswer """ & japWord & """'"
        
        ' 対応するC列の値を+1
        ws.Cells(foundCell.Row, 3).Value = ws.Cells(foundCell.Row, 3).Value + 1
    Else
        MsgBox "該当する英語が見つかりませんでした。"
    End If
    
    ' 2時間後にこのマクロを再実行
    nextRun = Now + TimeValue("02:00:00")
    Application.OnTime nextRun, "ShowMeaning"
End Sub

' 正解を日本語で表示するサブマクロ
Sub ShowAnswer(japWord As String)
    ' 正解を日本語で表示
    MsgBox "正解は " & japWord & " です。"
End Sub

手順 3: ボタンにマクロを割り当て
スタートボタンに「StartMacro」を割り当てます。
ストップボタンに「StopMacro」を割り当てます。
説明:
StartMacro: このマクロをスタートボタンに割り当てます。ボタンを押すと、ShowMeaningマクロがすぐに実行され、その後2時間ごとに再実行されます。
StopMacro: ストップボタンに割り当てられ、このボタンを押すと次に予定されているマクロ実行がキャンセルされます。
ShowMeaning: メインの処理を行い、2時間後に再び実行されるようにスケジュールされます。
ShowAnswer: 1分後に日本語の答えを表示します。
実行方法:
スタートボタンをクリックすると、すぐに英語と日本語の表示が始まり、その後2時間ごとに自動で繰り返されます。
ストップボタンをクリックすると、次の予定されている実行がキャンセルされ、マクロの繰り返しが止まります。
これで、ボタンを使ってマクロの実行と停止を簡単にコントロールできるようになります。

英会話勉強 第3日目

言えなかった単語

  • lifting
    • 持ち上げる
      • 筋トレとかでバーベルを持ち上げるときに使える。
      • 例文:I'm power lifting
  • set and rep
    • 筋トレとかの回数とセット数
      • 回数はrepにする。
        • 例文:3 set of 10 reps.
  • cheap and expensive
    • 安い・高いはこの表現で
      • A is cheap. but, B is expensive.

雰囲気を伝えたい時

atmospere

  • 場所や状況の雰囲気に対して使う
  • 例文
    • How was your work?
      • あなたの仕事はどうだった?
    • It went well. The atmospere in the office was good.
      • よかったです。事務所の雰囲気はよかったです。

ambiance

  • ホテルやレストランなどの独特な雰囲気に使う
  • 例文
    • Did you enjoy the Hotel for tonight?
      • 今夜のホテルは楽しめた?
    • Yes,I liked the ambiance of the hotel.

vibe

  • 人の雰囲気に使う
  • He gave off positive vibes.

多い事に対する表現

違い

  • many:countable
  • much:uncountable
  • a lot of:both

when を使おうとして変になった表現

I go to the bath after I train.

数の数え方

  • 10:ten
  • 100:hundred
  • 1 000:thousand
  • 10 000:ten thousand
  • 100 000:hundred thousand
  • 1 000 000:milion

準備していた英会話

  • 英文
I can training back muscles by deadlifts.
I'll teach you how.
First, prepare a heavy barbell on the floor.
Then slowly lift up it to waist height.
Third, slowly place it on the floor.
Repeat about 8 times.

it's tired, but it was good training.
  • 日本語訳
デッドリフトで背筋を鍛えることができます。
その方法を教えます。
まず、床に重いバーベルを準備します。
そしてゆっくりと腰の高さまで引き上げます。
第三に、ゆっくりと床に置きます。
8回くらい繰り返します。

疲れましたが、良いトレーニングになりました。

英会話勉強 第2日目

質問

  • How long did it take you to think of this speech?

    応答

  • Oh,I see.
  • If I were to think about this speech,no amount of time would be enough.
  • you are smart.
  • I Know Ken Suzuki. He's smart too.
  • I'm thinking of changing my family name to Suzuki.

英会話勉強 第1日目

英会話勉強 第1日目

単語

humid

  • 意 味
    • 湿気が多い
  • 例 文
    It’s very humid today.

    humidy

  • 意 味
    • 湿度
  • 例 文
    How does humidity affect temperature in different scenarios?

    dangerous

  • 意 味
    • 危険な
  • 例 文
    The river is dangerous to cross.

    portion

  • 意 味
    • 部分
  • 例 文
    The portions in the restaurant were very small.

    exchange

  • 意 味
    • 交換
      • お金とかだけじゃなくて人に対しても使える。
  • 例 文
    We exchanged greetings.
    • 私たちはあいさつを交わし合った。

      同じように使えて違う言葉

  • hear
    • 音が自然と耳に入ってくること。
      • 山の中で草木の音や鳥の鳴き声を聞くような感じ
    • 例 文 I was surprised to hear the news. listen
    • 意識して聞くこと。
      • 音楽を聴くことなど
    • 例 文 I’m listening to music.

      時間感覚の言い方

  • from to
    • いつからいつまでの言い方(場所でも使える)
    • 例 文 I work from 9 am to 5 pm on weekdays.
  • for
    • 期間を表す
    • 例 文 I went to America for 1 week.

      how was it?

  • 意 味
    • どうだった?
  • 返し方
    • A: Not (too/so) bad = そんなに悪くはなかったよ
    • B: Great = 素晴らしかったよ
    • C: Really good = すごく良かったよ
    • D: Fun = 楽しかったよ
    • E: Good/ Okay = 良かったよ

      kind to me

  • 意 味
    • 私に親切だ
  • 例 文 He's kind to me.

    Are you と Do you

  • Do you 動詞の原形 ?
    • 相手の習慣的な行動や考えを聞く時に使うことが多い。
    • 例 文
      Do you speak English?
  • Are you 名詞または形容詞 ?
    • 相手の状態や気持ちを聞く時に使うことが多い。
      • 例 文
        Are you serious?

        ~の様だ

  • It looks like
    • 見て~の様だと感じる。
    • 例 文
      It looks like he is hungry.
    • It looks と It looks like の違い
      • look(s) + 形容詞 (great)
      • look(s) like + 名詞 (a great idea)
  • It sounds like
    • 聞いて~の様だと感じる。
    • 例 文
      You sound like mom.
  • It seems like
    • どうやら~らしい
    • 例 文
      This seems like a nice idea, but it is somehow unrealistic. (これは良いアイディアのように思えるけど、どこか非現実的な気がするね。)
    • It seems thatとの違いは?
      • It seems like ~
        • カジュアルな表現
      • It seems that ~
        • フォーマルな表現