2023/11/14

【Bard】ChatGPTとは?

ChatGPTとは? ChatGPTは、OpenAIが開発した大規模な言語モデルです。テキストやコードの膨大なデータセットで学習されており、テキストの生成、言語の翻訳、さまざまな種類のクリエイティブ コンテンツの作成、有益な方法で質問に答えることができます。
機能 メリット
テキストの生成 文章、コード、脚本、音楽、メール、手紙など、さまざまな種類のテキストを生成できる
言語の翻訳 日本語、英語、フランス語、ドイツ語など、さまざまな言語を翻訳できる
クリエイティブ コンテンツの作成 詩、コード、スクリプト、音楽作品、電子メール、手紙など、さまざまな種類のクリエイティブ コンテンツを作成できる
質問への回答 有益な方法で質問に答えることができる
ChatGPTの活用事例 ChatGPTは、さまざまな分野で活用されています。 ブログやWebサイトのコンテンツ作成 マーケティングや広告の企画 翻訳や通訳 創作活動
分野 活用例
ブログやWebサイトのコンテンツ作成 ブログ記事やWebサイトのコンテンツを自動生成する
マーケティングや広告の企画 ターゲット層に訴求するクリエイティブなコンテンツを作成
翻訳や通訳 外国語のコンテンツを翻訳したり、通訳したりする
創作活動 詩、小説、音楽、絵画など、さまざまな創作活動に活用
ChatGPTの使い方 ChatGPTを使うには、OpenAIのサイトにアクセスし、アカウントを作成する必要があります。アカウントを作成したら、ChatGPTのWeb インターフェイスまたはAPIを使用して、テキストの生成、言語の翻訳、さまざまな種類のクリエイティブ コンテンツの作成、有益な方法で質問に答えることができます。
方法 詳細
Web インターフェイス OpenAIのサイトにアクセスし、Web インターフェイスでChatGPTを操作する
API ChatGPTのAPIを使用して、自分のアプリケーションやWeb サービスに組み込む
まとめ ChatGPTは、テキストの生成、言語の翻訳、さまざまな種類のクリエイティブ コンテンツの作成、有益な方法で質問に答えることができる、大規模な言語モデルです。まだ開発中のため、誤った情報を生成する可能性があることに注意が必要ですが、さまざまな分野で活用されています。

このブログ記事では、ChatGPTについて、その概要、メリット、デメリット、活用事例、使い方などを説明しました。ChatGPTは、さまざまな分野で活用できる可能性を秘めた、強力なツールです。今後の更なる発展に期待したいと思います。

2023/11/06

【PHP】いまさらComposer

PHPライブラリを管理するツール


iOSで例えるなら。cocoapods やCarthageみたいなやつ。


Ruby で例えるなら、bundlerみたいなやつ。

ChatGPTで学習させたい

OpenAI APIのFine-tuningがあるので、ベースモデルを選択してトレーニングする。

学習内容は、
質問+回答結果を覚えさせる。言い回しなどを変えて複数パターン学習すれば、精度があがっていくとの事

2023/10/12

2023/10/05

webサイトでjsonをformatしたいのだけど。

現代のシステム開発において、システム間の通信を支えるJSONは必要不可欠な存在となりました。REST APIのレスポンスや設定ファイル、ログデータなど、エンジニアがこのデータ形式に触れない日はありません。しかし、機械が読みやすいように最適化された一行のデータは、人間がその構造を直感的に把握することを困難にします。

多くのエンジニアは、この読みづらいデータを整えるために検索エンジンで見つけたオンラインツールを利用しがちです。しかし、そこには見過ごせないリスクが潜んでいます。入力したデータが外部サーバーに送信されてログに残る懸念や、通信経路での傍受、あるいは運営者によるデータの二次利用を完全に否定することはできません。顧客の個人情報や認証トークン、秘匿性の高いビジネスロジックを含むデータを外部に預ける行為は、重大なセキュリティリスクに直結します。また、会社が許可していないツールを使い続けることは、企業のコンプライアンスを揺るがす問題にもなり得ます。

こうした背景から、外部への通信を一切発生させない仕組みが求められます。ブラウザ上で動作するJavaScriptは、利用者のPC内だけで処理を完結させることが可能です。テキストボックスに入力されたデータを整形し、インデントを挿入して出力する工程において、サーバーへ送信する必要は本来ありません。

今回公開したツールの核心は、ブラウザ標準の機能を活用したシンプルな実装にあります。外部ライブラリに頼らず、誰もがコードの内容を検証できる透明性を確保しました。バックエンドへの送信処理が含まれていないことを容易に確認できるため、安全性が担保されます。

ツールとしての利便性も追求し、機能を絞り込むことで迷いのない操作感を実現しました。貼り付けた瞬間の整形はもちろん、構文エラーの即座な検知、そして無駄を削ぎ落としたことによる軽快な動作が特徴です。顧客情報が含まれる本番ログの調査や、複雑な構造を持つAPIのデバッグ、仕様書に載せるためのサンプル作成など、ビジネスの現場で直面する多様なシーンで活用できます。

便利なツールが溢れる現代だからこそ、エンジニアには道具の仕組みを把握する責任があります。利便性だけを優先して中身のわからないブラックボックスを使うのではなく、仕組みが明快で検証可能な手段を選ぶ姿勢が、堅牢なシステム運用を支える一歩となります。日々の業務を安全に進めるための標準的な道具として、この整形ツールを役立ててください。

セキュリティと実用性を両立したJSON整形ツール

https://www.kixking.xyz/p/json-format.html

2023/10/04

Google、「Android 14」を10月4日に正式リリース?

2023/10/04 23:00(日本時間)に発表会があるので、そこで正式に発表するらしい。

2023/09/19

【Bard】Golangは将来性はあるか?

 Golangは、Googleが開発したオープンソースのプログラミング言語です。2009年にリリースされて以来、急速に人気が高まり、現在では世界中で多くの企業で採用されています。


Golangの将来性が期待される理由は、以下の3つが挙げられます。


パフォーマンスが優れている

Golangは、並列処理やメモリ管理に優れているため、高速かつ安定したアプリケーションを開発することができます。


学習コストが低い

Golangは、シンプルな文法と構文を採用しているため、他のプログラミング言語を習得している人であれば、比較的簡単に学習することができます。


幅広い用途に対応している

Golangは、Webアプリケーションやサーバーサイドアプリケーション、デスクトップアプリケーション、モバイルアプリケーションなど、さまざまな用途に使用することができます。


特に、今後ますます需要が高まると予想される、クラウドコンピューティングやIoTなどの分野で、Golangの需要は高まっていくと考えられます。


もちろん、Golangにも欠点はあります。例えば、オブジェクト指向の概念が弱い、例外処理がないなどの点が挙げられます。しかし、これらの欠点は、Golangのメリットを大きく上回るとは考えにくいでしょう。


以上のことから、Golangは今後も多くの企業で採用され、エンジニアの需要が高まっていくと予想されます。


具体的には、以下の分野でGolangの需要が高まっていくと考えられます。


クラウドコンピューティング

クラウドコンピューティングは、今後ますます普及していくと予想される分野です。Golangは、クラウドコンピューティングの基盤となるサーバーの開発に適した言語です。


IoT

IoTは、さまざまなデバイスをネットワークで接続する技術です。Golangは、IoTデバイスの開発に適した言語です。


機械学習

機械学習は、人工知能の分野で重要な技術です。Golangは、機械学習のフレームワークと組み合わせて使用することで、効率的に機械学習モデルを開発することができます。


このように、Golangはさまざまな分野で活躍できる言語であり、将来性も十分にあると言えます。

2023/09/15

【Bird】エラーコード「2153-0321」が表示された場合の対処方法

エラーコード「2153-0321」は、

Nintendo Switch本体の故障が疑われるエラーコードです。

具体的には、オーディオチップの不具合が原因と考えられています。 

このエラーコードが表示された場合は、以下の対処方法を試してみてください。 

電源を切って、ACアダプターやケーブルを再接続する。

本体を再起動する。 データを初期化する。 

それでも改善しない場合は、Nintendoサポートに問い合わせて、

本体の修理を依頼してください。 

なお、データの初期化を行うと、本体に保存されているデータがすべて消去されますので、

事前にバックアップを取っておくことをおすすめします。 

以下に、エラーコード「2153-0321」が表示された場合の対処方法をまとめます。 

  • 電源を切って、ACアダプターやケーブルを再接続する。 
  • 本体を再起動する。
  • データを初期化する。 
  • Nintendoサポートに問い合わせて、本体の修理を依頼する。

なお、データの初期化を行う場合は、
事前にバックアップを取っておくことをおすすめします。

※AIによって生成した文章となります。

2023/09/14

Apple iPhone 15発表会

 Apple iPhone 15発表会

今回は4種類

  • iPhone 15 Pro Max
  • iPhone 15 Pro
  • iPhone 15 Plus
  • iPhone 15
最近思うのだけど、おお! すごい!

みたいなのがなくなってる気がします。

確かに性能は上がっていますが、既定路線過ぎて驚く要素があまりない。

最初の頃は、夜中リアルタイムで発表会を観ていたけど、

ここ何年かは、普通に朝まとめサイトみてるだけになっている。

自分の情熱が減っただけなのかな。

皆さんはどうでしょうか?

2023/09/05

【SwiftUI】@Stateとか@Bindingとかなんなのさ。

SwiftUIは、iOSおよびmacOSアプリケーションを構築するためのモダンなユーザーインターフェースフレームワークです。
SwiftUIでは、アプリケーションの状態管理やデータバインディングなどの機能を提供するために、いくつかのプロパティラッパーが用意されています。
`@State`と`@Binding`はそのうちの2つの重要なプロパティラッパーです。
1. `@State`:
`@State`は、プロパティを変更可能な状態(State)として宣言するために使用します。
SwiftUIビュー内のプロパティを`@State`で宣言すると、そのプロパティの変更がビューに影響を与え、ビューが自動的に再描画されるようになります。
@State`は、ビュー内で単一の値の状態を管理するために使用されます。

   struct ContentView: View {
       @State private var count = 0

       var body: some View {
           Text("Count: \(count)")
           Button("Increment") {
               count += 1 // @Stateプロパティの変更
           }
       }
   }

2. `@Binding`:
`@Binding`は、プロパティを他のビューから参照し、変更できるようにするために使用されます。
`@Binding`を使用すると、値を保持するビューとその値を表示または変更する別のビュー間でデータを共有できます。
   struct DetailView: View {
       @Binding var count: Int

       var body: some View {
           Text("Count in Detail: \(count)")
       }
   }
メインビューから`DetailView`に`@Binding`で渡された`count`プロパティは、`DetailView`内で表示および変更できます。変更はメインビューにも反映されます。
これらのプロパティラッパーは、SwiftUIアプリケーション内でデータの管理と共有を効果的に行うために使用されます。
`@State`はローカルな状態の管理に適しており、`@Binding`は異なるビュー間でデータを双方向に共有するのに適しています。

2023/08/31

Sample of reading XML file with python

Sample of reading XML file with python
import xml.etree.ElementTree as ET

# Load the XML file
tree = ET.parse('data.xml')
root = tree.getroot()

# Iterate through 'person' elements and extract data
for person in root.findall('person'):
    name = person.find('name').text
    age = person.find('age').text
    print(f"Name: {name}, Age: {age}")


2023/07/25

Sample of reading CSV file with python

CSVサンプル
Name,Age
Alice,25
Bob,30
Charlie,22
import csv

def read_csv_file(file_path):
    try:
        with open(file_path, 'r', newline='') as csvfile:
            csv_reader = csv.DictReader(csvfile)

            # 各行のデータを利用
            for row in csv_reader:
                name = row['Name']
                age = int(row['Age'])
                print(f"{name} is {age} years old.")

    except FileNotFoundError:
        print("File not found.")
    except Exception as e:
        print("Error:", e)

if __name__ == "__main__":
    csv_file_path = "example.csv"  # CSVファイルのパスを指定してください
    read_csv_file(csv_file_path)

python で authorization header bearer token 方式のサンプル

import requests

def main():
    # 送信先のURL
    url = "https://example.com/api/endpoint"

    # Bearerトークン
    bearer_token = "your_bearer_token_here"

    # 送信するJSONデータ
    data = {
        "key1": "value1",
        "key2": "value2"
    }

    # POSTリクエストを送信
    response = requests.post(url, json=data, headers={"Authorization": "Bearer " + bearer_token})

    # レスポンスの内容を表示
    if response.status_code == 200:
        print("Success!")
        print("Response:", response.json())
    else:
        print("Error:", response.status_code, response.text)

if __name__ == "__main__":
    main()


Go言語によるBearer認証の実装サンプル

Go言語で実現するBearerトークン認証

モダンなWeb API開発において、セキュリティを確保するための認証方式として「Bearerトークン(主にJWTなど)」は事実上の標準となっています。 Go言語の標準ライブラリ net/http を用いて、この認証ヘッダーを正しく、かつ安全に実装する方法を詳しく解説します。


1. 実装サンプルコード

以下のコードは、JSONデータをPOSTしつつ、AuthorizationヘッダーにBearerトークンを付与する完結したサンプルです。 エラーハンドリングやタイムアウト設定など、実務で必須となる要素を盛り込んでいます。


package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"time"
)

func main() {
	// 接続先URLと認証トークンの定義
	const (
		apiURL      = "https://example.com/api/v1/resource"
		bearerToken = "your_secret_access_token"
	)

	// 送信するペイロード(JSON)の構築
	payload := []byte(`{"name": "Gopher", "role": "Developer"}`)

	// 1. リクエストオブジェクトの生成
	// http.Post() 等の簡易メソッドではヘッダーの個別設定ができないため、NewRequestを使用します
	req, err := http.NewRequest(http.MethodPost, apiURL, bytes.NewBuffer(payload))
	if err != nil {
		fmt.Printf("リクエストの作成に失敗しました: %v\n", err)
		return
	}

	// 2. 必須ヘッダーの設定
	// Bearerの後には必ず半角スペースが必要です
	req.Header.Set("Authorization", "Bearer "+bearerToken)
	req.Header.Set("Content-Type", "application/json")

	// 3. HTTPクライアントの実行
	// http.DefaultClient はタイムアウトが設定されていないため、独自のClient定義を強く推奨します
	client := &http.Client{
		Timeout: 10 * time.Second,
	}

	resp, err := client.Do(req)
	if err != nil {
		fmt.Printf("通信エラーが発生しました: %v\n", err)
		return
	}
	// リソースリークを防ぐため、必ずCloseを呼び出す
	defer resp.Body.Close()

	// 4. 結果の読み取りと判定
	body, _ := io.ReadAll(resp.Body)
	if resp.StatusCode == http.StatusOK {
		fmt.Printf("成功: %s\n", string(body))
	} else {
		fmt.Printf("サーバーエラー: %d - %s\n", resp.StatusCode, string(body))
	}
}
    

2. 実装上の重要なTips

なぜ http.NewRequest を使うのか?

http.Gethttp.Post は内部でデフォルトのクライアントを使用しており、独自のヘッダーを追加する機能がありません。 認証が必要なAPIを叩く場合は、http.NewRequest を使用してリクエストインスタンスを生成し、Header.Set で個別に制御するのが正しいアプローチです。

Bearerスキームの書式に注意

Authorizationヘッダーの値は Bearer <token> という形式で指定する必要があります。 この Bearer とトークンの間の半角スペースを忘れると、サーバー側で正しくパースされず、401 Unauthorizedエラーの原因となります。

プロダクション環境での注意点

  • タイムアウト: ネットワークの遅延やサーバーの無応答に備え、必ず http.Client にタイムアウトを設定してください。
  • トークンの秘匿: トークンをコード内にハードコードせず、環境変数(os.Getenv)やシークレット管理サービスから取得するようにしましょう。

Python Post Request with Json Example

import requests
import json

def main():
    # 送信先のURL
    url = "https://example.com/api/endpoint"

    # 送信するJSONデータ
    data = {
        "key1": "value1",
        "key2": "value2"
    }

    # JSONデータを文字列に変換
    json_data = json.dumps(data)

    # POSTリクエストを送信
    response = requests.post(url, data=json_data, headers={"Content-Type": "application/json"})

    # レスポンスの内容を表示
    if response.status_code == 200:
        print("Success!")
        print("Response:", response.json())
    else:
        print("Error:", response.status_code, response.text)

if __name__ == "__main__":
    main()

golang でカタカナだけを抽出するサンプル



package main

import (
	"fmt"
	"regexp"
)

func main() {
	// カタカナとひらがなを混ぜた文字列
	originalString := "コンニチハセカイ こんにちはせかい"

	// 文字列からカタカナのみを抽出
	katakanaString := extractKatakana(originalString)

	// カタカナのみの文字列を出力
	fmt.Println("Katakana String:", katakanaString)
}

// カタカナのみを抽出する関数
func extractKatakana(s string) string {
	// 正規表現パターンを定義
	// カタカナ文字のUnicode範囲: U+30A0 ~ U+30FF
	regexPattern := "[ァ-ヿ]+"

	// 正規表現にマッチする部分を抽出
	regExp := regexp.MustCompile(regexPattern)
	katakanaSlice := regExp.FindAllString(s, -1)

	// カタカナの文字列に変換
	katakanaString := ""
	for _, kana := range katakanaSlice {
		katakanaString += kana
	}

	return katakanaString
}

golang のJson をPostするサンプル

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	// The URL to which you want to send the JSON data
	url := "https://example.com/api/endpoint"

	// Data to be sent as JSON in the request body
	data := map[string]interface{}{
		"key1": "value1",
		"key2": "value2",
	}

	// Convert data to JSON format
	jsonData, err := json.Marshal(data)
	if err != nil {
		fmt.Println("Error converting data to JSON:", err)
		return
	}

	// Create a new HTTP request
	request, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	// Set the request header to indicate JSON data
	request.Header.Set("Content-Type", "application/json")

	// Create an HTTP client and send the request
	client := &http.Client{}
	response, err := client.Do(request)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer response.Body.Close()

	// Check the response status code
	if response.StatusCode != http.StatusOK {
		fmt.Println("Unexpected response status code:", response.StatusCode)
		return
	}

	// Read the response body
	var responseData map[string]interface{}
	err = json.NewDecoder(response.Body).Decode(&responseData)
	if err != nil {
		fmt.Println("Error decoding response:", err)
		return
	}

	// Process the response data as needed
	fmt.Println("Response:", responseData)
}

2023/07/21

【Bird】 ポケモンスリープについて聞いてみた。

 ポケモンスリープは、2023年7月17日にリリースされたスマートフォン向けゲームアプリです。本作は、スマートフォンもしくは「Pokémon GO Plus+」のセンサーを使ってユーザーの睡眠時間や睡眠の質を計測し、そのデータを使ったゲームを進めることで、楽しみながら睡眠リズムを整えるアプリです。

ゲームの開始時には、ユーザーは自分の睡眠データを入力します。このデータは、スマートフォンの画面をオフにして枕元に置いた「Pokémon GO Plus+」によって収集されます。収集されたデータは、ユーザーの睡眠時間、睡眠の深さ、睡眠の質、睡眠時の動きなどを分析します。

ゲームでは、ユーザーは「Pokémon GO Plus+」を枕元に置いて寝ると、カビゴンが登場します。カビゴンは、ユーザーの睡眠データに基づいて、眠り方や寝相を変化させます。ユーザーは、カビゴンの眠り方や寝相を観察して、自分の睡眠の質を改善することができます。

ゲームでは、ユーザーはカビゴンを育てることができます。カビゴンを育てるためには、ユーザーは睡眠をとる必要があります。睡眠をとると、カビゴンは成長し、新しい技を覚えます。カビゴンを強く育てるためには、ユーザーは質の高い睡眠をとることが大切です。

ポケモンスリープは、睡眠リズムを整えるゲームです。本作は、スマートフォンもしくは「Pokémon GO Plus+」のセンサーを使ってユーザーの睡眠データを収集し、そのデータをゲームに反映します。ユーザーは、ゲームをプレイすることで、自分の睡眠の質を改善することができます。

ポケモンスリープは、睡眠の質を改善したい人、カビゴンを育てたい人、ポケモンをもっと楽しみたい人におすすめのゲーム

2023/07/20

【Bird】君たちはどう生きるか ジブリの最新作をネタバレなしで観た感想を1000文字程度にまとめてくださいと聞いてみた。

birdにネタバレなしで感想を聞いてみました。

実際に観た方がこんな感じにおもっているのかなぁ?

----

2023年7月14日に公開されたスタジオジブリの最新作「君たちはどう生きるか」を観てきました。この映画は、生きることの意味について深く考えさせられる作品で、とても印象に残りました。

物語は、ある日、謎の人物から一冊の本をもらった少年・眞人(まこと)の視点から描かれます。その本は、生きることについて様々なことを教えてくれる本で、眞人は、その本を読んで、生きることについて考え始めます。

この映画では、生きることの意味について、様々な角度から考えさせられます。例えば、生きることの意味は何か?生きることの目的は何か?生きることの喜びとは何か?生きることの苦しみとは何か?生きることの美しさとは何か?生きることの悲しみとは何か?

この映画は、これらの問いに対して、一つの答えを出すことはありません。しかし、この映画は、生きることについて考えさせてくれるきっかけを与えてくれる作品です。

この映画を観た後、私は、生きることについて、改めて考えさせられました。生きることの意味は、人それぞれ違うと思います。しかし、生きることの意味は、何か一つに絞る必要はないと思います。生きることの意味は、様々なものから成り立っていると思います。

生きることの意味は、家族や友人との絆かもしれません。生きることの意味は、仕事や趣味かもしれません。生きることの意味は、自然や芸術かもしれません。生きることの意味は、夢や希望かもしれません。

生きることの意味は、人それぞれ違うと思います。しかし、生きることの意味は、何か一つに絞る必要はないと思います。生きることの意味は、様々なものから成り立っていると思います。

この映画は、生きることについて考えさせてくれるきっかけを与えてくれる作品です。この映画を観て、生きることについて、改めて考えてみてはいかがでしょうか。

2023/07/11

 【Bard】ドコモのプランeximoとirumoの違いを表にまとめて

 はい、ドコモのプランeximoとirumoの違いを以下にまとめました。

項目eximoirumo
月額料金2,970円(税込)2,728円(税込)
データ容量5GB3GB
通話料22円/30秒(国内)22円/30秒(国内)
かけ放題オプション1,100円/月(税込)550円/月(税込)
5Gオプション550円/月(税込)無料
国際ローミング有料有料
ドコモ光セット割最大1,100円/月(税込)最大1,050円/月(税込)
ドコモオンラインショップ割引最大1,000円/月(税込)最大1,000円/月(税込)
家族割引最大2,200円/月(税込)最大2,200円/月(税込)