ゆう's Blog
アコースティックギターの「弦鳴り」「箱鳴り」「胴鳴り」「鈴鳴り」とはどういったものですか?

弦鳴り
弦鳴りは、弦そのものの振動によって生じる音を指します。これは、弦を弾いたときに直接耳に届く音であり、ギターのボディによる共鳴が少ない状態です。弦鳴りが強いギターは、音がクリアで明瞭ですが、ボディの響きが少ないため、全体的な音の深みや豊かさに欠けることがあります。

箱鳴り
箱鳴りは、ギターのボディ全体が振動し、その振動が音として響く現象です。弦の振動がボディに伝わり、ボディの空洞部分で共鳴することで音が増幅されます。良い箱鳴りは、音のバランスや音量を向上させ、豊かな音色を生み出します。特に、ヴィンテージギターではこの箱鳴りが顕著に感じられることが多いです。

胴鳴り
胴鳴りは、箱鳴りと似ていますが、より特定の部分に焦点を当てた表現です。胴鳴りは、ギターのボディがどのように振動し、音を響かせるかに関連しています。良い胴鳴りは、音が前に抜けていく感覚を持ち、演奏者の意図をより明確に伝えることができます。

鈴鳴り
鈴鳴りは、鈴のような高域のきらびやかな音色を指します。この音色は、特に倍音成分が豊富で、煌びやかな中高音域を持つギターに特徴的です。鈴鳴りの音は、特にマーティンのギターに多く見られ、音の明瞭さとサスティンの良さが求められます。鈴鳴りのギターは、倍音が多いため、演奏スタイルによっては音程感がぼやけることもありますが、適切な演奏技術を用いることでその特性を活かすことができます。

チェックボックスにチェックが入っているかどうかを確認する

// チェックボックスの状態を取得 const checkbox = document.getElementById("myCheckbox"); if (checkbox.checked) { console.log("チェックが入っています!"); } else { console.log("チェックが入っていません!"); }

curl_exec() の結果のバイト数を取得

$data = curl_exec($ch); $byteLength = strlen($data); echo "Data length in bytes: " . $byteLength;

strlen() はデータを文字列として扱うので、このようなバイナリデータやメモリ内データの場合に便利です。

filesize() は、ファイルのサイズを取得するために設計されているため、ファイル自体が物理的に存在している必要があります。対して、curl_exec() の結果はバッファされたデータであり、直接ファイルとして保存されているわけではないので、filesize() を使用して $data のサイズを取得しようとすると、正常に動作しません。

個別に定義?オブジェクトでまとめる?

1. 個別に定義する場合:

const start1 = document.getElementById('start1'); const start2 = document.getElementById('start2'); const start3 = document.getElementById('start3');

メリット:
シンプルで分かりやすい: 小規模なプロジェクトや、start1, start2, start3が少数の場合には最適。
明確な識別: 各変数が何を表すかが一目瞭然。
デメリット:
スケーラビリティに欠ける: 要素が増えたとき、毎回新しい定数を定義しなければならず、保守が大変。
動的アクセスが難しい: 動的に要素を参照したい場合、柔軟性に欠ける。

2. オブジェクトでまとめる場合:

const starts = { start1: document.getElementById('start1'), start2: document.getElementById('start2'), start3: document.getElementById('start3'), };

メリット:
動的アクセスが可能: starts['start1'] や starts[start${index}] など、キーを使って柔軟に要素にアクセスできる。
スケーラブル: 要素の数が増えてもオブジェクトのプロパティとして追加するだけで済む。
構造的に整理しやすい: 複数の関連する要素をグループ化できる。
デメリット:
やや複雑: 小規模プロジェクトでは少し過剰に感じる場合も。

使い分けの考え方:
要素が少なく、静的な場合: 個別に定義(const start1, start2...)する方法が適しています。この方法はシンプルで、コードがすぐに理解できます。
要素が増える可能性がある、または動的に扱いたい場合: オブジェクトでまとめる方法を使う方が柔軟です。たとえばループを利用して動的に処理したい場合に特に便利です。

NodeListとオブジェクトのプロパティ

const videos = document.querySelectorAll('video');

const videos = { video1: document.getElementById('video1'), video2: document.getElementById('video2'), video3: document.getElementById('video3'), };

1. const videos = document.querySelectorAll('video'); の場合
取得方法:
このコードはすべての<video>要素をNodeListとして取得します。
NodeListは配列のように動作し、インデックス(videos[0]など)を使って各<video>要素にアクセスできます。
特徴:
動的に動画の数が増えたり減ったりしても対応可能です。例えば、新たに<video>タグを追加しても、このコードで取得できます。
ループ処理(forEachなど)に適しており、簡単に全ての動画を操作できます。

2. const videos = { video1: document.getElementById('video1'), ... }; の場合
取得方法:
このコードは特定の<video>要素をオブジェクトのプロパティとして格納します。
動画を明示的に識別し、プロパティ名(videos.video1など)でアクセスできます。
特徴:
動的ではなく、手動で<video>要素を管理する形になります。例えば、新しい動画を追加するたびに、このオブジェクトにプロパティを追加する必要があります。
直接的に管理するため、動画の名前(IDなど)を使って識別しやすくなります。

違いまとめ
特性querySelectorAllオブジェクト (videos)
対象の取得方法<video>タグ全体を一括取得明示的にIDを指定して取得
動的な対応動画の数が変わっても柔軟動画を増やしたら手動で追加入力が必要
アクセス方法インデックスで参照 (videos[0])キーで参照 (videos.video1)
ループ処理との相性適している手動管理に向いている
ブラウザでのアクセスのみカウントアップ。

<script> function getCookie(name) { const cookies = document.cookie .split(';') // セミコロンで分割 .map(cookie => cookie.trim()); // 各クッキーをトリムして余分なスペースを削除 const targetCookie = cookies.find(cookie => cookie.startsWith(`${name}=`)); return targetCookie ? targetCookie.split('=')[1] : null; // 指定したクッキー名の値を取得 } const browserChecked = getCookie("browser_checked"); if (!browserChecked) { fetch(`check_browser.php?_=${new Date().getTime()}`, { method: "POST" }) .then(response => console.log("ブラウザ確認完了")) .catch(error => console.error("エラー:", error)); document.cookie = "browser_checked=1; max-age=3600; path=/"; } </script>

ブラウザキャッシュの影響
リクエストがキャッシュされていて、サーバーがリクエストを認識しない可能性があります。
対処法: リクエストURLにタイムスタンプを追加することでキャッシュを回避します。

check_browser.php

<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // カウンター更新処理 echo "ブラウザからのアクセスと確認されました。"; } ?>

Google Cloud Platform (GCP)への登録時に必要なクレジットカード

バーチャルカードは使用不可: Google Cloudでは、バーチャルクレジットカード(VCC)の使用が禁止されています。多くのユーザーが報告しているように、バーチャルカードを使用してアカウントを作成しようとすると、アカウントが即座に停止されることがあります。

実際のクレジットカードが必要: GCPの無料トライアルに登録する際には、実際のクレジットカードが必要です。これは、本人確認や支払いのために必要な手続きです。バーチャルカードやプリペイドカードは受け付けられないため、注意が必要です。

他の支払い方法: もしクレジットカードを持っていない場合、法人向けには請求書払いなどのオプションもありますが、個人の場合は通常のクレジットカードが必要です。

robots.txt

User-agent: * Disallow: /login/ Disallow: /admin/ Disallow: /confidential.pdf Sitemap: https://www.example.com/sitemap_index.xml

sitemap.xml

https://wave.stars.ne.jp/blog/yuu/ member - blog_dir cbt_post_12 - post_id, post_cat, post_status, post_unixtime post_status = 1 & post_unixtime < now cbt_setting_12 - top_page = 1 なら post_cat = 2以外 cbt_setting_12 - top_page = 2 なら post_cat = 2含めて全部

テーブル: cbt_post_12 post_id post_status = 1 post_unixtime < now

<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://wave.stars.ne.jp/blog/yuu/</loc> </url> <url> <loc>https://wave.stars.ne.jp/blog/yuu/entry.php?id=190</loc> </url> </urlset>

サイトマップインデックス

<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>https://wave.stars.ne.jp/sitemaps/sitemap1.xml</loc> </sitemap> <sitemap> <loc>https://wave.stars.ne.jp/sitemaps/sitemap2.xml</loc> </sitemap> </sitemapindex>

Cookieの設定、削除をチェックボックス(JavaScript)で行い、取得をPHPで。

document.cookie = "userType=admin; path=/blog/yuu/; expires=Fri, 09 May 2025 12:00:00 UTC"; document.cookie = "userType=; path=/blog/yuu/; expires=Thu, 01 Jan 1970 00:00:00 UTC"; <?php if (isset($_COOKIE["userType"])) { echo "Cookieの値: " . $_COOKIE["userType"]; } else { echo "Cookieが存在しません。"; } ?> <label> <input type="checkbox" id="cookieCheckbox"> 管理者モード </label> document.getElementById("cookieCheckbox").addEventListener("change", function() { const isChecked = this.checked; if (isChecked) { // チェックされている場合にCookieを設定 document.cookie = "userType=admin; path=/; expires=Fri, 09 May 2025 12:00:00 UTC"; console.log("Cookieを設定しました!"); } else { // チェックが外された場合にCookieを削除 document.cookie = "userType=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC"; console.log("Cookieを削除しました!"); } });