2023年2月14日火曜日

JavaScriptでテーブルの動的生成

JavaScriptでテーブルの動的生成なのだが、

ググってみると、どうも皆さん、

よくわからない書き方をしているので、

書いてみた

やろうと思えばJQueryのDataTablesのようなものが作れます


<html>
<!DOCTYPE html>

<head>
    <meta charset="utf-8">
    <title>テーブルの動的生成</title>
</head>

<body>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>name</th>
                <th>price</th>
            </tr>
        </thead>
        <tbody id = "tb">
        </tbody>
    </table>
    <script>
        js = [
            {id:1,name:"りんご",price:100},
            {id:2,name:"みかん",price:200},
            {id:3,name:"とまと",price:300}
        ];
        var tb = document.getElementById("tb");
        var tr;
        var td;

        js.forEach(element => {
            tr = document.createElement("tr");
            td = document.createElement("td");
            td.innerHTML = element.id;
            tr.appendChild(td);
            td = document.createElement("td");
            td.innerHTML = element.name;
            tr.appendChild(td);
            td = document.createElement("td");
            td.innerHTML = element.price;
            tr.appendChild(td);
            tb.appendChild(tr);
        });

    </script>
</body>


こんな感じでテーブルが出来る

以上








2023年2月9日木曜日

Oracle Linux を RaspberryPiのDockerで動かす

docker pull arm64v8/oraclelinux:9-slim

docker run -it arm64v8/oraclelinux:9-slim

以上終了・・・

Oracleが用意したLinuxというだけで、中身すっからかんでした・・・

ここにOracleDatabase入れられるのだろうか?

本当はそっちが目的だったのですが・・・

うーん、現時点ではだめぽ

OracleInstantClientはあるけど、

Databaseが無い・・・

OracleDatabase を RaspberryPiに入れること自体無理があるのだろうか?

ソースあれば落としてコンパイルできるんだがなぁ・・・

2023年2月6日月曜日

VSCode+WSL2でHTML編集場所を作ってGit初期化、Dockerでnginxを起動して、WindowsのブラウザからHTML表示まで

vscode起動

wsl2へリモート接続
ここまではどこかのやり方を見て欲しい

vscodeのターミナルから以下実行
mkdir ~/html_lectures
cd ~/html_lectures
git init

続けてDockerでnginxを起動し、HTML編集場所のルートを/usr/share/nginx/htmlへマウントし、nginx側の80を8080にバインドして起動
docker run --name nginx -d -v $(pwd):/usr/share/nginx/html -p 8080:80 nginx

続けて、
~/html_lectures/lecture1/index.html を適当に作成

Windowsブラウザから
localhost:8080/lecture1/index.html で表示

デバッグは正直VSCodeではなく、ブラウザでやったほうが便利

あとはVSCodeで普通にgitへプッシュ

2022年10月21日金曜日

kodiful(kodira) on LibreElec(RaspberryPi4)

kodiでラジオ聞けないのかなと調べたら、アドオン作ってくれてる方が居られた
kodifulと言うもので、iPhoneでPy3をダウンロードした
iPhoneのファイルから、LibreElec(RaspberryPi4に入れてあるKodi)に接続し、Kodiの外付けハードディスクにコピーした
その後、Kodiのメニューのアドオンへ行って、zipからインストールを選び、iPhoneからコピーしたzipを選択
しばらくすると、kodiraがインストールされる
ここで一度再起動しないと民法のラジオは聞けないようだ
だが、上記工程でradikoで聴ける物は全部聞けるようになった
めちゃ良い


2022年10月2日日曜日

OMG V2-Sに変えた

 ZestyNimbleFlexV3はイマイチだと判断

部品が高すぎる

そこでOMG V2-Sに変えてみた

このくらいならエフェクターに乗る


続いて、温度とファンのタワーを調査




温度は235℃、ファンは60%に決定する
続いていつもの船をプリント







普通レベルにまでは調整出来た

しかし、連続稼働していると小さいモーターが熱くなってくる

まだ適切な電流がわからないが、600mAだったのを400mAにしてみた

これで、しばらく様子見する

2022年9月14日水曜日

Zesty Nimble Flex

部品が届いて変えてみたら改善した。

改善したと言うのは、自分の中で完全では無いからだ。

実は、肝心の送り部品の一部が欠けていて、前の状態でもフィラメントの送り不良が出ていたのに気が付けなかったようだ。

送り用部品も頼んだのだが、まだ交換してない
初期不良なのだが、うーん、ゴネる気は起きないし、時間見つけて交換してみよう。

もしそれで自分的に納得できなければ、軽いエクストルーダーを探して、リモートエクストルーダーを諦めるか、またはNimbleの部品を使って改造するか考える。

2022年8月19日金曜日

LibreElecのDocker add-onsで、MySqlとPostgresを起動

 家で動いていたLibreElecをRaspberryPi4に交換した

SSHを有効にして、PCからも接続できるようにした

うちはWindows11Previewなのだが、コマンドプロンプトから普通にSSHで接続できる

なんでみんなTeraTermとかPuttyとか使ってんの?

HDDに動画が保存してあるので接続したらきちんと今まで通り認識してテレビで再生で来た

UPNPも有効にして、別に設置してある録画用RaspberryPiで動かしているminidlnaの配信してる動画も見れるようになった


ところで、最近開発してるとDBが必要になる事が多く、まぢ困っていた

この際このRaspberryPi4にDB入れちゃったらいいんじゃないの?

ちょっと調べてみたら、LibreElecにはAdd-OnsでMariaDBがある

入れてみた

動いているようなのだけどつながらない・・・

さらに調べた、え?Add-OnsにDockerあるじゃん?

入れてみた

使ってみる

mkdir /storage/mysql
docker run -d -p 3306:3306 -v /storage/mysql:/var/lib/mysql --restart unless-stopped -e MYSQL_ROOT_PASSWORD=your_pass --name kodi-mariadb yobasystems/alpine-mariadb
docker exec -it kodi-mariadb mysql -u root -p
ここでさっき設定したパスワード入れる
GRANT ALL ON *.* TO 'kodi'@'%' IDENTIFIED BY 'kodi';
FLUSH PRIVILEGES;


おいおい、動くじゃん・・・

A5Mk2でも接続出来た

これでいいや

ちなみに、再起動してもちゃんと動いている

次からログインするときは

docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS
195a88e3ef1f        yobasystems/alpine-mariadb   "/scripts/run.sh"   10 hours ago        Up 8 hours
docker exec -it 195a88e3ef1f mysql -u root -p
んでパスワード入れてmysqlのコンソールに入れる

A5Mk2でも接続出来るから、そっちであれこれやってもいい

てか、普通はそうするだろう

おっと、抜ける時は

quit;

で抜けられる

んで、ついでにPostgresも入れてみる

まずは mkdir /storage/postgresでフォルダ作ってから以下のように起動


docker run -d -p 5432:5432 -v /storage/postgres:/var/lib/postgres --restart unless-stopped -e POSTGRES_PASSWORD=your_pass  --name kodi-postgres  postgres


やっぱ、Dockerのデタッチモードは楽だよなぁ

なんでみんな使わないの?

それとも使ってるの?


で、ここで気が付いた

/storage/postgresにライブラリが無い・・・

え、どこなの?

せっかくフォルダつくったのに・・・

まぁ動いているから良し

-vはちょっと複雑なんだよなぁ・・・

ここで開発するわけでもないし

、普通に接続してテーブル操作するだけならSharedにLib入れる必要もないからいいか


造形不良(積層割れ)

どうもプリント品質が良くない

明らかに押出し不足による横線が目立つようになってきた

造形もそのためにかなり脆弱

積層で割れる

さらに、ノズル詰まりガチになってきた

いくつか原因を推測してみる

  1. ノズルの寿命
  2. モーターが小さい(ハーフサイズ)ため押出不足
  3. コネクタの接触不良
  4. ファームの電流設定が小さすぎる
んで、対応してみた

  1. ノズル交換してもだめ、全然変わらない
  2. モーターのサイズは小さいが今まで問題は無かった。しかし、リモートエクストルーダなので、ワイヤーを固定する部分で滑っているのかも?分解し、組み立て直したが全く変わらず。モーターの寿命なのか??
  3. コネクタはたまに接触不良を起こすことがあった(X軸だけ動かないとか)だが、普通は動かなくなるはずなので、今回は接触不良ではないと思われる
  4. 確かに小さかった。ハーフサイズのモーターなので、そんなに気を遣わなかったのだが、定格700mAだったので、対応したが、やはり全くダメ

うーん
リモートエクストルーダか?
だが、ZestyNimbleがそんなに簡単に壊れるのか?
たしかにLineのグループでみなさんのエクストルーダを見ていると、ベアリングに溝が刻まれ、押出不良になっていることもある
だが、NimbleのBreechを見ると、そこまで削れては居ない・・・
ためしに針金で縛ってみた・・・改善したw
まぢかよ、Nimbleかよ・・・
とりあえず、Nimbleを分解してみたら、
押出のギアの造形が悪く、ガタツキが生まれるようになってる
確かに、組付け当初から押出のときに不安定さを感じてはいた・・・

うむ、、、
まずはNimbleの部品注文かな・・・
自分でリモートエクストルーダを作るのもありだけど
ここまで動く状態なので、部品の改善を考えるべきなのかもしれない・・・
それも視野に入れ、まずは部品を交換してみることにする。
それにしても、ZestyNimbleFlexV3は一年もたなかったってことになる
やはり、Breechはちょっと脆弱なんだよなぁ
ここの構造を変えるべきだって事になる

2022年5月8日日曜日

Duet3 6HC MBのアップグレード

アップデートの仕方

今は3.3RC1なので、安定していると言い難いのでアップデートすることにした。
sudo apt update && sudo apt install -y libwxgtk3.0-dev libreadline-dev
git clone https://github.com/shumatech/BOSSA
cd BOSSA
make
Bossaてのはフラッシュツールらしい
続いてここからファームを落とす
名前はこれ
Duet3Firmware_MB6HC.bin
/opt/dsf/sd/firmware/Duet3Firmware_MB6HC.binに上書き
USBでPiとDuetをつなぐ必要があるようだ
そこで
~/BOSSA/bin/bossac -e -w -v -b /opt/dsf/sd/sys/Duet3Firmware_MB6HC.bin
これで書き込もうと思ったら、
No device found on /dev/ttyACM0
と出てダメだった。
仕方ないので、
Duet Web Controllerから、
SystemのFirmwareDirectoryを表示したら、さきほどコピーしたDuet3Firmware_MB6HC.binが居たので、
これを選んでInstallを選んでみた。
いあ、戻ってこない・・・60%で止まった
しかたないので、Duet3 6HC MBの中央にあるジャンパー(ERASEの印あり)を閉じて再起動
RaspberryPiからみたら/dev/ttyACM0が出てきた
ジャンパーを抜いて、
Bossaの先ほどのコマンドで書き込めた

再起動したら、今度はパネルとの接続が出来てない
パネルのセットアップからボーレートを57600にしたら接続出来た。
ブラウザからも確認できた。
色々大変・・・

2022年4月25日月曜日

PICのポートアクセスの仕組みをヘッダーから見る

かなり昔の事、PIC12F509というちっこいのを昔使ったことがあって、

最近はどうなの?と思って開発環境を入れてみた

まず、IDE

ここからインストール

https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide

次にコンパイラが入ってないのでコンパイラのインストール

https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers#tabs

んで、MPLAB X IDEを開き

FileからNew Project


Nextを押してPIC12F509を選択


デバッガは無いのでこのままNext

コンパイラを選択してNext

プロジェクト名を入れてFinish

Source Filesで、メインを作ってみる(main.cを選択)

すると、こんなメインが出来上がる

#include <xc.h>

void main(void) {
    return;
}


ポートについて調べようと、Classesタブを見てみると、
Librariesの下にGPIObitsがあったので、中身を見てみた。


ちなみに、データシートによると、GPIOは06h割り当てられている。

さきほどのGPIObits_tを選択すると、pic12f509.hのヘッダが開くのだが、

そこに以下のように書かれてる。

typedef union {
    struct {
        unsigned GP0                    :1;
        unsigned GP1                    :1;
        unsigned GP2                    :1;
        unsigned GP3                    :1;
        unsigned GP4                    :1;
        unsigned GP5                    :1;
    };
} GPIObits_t;
extern volatile GPIObits_t GPIObits __at(0x006);

構造体でビットが定義してあって、GPIObits.GP0=1;とかやればいいんだなってのが分かる

#include <xc.h>

void main(void) {
    GPIObits.GP0 = 1;
    return;
}




2022年4月24日日曜日

BisonとFlexで四則演算(カッコ未実装)

よくある、BisonとFlexを使った四則演算

カッコはまだ実装してない

しかも、抽象構文木も作ってないし、ABSの実装も適当

ただ、優先度つけてるだけ


mycalc.y

%{
#include<stdio.h>
%}

%token NUMBER
%token ADD SUB MUL DIV ABS
%token EOL

%%

calclist:
    | calclist exp EOL {printf("= %d\n", $2); }
;

exp: factor
    | exp ADD factor { $$ = $1 + $3; }
    | exp SUB factor { $$ = $1 - $3; }
;

factor: term
    | factor MUL term { $$ = $1 * $3; }
    | factor DIV term { $$ = $1 / $3; }
;

term : NUMBER
    | ABS term { $$ = $2 >= 0 ? $2 : - $2; }
;

%%

int main (int argc, char** argv)
{
    yyparse();
    return 0;
}

yyerror(char *s)
{
    fprintf(stderr, "error: %s\n", s);
}

んで、これをBisonにかける

bison -d mycalc.y

mycalc.tab.hが出来るので、中身を見ると以下の記述が出来ている。

/* Token type.  */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
  enum yytokentype
  {
    NUMBER = 258,
    ADD = 259,
    SUB = 260,
    MUL = 261,
    DIV = 262,
    ABS = 263,
    EOL = 264
  };
#endif

%tokenから定義が作られる。

つぎに字句解析部

mycalc.l

%{
#include "mycalc.tab.h"
int yylval;
%}

%%
"+" { return ADD;}
"-" { return SUB;}
"*" { return MUL;}
"/" { return DIV;}
"|" { return ABS;}
[0-9]+ { yylval = atoi(yytext); return NUMBER;}
\n { return EOL;}
[ \t] {}
. {printf("Mystery character %c\n", *yytext);}

%%

さきほどbisonが吐き出したmycalc.tab.hをincludeして、

ADDやSUBなどを返すのが主な仕事

値はyylvalに入れて、NUMBERを返すようになっている。

こっちにはmain関数は無い

flexでlex.yy.cを作る

flex mycalc.l


んで、lex.yy.cを見てみると、すげー長いコードが出来ていて、

こんな字句解析要る?ってみんな思うし、

自分で作ったほうがよくね?と話題になったりする。


最後にまとめる

 cc -o mycalc XQParser.tab.c lex.yy.c -lfl


./mycalc

1+2

= 3

3+3

= 6

1+2+3*4/2

= 9

まぁ一応動くのが出来る。


ここまで、Bison And Flexのコードなんだけど、

ABS動かないよね、なんじゃこれ状態?