共通テスト2025情報Ⅰといた

↓の記事を見て自分も解いてみたくなったので解いた。点数と感想のメモを残す。 satory074.hatenablog.com

情報系の大学を出ているし、仕事にしているので満点しかありえない・・・。

問題はここから: https://cdn.mainichi.jp/item/jp/etc/kyotsu-2025/images/IN1P.pdf

問1

  • 基本情報とかでみたことあるやつだ!と思いながら解いてた。
  • 7セグメントLEDは大学の講義で触ったなーと懐かしい気持ちになった。
  • しょうもない計算ミス

(18点/20点)

問2

  • 文字ばかりで一番つらい設問だった
  • レシートの方は途中混乱しつつ解いてた。
  • 千円札の問題はおもろいなーと思いつつつ、そういえば最近利用した代行の会計で1万円しか持っていなく、1万円を渡したの申し訳なかったなと言うことを思い出した

(20点/30点)

問3

  • 間違えるわけには行かない・・・

(23点/25点)

問4

  • 1発目にしらない言葉が出てきてやばいと思った。
  • 塾講師をしていた頃に箱ひげ図とかやったなー!と思い出に浸った。
  • 仕事で少しだけデータとにらめっこしていた経験が生きた

(22点/25点)

結果

83点 / 100点

さいごに

来年こそは満点を取ります。

2024年はありがとうございました。2025年はよろしくお願いいたします。

2024年振り返り。

 

今年は主に私生活と仕事の変化の年でした。

私生活では引越しを何度か行い、同棲生活を開始。

仕事は転がしAIエンジニアっぽいことをしています。

 

どちらも楽しく過ごしています。

 

うさぎとの生活も始まりました。

f:id:Cer0un0:20241231225720j:image

 

来年もよろしくお願いします。

 

以上振り返り。

 

 

Dify × Discord (Slash Command)連携

この記事は、Qiita Dify Advent Calendar 2024 の16日目の記事です。
qiita.com

はじめに

本記事では、DiscordのSlash CommandAWS Lambda で受け取り、そのイベントを Dify に転送する仕組みを紹介します。

Discordアプリを作成した経験がある方はご存知かもしれませんが、Slash Commandが実行されると、あらかじめ設定したInteractions Endpoint URLにイベントが送信されます。しかし、このURLは1つしか設定できないため、1つのDiscordアプリから複数のDifyアプリを呼び出すには少しだけ工夫が必要です。本記事では、その実現方法を紹介します。

また、Discordアプリを常駐させるとコスト面で不利になるため、必要なときにのみイベントを受けDifyに連携できるようAWS Lambdaを採用しています。

前提条件

  • AWSアカウントがあること
  • AWS SAM CLIをインストール済みで、初期設定が終わっていること
  • 連携したいDifyアプリ(workflow)を作成済みであること
  • Discordのアプリを作成済みで、下記の権限(bot, applications.commands)を有効にして任意のサーバーに入れていること

    discord-app-oauth2

注意事項

  • 本記事で対象にしているDifyアプリはworkflowのみです。chatbotを利用したい場合はリクエスト先を変更することで動くはずです。
  • Slash CommandとLambdaの連携については最低限のみ記載します。詳細は本記事で紹介するソースコードや他の方の記事を見ていただければと思います。

Slash Commandとは?

Slash Commandは、Discord上で「/」を入力することで呼び出せるコマンド機能です。
例えば、「/」を入力すると使用可能なコマンド一覧が表示され、「/neko」などのコマンドを実行できます。



ex-slash-command

上記の例は"text"を入力するようにしていますが、オプションで指定できApplication Commandsあたりに詳しく書いてあります。

システム構成



system-architecture

  1. Discordでコマンドを実行
  2. Lambdaがイベントを受け取り、どのDify Appに送信するかを識別してリクエス
  3. Dify Appが動作し、Discordにメッセージ送信

ソースコード

SAMでデプロイできるようにしています。コードを自分用に一部書き換える必要があるので、該当箇所だけ記載します。他の箇所はSlash CommandとLambdaの連携についてなので、割愛します。 github.com

  • register-commands:コマンドの登録用Lambda
  • discord:Discordからのイベントを受けるLambda

register-commands

DiscordのSlash Commandは事前にコマンドの登録をするLambdaです。今回は複数人で開発をすることを想定しLambdaで動かしていますが、ローカルで実行でも大丈夫です。

  • コマンドは下記のように記載してください。optionsはApplication Commandsあたりを参照し、自身のDifyアプリに合わせてください。
    commands = [
        {
            'name': 'neko', 
            'description': 'にゃーん',
            'options': [
                    {
                        "name": "text",
                        "description": "string",
                        "type": 3,
                        "required": True,
                    }
                ]
        },
        {
            'name': 'summary',
            'description': '要約',
            'options': [
                {
                    "name": "url",
                    "description": "string",
                    "type": 3,
                    "required": True,
                }
            ]
        }
    ]

discord

Discordからイベントを受け取った際に、コマンド名を取得し正しいDifyアプリへリクエストを送信、DifyからのレスポンスをDiscordへ送信するLambdaです。Lambdaの関数URLを発行します。

  • 自身のコマンド名に合わせ、下記のコードを変更してください。inputsはDifyアプリの開始ノードに合わせてください。command_inputは入力内容をDiscordに返すための変数です。(Difyアプリの実行には影響しません)

例:/nekoではqueryを設定

    inputs = {}
    if command_name == 'neko':
        command_input += f'text={body['data']['options'][0]['value']}'
        inputs = {
            'query': body['data']['options'][0]['value']
        }
    elif command_name == 'summary':
        command_input += f'url={body['data']['options'][0]['value']}'
        inputs = {
            'url': body['data']['options'][0]['value']
        }
  • Dify アプリの終了ノードはtextで返すようにしてください。 変更したい場合は、下記のdataを終了ノードの出力に合わせてください。
    response = send_dify_workflow(inputs, body['member']['user']['username'], DIFY_API_KEY)
    logger.info(f'dify response: {response}')

    url = f'https://discordapp.com/api/channels/{channel_id}/messages'
    headers = {
        'authorization': f'Bot {DISCORD_BOT_TOKEN}',
        'content-type': 'application/json'
    }
    data = {
        'content': response['data']['outputs']['text'],
    }
    r = requests.post(url, headers=headers, json=data)
  • (変更不要です。紹介のみ。)DifyアプリをLambdaで振り分けるロジックは下記の部分です。command_nameにはregister-commandsで登録するnameが入ってきます。
    DIFY_API_KEY = get_ssm_parameter(f'/dify/app/{command_name}')

デプロイ & Discordアプリ設定

準備

登録手順を参考に下記の値をパラメータストアにに登録してください。(SAMでデプロイする前でも後でもOK)

名前
/discord/dify/DISCORD_APP_ID Discord Developer Portal > Discordアプリ > General Information > Application ID
/discord/dify/DISCORD_BOT_TOKEN Discord Developer Portal > Discordアプリ > Bot > TOKEN
/discord/dify/PUBLIC_KEY Discord Developer Portal > Discordアプリ > General Information > Public Key
/dify/ENDPOINT Difyのエンドポイント
/dify/app/[command name] DifyアプリのAPI KEY。必要なコマンドの分だけ登録してください。この記事では/dify/app/neko/dify/app/summaryを登録しています。

登録手順

  1. パラメータの作成
  2. 赤枠を入力・選択して「パラメータを作成」をクリック

デプロイ

$ sam build
$ sam deploy

デプロイが成功すると下記のようにLambdaの関数URLが出力されるのでコピーします。

deploy-output

Discordアプリ設定

Discord Developer Portal > Discordアプリ > General Information > Interactions Endpoint URLに上記でコピーした関数URLをペーストし、「Save Changes」をクリック

[
interaction-endpoint-url

下記のメッセージが表示されればOK。

コマンド登録

register-commandsのLambda(そのままデプロイしていれば、discord-slashcommand-CommandRegisterFunction-xxxxxxxxxxxxのような関数名)を開き、テスト実行してください。statusCode": 200が返ってきていればコマンド登録はできているはずです。

関数URLを発行してcurlで実行しても良いし、そもそもLambdaにせずローカルで実行してもよいです。おまかせします。

コマンド実行

"/[command name]"で下記のようにコマンドが表示されていればOKです。



neko-slash-command

実行しましょう!アプリから返答があればOKです!(/nekoは猫語で返答してくれるworkflow)

まとめ

DiscordのSlash CommandからDifyを呼び出す仕組みについて紹介しました。

コマンド登録の部分は改良したい。

2023年はありがとうございました。2024年はよろしくお願いいたします。

2023年の振り返りです。

今年は主に転職活動をしていました。 2023年いっぱいで新卒入社した企業を退職し、2024年から別の企業に入社します。

気が向いたら転職関連の記事をどこかに投稿しようかな〜と思ってます。

来年は仕事だけでなく環境が色々と変化するので、プライベートも仕事も楽しんでいきたいと思います。

短い。

以上振り返り。

2022年はありがとうございました。2023年はよろしくお願いいたします。

2021年の振り返りは書き忘れました。今年も忘れかけた。

今年はついに関西から関東に異動となった年。色々あったけれど無事に異動できました。

ただ転職したい気持ちは年々強くなっているので、2023は何か作ったり書いたりして準備していきたいと思います。

関東に来てご飯行ってくれた方々ありがとうございました。また行きましょう。

仙台でずんだ餅を初めて食べたけど、これを早食いできるやつおっかしいよ。

以上振り返り。

2020振り返り

この年は何したんだっけ?というのを後で見返せる何かを残したい。覚えてたら毎年やる。

SwarmとかTwitterを見ながら1年を振り返った。印象に残ったやつだけ書く。

2020

1月
  • 特になし
2月
  • 残業と休出が多くプライベートの時間は殆ど無かった。
3月
  • 2月同様、仕事が忙しい。
  • Mac Mini (2018)を購入。B4の頃に購入したMac Book Pro (2016)は壁に立てかけられる。
4月
  • 仕事が少し楽になり(+在宅勤務が殆どとなり)プライベートの時間が確保できた。
  • 競プロに本腰を入れようと思い、AtCoderに取り組む。Streakは142日(4月〜7月)まで伸びた。緑コーダーになった。嬉しい。
5月
  • 特になし
6月
  • 長期間の在宅勤務により太った体をなんとかしようとリングフィットアドベンチャーを頑張る。食生活も見直した。1ヶ月弱で在宅勤務前の体重になったが、ダイエットモチベーションが地に落ちる。だがまだ標準体重ではない。
7月
  • G検定を受験。合格。
  • 近所の寿司屋に通うようになる。
  • 家のエアコンのリモコンを紛失。多くのメーカに対応する汎用的なリモコンを購入。夏を生きて乗り越えた。
8月
  • スマホの回線を楽天モバイルからRakuten UN-LIMITに変更。1年無料も大きいが、電話し放題が良い。速度も文句がない。家が楽天エリアで良かった。
  • TENETを観に行く。考察が捗る映画で凄く面白い。
  • 神戸牛を食べに神戸へ行く。ぼっち。
9月
  • 安全確保支援士の勉強をぼちぼち始める。結果IPAに貢いだ。
  • カフェ勉をするようになる。平日は毎日のように通う。
  • そろそろ彼女が欲しくなる。欲しいと思っているだけである。
10月
  • 多分仕事を頑張ってた。
  • Air Pods Proを購入。SONYのWF-1000XM3の方が音質は良いが、Air PodsiPhoneiPadMacへのペアリングが優秀。好き。
11月
12月
  • スプラを遊んでくれる人が欲しく、Twitterでゲーム垢を作る。社会人になってネット友達ができるとは思っていなかった。めっちゃ楽しい。年末は毎日誰かしらに遊んでもらっている。
  • 今年は帰省を諦め、ぼっち年越しをする。

おわりに

2020はコロナウィルスの影響により、ほとんど在宅勤務になった。何もなくても引きこもりなのに、これが家から出ない理由となり余計に外に殆ど出なかった1年だった。友達も近くにいないので遊びに行ったり飲みに行ったりすることはあまりない。仕事がある日でも、1日に2,3回くらいしか発声しない日もあり(独り言)悲しい気持ちになる。ここ1ヶ月はゲームをしてくれる友達ができたので気持ちは穏やか。早く関東に引っ越したい。

口だけずっと言っているが転職もしたい気持ちはある。一生今の会社にいるか?と言われると想像できないし、自分がカッコいいと思う姿になれそうもない。組織にお願いしたり訴えればええやんって思うかもしれないけど、そこまでして今の会社にいたいとは思わないし転職するのが一番楽そう。また、尊敬できる人・目標にしたい人が今の所おらず、なんだかなーという気持ちにもなる(多分これが大きい)。

今年で厄年も終わり。本厄・後厄の2年間では公私ともにしんどい思いをした時期があったけど、生きてるので偉い。

2021は、1つでも良いので興味のある技術等に詳しくなってみたいと思う。 それから、仕事がしんどくなりそうなので最近できたネット友達と遊びつつ程々に頑張りたい。

皆さま、来年も仲良くしてくれると嬉しいです。良いお年を。

G検定を受験した話

JDLA Deep Learning for GENERAL 2020#2を受験した。

確かM1のときにG検定始まるよ〜って知った。研究で忙しかったので当時は受けなかったけど、今回は半額だったのでラッキー!ってことで受けた。

本当は2020#1を受験しようと思って参考書の購入は済ませていたのだけど、炎上プロジェクトに放り込まれて見送った。

やったこと

以下の2冊を1周だけ。大学ではAIについて多少は学んでいたので、なるほど〜〜って言いながら読んでた。「CNNは画像認識、RNNは自然言語処理に効くらしい」くらいの知識しかなかったので、結構勉強になった。

学部生の頃に、「エージェントアプローチと人工知能」を読んでたのでAI全体の教養はあったのかもしれない。

エージェントアプローチ人工知能 第2版

エージェントアプローチ人工知能 第2版

勉強期間は5日くらい。たぶん。本腰入れてやったのは3日くらい。

結果

合格✌

感想

  • 参考書読んでいたので分かっていたけど、もうちょっと数学的な中身を学びたかった。偏微分とか基本的な行列計算しかない。ジェネラリストだしこんなものなのかな。
  • 試験時間が足りない。
  • 法律系の問題が多い。
  • 参考書の内容が3〜4割くらいしか出てなくて焦った。
  • 試験の難易度は低いと思う。基本情報技術者のほうが100倍頑張った。

社会人になってから何の資格も取得していなかったので、「何かはやってるぞ」と会社にアピれる材料ができたので良し。

まとめ

難易度はどうであれ、G検定はMLの勉強の入門としては悪くないんじゃない?って思った。コロナウィルスの影響で情報処理試験の午前Ⅰ免除期間が延びたようだけど、秋試験どうするかなあ・・・