ChatGPT APIの無料枠を使おうと思ったら期限切れてた

FlutterでChatGPTのアプリを試しに作ってみようと思ってAPIたたいてみると、

“message”: “You exceeded your current quota, please check your plan and billing details.”

というエラーが…。

確認してみると2023年4月1日に無料枠の18$は期限切れてるっぽい。

新しくアカウント作ったら無料枠使えるかなと思いつつ、まだ試していません。

Flutterのパッケージshare_plusのShare.shareFilesが非推奨なのでShare.shareXFilesに変更

<今回の環境>
Flutter version 3.10.6
share_plus: 7.0.2
Android 10

Flutterのパッケージshare_plusのShare.shareFilesが非推奨ということで、vscodeから注意される。

下記の記事によると2022年11月3日よりバージョン 4.5.0 以降ではshareFiles()が非推奨になり、代わりにshareXFiles()が導入されたとのこと。

小ネタ/Flutter で share_plus を使って共有機能を実装する

とりあえず、Share.shareFilesが非推奨なのでShare.shareXFilesを使ってくださいよってことらしい。


final File imageFile = await File('${dir.path}/image.png').writeAsBytes(response.data);
await Share.shareFiles([file]);

処理の内容としてはローカルのテンポラリーに画像データを一時保存し、それをshare_plusでシャアできるようにする機能。

変数imageFileをXFile型に変更すればいいのかな、と思ったのですが、XFilesはwriteAsBytesの機能が廃止されているみたいなのでwriteAsBytesまではFileで処理してシェアするのはXFile型の変数を別途用意して賄う方針にしました。


final File imageFile = await File('${dir.path}/image.png').writeAsBytes(response.data);
XFile file = XFile(imageFile.path);
await Share.shareXFiles([file]);

こんな感じでXFileを作ってあげて、shareXFilesの引数にXFileをいれたら改善します。

Windows10にFlutterの開発環境を構築してみた

Flutterでのネイティブアプリの開発に興味があったので開発環境を構築してみました。Macでの開発環境の構築は情報がたくさんあるのですがWindowsだとあんまりやってる人がいなくて途中ハマったところとかあるので備忘録として記しておきます。

正直、iosのことも考えるとmacで開発環境の構築したいところではあるのですが、生憎macOSのPCを持っていないのでWindows10でやってます。なのでiosアプリも作りたいよって方はmacで開発環境を構築するようにお願いします。

さっそくですが、大まかな流れとしては以下の記事を参考に構築させて頂きました。

https://qiita.com/smiler5617/items/fbfee798b641f0352176

1.Flutter SDK のインストール
2.Android Studioのインストール 
3.VScodeにプラグインのインストール
4.Flutterプロジェクト作成前の最終確認
5.Flutterプロジェクトの作成

という感じですね。詳しい手順は元記事を参照して頂くとしてハマったポイントだけメモっておきます。

「 ! Warning: `dart` on your path resolves to …」??

flutter doctorを実行すると、パスは通っているのだけれど、「 ! Warning: `dart` on your path resolves to …」みたいなwarningが表示される状態になりました。

$ which flutter

で、確認すると環境変数に設定したパスよりも上に確かになんかパスがいたので、そこをたどってみると、flutterってファイルがあったので消したら直りました。この対応が正しいのかどうか…、不明なのと原因も分からないので行う際は自己責任でお願いします。

cmdline-toolsをどこからインストールするか分かり辛い

赤丸の部分がタブになっているという…、SDK ToolsというところをクリックするとAndroid SDK cmdline-toolsというのが表示されるので、そこにチェックを入れてapplyするとインストールできます。 

そんな感じで個人的な備忘録でした。

代表的なソートアルゴリズム

ChatGPTに教えて貰いました。備忘録として。

代表的なソートアルゴリズム

  1. バブルソート(Bubble Sort):
    隣接する要素を比較して順序が逆なら交換することを繰り返す。
    比較回数がO(n^2)、入れ替え回数がO(n^2)となるため、効率は良くない。
  2. PHPでバブルソートを実装する

  3. 選択ソート(Selection Sort):
    未ソート部分から最小(または最大)の要素を選び、先頭の要素と交換することを繰り返す。
    比較回数がO(n^2)、入れ替え回数がO(n)となるため、効率はあまり良くない。
  4. PHPで選択ソートを実装する

  5. 挿入ソート(Insertion Sort):
    ソート済みの部分に要素を適切な位置に挿入することを繰り返す。
    ほぼ整列している場合に効率的で、比較回数がO(n^2)、入れ替え回数がO(n)となる。
  6. クイックソート(Quick Sort):
    ピボット要素を選び、ピボットより小さい要素と大きい要素に分割し、それぞれ再帰的にソートする。
    平均的な場合において、比較回数がO(n log n)と非常に効率的。
  7. マージソート(Merge Sort):
    分割統治法を用いてリストを分割し、それらをマージしながらソートする。
    比較回数がO(n log n)と非常に効率的で、安定している。
  8. ヒープソート(Heap Sort):
    ヒープ構造を使ってソートする。
    比較回数がO(n log n)と効率的で、一定の追加メモリが必要。
  9. シェルソート(Shell Sort):
    間隔を設定して部分的にソートを行い、徐々に間隔を縮めていく方法。
    比較回数がO(n log n)からO(n^2)となり、データのパターンによって効率が変わる。

これらのソートアルゴリズムはそれぞれ特徴と効率性が異なるため、ソート対象のデータの特性によって適切なアルゴリズムを選択することが重要です。

PHPで6×6の二次元配列を指定したブロックサイズ毎に合計し出力する

二次元配列の処理に手間取ったので練習として作成したコード。$div_numという変数でブロックサイズを指定し6x6の二次元配列を指定したブロックサイズ毎に合計して結果を出力します。

$div_numで割り切れない場合はエラーになるのでtry-catchで例外処理にしています。

15行目以降の$i += $div_numと$j += $div_numがポイントで行と列の処理のインクリメントが$div_numずつ増えていくことで指定したブロックサイズ毎の処理を実現しています。

オープンソースのLLM「Llama 2」のデモを使う方法

最近、話題になっているMeta社のオープンソースのLLM「Llama 2」のHugging Face Hub(ハギングフェイス・ハブ)で共有されているデモを試してみました。

ちなみにHugging Face Hubは、Hugging Face社が提供している自然言語処理(NLP)のためのオープンソースのモデルやデータのリポジトリということで、学習済みのモデルが共有されたりするサービスです。

以下のリンクよりデモ画面に飛べます。

ysharma/Explore_llamav2_with_TGI

 
デモのUIはこんな感じ。

日本語で会話できるか聞いてみたところ、会話できると返答があったものの、その後、英語で文章を生成しているので、今のところ日本語はあんまり得意ではない様子。

せっかくオープンソースのLLMが出てきたので、今後、自身の開発などでも、ぜひ、利用してみたいと思います。

PHPでハノイの塔を解く

再帰的アルゴリズムの練習のためにPHPでハノイの塔を解いてみました。正直、再帰的アルゴリズムについては、まだ頭が混乱するので、ちょっと数をこなす必要があるなと感じています。

ハノイの塔についての概要

ハノイの塔(Tower of Hanoi)は、数学的なパズルや再帰的アルゴリズムの代表的な例として知られています。

ゲームの目的

ゲームの目的は、3本の棒といくつかの円盤があるとき、最初に一つの棒に積まれた円盤を他の棒に移動させることです。

ルール

  • 全ての円盤は、大きさによって異なる直径を持っています。
  • 3本の棒のうち、一つの棒に円盤を積み重ねて配置します。これを「出発棒」と呼びます。
  • 他の2本の棒を「中間棒」と「目標棒」として使います。
  • 全ての円盤は「出発棒」に積まれた状態から、「目標棒」に積み重ねることを目指します。
  • 円盤を一度に1枚だけ移動できます。
  • 小さい円盤の上に大きい円盤を積み重ねることはできません。
  • 再帰的に円盤を移動することにより、最小の手順で目標棒に円盤を移動させることが可能です。

再帰的アルゴリズム

ハノイの塔は再帰的アルゴリズムを用いて解くことが一般的です。再帰的アルゴリズムは、大きな問題をより小さな問題に分割して解決する方法です。ハノイの塔では、最も大きな円盤を目標棒に移動させるために、残りの円盤を中間棒に移動させる必要があります。このように、大きな問題を小さな問題に分割して解決する再帰的な手法を使うことで、効率的に円盤を移動させることができます。

教育的な側面

ハノイの塔は再帰やスタックなどの基本的なアルゴリズムとデータ構造を理解するのに役立つ教育的な側面を持っています。また、複雑なアルゴリズムや再帰的なアプローチを学ぶ上での良い練習問題としても利用されます。

PHPでバブルソートを実装する

ソートアルゴリズムへの理解を深めるためにPHPでバブルソートを実装してみました。

バブルソートの概念

バブルソート(Bubble Sort)は、隣接する2つの要素を比較し、必要に応じて交換を行いながら要素を適切な位置にソートしていくアルゴリズムです。

動作の概要

  1. 比較と交換のループを開始
  2. 配列の先頭から隣接する要素を順番に比較
  3. 現在の要素が次の要素より大きければ、両方の要素を交換
  4. 操作を配列の最後まで続ける
  5. 最大値が末尾に移動し、末尾に確定
  6. 次のループを開始し、末尾の要素を除いて同じ操作を行う
  7. ループを配列の要素数-1回繰り返す

特徴

  • シンプルで実装が容易
  • 効率的なソートアルゴリズムと比べて遅い(O(n^2)の計算量)
  • 小規模なデータに対しては利用されることがある
  • 大規模なデータセットには向いていない

Close