2022 02 28

・朝だ〜地獄地獄

→朝強すぎ。こいつ最強です。

 

・AIに仕事を奪われかけています

→仕事で要件の実現方式なんかに困った時に、わりとChatGPTに相談してしまっている。もちろん、サンプルコードをそのまま仕事に使うのはマズ過ぎるので、考え方を参考にする程度ではあるが……。

→例えとして、これは趣味でYAMLを使いたかったが公式のドキュメント等が探しにくく困っていた時のやり取り。

--------------------------------------------------------

ワイ「YAMLってぶっちゃけなんすか?」

 

ChatGPTくん「(前略、YAMLについての説明) なお、YAMLファイルの書き方やパース方法については、YAMLの仕様書や各ライブラリのドキュメントを参照することをおすすめします。」
 

ワイ「YAMLファイルの書き方について教えてください。」
 
 
ChatGPTくん「YAMLファイルは、データを構造化して表現するためのフォーマットで、以下のような書式で記述されます。

 

 キー1: 値1
キー2:
- 要素1
- 要素2
- 要素3
キー3:
サブキー1: 値1
サブキー2: 値2

YAMLファイルは、キーと値のペアを使って構造化されたデータを表現します。キーは文字列で、値は文字列、数値、真偽値、null、配列、ネストしたマップ(連想配列)などの型を持つことができます。

また、値が複数の要素を持つ場合は、リストや配列として表現することができます。リストや配列の場合、要素ごとにハイフンで区切って記述します。ネストしたマップを表現する場合は、インデントを使って表現します。

さらに、コメントを書くこともできます。コメントは、#記号以降の文字列がコメントとして扱われます。

以下は、簡単な例です。

 

# YAMLファイルの例

person:
name: John
age: 30
address:
city: Tokyo
street: 1-1-1
hobbies:
- reading
- music


この例では、personというマップ(連想配列)が定義されており、nameやage、address、hobbiesというキーを持ちます。addressやhobbiesはそれぞれネストしたマップやリストを持ちます。また、コメントも含まれています。

なお、YAMLファイルの書き方にはいくつかのバリエーションがありますが、上記のようにインデントによってネストを表現する方法が一般的です。詳細は、YAMLの仕様書やドキュメントを参照してください。」

--------------------------------------------------------

 

→ヤバすぎる。あまりにも分かりやすい。他にもたくさん聞いたのだけれど、長くなりすぎるので日記の最後に書きます。あまりにもヤバすぎて感動したので、興味ある方は是非。

→こんな事を言うと悪口になりかねるが、公式のドキュメントが霞んで見える。

→もう技術者に「技術」はいらない。助かります。ありがとうございます。

 

・こんなことをしているとズルく見えるが、その通りである。

→僕が本当に大切にしている言葉として、Perlの生みの親が提唱したプログラマーが持つべき3つの美徳「怠惰」「短気」「傲慢」というものがある。

→AIを知識の出処とする行為は怠惰に即する。AIに頼って解決することは、AIに頼ればいい。

→当然、AIの情報には確たる信頼がないので、最終的な判断は人間となるのだが。

 

 

Twitterで「奴隷から開放された人間は自由を手に入れることになるが、彼らは自由を知らないため慣れ親しんだ不自由な生活を始めた」という話を聞いた。

→日本に住んでいると他人事のように聞こえるが、そんなことは無い。

→少し話が飛躍するようだが、人類は化学の発展によって少しずつ労働の必要性を失っているはずである。身近なところでは、ロボット掃除機の誕生により掃除の手間が省けている。

→これは労働という不自由からの解放とも捉えられる。

→それなのに人間の労働時間は減らないままである。もうお分かりかと思うが、これは最初の話題そのものではないか。

 

 

・AIにCHUNITHMで15理論値の出し方聞いたらガチガチの回答帰ってきた

→CHUNITHMの最高難易度のスコア理論値を取るための効率的な練習方法には、以下のようなものがあります。

プレイ動画の確認 自分のプレイ動画を撮影して、プレイ中のタイミングや課題を確認することができます。プレイ動画を見ることで、自分のミスを確認し、改善点を見つけることができます。
スロー再生の活用 曲をスロー再生して練習することで、ノーツのタイミングを正確に覚えることができます。スロー再生で繰り返し練習し、慣れるまで練習することが重要です。
小節ごとに練習する 曲を小節ごとに分けて練習することで、リズムを覚えやすくなります。一つの小節をマスターしたら、次の小節に移るというように、徐々に難易度を上げて練習していくことが大切です。
難易度の高い曲を練習する前に基礎練習をする CHUNITHMには基礎練習用の曲もあります。最高難易度のスコア理論値を取る前に、基礎練習をしっかり行うことで、スキルを高めることができます。
難易度の高い曲を繰り返し練習する 難易度の高い曲を繰り返し練習することで、徐々にリズムやパターンを覚えることができます。しかし、同じ曲を繰り返し練習するだけでなく、他の曲も練習することで、より多角的なスキルアップができます。

 

吹奏楽やってた経験から、スロー再生での練習は本当に大事にしているんだけれど、プレイ動画の確認が怠りがちかも。がんばります。

 

 

 

 

 

 

 

 

ChatGPTとのやり取りつづき

 

ワイ「構造体の中身をyamlファイルへ出力するための関数はありますか?」
 
 
 
ChatGPT「はい、libyamlライブラリには、構造体をYAMLファイルに出力するための関数がいくつか用意されています。

例えば、以下の関数があります。

yaml_scalar_event_initialize():スカラーノードを表すイベントを初期化するための関数。
yaml_sequence_start_event_initialize():シーケンスの開始を表すイベントを初期化するための関数。
yaml_sequence_end_event_initialize():シーケンスの終了を表すイベントを初期化するための関数。
yaml_mapping_start_event_initialize():マッピングの開始を表すイベントを初期化するための関数。
yaml_mapping_end_event_initialize():マッピングの終了を表すイベントを初期化するための関数。
yaml_emitter_emit():YAMLドキュメントにイベントを出力するための関数。
これらの関数を組み合わせることで、任意の構造体をYAML形式にシリアライズすることができます。

以下は、yaml_emitter_emit() 関数を使用して、構造体をYAMLファイルに出力する方法の例です。

 

(中略 サンプルコード)


この例では、"hello, world!"という文字列を含むスカラーノードを出力するために、yaml_scalar_event_initialize()関数を使用してイベントを作成し、yaml_emitter_emit()関数を使用してイベントを出力しています。出力するファイルは、fopen()関数で開いています。出力が終了したら、yaml_emitter_delete()関数を使用してYAMLエミッターを終了し、fclose()関数を使用してファイルを閉じます。

これと同様の方法で、任意の構造体をYAML形式にシリアライズすることができます。ただし、複雑な構造体をシリアライズする場合は、適切なイベントを生成するために、より多くの関数を使用する必要があります。」
 

ワイ「任意の構造体を使用する場合は、yaml_emitter_emitの第2引数へ構造体のポインタを設定すればよいですか」
 
 
 
ChatGPT「いいえ、yaml_emitter_emit() 関数の第2引数には、イベント構造体のポインタを設定する必要があります。構造体のポインタを渡すことはできません。

YAMLドキュメントに出力するために、構造体をイベントに変換する必要があります。そのためには、まず、適切なイベントを初期化する必要があります。次に、初期化したイベントをエミッターに渡すことで、YAMLドキュメントに出力することができます。

以下は、構造体をYAML形式にシリアライズするための一般的な手順です。

イベントを初期化する。
構造体から必要な情報を取得して、イベントのプロパティを設定する。
イベントをエミッターに渡す。
以下は、例として構造体をYAML形式にシリアライズする関数の一例です。

 

(中略 サンプルコード)


この例では、マッピングの開始と終了を表すイベントを初期化して、構造体の各プロパティをスカラーノードとしてシリアライズしています。シリアライズされたYAMLドキュメントは、yaml_emitter_t構造体を使用してファイルに出力することができます。

注意点として、この例では、(何故かここで息切れる)」
 

ワイ「既存の構造体が持つデータを、yaml_event_t型の構造体へ移してあげる必要があるということであっていますか」
 
 
 
ChatGPT「はい、YAMLドキュメントを構造体にデシリアライズする場合には、yaml_parser_parse()関数を使用して、YAMLファイルから読み込んだイベントを処理する必要があります。

yaml_parser_parse()関数は、イベントストリームからイベントを1つずつ取得します。各イベントには、タグ、アンカー、スカラー値、シーケンス、マッピングなどのプロパティがあります。

取得したイベントのプロパティを使用して、適切な処理を行うことで、イベントストリームからデータを構造体に変換することができます。

以下は、例としてYAMLドキュメントを構造体にデシリアライズする関数の一例です。

 

(中略 サンプルコード)


この例では、YAMLドキュメントのマッピングを表す開始イベントを取得し、その後、各スカラーノードを読み取って構造体に設定しています。注意点として、YAMLドキュメントのイベントプロパティを適切に処理する必要があります。たとえば、スカラー値の場合、event.data.scalar.valueはunsigned char *型であるため、適切なキャストが必要です。また、構造体に設定する前に、データを適切に変換する必要がある場合もあります。」
 

ワイ「yamlライブラリの関数は、基本的にyamlライブラリで定義されている構造体の型しか扱えないということでしょうか」
 
 
 
ChatGPT「はい、YAMLライブラリの関数は、YAMLライブラリで定義されている構造体の型を前提としています。したがって、YAMLライブラリを使用する際には、YAMLライブラリで定義されている構造体の型を使用する必要があります。

例えば、libyamlライブラリで定義されている構造体の一部を以下に示します。

yaml_parser_t: パーサーを表す構造体
yaml_emitter_t: エミッターを表す構造体
yaml_event_t: YAMLドキュメントのイベントを表す構造体
yaml_token_t: YAMLドキュメントのトークンを表す構造体
yaml_document_t: YAMLドキュメントを表す構造体
yaml_node_t: YAMLドキュメントのノードを表す構造体
これらの構造体の型を使用することで、YAMLドキュメントのパース、シリアライズ、またはデシリアライズなど、必要な処理を行うことができます。ただし、ユーザー定義の構造体を直接YAMLライブラリの関数に渡すことはできません。必要に応じて、ユーザー定義の構造体からYAMLライブラリで定義されている構造体に変換する必要があります。」
 

ワイ「以上の情報が記載されているドキュメント等はありますか」
 
 
 
ChatGPT「はい、libyamlの公式ドキュメントには、libyamlで使用される構造体や関数についての情報が詳細に記載されています。以下は、参考になるドキュメントのリンクです。

libyaml documentation: https://pyyaml.org/wiki/LibYAML
libyaml API documentation: https://pyyaml.org/wiki/LibYAMLDocumentation
LibYAML tutorial: http://blog.libyaml.org/wiki/LibYAML_Tutorial
また、yaml-cppの公式ドキュメントにも、yaml-cppで使用される構造体や関数についての情報が詳細に記載されています。以下は、参考になるドキュメントのリンクです。

yaml-cpp documentation: https://github.com/jbeder/yaml-cpp/wiki
yaml-cpp API documentation: https://yaml-cpp.github.io/yaml-cpp/annotated.html
これらのドキュメントを参照することで、YAMLライブラリで使用される構造体や関数について理解を深めることができます。」

 

 

以上!

 

 

 

何がやばいって「AIの回答は信頼性が無いので最終的な判断は人間」と述べたけど、ドキュメントを聞けば提示してくれるので判断すら容易になること。

ヤバすぎです。俺の仕事はもうお前に任せる。