例えば、2023年6月1日以降に更新されたファイルとディレクトリを検索するには、以下のようにします。
$ find /path/to/search -newermt "2023-06-01"
例えば、2023年6月1日以降に更新されたファイルとディレクトリを検索するには、以下のようにします。
$ find /path/to/search -newermt "2023-06-01"
Pythonのクロージャーによるカウンタ作成
def counter():
num = 0
def add_one():
nonlocal num
result = num #JavaScriptの後置インクリメントに相当する操作で0始まりにする
num += 1
return result
return add_one #関数を返す ()を付けない
counter1 = counter()
print(counter1()) #結果 0
print(counter1()) #結果 1
print(counter1()) #結果 2
print(counter1()) #結果 3
ポイント:
JavaScriptのクロージャーによるカウンタ作成基礎
function counter() {
let num = 0;
return add_one; //関数を返す ()を付けない
function add_one() {
return num++; //後置インクリメントで0始まりにする(まずnを返してからn+1を実行)
}
}
const counter1 = counter();
console.log(counter1()); //結果 0
console.log(counter1()); //結果 1
console.log(counter1()); //結果 2
console.log(counter1()); //結果 3
ポイント:
scrollTop, scrollHeight, clientHeightをjQueryで求める方法です。
$(document).ready(function() {
let element = $('#myDiv'); // 対象の要素
let scrollTop = element.scrollTop();
let scrollHeight = element[0].scrollHeight;
let clientHeight = element[0].clientHeight;
console.log('Scroll Top:', scrollTop);
console.log('Scroll Height:', scrollHeight);
console.log('Client Height:', clientHeight);
});
HTML table accessibility
<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 |
<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 |
<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 |
例えば、 以下のようなパターンの場合
<foo@example.com<mailto:foo@example.com>>
正規表現は
<(.+?)<mailto:(.+?)>>
となりますが、前方の (.+?) と後方の (.+?) が同じ文字列であることを指定するには、2つ目のキャプチャグループに対してバックリファレンス (\1) を使用して以下のようにします。
<(.+?)<mailto:\1>>
以下のような構成とします。
/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 %} とすれば、自作テンプレートタグがプロジェクトで共用できるようになる。
MySQLでは、以下の手順でincrementを1に初期化できます。
MySQLのDBに接続して以下のalterコマンドを実行します。
$ use <データベース名>;
$ alter table <テーブル名> auto_increment = 1;
auto_increment = 10にすると、10から始まります。
参考 Djangoノウハウ集【データベース操作編】
https://sinyblog.com/django/knowledge/
settings.py で、タイムゾーン設定 USE_TZ が True になっている場合、DjangoはデフォルトでUTCを使用します。このため、表示時に適切なタイムゾーンに変換する必要があります。
Djangoのタイムゾーン設定を確認する:
# settings.py
USE_TZ = True # タイムゾーン対応を有効にする
TIME_ZONE = 'Asia/Tokyo' # サーバーのデフォルトタイムゾーンを設定する
INSTALLED_APPS = [
'app.apps.AppConfig', # マイアプリケーション
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.forms', # 追加1
]
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting' # 追加2
django-debug-toolbarを設定したところ右サイドバーは表示されたが、右サイドバー項目をクリックしたときメインの画面が表示されず困りました。
Django管理画面では表示されるのですが、公開ページでは表示されないという現象。
調べたところ、公開ページでページ内スクロールするJavaScriptコードがdjango-debug-toolbarとかぶっていたのが原因でした。
$('a[href^="#"]').click(function () { //・・・ }
一例ですが、以下のように公開ページのイベントの動作範囲を制限して表示できるようになりました。
$('.anker a[href^="#"]').click(function () { //・・・ }
参考:django-debug-toolbarが動かない - エンジニアもどきの技術メモ
https://chantsune.github.io/articles/122/
# 現在のディレクトリ以下にある「xyz*」ファイル内に「aiueo」が含まれているものを検索する
$ find . -name 'xyz*' -type f -print0 | xargs -0 grep aiueo
# 現在のディレクトリ以下にあるphpファイル内に「aiueo」が含まれているものを検索する
$ find . -name '*.php' -print0 | xargs -0 grep aiueo
# /var/www/htmlディレクトリ以下にあるファイル内に「aiueo」が含まれているものを検索する
$ find /var/www/html -type f -print0 | xargs -0 grep aiueo
$data = array();
$data["name"] = 'tanaka';
$data["age"] = 30;
// 連想配列をJSON形式に変換する
$json_data = json_encode($data);
// HTTPヘッダを設定してJSONデータを送信する
header("Content-Type: application/json");
echo $json_data;
Djangoのモデルからフォームを作りました。
forms.pyのほうでこんな感じで required=Trueにしました。
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['required'] = True
このrequiredをテンプレートで判定するため以下のように
{% for field in form %}
{% if field.required %}必須{% endif %}
{% endfor %}
とすればOKかと思ったら、field.required がどうしてもTrueになりません。
以下を参照すると {% if field.field.required %} にしろと書いてある。
Tell if a Django Field is required from template
それでも field.field.required はFalseのままでだめでした。
さらに以下を参照すると
Django: Make certain fields in a ModelForm required=False
you ought to add blank=True
to the corresponding model
If the model field has blank=True, then required is set to False on the form field. Otherwise, required=True.
とありました。モデルのフィールドを blank=False にしないとテンプレートでは required=True 判定しないようです。
結論としては以下となります。
ffmpeg 一括操作のコマンドのメモです。Windowsの例です。
複数のMP4ファイルから静止画を1枚ずつ保存する
> for %i in (./*.mp4) do ffmpeg -i ./%~ni.mp4 -ss 0 -t 1 -r 1 -f image2 ./%~ni.jpg
※この例は動画の0秒から1秒の間で1つの画像を保存するコマンド