2024年8月25日日曜日

3Dプリンタを園芸へ

 最近3Dプリンタを園芸に使っている

バラ用の鉢はこれに統一することにした


PETGで作れば耐候性も充分だ

サボテンの方は以前投稿した通り

TPUで六角形の小さい鉢を作り沢山植えてある

2024年8月11日日曜日

XML Dataをフォルダやファイルシステムでシリアライズする方法に関して考察

XML Databaseライクなものを作るために、XML構造をフォルダとファイルにシリアライズする方法をずっと模索してきた

大体アイデアが固まったので、ChatGPTに聞いてみた

そしたらPythonコードで確認までしてくれて、おいおいお前まぢかってなった

ただし、わたしは知っている
途中に挿入するコメントの事を考えてない(コメントは無視で保存したいが、、、)

ネームスペースはフォルダにアンダーバーで区切って保存するように考えている

====ChatGPTに聞いた内容

XMLをフォルダやファイル構造にしてシリアライズするアイデアを再考していたが
アトリビユートをファイル名にすると、元のXMLを再現する事ができない(アトリビユートの順番が再現不能)

そこでアトリビュートをAttr.txtにまとめ、タグ内のテキストはinner.txtに保存するように考えた

タグはフォルダにするが、プレフィックスとして番号付けを行う

<books>
    <author name="太宰治">
太宰の作品
        <book title="人間失格" price="100">
         <book title="走れメロス" price="90">
    </author>
    <author name="尾崎紅葉">
        <book title="金色夜叉" price="200">
    </author>
</books>

これを以下フォルダ構造にする
root/0_books/0_author/inner.txt(content:name=太宰の作品)
root/0_books/0_author/attr.txt(content:name=太宰治)
root/0_books/0_author/0_book/attr.txt(content:title=人間失格<crlf>price=100)
root/0_books/0_author/1_book/attr.txt(content:title=走れメロス<crlf>price=90)
root/0_books/1_author/attr.txt(content:name=尾崎紅葉)
root/0_books/1_author/
0_book/attr.txt(content:title=金色夜叉<crlf>price=200)

これであれば、元のxmlを完全にフォルダ構造から復元できる

====ここからChatGPTの答え

このアプローチは、元のXML構造を完全に再現するために非常に有効です。アトリビュートやタグ内のテキストの順序も維持できるため、正確な復元が可能です。また、プレフィックスとして番号を付けることで、同じタグ名を持つ要素の区別も明確になります。

この方法での実装は非常に理にかなっています。次に、具体的にそのフォルダ構造を生成し、XMLをファイルシステムにシリアライズするためのPythonコード例を示します。

### Pythonコード例
```python
import os
import xml.etree.ElementTree as ET

def serialize_element(element, parent_path, prefix):
    # Create directory for the current element with prefix
    dir_name = f"{prefix}_{element.tag}"
    dir_path = os.path.join(parent_path, dir_name)
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    
    # Write attributes to attr.txt
    if element.attrib:
        attr_file_path = os.path.join(dir_path, "attr.txt")
        with open(attr_file_path, 'w') as attr_file:
            for key, value in element.attrib.items():
                attr_file.write(f"{key}={value}\n")
    
    # Write inner text to inner.txt if it exists
    if element.text and element.text.strip():
        inner_file_path = os.path.join(dir_path, "inner.txt")
        with open(inner_file_path, 'w') as inner_file:
            inner_file.write(element.text.strip())
    
    # Recursively process child elements with a numerical prefix
    for i, child in enumerate(element):
        serialize_element(child, dir_path, i)

# Load XML
xml_string = """
<books>
    <author name="太宰治">太宰の作品
        <book title="人間失格" price="100"></book>
        <book title="走れメロス" price="90"></book>
    </author>
    <author name="尾崎紅葉">
        <book title="金色夜叉" price="200"></book>
    </author>
</books>
"""
root = ET.fromstring(xml_string)

# Define the base directory where the XML will be serialized
base_dir = 'output_dir'
if not os.path.exists(base_dir):
    os.makedirs(base_dir)

# Start the serialization process
serialize_element(root, base_dir, 0)
```

### フォルダ構造生成結果
上記のPythonコードを実行すると、次のようなフォルダ構造が生成されます:

```
output_dir/
└── 0_books/
    ├── 0_author/
    │   ├── attr.txt (content: name=太宰治)
    │   ├── inner.txt (content: 太宰の作品)
    │   ├── 0_book/
    │   │   └── attr.txt (content: title=人間失格\nprice=100)
    │   └── 1_book/
    │       └── attr.txt (content: title=走れメロス\nprice=90)
    └── 1_author/
        ├── attr.txt (content: name=尾崎紅葉)
        └── 0_book/
            └── attr.txt (content: title=金色夜叉\nprice=200)
```

### この方法の利点
- **順序保持**: XMLの要素やアトリビュートの順序が保持され、正確に再現可能。
- **明確な階層構造**: 番号付きのフォルダ構造によって、同一タグ名の要素も正確に区別できる。
- **シンプルな再構築**: フォルダ構造から元のXMLを再構築するのが容易。

これで、XMLデータを正確にシリアライズおよびデシリアライズできるシステムが実現できます。

2024年8月10日土曜日

散水機付けてみました

散水機付けてみました

自分が外出してたら水あげられないので
今後はどうしても必要になります

弁が四つついてて

NOWボタンで現在時刻を合わせ
ABCDで弁を選びます
選んだらOFF長押しでタイマーOFF
蛇口マークでマニュアルで弁を開きます(その際開いてる時間を指定)
プラスマイナスは時間の調整
OKはカーソルを次に送るボタンです

タイマーは何時に弁を開くか
何分開くか
何時間おきにタイマーを繰り返すか
と言う設定が出来ます

値段は最後の写真にありますが
ホースが足りなくて
Amazon探したら同じ物が同じような値段で合ったので追加購入してます(まだセットアップが残ってます)