<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ナレッジ アーカイブ - WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</title>
	<atom:link href="https://system.analogengine.jp/category/knowledge/feed/" rel="self" type="application/rss+xml" />
	<link>https://system.analogengine.jp/category/knowledge/</link>
	<description>説明不要な画面レイアウトと操作性に優れたアクティビティを兼ね備えたWEBシステム開発</description>
	<lastBuildDate>Mon, 14 Oct 2024 11:29:34 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://system.analogengine.jp/wp-content/uploads/2023/06/cropped-favicon-32x32.jpg</url>
	<title>ナレッジ アーカイブ - WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</title>
	<link>https://system.analogengine.jp/category/knowledge/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>異なるネットワークに存在するRaspberry Piを遠隔操作する方法</title>
		<link>https://system.analogengine.jp/knowledge/%e7%95%b0%e3%81%aa%e3%82%8b%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%81%ab%e5%ad%98%e5%9c%a8%e3%81%99%e3%82%8braspberry-pi%e3%82%92%e9%81%a0%e9%9a%94%e6%93%8d%e4%bd%9c%e3%81%99/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 14 Oct 2024 04:30:00 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1194</guid>

					<description><![CDATA[<p>異なるネットワークに存在するRaspberry Piを遠隔操作する方法 異なるネットワークに存在するRaspberry Piを遠隔で操作する方法にはいくつかあります。以下に設定が容易な順に、代表的な方法を説明し、それぞれ &#8230; <a href="https://system.analogengine.jp/knowledge/%e7%95%b0%e3%81%aa%e3%82%8b%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%81%ab%e5%ad%98%e5%9c%a8%e3%81%99%e3%82%8braspberry-pi%e3%82%92%e9%81%a0%e9%9a%94%e6%93%8d%e4%bd%9c%e3%81%99/" class="more-link">Continue reading<span class="screen-reader-text"> "異なるネットワークに存在するRaspberry Piを遠隔操作する方法"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/%e7%95%b0%e3%81%aa%e3%82%8b%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%81%ab%e5%ad%98%e5%9c%a8%e3%81%99%e3%82%8braspberry-pi%e3%82%92%e9%81%a0%e9%9a%94%e6%93%8d%e4%bd%9c%e3%81%99/">異なるネットワークに存在するRaspberry Piを遠隔操作する方法</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<h1>異なるネットワークに存在するRaspberry Piを遠隔操作する方法</h1>
<p>異なるネットワークに存在するRaspberry Piを遠隔で操作する方法にはいくつかあります。以下に設定が容易な順に、代表的な方法を説明し、それぞれのコストも比較しました。</p>
<h2>1. RealVNC Cloud接続</h2>
<ul>
<li><strong>設定の容易さ：</strong>非常に簡単です。Raspberry Pi OSにVNCがあらかじめインストールされており、RealVNC Cloud接続も標準で利用できます。Piの設定メニューからVNCを有効にし、RealVNCアカウントに登録して使用できます。</li>
<li><strong>コスト：</strong>無料プランがあります。商用利用や複数のデバイスを接続するには有料プラン（月額$3程度）が必要ですが、個人利用や小規模なプロジェクトなら無料で十分です。</li>
</ul>
<h2>2. ngrok</h2>
<ul>
<li><strong>設定の容易さ：</strong>比較的簡単です。ngrokはシンプルなコマンドでトンネルを開くことができ、特別なルーター設定も不要です。SSHやWebアクセスを簡単に公開できます。Raspberry Piにngrokをインストールし、トークンを設定して使用する流れです。</li>
<li><strong>コスト：</strong>無料プランで利用可能ですが、カスタムドメインや安定した接続を確保するには有料プラン（月額$5～$10程度）が必要です。</li>
</ul>
<h2>3. Tailscale（P2P VPN）</h2>
<ul>
<li><strong>設定の容易さ：</strong>簡単です。Tailscaleは、特に初心者にとって扱いやすいP2P VPNツールです。Raspberry Piにソフトウェアをインストールして、簡単な認証を行うだけで、VPN接続が確立します。ネットワーク設定やポートフォワーディングは不要です。</li>
<li><strong>コスト：</strong>無料プランがあり、少人数のデバイスなら十分に使えます。プロフェッショナルや商用利用には有料プラン（月額$5～$15程度）も提供されています。</li>
</ul>
<h2>4. ZeroTier（P2P VPN）</h2>
<ul>
<li><strong>設定の容易さ：</strong>簡単です。ZeroTierもTailscale同様、P2P型のVPNツールです。ソフトウェアをインストールし、アカウント登録後に簡単な設定で利用可能です。Raspberry Piとリモートデバイスを仮想ネットワークで接続できます。</li>
<li><strong>コスト：</strong>無料プランで使えますが、デバイス数が増えたり、商用利用には有料プラン（月額$5～$10程度）が必要になります。</li>
</ul>
<h2>5. SSH + Dynamic DNS（DDNS）</h2>
<ul>
<li><strong>設定の容易さ：</strong>やや手間がかかります。SSH自体は簡単ですが、Dynamic DNS（DDNS）を利用するための登録や、ルーターのポートフォワーディング設定が必要です。また、SSHの安全性を確保するために鍵ベースの認証や、ポート番号の変更などのセキュリティ対策が推奨されます。</li>
<li><strong>コスト：</strong>多くのDDNSサービスは無料プランを提供していますが、信頼性やサポートを求める場合は有料プラン（月額$5～$10程度）を検討する必要があります。</li>
</ul>
<h2>6. Remote.it</h2>
<ul>
<li><strong>設定の容易さ：</strong>中程度です。Remote.itは、クラウド経由でのリモートアクセスが可能ですが、専用のアプリをインストールし、アカウントを作成して設定を行う必要があります。また、特定のポートやサービスの設定も行う必要があり、少し手間がかかります。</li>
<li><strong>コスト：</strong>基本的に無料で利用できますが、商用利用や高度な機能には有料プラン（月額$2～$10程度）が必要です。</li>
</ul>
<h2>7. VPN（OpenVPN / WireGuard）</h2>
<ul>
<li><strong>設定の容易さ：</strong>やや難しいです。VPNサーバーを自分でセットアップする必要があり、ルーターのポートフォワーディングや証明書の管理なども含め、ネットワークの知識が要求されます。特に、初めてVPNを構築する場合は、正確な設定とセキュリティ管理が必要です。</li>
<li><strong>コスト：</strong>ソフトウェア自体は無料ですが、VPNを維持するためのサーバー運用や管理が必要な場合、コストが発生することがあります。また、クラウドサーバーを使用する場合、その運用費（月額$5～$10程度）がかかることがあります。</li>
</ul>
<h2>コストと設定のまとめ</h2>
<table border="1" cellpadding="10">
<thead>
<tr>
<th>方法</th>
<th>設定の容易さ</th>
<th>コストの目安</th>
</tr>
</thead>
<tbody>
<tr>
<td>RealVNC Cloud接続</td>
<td>非常に簡単</td>
<td>無料（有料プランもあり）</td>
</tr>
<tr>
<td>ngrok</td>
<td>簡単</td>
<td>無料（有料プランあり）</td>
</tr>
<tr>
<td>Tailscale</td>
<td>簡単</td>
<td>無料（有料プランあり）</td>
</tr>
<tr>
<td>ZeroTier</td>
<td>簡単</td>
<td>無料（有料プランあり）</td>
</tr>
<tr>
<td>SSH + DDNS</td>
<td>やや手間</td>
<td>無料（DDNS有料プランあり）</td>
</tr>
<tr>
<td>Remote.it</td>
<td>中程度</td>
<td>無料（有料プランあり）</td>
</tr>
<tr>
<td>VPN（OpenVPNなど）</td>
<td>難しい</td>
<td>無料（サーバー運用費あり）</td>
</tr>
</tbody>
</table>
<h2>総合的な推奨</h2>
<p>初心者や簡単なリモート接続が目的であれば、<strong>RealVNC</strong>や<strong>Tailscale</strong>をおすすめします。これらは設定が非常に簡単で、コストもかからないか、最小限です。技術的な知識が必要な場合や、セキュリティ重視の場合は<strong>VPN</strong>や<strong>SSH + DDNS</strong>のような方法も検討できますが、手間とコストがかかる可能性があります。</p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/%e7%95%b0%e3%81%aa%e3%82%8b%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%81%ab%e5%ad%98%e5%9c%a8%e3%81%99%e3%82%8braspberry-pi%e3%82%92%e9%81%a0%e9%9a%94%e6%93%8d%e4%bd%9c%e3%81%99/">異なるネットワークに存在するRaspberry Piを遠隔操作する方法</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQLからMySQLへのテーブルデータ移行</title>
		<link>https://system.analogengine.jp/knowledge/postgresql_to_mysql/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 22 Mar 2024 07:33:49 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[postgres]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1169</guid>

					<description><![CDATA[<p>PostgreSQL to MySQL PostgreSQLもまだまだ現役ですが、フロントエンジニアからすれば、ツールの充実などの都合でMySQLを選択せざるを得ない状況も増えてきました。PHPもまだまだ現役。なんとか一 &#8230; <a href="https://system.analogengine.jp/knowledge/postgresql_to_mysql/" class="more-link">Continue reading<span class="screen-reader-text"> "PostgreSQLからMySQLへのテーブルデータ移行"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/postgresql_to_mysql/">PostgreSQLからMySQLへのテーブルデータ移行</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1169" class="elementor elementor-1169" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-16fdf30 e-flex e-con-boxed e-con e-parent" data-id="16fdf30" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-337ab4c elementor-widget elementor-widget-heading" data-id="337ab4c" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">PostgreSQL to MySQL</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-024ba94 elementor-widget elementor-widget-text-editor" data-id="024ba94" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>PostgreSQLもまだまだ現役ですが、フロントエンジニアからすれば、ツールの充実などの都合でMySQLを選択せざるを得ない状況も増えてきました。PHPもまだまだ現役。なんとか一発でMySQLへの移行ができたらと思い、作りました。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-cbc58fd elementor-widget elementor-widget-code-highlight" data-id="cbc58fd" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp><?php

// PostgreSQLデータベースの設定を配列に保存します
$pgsql = [
    'host' => 'your_postgresql_host', // PostgreSQLのホスト
    'db' => 'your_postgresql_dbname', // 使用するデータベース名
    'user' => 'your_postgresql_user', // ユーザー名
    'password' => 'your_postgresql_password' // パスワード
];

// MySQLデータベースの設定を配列に保存します
$mysql = [
    'host' => 'your_mysql_host', // MySQLのホスト
    'db' => 'your_mysql_dbname', // 使用するデータベース名
    'user' => 'your_mysql_user', // ユーザー名
    'password' => 'your_mysql_password' // パスワード
];

// PostgreSQLデータベースにPDOを使用して接続します
$pgsqlConn = new PDO("pgsql:host={$pgsql['host']};dbname={$pgsql['db']}", $pgsql['user'], $pgsql['password']);

// publicスキーマ内の全てのテーブル名を取得するSQLクエリを実行します
$tablesResult = $pgsqlConn->query("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'");
$tables = $tablesResult->fetchAll(PDO::FETCH_COLUMN); // 結果を配列として取得

// 取得したテーブルごとに処理を行います
foreach ($tables as $table) {
    // MySQLデータベースにPDOを使用して接続します
    $mysqlConn = new PDO("mysql:host={$mysql['host']};dbname={$mysql['db']}", $mysql['user'], $mysql['password']);

    // 対象テーブルのカラム名とデータ型を取得します
    $columnsResult = $pgsqlConn->query("SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '{$table}'");
    $columns = $columnsResult->fetchAll(PDO::FETCH_ASSOC);

    // MySQLで使用するCREATE TABLE文を組み立てます
    $createTableSQL = "CREATE TABLE `{$table}` (";
    $colDefinitions = [];

    // 取得したカラムごとに処理を行います
    foreach ($columns as $column) {
        $colName = $column['column_name']; // カラム名
        $dataType = $column['data_type']; // データ型

        // PostgreSQLのデータ型をMySQLのデータ型に変換します
        switch ($dataType) {
            case 'character varying':
            case 'text':
                $mysqlDataType = 'TEXT';
                break;
            case 'integer':
                $mysqlDataType = 'INT';
                break;
            case 'timestamp without time zone':
                $mysqlDataType = 'TIMESTAMP';
                break;
            case 'date':
                $mysqlDataType = 'DATE';
                break;
            default:
                $mysqlDataType = 'TEXT'; // デフォルトではTEXT型を使用
        }

        $colDefinitions[] = "`$colName` $mysqlDataType"; // カラム定義を配列に追加
    }

    $createTableSQL .= join(', ', $colDefinitions) . ");"; // CREATE TABLE文を完成させます
    $mysqlConn->exec($createTableSQL); // MySQLでテーブルを作成

    // PostgreSQLからデータを選択し、MySQLに挿入します
    $pgsqlResult = $pgsqlConn->query("SELECT * FROM \"{$table}\"");

    while ($row = $pgsqlResult->fetch(PDO::FETCH_ASSOC)) {
        // カラム名を取得
        $columns = array_keys($row);
        // 値のプレースホルダーを生成
        $placeholders = array_fill(0, count($row), '?');
        // INSERT文を組み立て
        $insertSQL = "INSERT INTO `{$table}` (`" . implode('`, `', $columns) . "`) VALUES (" . implode(', ', $placeholders) . ")";

        // MySQLデータベースへのトランザクションを開始します
        $mysqlConn->beginTransaction();
        try {
            // INSERT文を準備し、値をバインドして実行します
            $stmt = $mysqlConn->prepare($insertSQL);
            $stmt->execute(array_values($row)); // PDOStatement::executeには値の配列を渡します
            $mysqlConn->commit(); // 変更をコミットし、トランザクションを終了します
        } catch (Exception $e) {
            // エラーが発生した場合、トランザクションをロールバックします
            $mysqlConn->rollBack();
            echo "エラー: " . $e->getMessage();
        }
    }
}
?>
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-e244872 elementor-widget elementor-widget-heading" data-id="e244872" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">文字コードに気をつけて</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-b4277b2 elementor-widget elementor-widget-text-editor" data-id="b4277b2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>カラム名に日本語を使ってる場合や、EUCからUTF8に移行する場合などは下記のmysqlへの接続部分を改変してください。じゃないと化けます。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-4a9416b elementor-widget elementor-widget-code-highlight" data-id="4a9416b" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>	$mysqlConn = new PDO("mysql:host={$mysql['host']};dbname={$mysql['db']};charset=utf8mb4", $mysql['user'], $mysql['password']);
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
					</div>
				</div>
				</div>
		<p>投稿 <a href="https://system.analogengine.jp/knowledge/postgresql_to_mysql/">PostgreSQLからMySQLへのテーブルデータ移行</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>htmxとphpの基本的な連携</title>
		<link>https://system.analogengine.jp/knowledge/htmx%e3%81%a8php%e3%81%ae%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e9%80%a3%e6%90%ba/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 29 Jan 2024 02:36:06 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1162</guid>

					<description><![CDATA[<p>Reactあたりで開発をしていましたが、どうやらERP（業務統合管理）だったりCRM（営業管理）ではhtmxを利用した方が既存技術の応用や転換効率が良いので、会社としてhtmxでの制作を推し進めていくことにした。以下は基 &#8230; <a href="https://system.analogengine.jp/knowledge/htmx%e3%81%a8php%e3%81%ae%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e9%80%a3%e6%90%ba/" class="more-link">Continue reading<span class="screen-reader-text"> "htmxとphpの基本的な連携"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/htmx%e3%81%a8php%e3%81%ae%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e9%80%a3%e6%90%ba/">htmxとphpの基本的な連携</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1162" class="elementor elementor-1162" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-7184851 e-flex e-con-boxed e-con e-parent" data-id="7184851" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-8eb6509 elementor-widget elementor-widget-text-editor" data-id="8eb6509" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Reactあたりで開発をしていましたが、どうやらERP（業務統合管理）だったりCRM（営業管理）ではhtmxを利用した方が既存技術の応用や転換効率が良いので、会社としてhtmxでの制作を推し進めていくことにした。<br />以下は基本的なhtmxとphpを利用してデータベースから値を取り込み、html側に反映させるサンプルです。<br />（弊社はPHPer）</p>								</div>
				</div>
				<div class="elementor-element elementor-element-b1a25f0 elementor-widget elementor-widget-heading" data-id="b1a25f0" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">はじめに</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-8a30725 elementor-widget elementor-widget-text-editor" data-id="8a30725" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><code>htmx</code> と <code>PHP</code> を使用してデータベース（例えば MySQL）から値を取得し、HTMLに動的に反映させるサンプルを以下に示します。この例では、htmxを使用してサーバーに非同期リクエストを行い、PHPスクリプトでデータベースに問い合わせて結果をHTMLに反映させます。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-48f6f17 elementor-widget elementor-widget-heading" data-id="48f6f17" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">必要なもの</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-2eabc10 elementor-widget elementor-widget-text-editor" data-id="2eabc10" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ol><li><strong>データベース</strong>: MySQLなどのデータベースがセットアップされていること。</li><li><strong>サーバー環境</strong>: PHPが動作するサーバー（例: Apache, Nginx）。アナログエンジンの<span style="text-align: var(--text-align);">plesk環境でテスト</span></li><li><strong>htmx</strong>: HTMLに直接記述するか、外部ファイルとして追加します。</li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-7d6874d elementor-widget elementor-widget-heading" data-id="7d6874d" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">ステップ 1: データベース準備</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-80320a2 elementor-widget elementor-widget-text-editor" data-id="80320a2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>まず、使用するデータベースにテストデータを含むテーブルを用意します。以下はそのサンプルです。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-ef3a71f elementor-widget elementor-widget-code-highlight" data-id="ef3a71f" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>CREATE TABLE `sample_data` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL,
  `value` VARCHAR(255) NOT NULL
);

INSERT INTO `sample_data` (`name`, `value`) VALUES ('Sample 1', 'Value 1'), ('Sample 2', 'Value 2'), ('Sample 3', 'Value 3');
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-31f26d9 elementor-widget elementor-widget-heading" data-id="31f26d9" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">ステップ 2: PHP スクリプト</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-8d3f683 elementor-widget elementor-widget-text-editor" data-id="8d3f683" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>次に、データベースからデータを取得し、クライアントに送り返すPHPスクリプトを作成します。現在は適当にhtmlをそのまま返していますが、jsonで返し、処理をする方が現実的かと思います。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-1eccae6 elementor-widget elementor-widget-code-highlight" data-id="1eccae6" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>// fetchData.php
<?php
$host = 'your_host'; // ホスト名
$dbname = 'your_dbname'; // データベース名
$username = 'your_username'; // ユーザー名
$password = 'your_password'; // パスワード

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $sql = "SELECT * FROM sample_data";
    $stmt = $pdo->query($sql);

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<div>{$row['name']}: {$row['value']}</div>";
    }
} catch (PDOException $e) {
    die("Could not connect to the database $dbname :" . $e->getMessage());
}
?>
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-962431c elementor-widget elementor-widget-heading" data-id="962431c" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">ステップ 3: HTML と htmx</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-7e6c91c elementor-widget elementor-widget-text-editor" data-id="7e6c91c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>最後に、htmxを使用してPHPスクリプトに非同期リクエストを行い、結果をページに表示するHTMLを作成します。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-09beb10 elementor-widget elementor-widget-code-highlight" data-id="09beb10" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp><!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>htmx + PHP Sample</title>
    <!-- htmxを含める -->
    <script src="https://unpkg.com/htmx.org"></script>
</head>
<body>

<h2>データベースからのデータ</h2>
<!-- htmxを使用してfetchData.phpからデータを非同期で取得し、このdivに反映させる -->
<div hx-get="fetchData.php" hx-trigger="load">
    データをロード中...
</div>

</body>
</html>
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-89268f6 elementor-widget elementor-widget-text-editor" data-id="89268f6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>このHTMLページをブラウザで開くと、ページがロードされると同時にhtmxが <code>fetchData.php</code> へ非同期リクエストを行い、PHPスクリプトがデータベースからデータを取得して、そのデータがHTMLページに動的に表示されます。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-2695f17 elementor-widget elementor-widget-heading" data-id="2695f17" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">上記を利用する場合</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-c3447a5 elementor-widget elementor-widget-text-editor" data-id="c3447a5" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ul><li>PHPスクリプトでデータベース接続情報（ホスト名、データベース名、ユーザー名、パスワード）を正しく設定してください。</li><li><code>fetchData.php</code> ファイルのパスは、サーバーの設定に応じて適宜調整してください。</li><li>htmxの<code>hx-get</code>属性で指定するURLは、実際の環境に合わせて適切に設定してください。</li><li>アナログエンジン社内では上記のスクリプトはtheLibにて対応してください。fetchData部分はhtml側に記述してclassで呼び出した方がよっぽど可読性がいいのと作業が短縮できます。（手続型）</li></ul>								</div>
				</div>
					</div>
				</div>
				</div>
		<p>投稿 <a href="https://system.analogengine.jp/knowledge/htmx%e3%81%a8php%e3%81%ae%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e9%80%a3%e6%90%ba/">htmxとphpの基本的な連携</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tesseract 5 学習データ作成</title>
		<link>https://system.analogengine.jp/knowledge/tesseract-5-%e5%ad%a6%e7%bf%92%e3%83%87%e3%83%bc%e3%82%bf%e4%bd%9c%e6%88%90/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 20 Jan 2024 05:26:30 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1146</guid>

					<description><![CDATA[<p>almalinux9.2/plesk環境です。 下記を参照 https://qiita.com/aki_abekawa/items/c2b94187f2ba7dc56993https://qiita.com/keraFP &#8230; <a href="https://system.analogengine.jp/knowledge/tesseract-5-%e5%ad%a6%e7%bf%92%e3%83%87%e3%83%bc%e3%82%bf%e4%bd%9c%e6%88%90/" class="more-link">Continue reading<span class="screen-reader-text"> "Tesseract 5 学習データ作成"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/tesseract-5-%e5%ad%a6%e7%bf%92%e3%83%87%e3%83%bc%e3%82%bf%e4%bd%9c%e6%88%90/">Tesseract 5 学習データ作成</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1146" class="elementor elementor-1146" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-5575da3 e-flex e-con-boxed e-con e-parent" data-id="5575da3" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-4be6d4b elementor-widget elementor-widget-text-editor" data-id="4be6d4b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>almalinux9.2/plesk環境です。</p>								</div>
				</div>
				<div class="elementor-element elementor-element-58bcdd6 elementor-widget elementor-widget-heading" data-id="58bcdd6" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">下記を参照</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-322e822 elementor-widget elementor-widget-text-editor" data-id="322e822" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>https://qiita.com/aki_abekawa/items/c2b94187f2ba7dc56993<br />https://qiita.com/keraFPV/items/fc87a3d048c47cf2ba8b</p>								</div>
				</div>
				<div class="elementor-element elementor-element-f2f8898 elementor-widget elementor-widget-heading" data-id="f2f8898" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">学習データの保存先を確認</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-562fb54 elementor-widget elementor-widget-code-highlight" data-id="562fb54" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ /usr/local/bin/tesseract --list-langs

List of available languages in "/usr/local/share/tessdata/" (3):
eng
jpn
spa
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-9c35f61 elementor-widget elementor-widget-heading" data-id="9c35f61" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">手書き学習の元となるデータをダウンロード</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-6db4ca1 elementor-widget elementor-widget-code-highlight" data-id="6db4ca1" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ wget http://www.itl.nist.gov/iaui/vip/cs_links/EMNIST/matlab.zip
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-e095e52 elementor-widget elementor-widget-heading" data-id="e095e52" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">画像データとテキストデータを生成します
</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-58659c4 elementor-widget elementor-widget-code-highlight" data-id="58659c4" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ python3 generate_training_data.py ../matlab/emnist-byclass.mat
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-2fde330 elementor-widget elementor-widget-heading" data-id="2fde330" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">学習のためのOCR-Dをダウンロード</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-f57e7fb elementor-widget elementor-widget-code-highlight" data-id="f57e7fb" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ cd ../ && $ git clone --depth 1 https://github.com/OCR-D/ocrd-train.git
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-d051b6e elementor-widget elementor-widget-heading" data-id="d051b6e" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">トレーニングデータを格納するフォルダを作成</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-7f22187 elementor-widget elementor-widget-code-highlight" data-id="7f22187" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ mkdir -p ocrd-train/usr/share/tessdata/

#データ格納用
$ mkdir -p ocrd-train/data/

# 学習データ用フォルダ
$ mkdir -p ocrd-train/data/（トレーニングデータ名）-ground-truth/</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-cb64210 elementor-widget elementor-widget-heading" data-id="cb64210" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">ベストデータをダウンロード</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-d6822c8 elementor-widget elementor-widget-code-highlight" data-id="d6822c8" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ git clone https://github.com/tesseract-ocr/tessdata_best
$ cp tessdata_best/eng.traineddata ocrd-train/usr/share/tessdata/
$ cp tessdata_best/jpn.traineddata ocrd-train/usr/share/tessdata/
$ cp tessdata_best/jpn_vert.traineddata ocrd-train/usr/share/tessdata
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-54f01d4 elementor-widget elementor-widget-heading" data-id="54f01d4" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">ocrd-train/dataに下記をダウンロード（必要？）
</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-392d887 elementor-widget elementor-widget-code-highlight" data-id="392d887" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ git clone https://github.com/tesseract-ocr/langdata/
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-41e1969 elementor-widget elementor-widget-heading" data-id="41e1969" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">画像用データを移動する</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-02d28a6 elementor-widget elementor-widget-code-highlight" data-id="02d28a6" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ mv emnist/*.txt ocrd-train/data/tegaki-ground-truth/
$ mv emnist/*.tif ocrd-train/data/tegaki-ground-truth/
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-0bac57f elementor-widget elementor-widget-heading" data-id="0bac57f" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">トレーニングを実行</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-43d5abc elementor-widget elementor-widget-code-highlight" data-id="43d5abc" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ make training MODEL_NAME=tegaki START_MODEL=eng >> train.log 2>&1
</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-1d37bc2 elementor-widget elementor-widget-code-highlight" data-id="1d37bc2" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>$ tail -f httpdocs/ocr.train/ocrd-train/train.log 

Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.7383.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.0745.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.4581.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.11543.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.16189.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.14246.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.6824.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.17192.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.2213.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.0363.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.13637.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.7977.lstmf
Loaded 1/1 lines (1-1) of document data/tegaki-ground-truth/eng.1859.lstmf
2 Percent improvement time=100, best error was 100 @ 0
At iteration 100/100/100, Mean rms=3.152%, delta=15.367%, char train=56.65%, word train=100%, skip ratio=0%,  New best char error = 56.65 wrote best model:data/tegaki/checkpoints/tegaki56.65_100.checkpoint wrote checkpoint.

2 Percent improvement time=100, best error was 56.65 @ 100
At iteration 200/200/200, Mean rms=2.754%, delta=11.794%, char train=44.687%, word train=100%, skip ratio=0%,  New best char error = 44.687 wrote best model:data/tegaki/checkpoints/tegaki44.687_200.checkpoint wrote checkpoint.

2 Percent improvement time=99, best error was 44.687 @ 200
At iteration 299/300/300, Mean rms=2.505%, delta=9.899%, char train=37.567%, word train=99.667%, skip ratio=0%,  New best char error = 37.567 wrote best model:data/tegaki/checkpoints/tegaki37.567_299.checkpoint wrote checkpoint.

2 Percent improvement time=98, best error was 37.567 @ 299
At iteration 397/400/400, Mean rms=2.291%, delta=8.477%, char train=32.087%, word train=99.25%, skip ratio=0%,  New best char error = 32.087 wrote best model:data/tegaki/checkpoints/tegaki32.087_397.checkpoint wrote checkpoint.
.
.
.

2 Percent improvement time=12, best error was 2.565 @ 830
At iteration 842/2400/2400, Mean rms=0.095%, delta=0.014%, char train=0.068%, word train=1.6%, skip ratio=0%,  New best char error = 0.068 wrote best model:data/tegaki/checkpoints/tegaki0.068_842.checkpoint wrote checkpoint.

2 Percent improvement time=12, best error was 2.565 @ 830
At iteration 842/2500/2500, Mean rms=0.087%, delta=0.012%, char train=0.048%, word train=1.1%, skip ratio=0%,  New best char error = 0.048 wrote best model:data/tegaki/checkpoints/tegaki0.048_842.checkpoint wrote checkpoint.
.
.
.

2 Percent improvement time=100, best error was 2.565 @ 830
At iteration 930/4700/4700, Mean rms=0.039%, delta=0%, char train=0.003%, word train=0.1%, skip ratio=0%,  New best char error = 0.003 wrote best model:data/tegaki/checkpoints/tegaki0.003_930.checkpoint wrote checkpoint.

</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-b698236 elementor-widget elementor-widget-code-highlight" data-id="b698236" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>完成データはdataの中に作成されるので、これを圧縮
$ combine_tessdata -c tegaki.traineddata </xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-672a041 elementor-widget elementor-widget-code-highlight" data-id="672a041" data-element_type="widget" data-e-type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
							<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>#利用するときは作成したtrainddataを呼び出すのを忘れずに
$ /usr/local/bin/tesseract test.image.jpg stdout -l tegaki</xmp>
				</code>
			</pre>
		</div>
						</div>
				</div>
					</div>
				</div>
				</div>
		<p>投稿 <a href="https://system.analogengine.jp/knowledge/tesseract-5-%e5%ad%a6%e7%bf%92%e3%83%87%e3%83%bc%e3%82%bf%e4%bd%9c%e6%88%90/">Tesseract 5 学習データ作成</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[php]Uncaught TypeError: sort(): Argument #1 ($array) must be of type array, null given in</title>
		<link>https://system.analogengine.jp/knowledge/phpuncaught-typeerror-sort-argument-1-array-must-be-of-type-array-null-given-in/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 15 Jan 2019 04:12:18 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1143</guid>

					<description><![CDATA[<p>Uncaught TypeError: sort(): Argument #1 ($array) must be of type array, null given in〜のエラーが出る場合についてです。 このPHPエラ &#8230; <a href="https://system.analogengine.jp/knowledge/phpuncaught-typeerror-sort-argument-1-array-must-be-of-type-array-null-given-in/" class="more-link">Continue reading<span class="screen-reader-text"> "[php]Uncaught TypeError: sort(): Argument #1 ($array) must be of type array, null given in"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/phpuncaught-typeerror-sort-argument-1-array-must-be-of-type-array-null-given-in/">[php]Uncaught TypeError: sort(): Argument #1 ($array) must be of type array, null given in</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>Uncaught TypeError: sort(): Argument #1 ($array) must be of type array, null given in〜のエラーが出る場合についてです。<br />
このPHPエラーは定義されていない変数、または配列型以外で定義されている変数に対してsort関数を利用した際に発生するエラー。<br />
致命的なエラー（Fatal error）に分類されています。</p>
<div>sort($array);</div>
<div></div>
<p>の前に必ず定義を行い、</p>
<div>$array = [];</div>
<div>処理<br />
sort($array);</div>
<div>のように行ってください。</div>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/phpuncaught-typeerror-sort-argument-1-array-must-be-of-type-array-null-given-in/">[php]Uncaught TypeError: sort(): Argument #1 ($array) must be of type array, null given in</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[php]Warning: Undefined variable $value in 〜のエラー</title>
		<link>https://system.analogengine.jp/knowledge/phpwarning-undefined-variable-value-in-%e3%80%9c%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 15 Jan 2017 04:08:40 +0000</pubDate>
				<category><![CDATA[ナレッジ]]></category>
		<guid isPermaLink="false">https://system.analogengine.jp/?p=1140</guid>

					<description><![CDATA[<p>Warning: Undefined variable $value in 〜 が出る時は、事前に定義されていない値を処理しようとすることで起こるものです。 $count = 0; //数値型を定義 foreach($a &#8230; <a href="https://system.analogengine.jp/knowledge/phpwarning-undefined-variable-value-in-%e3%80%9c%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/" class="more-link">Continue reading<span class="screen-reader-text"> "[php]Warning: Undefined variable $value in 〜のエラー"</span></a></p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/phpwarning-undefined-variable-value-in-%e3%80%9c%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/">[php]Warning: Undefined variable $value in 〜のエラー</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p><b>Warning</b>: Undefined variable $value in 〜</p>
<p>が出る時は、事前に定義されていない値を処理しようとすることで起こるものです。</p>
<div>$count = 0; //数値型を定義</div>
<div>foreach($array as $key =&gt; $val){</div>
<div>    $count++;</div>
<p>}</p>
<p>など定義を必ず行いましょう。</p>
<p>投稿 <a href="https://system.analogengine.jp/knowledge/phpwarning-undefined-variable-value-in-%e3%80%9c%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/">[php]Warning: Undefined variable $value in 〜のエラー</a> は <a href="https://system.analogengine.jp">WEBシステム開発 | 有限会社アナログエンジン | 滋賀・大阪・東京</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
