Pixel 7a にはイヤホンジャックがなかったので Amazonで93%割引のワイヤレスイヤホンを買った話

先日、新しいスマホ Pixel 7aを買ったのですが、買ったあと、Pixel 7a にはイヤホンジャックがないことに気づいてしまいました。

そこで Amazonで検索し、評判のよかった Bawweri社のワイヤレスイヤホンを購入しました。

Bawweri社のワイヤレスイヤホン

なぜこれを選んだかというと、まずは価格(値引き率)です。Amazonの表示によると、定価 ¥26,999 のところが なんと 93%割引の1,790円!さらに、600円引きのバウチャーまで使えました。

そしてイヤーパッドが大、中、小の3種類から選択(交換)できるところです。寝ながら英語や音楽を聴きたかったので、フィット感を重視していたので。

実際に寝ながら使ってみましたが、このソフトなパッドのおかげで寝ながら聞いていても外れることはありませんでした。これなら、ランニングしながらでもまったく問題なさそうです。

ちなみに、妻がつかったところ、中サイズのパットでは少し大きく、耳からはみ出している感がつよかったので、小サイズに付け替えたところ、ジャストフィットしたようです。

なお、評価の中にはケースが少し安っぽいという話も書かれていましたが、自分からみると特にそんなことはありませんでした。(まあ、定価 が¥26,999円という目でみると、それにしては普通?という感じはありますが。)

スマホをPixel 7aに買い換えた時のデータ移行は Wi-Fi経由で行うのが簡単かも?

最近、長年使ってきた ASUS のスマホを落下させてガラスにヒビを入れてしまった為、思い切って新しいスマホ Pixel 7aに乗り換えてみました。

Pixel 7aはビックカメラで購入したのですが、その時に、通信契約も mineo から UQ mobile に変更しました。(そのおかげで本体価格の支払い 25,000円程度がほぼ0円になりました。)

Pixel 7aのSIMを差し替えるところまではビックカメラでやってくれたのですが、その後のASUSからのデータ移行については自分でやる必要があり、自宅に戻って実施しました。

最初、USBケーブル使ってASUS と Pixel 7a を直接接続しましたが、なぜか、うまくデータ移行プログラムを起動させることができませんでした。

そこで、ASUS のデータをいったんすべてGoogleの機能でクラウドにバックアップました。

その後、両方のスマホを同一の Wi-Fiに接続させることでようやくデータ移行プログラムを動かすことができました。

もし、私のように古いスマホと Pixel 7a を 直接 USBケーブルで繋いでデータを移行しようとしてうまくいかない場合には、両方のスマホを同じ Wi-Fiに接続して試してみてはどうでしょうか?

一見、直接 USBケーブルで接続した方が簡単に思えますが、実はWi-Fiでやったほうが簡単かもしれません。

データの転送はUSBケーブルの方が早いでしょうが、Wi-Fiの場合でも、私のケースでは1時間かからず 3oGBのデータを転送することができました。

Excelで複数のシートに散らばっている文字列を置換する

最初、複数のシートを選択して、普通に置換しようとしたのですがうまくいきませんでした。

そこで少し調べてみたところ、置換のオプションで以下の通り、「シート」ではなく「ブック」を指定すればいいことがわかったので、ここに記載しておきます。

検索場所としてブックを指定

以下のように「検索オプション」の「検索場所」から「ブック」を指定し置換を行うと、すべてのシートに跨がって置換処理を行なってくれます。

Excel Online 置換操作

ロードスター 15年目の車検費用

昨日、15年目の車検の為にマツダさんに車を預けてきたので、その時にかかった費用を記載しておきます。

私は毎回、マツダさんのパックdeメンテ(2年分の整備費)を利用しておりますが、その 91,520円を含めて、266,099円となりました。

以下、細かいところは省いていますが、費用の内訳です。

2024年車検費用抜粋

左側のヘッドライトがくすんできたのでクリーニングをお願いしたのと、バッテリーがそろそろ心配だったので交換してもらうことにしました。

また、今回、営業さんから停止表示灯としてパープルセイバーをお勧めされ、2,750円とそんなに高くなかったので購入してみることにしました。

川崎のソリッドスクエアでパスポートを申請してみた

横浜まで行くのが面倒なので川崎駅近くにあるソリッドスクエアの2階でパスポートの申請をしてきました。

川崎のパスポートセンターは思ったより広く、混雑が予想される年末年始にもかかわらず、9:30〜10:00の30分くらいで申請処理は完了しました。

なお、私は10年以上前に作成したパスポートの期限が切れていたので、申請時に以下のものが必要となりました。

必須
・顔写真
・戸籍謄本
・免許証などの証明書
あるとよい
・前のパスポート(期限切れ)
・マイナカード

ちなみに、戸籍謄本はマイナカードを持参していれば1階のコンビニ(ファミマ )で発行することが可能です。(このときにマイナカードのパスワード(4桁)が必要。)

また、1月4日に申請すると、最速で1月12日に受け取れるようです。

SOARで処理をパラレルに動かしてみた

最初から最後までパラレルの場合

片方が最後までいっても、もう片方の処理が終わるまでプレイブックは動き続けます。

XSOAR – プレイブック実行中1

XSOAR – プレイブック実行結果1

最後に一つに集約される場合

両方の処理が終わるまで待ち、最後の1つを実行します。

XSOAR – プレイブック実行中2

XSOAR – プレイブック実行結果2

3種類のCSVを読み込んで1つのJSONデータにするpythonをChatGPTに作成してもらった

以下の3つのファイルを1つのJSONデータにするPythonプログラムをChatGPTに作成してもらいました。

mail-src,mail-subject
aaa@yyy.com,"test ay1"
aaa@yyy.com,"test ay2"
aaa@zzz.com,"test az1"
bbb@yyy.com,"test by1"
bbb@zzz.com,"test bz1"
ccc@yyy.com,"test cy1"
ccc@zzz.com,"test cz1"

uid,mail-src
user-a,"aaa@yyy.com,aaa@zzz.com"
user-b,"bbb@yyy.com,bbb@zzz.com"
user-c,"ccc@yyy.com,ccc@zzz.com"

dest,state,category,black,pc,uid,mail
https://aaa.com:9001/aaa,pass,phishing,no,pc-a,user-a,aaa@xxx.com
https://bbb.com:9001/bbb,block,c2,yes,pc-b,user-b,bbb@xxx.com
https://ccc.com:9001/ccc,pass,c2,yes,pc-c,user-c,ccc@xxx.com

出来上がりのJSONイメージは以下の通りです。

[
  {
    "dest": "https://aaa.com:9001/aaa",
    "state": "pass",
    "category": "phishing",
    "black": "no",
    "pc": "pc-a",
    "uid": "user-a",
    "mail": "aaa@xxx.com",
    "mail-src": {
      "aaa@yyy.com": [
        "test ay1",
        "test ay2"
      ],
      "aaa@zzz.com": [
        "test az1"
      ]
    }
  },
  {
    "dest": "https://bbb.com:9001/bbb",
    "state": "block",
    "category": "c2",
    "black": "yes",
    "pc": "pc-b",
    "uid": "user-b",
    "mail": "bbb@xxx.com",
    "mail-src": {
      "bbb@yyy.com": [
        "test by1"
      ],
      "bbb@zzz.com": [
        "test bz1"
      ]
    }
  },
  {
    "dest": "https://ccc.com:9001/ccc",
    "state": "pass",
    "category": "c2",
    "black": "yes",
    "pc": "pc-c",
    "uid": "user-c",
    "mail": "ccc@xxx.com",
    "mail-src": {
      "ccc@yyy.com": [
        "test cy1"
      ],
      "ccc@zzz.com": [
        "test cz1"
      ]
    }
  }
]

そして実際にChatGPTに作成してもらった Pythonプログラムは以下の通りです。(すこし自分の環境に合わせて修正はしていますが。)

import csv
import json

# CSVファイルを読み込み、データを取得
# 
# 最初の部分では、mail_src.csv、mail_data.csv、url_data.csv という
# 3つのファイルをそれぞれ辞書形式に読み込みます。
# これにより、各ファイルのデータが辞書のリストとして取得されます。
# それぞれの辞書内には、CSVのヘッダーがキーとして使用され、
# 各行のデータがそれぞれの辞書として格納されます。

with open('mail_src.csv', 'r') as file:
    mail_src_data = list(csv.DictReader(file))
    
with open('mail_data.csv', 'r') as file:
    uid_data = list(csv.DictReader(file))

with open('url_data.csv', 'r') as file:
    dest_data = list(csv.DictReader(file))

# メールアドレスと件名をマッピングする辞書を作成
# 
# mail_src.csv ファイルの内容から、メールアドレスと件名のマッピングを
# 作成します。mail_subject_map という辞書を作成し、
# メールアドレスをキーにして、それに関連する件名をリストとして格納します。

mail_subject_map = {}
for entry in mail_src_data:
    mail = entry['mail-src']
    subject = entry['subject'].replace('\u201d', '').replace('\"', '')
    if mail in mail_subject_map:
        mail_subject_map[mail].append(subject)
    else:
        mail_subject_map[mail] = [subject]

# JSONデータを構築
#
# dest_data の情報を元にして新しい JSON データを構築します。
# 各行の情報を元に、dest_entry という辞書を作成し、'dest'、'state'、
# 'category'、'black'、'pc'、'uid'、'mail'というキーを持たせます。

json_data = []
for entry in dest_data:
    uid = entry['uid']
    mail = entry['mail']
    dest_entry = {
        'dest': entry['dest'],
        'state': entry['state'],
        'category': entry['category'],
        'black': entry['black'],
        'pc': entry['pc'],
        'uid': uid,
        'mail': mail,
        'mail-src': {}
    }
    # mail-src内のデータを整形
    #
    # 'mail-src' キーに関連する情報を整形します。
    # これは、mail_data.csv と mail_src.csv の情報を組み合わせ、
    # 指定された形式で'mail-src' キーの中身を構築するための処理です。

    if uid in [row['uid'] for row in uid_data]:
        mail_src = [x.strip() for x in next(row['mail-src'] for row in uid_data if row['uid'] == uid).split(',')]
        for src in mail_src:
            if src in mail_subject_map:
                dest_entry['mail-src'][src] = mail_subject_map[src]
    json_data.append(dest_entry)

# JSON形式に変換して出力
#
# json.dumps() を使用して json_output に JSON 形式のデータを出力します。
# これにより、json_output には指定された形式の JSON データが格納されます。
# そして、print(json_output) により、この JSON データが出力されます。

json_output = json.dumps(json_data, indent=2)
print(json_output)

人間が作るとなるとPythonに詳しい人でも数時間はかかりそうですが、ChatGPT は一瞬で作ってしまうところがすごいですね。

また、私はPython初心者なので、見たことないような関数を使われていると勉強になります。

Power Automate(クラウド)とPower Automate for Desktop(PAD)を連携させ、Power Automateから入力したデータをPAD経由で SOAR の APIに渡してみた

以前、Power Automate(クラウド)から Power Automate for Desktop にてあらかじめ作成しておいた XSOAR のインシデント作成タスクを呼び出したことがありました。

しかしその時は、Power Automate(クラウド)から何もデータを渡していなかったので今回は、Power Automate(クラウド)から入力されたデータを基にXSOAR のインシデントを作成する形でタスクを呼び出してみました。

1.Power Automate for Desktopで変数などの準備

Power Automate(クラウド)からデータを受け取る場合、Power Automate for Desktop側であらかじめ入出力変数を設定しておかなければなりません。

そこで今回は以下の2つを入力用変数として作成しました。
・Detail
・Date

作成の方法ですが、Power Automate for Desktopのフロー作成画面に入ると右ペインに「入出力変数」の設定があるので、そこから「入力」を選択します。

Power Automate for Desktop – 入出力変数設定1

すると以下のようなポップアップが表示されるので、画面に表示されている項目を入力していきます。(変数名は「Detail」を設定)

Power Automate for Desktop – 入出力変数設定2

なお、これらの項目のうち、「外部名」に設定した値が、後からPower Automate(クラウド)で設定する際に設定画面に表示されます。

同様に「Date」という変数も設定したのが以下の状態です。

Power Automate for Desktop – 入出力変数設定3

この後、実際にXSOARのAPIを実行している設定(上記画面の「Webサービスを呼び出します」)を開いて、先ほど作成した変数を下図の赤線の通り設定します。

Power Automate for Desktop -「Webサービスを呼び出します」

なお、XSOAR上では、”test %Date%”がインシデント名、”Detail”がそのインシデントを開いた時の Detail の設定項目になります。

2.Power Automate(クラウド)でフロー作成

1.のPADの設定を行いセーブしたら(!)、Power Automate(クラウド)でのフローの作成に入ります。

フロー作成画面で”Desktop”で検索をかけると「Run a flow build with Power Automate for desktop」というアクションがあるので、それを選択します。

Power Automate(クラウド)1

そしてその設定画面を開くと、下図のとおり一番上に「Desktop Flow」という項目があるので、その下のプルダウンから、先ほどPAD上で作成したフロー名(ここでは「XSOAR連携 – データ受信」)を選択します。

すると、その下にある「Advanced parameters」のプルダウンを開いた際に、先ほどPADで設定した変数(外部名)が表示されるので、それぞれチェックボックスで選択します。

Power Automate(クラウド)2

そして、それそれの変数に対して渡したいデータをテキストフィールドに書き込んでいきます。

Power Automate(クラウド)3

ここでは「XSOAR Detail」には固定文字の”TEST”そ、「XSOAR Date」にはその時の日付を設定しています。

3.Power Automate(クラウド)のフローを実行

これで準備が整ったので、先ほど作成したPower Automate(クラウド)のフローを実行します。

Power Automate(クラウド)フロー実行1

どうやらうまくいったようなので、念のため、Power Automate(クラウド)のフロー実行結果を確認してみると、ちゃんと変数が設定されて正常終了しているようでした。

Power Automate(クラウド)フロー実行2

4.XSOAR側の処理状況を確認

その後、XSOAR側で正常にインシデントが登録されているか確認してみました。

するとインシデント名のところには赤線の通り、%Date%で渡した今日の日付の入ったものが登録されていました。

XSOARコンソール1

また、そのインシデントの中を見てみると、Detail の部分には%Detail%で渡した”TEST”という文字が登録されていることも確認できました。

XSOARコンソール2

Power Automate を無料で試す方法があると聞いたので申請してみた

会社で Teams と Power Automate を利用しているのですが、自宅でもこれらを使っていろいろ自動化のテストしてみたいと思っていました。

そこでインターネットで情報を漁っていたところ、Microsoft 365 開発者プログラムに参加すれば無料で使えると聞いたので、以下のサイトから申請してみました。

1.Microsoft 365 開発者プログラムに参加し、onmicrosoft.comのアカウントを取得

Microsoft 365 開発者プログラム
https://developer.microsoft.com/en-us/microsoft-365/dev-program
Microsoft 365 Developer program top

上記画面の「Join now」から登録処理を進めます。

すると、以下の画面が表示され、左上の方に「xxx@xxx.onmicrosoft.com」というアカウントが発行されていることが確認できました。

Microsoft 365 Developer program

このonmicrosoft.comのアカウントを使うと、以下の Power Apps を無料で利用申請することができるようなります。

2.Power Appsを無料で開始する

Power Apps 無料で開始する
https://powerapps.microsoft.com/ja-jp/landing/developer-plan/

上記サイトにアクセスすると「無料で開始する」というボタンがあるので、それをクリックすると以下の画面が表示されます。

Power Apps 開発者向けプラン(Microsoft)

その後、処理をすすめると、以下の画面が表示されます。

Power Apps画面(Microsoft)

この画面の左ペインに表示されている「Power Platform」を選択することにより、 Power Automateや Teams など利用可能になります。

Power Automate を利用して Teamsのチャネルに登録されたメッセージをSlackに送信してみた

Power Automate を利用して、Teams の特定のチャンネルに投稿されたメッセージを Slack に送信する処理を作成してみました。

なお、Power Automate については、Microsoft 365 Developer Program を使ってテストを行なっています。このあたりの話は別のブログで記載したいと思います。

動作前提

Teams にて「インシデント対応」というチームの作り、その中の「一般」チャネルに何かメッセージが入力されたらそれを検知し、Slackのその内容を送信する想定です。

Microsoft Teams

フロー作成

Power Automateにてフローを作成します。全体のフローは以下の通り6ステップとなっています。

Power Automate フロー全体

単純に Teamsのメッセージを受け取って Slack に投げるだけなのでもっと少ないステップになりそうですが、HTMLをプレーンテキストに変換し、配列を文字列にし、さらに不要なカッコや改行を取り除いて Slackに送信しているのでこうなりました。

このあたりの処理は以外と難しかったので、あとでこのブログに記録の為に追記しておこうと思います。

以下、細かな処理を記載しておきます。(2023.12.3)

「変数を初期化する Teamsメッセージ」では、手前のタスクでプレーンテキスト化した Teamsのメッセージを変数 teams_array に設定しています。
なおこのときプレーンテキストが(なぜか)配列の形”[“と”]”に囲まれているので、Typeとしては Arrayとしています。

Power Automate タスク詳細1

「変数を配列から文字列にする」では replace()関数をつかって、先ほどの teams_array の中身のTypeをArray から Stringの形にし、変数 teams_string に設定しています。

Power Automate タスク詳細2

「変数を初期化する 改行コード」では、次のタスクで利用する為に改行コード”\n”を LFcode という変数に設定しています。

Power Automate タスク詳細3

最後に「メッセージの投稿」では、変数 teams_string の中の改行コード”\n”を replace()関数を使用し(空白に)置き換えています。

Power Automate タスク詳細4

動作結果

以下が Slack の general チャンネルに Power Automateからメッセージを送信した結果です。

画面上の最初の方は Teams のメッセージを受け取ってそのまま Slackに投げたので HTMLとなっていますが、最後の方ではプレーンテキスト化し、”[“や改行”¥n”を取り除いてシンプルに URLだけが表示されるようになっています。

Slack – general