技術的な知見や日々の記録、日常の些細な変化などを綴る雑記ブログです。専門的な技術解説から日記のようなライトな話題まで、特定のジャンルに縛られず、気になったことや面白いと感じた出来事を幅広く発信しています。筆者の視点で切り取った多様なコンテンツが楽しめる、自由な雑記空間を目指しています。
2023/11/21
githubは日本語化できるのか?
2023/11/14
【claude】ChatGPTって何?話題の大規模言語モデルを解説
ChatGPTって何?話題の大規模言語モデルを解説
ChatGPTはOpenAIが開発した大規模言語モデルで、自然な会話ができるAIとして最近注目を集めています。
ChatGPTの概要
ChatGPTはGPT(Generative Pre-trained Transformer)アーキテクチャに基づいており、パラメータ数は175 billionもある巨大モデルです。インターネット上の膨大なテキストデータでトレーニングされています。
ChatGPTの特徴
| 特徴 | 説明 |
|---|---|
| 会話能力が高い | 自然な会話ができる |
| 人間らしい回答 | 人のような回答を生成できる |
| わかりやすい回答 | 質問内容に合わせた平易な回答 |
活用事例
ChatGPTは自然言語処理、コンテンツ作成支援、カスタマーサポートなどに活用できます。
注意点
事実誤認や偏見を含む可能性があるため、回答の内容を確認する必要があります。
ChatGPTは会話能力の高さから今後の発展が期待されるモデルです。
【ChatGPT】ChatGPTについてのブログ記事
【Bard】ChatGPTとは?
| 機能 | メリット |
|---|---|
| テキストの生成 | 文章、コード、脚本、音楽、メール、手紙など、さまざまな種類のテキストを生成できる |
| 言語の翻訳 | 日本語、英語、フランス語、ドイツ語など、さまざまな言語を翻訳できる |
| クリエイティブ コンテンツの作成 | 詩、コード、スクリプト、音楽作品、電子メール、手紙など、さまざまな種類のクリエイティブ コンテンツを作成できる |
| 質問への回答 | 有益な方法で質問に答えることができる |
| 分野 | 活用例 |
|---|---|
| ブログやWebサイトのコンテンツ作成 | ブログ記事やWebサイトのコンテンツを自動生成する |
| マーケティングや広告の企画 | ターゲット層に訴求するクリエイティブなコンテンツを作成 |
| 翻訳や通訳 | 外国語のコンテンツを翻訳したり、通訳したりする |
| 創作活動 | 詩、小説、音楽、絵画など、さまざまな創作活動に活用 |
| 方法 | 詳細 |
|---|---|
| Web インターフェイス | OpenAIのサイトにアクセスし、Web インターフェイスでChatGPTを操作する |
| API | ChatGPTのAPIを使用して、自分のアプリケーションやWeb サービスに組み込む |
このブログ記事では、ChatGPTについて、その概要、メリット、デメリット、活用事例、使い方などを説明しました。ChatGPTは、さまざまな分野で活用できる可能性を秘めた、強力なツールです。今後の更なる発展に期待したいと思います。
2023/11/06
ChatGPTで学習させたい
2023/10/12
2023/10/05
webサイトでjsonをformatしたいのだけど。
現代のシステム開発において、システム間の通信を支えるJSONは必要不可欠な存在となりました。REST APIのレスポンスや設定ファイル、ログデータなど、エンジニアがこのデータ形式に触れない日はありません。しかし、機械が読みやすいように最適化された一行のデータは、人間がその構造を直感的に把握することを困難にします。
多くのエンジニアは、この読みづらいデータを整えるために検索エンジンで見つけたオンラインツールを利用しがちです。しかし、そこには見過ごせないリスクが潜んでいます。入力したデータが外部サーバーに送信されてログに残る懸念や、通信経路での傍受、あるいは運営者によるデータの二次利用を完全に否定することはできません。顧客の個人情報や認証トークン、秘匿性の高いビジネスロジックを含むデータを外部に預ける行為は、重大なセキュリティリスクに直結します。また、会社が許可していないツールを使い続けることは、企業のコンプライアンスを揺るがす問題にもなり得ます。
こうした背景から、外部への通信を一切発生させない仕組みが求められます。ブラウザ上で動作するJavaScriptは、利用者のPC内だけで処理を完結させることが可能です。テキストボックスに入力されたデータを整形し、インデントを挿入して出力する工程において、サーバーへ送信する必要は本来ありません。
今回公開したツールの核心は、ブラウザ標準の機能を活用したシンプルな実装にあります。外部ライブラリに頼らず、誰もがコードの内容を検証できる透明性を確保しました。バックエンドへの送信処理が含まれていないことを容易に確認できるため、安全性が担保されます。
ツールとしての利便性も追求し、機能を絞り込むことで迷いのない操作感を実現しました。貼り付けた瞬間の整形はもちろん、構文エラーの即座な検知、そして無駄を削ぎ落としたことによる軽快な動作が特徴です。顧客情報が含まれる本番ログの調査や、複雑な構造を持つAPIのデバッグ、仕様書に載せるためのサンプル作成など、ビジネスの現場で直面する多様なシーンで活用できます。
便利なツールが溢れる現代だからこそ、エンジニアには道具の仕組みを把握する責任があります。利便性だけを優先して中身のわからないブラックボックスを使うのではなく、仕組みが明快で検証可能な手段を選ぶ姿勢が、堅牢なシステム運用を支える一歩となります。日々の業務を安全に進めるための標準的な道具として、この整形ツールを役立ててください。
セキュリティと実用性を両立したJSON整形ツール
2023/10/04
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」が表示された場合の対処方法
- 電源を切って、ACアダプターやケーブルを再接続する。
- 本体を再起動する。
- データを初期化する。
- Nintendoサポートに問い合わせて、本体の修理を依頼する。
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では、アプリケーションの状態管理やデータバインディングなどの機能を提供するために、いくつかのプロパティラッパーが用意されています。
`@State`と`@Binding`はそのうちの2つの重要なプロパティラッパーです。
`@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)")
}
}
これらのプロパティラッパーは、SwiftUIアプリケーション内でデータの管理と共有を効果的に行うために使用されます。
`@State`はローカルな状態の管理に適しており、`@Binding`は異なるビュー間でデータを双方向に共有するのに適しています。
2023/08/31
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
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.Get や http.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)
}