Asutorufaのブログ

こんにちは


  • Home

  • Tags

  • Categories

  • Archives

  • About

  • Friends

  • Search

RustでTelegram BotをLambdaにデプロイする

Posted on 2025-08-07 | Post modified: 2025-08-07 | In Rust , Lambda , Telegram

Telegram BotにはサーバーとWebhookの二つの立ち上げる方法があります。Lambdaはサーバーレスだから、今回はWebhookで使用します。

最初はCargoで新たなプロジェクトを作ります。

cargo new telegram-bot

必要な依存を追加します。

crgo add aws_lambda_events base64 lambda_runtime serde_json serde teloxide-macros tokio teloxide cargo-lambda

zigをインストール

# macos
brew install zig
# lambda cliでzigのインストール方法を出力して
cargo lambda system --install-zig

Telegramのコマンドを宣言します

#[derive(BotCommands, PartialEq, Clone, Debug)]
// いろんなパラメータに対応しています。公式ドキュメントをチェックしてください。
#[command(
    rename_rule = "lowercase",
    description = "These commands are supported:"
)]
pub enum Command {
    #[command(description = "get current user id")]
    UserID,
}

Telegramの処理関数を定義します

Read more »

告别小米,投奔三星

Posted on 2025-07-27 | Post modified: 2025-07-27 | In Personally

使用三星的一部分生态已经接近半年多了,同时为了未来的准备,渐渐把自己的一些老旧设备都换新了,没用的东西要么送人了要么卖二手,顺便记录一下目前的状态。

为什么抛弃小米的所有设备

之前买过不少的小米设备,大部分是因为小米的营销和身边人的推荐,给我一种小米价格不贵而且质量还不错的错觉。自己当时手上的数码产品都用了很多年了,也没有接触过当前其他品牌的产品,加上自己有刷机(使用国际版)的需求,索性买了小米的相关产品。先简述一下自己用过的产品的问题。

  • 小米平板4
    这个算是买的最早的小米设备了,不贵但是也花了1500块大洋(记不太清了)。主要有以下问题:

    • 管生不管养,系统从最初就是个半成品,其中只有过一次更新,之后小米就不管了,连安全更新都没有,体验很差劲。
    • 电池损耗很快,没用多久电池就不行了,电量乱跳,显示还有百分之50电量,直接黑屏关闭。
    • 电源键坏了,按很多遍才会有一次反应,我都是双击屏幕换新设备,很少用电源键,这都能坏?
    • 无法正常观看高清Netflix,Prime Video,说实话平板主要就是拿来看视频的,结果连这个都不行。

    据说现在小米平板依旧是这样。。

Read more »

terraformのモジュール

Posted on 2025-02-27 | Post modified: 2025-02-27 | In Kubernetes

WIP

- +
  + project1 -+
  |           +- main.tf
  |           +- variables.tf
  |           +- pro.tfvars
  |           +- debug.tfvars
  |
  +- modules -+
              +- module1 -+
              |            +- main.tf
              |            +- variables.tf
              |            +- outputs.tf
              |
              +- module2 -+
                           +- main.tf
                           +- variables.tf
                           +- outputs.tf
Read more »

Kubernetesのコントローラーを作ろう

Posted on 2025-02-23 | Post modified: 2025-02-23 | In Kubernetes

Kubernetesコントローラーとは

コントローラーはKubernetesのリソース設定を監視して変更があったら自動的にリソースを調整するプログラムです。ちなみに、Deployment、Statefulset、DaemonSetなどはKubernetesの内蔵コントローラーです。

コントローラーを実現

今回はGolangで簡単なLoadBalancerコントローラーを実現する。実際の機能はないですが、作成の流れはただしいと思います。

最初はTypeはLoadBalancerのServiceを作成

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  clusterIP: 10.0.171.239
  type: LoadBalancer

この時はIPアドレスを割り当てのコントローラーがないので、ServiceのステータスはPendingです。

新たなKubernetesクライアントを作成

Read more »

UDPプロキシはFullcone NATを実現する

Posted on 2024-11-18 | Post modified: 2024-11-18 | In Network

NATの種類

Mappingの種類

マッピングはNAT内部から外部にパケットを送信時にアドレス変換する行為です。

  • Endpoint-Independent Mapping

NAT内部のネットワークの同じIPアドレスとポートで外部のそれぞれのUDPサーバ(IPアドレスとポートが違う)にパケットを送信すると、各個UDPサーバも同じIPアドレスとポートのパケットを受信する。
例えば:

送信元アドレス宛先アドレスNATマッピングアドレス
192.168.1.1:30001.1.1.1:300043.124.222.234:4500
192.168.1.1:30001.1.1.1:300143.124.222.234:4500
192.168.1.1:30001.1.1.3:300243.124.222.234:4500
192.168.1.1:30001.1.1.4:300443.124.222.234:4500
  • Address-Dependent Mapping

UDPサーバのアドレスが同じ(ポートが違う)なら受信したパケットのIPアドレスとポートを変換しない、そうしないと、IPアドレスやポートを変換する。
例えば:

送信元アドレス宛先アドレスNATマッピングアドレス
192.168.1.1:30001.1.1.1:300043.124.222.234:4500
192.168.1.1:30001.1.1.1:300143.124.222.234:4500
192.168.1.1:30001.1.1.2:300043.124.222.234:4501
192.168.1.1:30001.1.1.3:300343.124.222.234:4502
  • Address and Port-Dependent Mapping

UDPサーバのアドレスとポートが同じなら受信したパケットのIPアドレスとポートを変換しない、そうしないと、IPアドレスやポートを変換する。

Read more »

golangとollamaでfunction calling

Posted on 2024-11-11 | Post modified: 2024-11-11 | In llm

今回はollamaのオフィシャルクライアントでfuncation callingを使いたいです。  
前回はlangchaingoで使っただけと、試してたらollamaの引数toolsは無効です、githubの実例ollama_functions_exampleはsystem messageとtoolsのjsonを組み合わせて内容を生成する。例えば:

func systemMessage() string {
 bs, err := json.Marshal(functions)
 if err != nil {
  log.Fatal(err)
 }

 return fmt.Sprintf(`You have access to the following tools:

%s

To use a tool, respond with a JSON object with the following structure: 
{
 "tool": <name of the called tool>,
 "tool_input": <parameters for the tool matching the above JSON schema>
}
`, string(bs))
}

これはちょっと優雅でない、ollama/apiを使いたいと思います。

function callingとは

Read more »

langchaingoでRAGを試しました

Posted on 2024-11-06 | Post modified: 2024-11-06 | In llm

日本語はまだ勉強中ですから、変などころあったら、ぜひコメントしてください。

RAGとは

RAGはRetrieval augmented generationの略です。
大規模言語モデル内容を生成する前に、promptによる外部のデーターベースに知識を検索、元のpromptと組み合わせて、アウトプットを改善するための技術です。

sequenceDiagram
    actor ユーザ
    ユーザ->>サーバー: prompt: 今日の注目<br/>の新聞は何ですか?
    サーバー->>ベクトルデータベース: promptをキーワードとして<br/>知識を検索
    ベクトルデータベース--)サーバー: 知識を返す
    サーバー->>llm: promptと知識を組み合わせて
    llm-->>サーバー: 生成する内容を返す
    サーバー->>ユーザ: 内容を返す

例えば:

ユーザ:今日の注目の新聞は何ですか?

gemini:

今日の注目の新聞記事については、リアルタイムで変化するため、特定の新聞社名を挙げて「今日の注目の記事はこれです」と断言することは難しいです。

chatgpt:

本日(2024年11月6日)の日本の注目ニュースは次のような内容が含まれている可能性があります:

アメリカ大統領選挙の最新動向 - 特に若い世代の投票行動や政策への関心が注目されています。
国内経済とインフレの動き - 日本の物価高騰が続き、家計への影響や政府の対応が議論されています。
アジアの地政学的緊張 - 日本周辺地域の安全保障に関連する動向が続いています。
以上の内容が注目ニュースとして考えられますが、詳細については直接ニュースソースで確認されるとよいでしょう。

geminiはリアルタイムによっての内容は回答できません。
chatgptはRAGか、Function Callingか、どちらかを使っていると思います。
今回はgolang+langchaingo+ollama+qdrantでRAGを実験してみます。

準備

Read more »

感觉日语是一种很随意的语言

Posted on 2024-07-29 | Post modified: 2024-07-29 | In 日本語

首先推荐一个视频 【文法「文の成分」】【10分間の国文法講座:ラーニング・ラボWeb講座】, 大概讲了日本中学(初中)考试的一些文法。

动词活用

相信不少中国境内的人学习动词都是 一类动词, 二类动词,三类动词, 并且老师甚至还会告诉你不要记《标准日本语》上面带ます的动词,要记字典型。
然后大概会告诉一类动词的活用,类似下面:

「う」段 →「い」段 + ます
以「う」、「つ」、「る」结尾的词 → 去掉词尾 + って
  ...
  ...

相信不少人(至少我是)会以为这是类似英文那种动词变形,过去式等这类的。
然而后来我发现,这完全是误人子弟啊,日本中学(初中)根本就不用这种所谓的变形,也不是说不用,只是他们不会用这种规则去活用动词。

事实上的动词活用分类:

Read more »

实现一个简单的Kubernetes controller

Posted on 2024-03-30 | Post modified: 2024-03-30 | In Kubernetes

controller是什么

简单来说,controller就是监听kubernetes的配置/状态变化,自动对资源进行调节。比如kubernetes内置的controller有Deployment、StatefulSet、DaemonSet。

实现controller

这里我们实现一个简单的loadbalancer controller,使用kubernetes的client-go。

先创建一个新的Serivce,并且指定Type为LoadBalancer。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  clusterIP: 10.0.171.239
  type: LoadBalancer

这时Service的状态还是pending,因为还没有controller为其分配IP地址。

创建新的client

Read more »

动漫影评

Posted on 2023-09-23 | Post modified: 2023-09-23 | In 影评

目前我只会记录最近看了个,有些看的比较早的就不记录了,记忆也比较模糊。

自定义神剧(个人主观决定)

  • CLANNAD
  • Kanon
  • リトルバスターズ!
  • Air
  • Angel Beats! -1st beat-
  • かぎなど
  • true tears
  • 花咲くいろは
  • TARI TARI
Read more »
12…7

70 posts
26 categories
100 tags
RSS
GitHub E-Mail
0%
© 2025 Asutorufa