2024年10月9日水曜日

HTML テーブル アクセシビリティの例

HTML table accessibility

scope属性

<table class="table table-bordered">
  <caption>商品の販売データ</caption>
  <thead>
    <tr>
      <th scope="col">商品名</th>
      <th scope="col" colspan="2">販売数</th> <!-- 2列にまたがるヘッダー -->
      <th scope="col">総売上</th>
    </tr>
    <tr>
      <th scope="col"> </th> <!-- 空のセル -->
      <th scope="col">国内</th>
      <th scope="col">海外</th>
      <th scope="col"> </th> <!-- 空のセル -->
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">商品A</th>
      <td>100</td>
      <td>50</td>
      <td>150</td>
    </tr>
    <tr>
      <th scope="row">商品B</th>
      <td>200</td>
      <td>80</td>
      <td>280</td>
    </tr>
  </tbody>
</table>
商品の販売データ
商品名 販売数 総売上
国内 海外
商品A 100 50 150
商品B 200 80 280

headers属性

<table class="table table-bordered">
  <caption>商品の販売データ</caption>
  <thead>
    <tr>
      <th id="product">商品名</th>
      <th id="sales" colspan="2">販売数</th>
      <th id="total">総売上</th>
    </tr>
    <tr>
      <th> </th> <!-- 空のセル -->
      <th id="domestic">国内</th>
      <th id="international">海外</th>
      <th> </th> <!-- 空のセル -->
    </tr>
  </thead>
  <tbody>
    <tr>
      <td headers="product">商品A</td>
      <td headers="sales domestic">100</td>
      <td headers="sales international">50</td>
      <td headers="total">150</td>
    </tr>
    <tr>
      <td headers="product">商品B</td>
      <td headers="sales domestic">200</td>
      <td headers="sales international">80</td>
      <td headers="total">280</td>
    </tr>
  </tbody>
</table>
商品の販売データ
商品名 販売数 総売上
国内 海外
商品A 100 50 150
商品B 200 80 280

ARIA role属性

<table role="table" class="table table-bordered">
  <caption>商品の販売データ</caption>
  <thead role="rowgroup">
    <tr role="row">
      <th id="product" role="columnheader">商品名</th>
      <th id="sales" role="columnheader" colspan="2">販売数</th>
      <th id="total" role="columnheader">総売上</th>
    </tr>
    <tr role="row">
      <th> </th> <!-- 空のセル -->
      <th id="domestic" role="columnheader">国内</th>
      <th id="international" role="columnheader">海外</th>
      <th> </th> <!-- 空のセル -->
    </tr>
  </thead>
  <tbody role="rowgroup">
    <tr role="row">
      <td role="cell" headers="product">商品A</td>
      <td role="cell" headers="sales domestic">100</td>
      <td role="cell" headers="sales international">50</td>
      <td role="cell" headers="total">150</td>
    </tr>
    <tr role="row">
      <td role="cell" headers="product">商品B</td>
      <td role="cell" headers="sales domestic">200</td>
      <td role="cell" headers="sales international">80</td>
      <td role="cell" headers="total">280</td>
    </tr>
  </tbody>
</table>
商品の販売データ
商品名 販売数 総売上
国内 海外
商品A 100 50 150
商品B 200 80 280

2024年10月4日金曜日

正規表現で前後で同じ内容に一致させる場合には「バックリファレンス」

 例えば、 以下のようなパターンの場合

<foo@example.com<mailto:foo@example.com>> 

正規表現は

<(.+?)<mailto:(.+?)>> 

となりますが、前方の (.+?) と後方の (.+?) が同じ文字列であることを指定するには、2つ目のキャプチャグループに対してバックリファレンス (\1) を使用して以下のようにします。

<(.+?)<mailto:\1>>


2024年10月3日木曜日

Windows IISサーバーの停止

Windows 11に設置したIISサーバーを停止するコマンド

停止
> iisreset /stop

開始
> iisreset /start




2024年10月2日水曜日

Python: ジェネレーター作成方法

ChatGPTによる回答

#### 1. ジェネレーター式(generator expression)を使った方法

```python

data_a = [0, 1, 2, 3]

gen_a = (item for item in data_a)

```

このコードでは、**ジェネレーター式**(generator expression)を使ってジェネレーターを作成しています。ジェネレーター式は、リスト内包表記のような書き方で、`()` で囲むことでジェネレーターを生成する方法です。



#### 2. `yield` キーワードを使ったジェネレーター関数

関数の中で `yield` キーワードを使うと、ジェネレーターを作成できます。この方法は、ジェネレーター式より柔軟で、複雑な処理を行いたい場合に便利です。



```python

# ジェネレーター関数の定義

def my_generator():

    for i in range(4):

        yield i



# ジェネレーターの作成

gen_a = my_generator()



# 1つずつ値を取り出す

for value in gen_a:

    print(value)

```



このコードでは、`my_generator` 関数は `yield` を使って値を一つずつ返すジェネレーターを作成しています。



#### 3. `itertools` モジュールを使う

Pythonの標準ライブラリ `itertools` には、ジェネレーターを扱うための便利な関数が多数用意されています。いくつかの例を紹介します。



```python

import itertools



# 無限の数値を生成するジェネレーター

gen_a = itertools.count(start=0, step=1)  # 0, 1, 2, 3, ...



# リストの要素を繰り返すジェネレーター

data_a = [0, 1, 2]

gen_b = itertools.cycle(data_a)  # 0, 1, 2, 0, 1, 2, ...



# 要素を繰り返し指定回数生成するジェネレーター

gen_c = itertools.repeat('A', times=3)  # 'A', 'A', 'A'

```



これらのジェネレーターは、無限に続くものや、特定の条件に基づいて値を生成するものなど、多様な使い方ができます。



#### 4. `map` や `filter` 関数を使う

`map` や `filter` もジェネレーターの一種として機能します。`map` は関数を適用した結果を逐次生成し、`filter` は条件を満たす要素だけを生成します。



```python

# mapを使ったジェネレーター

data_a = [0, 1, 2, 3]

gen_a = map(lambda x: x * 2, data_a)  # 0, 2, 4, 6



# filterを使ったジェネレーター

gen_b = filter(lambda x: x % 2 == 0, data_a)  # 0, 2

```



### まとめ

- `()` を使った **ジェネレーター式**(質問の方法)

- `yield` を使った **ジェネレーター関数**

- `itertools` モジュールの関数を使ったジェネレーター

- `map` や `filter` での関数適用によるジェネレーター



これらが Python でジェネレーターを作成する主な方法です。用途に応じて最適な方法を選んでください。

2024年9月5日木曜日

WordPress: プラグインBogoを利用して翻訳した投稿を他のユーザーが編集できない場合

WordPressのBogoを利用して投稿を英訳しました。
他のユーザー(編集者権限)は、日本語(元言語)は編集できるのですが、英語の投稿が編集できません。

管理者のユーザー一覧で、他のユーザー(編集者権限)にアクセス権限を与えないといけませんでした。
以下の画面で英語にチェックを入れます。




2024年7月31日水曜日

Django: プロジェクト全体でテンプレートタグを使いたい

以下のような構成とします。

/myproject
/myproject/myproject
/myproject/myapp
/myproject/templates
/myproject/templatetags/__init__.py
/myproject/templatetags/custom_tags.py

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], #/myproject/templates
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'libraries': {
                'custom_tags': 'templatetags.custom_tags', #myproject/myproject以下にしたい場合はmyproject.templatetags.custom_tags とすればよい
            }
        },
    },
]

テンプレートの方で {% load custom_tags %} とすれば、自作テンプレートタグがプロジェクトで共用できるようになる。

2024年7月4日木曜日

MySQL プライマリキーのインクリメントをリセットする

MySQLでは、以下の手順でincrementを1に初期化できます。

MySQLのDBに接続して以下のalterコマンドを実行します。


$ use <データベース名>;

$ alter table <テーブル名> auto_increment = 1;


auto_increment = 10にすると、10から始まります。


参考 Djangoノウハウ集【データベース操作編】
https://sinyblog.com/django/knowledge/