Flutter で「Could not update files on device: PathAccessException: Cannot open file, 」
コンソールで flutter pub getをすると直る時がある。
「技術メモ」カテゴリーアーカイブ
Dockerで「ModuleNotFoundError: No module named ‘skbuild’」
docker build -t *****
の処理を行っているときに
「ModuleNotFoundError: No module named ‘skbuild’」
ができたときの対処方法です。
Dockerfile の中で
RUN pip3 install ***
が始まる前に
pip自体のアップデートを行う、1行を足してください。
RUN pip3 install --upgrade pip
AI系の環境をDockerにして、複数環境を
Dockerにする理由
AI系の開発をしている中で、勢いあまって、複数の機能を同じ環境にいれてしまい、整理できない。
音声処理、画像処理、統計予想処理を同じ環境に入れてしまうと後で分離して、開発が不可能になる。
Dockerでわける。
https://www.docker.com/
ひとまず、jetson nanoから
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml
l4t-ml:r35.2.1-py3を使ってみます。
環境
まずは、環境を最新にします。
sudo apt update
sudo apt upgrade -y
mkdir data
cd data
mkdir l4t-ml-r35
cd l4t-ml-r35
docker自体は事前にはいっていると思うので、コンテナ指定して環境取得するシェルを書く
vi rundocker.sh
xhost + sudo docker run \ -it \ --rm \ --net=host \ --runtime nvidia \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix/:/tmp/.X11-unix \ -v ${PWD}:/data \ nvcr.io/nvidia/l4t-ml:r35.2.1-py3
実行権限に変更
chmod a+x rundocker.sh
実行
./rundocker.sh
Status: Downloaded newer image for nvcr.io/nvidia/l4t-ml:r35.2.1-py3
allow 10 sec for JupyterLab to start @ http://192.168.158.57:8888 (password nvidia)
JupterLab logging location: /var/log/jupyter.log (inside the container)
起動しているかを確認
ブラウザで
http://192.168.158.57:8888
パスワード:nvidia
でアクセス
コマンドで
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
147cb497e537 nvcr.io/nvidia/l4t-ml:r35.2.1-py3 “/bin/sh -c ‘/bin/ba…” 40 minutes ago Up 39 minutes competent_saha
AI系のライブラリーのmakeで謎のエラーのとき
AI系のライブラリーのmakeで謎のエラーのとき・・・
ファイルがあるのに、ファイルがないとか、ライブラリのバージョンが違うとか・・・
実際にはあっているのに、エラーになることがあります。
リソース不足でのエラーが多いと思うので、makeする前に
やっておきましょう。
stack sizeを制限なしにしておく。
# ulimit -a
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 13907 max locked memory (kbytes, -l) 65536 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 13907 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
# ulimit -s unlimited
aoki@ai-desktop:~$ ulimit -a
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 13907 max locked memory (kbytes, -l) 65536 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) 13907 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
無限値の設定
https://www.ibm.com/docs/ja/wca/3.5.0?topic=tasks-setting-ulimit-values
PHPでChatGPT3.5のAPIをつかって、一文字づつ表示するサンプル
PHPでChatGPTでAPIを叩いてみたいけど・・・・面白くしたい方へ。
ChatGPTのブラウザ画面のように一文字出てくるサンプルです。
ChatGPT3.5のAPIのキーを取得して、試してみてください。
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); function send_prompt($prompt = '') { $API_KEY = '*************************************************';//ここにキーを入れてね。 if (!$prompt) { return; } $headers = array( 'Content-Type: application/json', 'Authorization: Bearer ' . $API_KEY ); $data = array( 'model' => 'text-davinci-003', 'prompt' => $prompt, "max_tokens" => 500, "temperature" => 1, "top_p" => 1, "frequency_penalty" => 0.0, "presence_penalty" => 0.6, "stop" => array(".", "!", "?") // 終了文字を調整します ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/completions'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $response_data = json_decode($response, true); return trim($response_data['choices'][0]['text']); } $prompt = 'こんにちは、質問していいですか?';//ここに質問を書いてね $chat_text = send_prompt($prompt); echo ' <script> document.addEventListener("DOMContentLoaded", function () { const text = \'こんにちは、私はChatGPTです。'.$chat_text.'\';//ここは回答です、アレンジしてね const outputElement = document.getElementById(\'output\'); const typingDelay = 200; // ミリ秒単位でのタイピングの遅延 function typeText(index) { if (index < text.length) { outputElement.innerHTML += text.charAt(index); setTimeout(() => typeText(index + 1), typingDelay); } } typeText(0); }); </script> <div id="output"></div> '; ?>
mysqldumpでのエラー
一番単純に下記のコマンドを叩くとエラーになります。
コマンド:
mysqldump -h ホスト名 -u ユーザー名 -p テーブル名 >ファイル名
エラー:
mysqldump: Error: ‘Access denied; you need (at least one of) the PROCESS privilege(s) for this operation’ when trying to dump tablespaces
テーブルスペース情報をダンプしなくてもよい場合、–no-tablespacesを付けると、エラーがでなくなります。
mysqldump –no-tablespaces -h ホスト名 -u ユーザー名 -p テーブル名 >ファイル名
ちなみに下記のオプションでもエラーがでるようになったので、サーバによっては外した方がいい。
–single-transaction
WordPressで400万ページ投稿するには
会社情報のサイト https://awb.jp/
当初はまじめに記事をガンガンアップでしていた。
数万ページくらいでカップラーメンができるくらい遅いページ表示。
ページ投稿もどんどん重くなり、投稿にもカップラーメンできそうでした。
あきらめて、全部消して、ページ投稿の見直し。
■ページ投稿
いろいろなCSVアップツールでやってみたが、タイムアウト等でほぼ無理。
直接投稿のプログラムをたたきます。
データも最小限にします。
wp_insert_postで投稿ページ登録。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_insert_post
-プログラム例:実際はもう少し複雑—————————————————-
$post_id = wp_insert_post(array(
'post_type' => 'post',
'post_title' => $item[0],
'post_content' => $item[2],
'post_status' => 'publish',
'post_category' => $item[3],
'tags_input' => $item[4],
'comment_status' => 'closed',
'ping_status' => 'closed',
));
——————————————————
他のデータとリンクしたい部分をカスタムフィールドに入れておきます。
add post meta
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_post_meta
——————————————————
add_post_meta($post_id, 'hogehoge_number', $item[7])
——————————————————
ひたすら、1ページごとにサーバに投げます。
ページは最小限のデータにして、カスタムフィールド(上記の例だとhogehoge_number)にキーをいれておき、
wpの標準のテーブルと付加価値的データのテーブルを作り、カスタムフィールドで連携して、ページを生成します。
■不具合がでる。
プラグインによってはエラーになります。
サイトマップを作るプラグイン等は特に注意です。
WP「GDPR Cookie Consent」 で「設定を更新できません。」の対応方法
WordPressのコンテンツでの「GDPR(General Data Protection Regulation:一般データ保護規則)」用プラグイン
CookieYes | GDPR Cookie Consent & Compliance Notice (CCPA Ready)
このプラグインは設定が簡単ですが、「「設定を更新できません。」と出て、更新されないことがある。
WAF(Web Application Firewall)でブロックされている可能性があるので、
WAFのログを確認してください。
「*****/edit.php?post_type=cookielawinfo&page=cookie-law-info」というエラーログが出ていたら、
設定の時だけ、WAFをオフにしてください。設定が終わったら、オンにしてください。
Flutter2インストールメモ(MAC)第1回
Flutter(フラッター)は、Googleによって開発されたフリーかつオープンソースのUIのSDK。
クロスプラットフォームアプリケーションを開発することができる。
今回はMACでのインストール。
1.Flutterダウンロード
https://docs.flutter.dev/get-started/install/macos
MAC OSにFlutterの開発環境を入れる。
ダウンロードボタン「flutter_macos_2.10.0-stable.zip」からダウンロード
2.格納場所に格納
$ mkdir ~/development
$ cd ~/development
「~/Downloads/にダウンロードされているものが、展開されているので、」
$ mv ~/Downloads/flutter ./flutter
$ export PATH=”$PATH:`pwd`/flutter/bin”
3.環境確認
$ flutter doctor
これで何が足りないかをチェックしてくれる。
[×]が出ているものが足りないものなので、入れていく。
4.足りない環境を追加
4.1.1 Android Studioを入れる
[✗] Android toolchain – develop for Android devices
✗ Unable to locate Android SDK.
の表示がある場合の作業
https://developer.android.com/studio/index.html
Android Studio をダウンロード。
Intel チップか、APPLE チップかを選んでインストール。
4.1.2 Android SDK Command-line Toolsを入れる。
Android Studioを起動して、上のメニューの「Preferences 」を選ぶ
Appearance & Behavior > Android SDK
Android SDK Command-line Tools (latest) を入れる。
4.1.3 android-licenses 処理
$ cflutter doctor –android-licenses
ライセンスを承認のメッセージがくるので、yを入力。
4.2 Xcode
[✗] Xcode – develop for iOS and macOS
✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
Download at: https://developer.apple.com/xcode/download/
の表示がある場合の作業
4.2.1 Xcodeをインストール
https://developer.apple.com/xcode/download/では最新がベータ版になっていることがあるので、
App StoreでXcodeの最新版を入れる。インストールには数時間かかるので注意しましょう。
4.3 CocoaPods インストール
$ sudo gem install cocoapods
4.4 再度確認
$ flutter doctor で[×]がないことを確認。
5 Android Studio 設定
Pluginsを選ぶ、Flutterを選択し、インストール
次回に続き・・・
地図のオープンデータ「OpenStreetMap」
地図を使ったサービスを考える場合はGoogle Mapを使用しますが、
「$200 usage every month for no charge. That’s 28,500 maploads per month for no charge. 」
(https://mapsplatform.google.com/pricing/?hl=ja)
とあり、有名サイトになった場合には、有料になります。
そこで地図のオープンデータの使用を考えてみよう・・・・
OpenStreetMap(OSM)は、誰でも自由に地図を使えるよう、みんなでオープンデータの地理情報を作るプロジェクトです。
https://openstreetmap.jp
「OpenStreetMapとその協力者をクレジットすれば、データを自由にコピー、配布、送信、利用することができます。変更したり翻案したりしたデータは同じライセンスに従う場合のみ、提供することができます。」
Googleマップのようにマーカーを付けることが可能。
https://www.openstreetmap.org/?mlat=緯度&mlon=経度
弊社の位置だと、こちら。
https://www.openstreetmap.org/?mlat=35.70010&mlon=139.77402
ZOOMしたい場合は、URLに#map=ズームの数/緯度/経度を追加。
https://www.openstreetmap.org/?mlat=35.70010&mlon=139.77402#map=17/35.70010/139.77402
埋め込みも可能。
大きな地図を表示
公開されているGPSトラッキングが見えるので、精度の悪いGPS端末があるとズレることはあるが参考値としてはよいと思う。
弊社秋葉原駅付近のトラッキングデータ。
“Base map and data from OpenStreetMap and OpenStreetMap Foundation”