全国各地の漁港データをJSONデータ化したお話🦾。#php #map

2022.12.07

Logging

おはようございます、昨日は晴れていましたね☼。

そんなお天気な日に漁港座標データXMLをJSONデータ化しておりました。国土交通省のデータを加工しJSONデータに加工するのはそんな難しい問題じゃないかなって思っていたのですが、データが重たい、中身のXMLデータは名前空間使っているなどという面倒くさい仕様になっておりました。名前空間の対応は、こちらのQiitaの記事を参照してほぼコピペで自分のコードに追加しました。

だた追加しただけでは、あんなツイートしたJSON構造にならないので細工しています。自分が必要なのは漁港名と座標軸だけなので、これだけで良い感じです。

preg_grep("/".$val->{"@attributes"}->id."/",$name);

因みにXMLファイルが重いので自分はデータを分割しました(エラーが出力されるので)。php.iniの設定は変えたくなかったので分割と加工をしたわけです。座標データと漁港名に分割して上記のコード等を使用しJSONファイルを出力。このJSONコードを元にオープンストリートマップ(OpenStreetMap)とかでサービスを作ることが出来ますが、このデータは非商用なので使い物にならないかな…🤔。データの販売等や二次配布は禁止だけど、データ活用は禁止していないように取れるので詳しく調べてみます🙄。

追記:都道府県を追加してみました

タグ

attributes, grep, gt, ID, json, map, name, php, preg, qiita, quot, val, xml, お話, コード, こちら, コピペ, これだけ, ツイート, データ, ファイル, 中身, 仕様, 全国, 分割, 加工, 参照, 各地, 名前, 問題, 国土交通省, 天気, 対応, 座標, 座標軸, 必要, 感じ, , 昨日, 構造, 漁港, 空間, 細工, 自分, 記事, 追加,

Excelでは読み込むことができないような大容量のデータもPowerQueryでは処理できます😤。 #PowerQueryExcel #30万件

2022.12.02

Logging

おはようございます、昨日からいきなり寒くなりましたね。🍃

30万件のダミーデータの作り方を記載します、まずは1万件のダミーデータをこちらのサイトで生成します。後はフォルダを構えてその中にダウンロードしてきたファイルを置き、そのファイルを30回複製します、その後PowerQueryで操作する(フォルダを開く)ことにより、簡単に30万件のダミーデータが作れます、なお、一つのエクセルファイルをPowerQueryで開き1万行をコピーアンドペーストする事を繰り返すことでも同じくダミーデータは作れます。

PowerQueryはこちらから無料でダウンロードできますので、ご使用ください。操作手順等はYOUTUBEでPowerQueryと検索するといろいろな解説がありますのでそちらを参照くださいませ。例えばこちらの動画など🙄

【データベースを一瞬で作れるPowerQueryが神】Excelパワークエリの使い方・メリット

タグ

, 30, Excel, PowerQuery, PowerQueryExcel, youtube, アンド, いろいろ, エクセル, こちら, こと, コピー, サイト, そちら, ダウンロード, ダミー, データ, ファイル, フォルダ, ペースト, 一つ, , , , 作り方, 使用, 処理, 動画, 参照, 容量, , 手順, 操作, 昨日, 検索, 無料, 簡単, 複製, 解説, 記載,

chart.jsでデモを試してみました。📈 #javascriptcode

2022.11.18

Logging

おはようございます、朝が早いですねと言われますが、夜が早いだけです😅。

さて、今日はchart.jsのデモを試してみました。売上のグラフとかコレで作るのが一番じゃないかなと思うライブラリですね。動画で編集してみせたのは二箇所ですが、実際、業務で使用する場合は3箇所ほど変更して使用しないといけないのかなって。

chart.jsでデモを試してみました。📈
chart.jsでデモを試してみました。📈

そういう訳で、こちらのブログにソース・コードを貼り付けておきます。

        const ctx = document.getElementById('myChart');
        let data = [12, 19, 3, 19, 2, 3];
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['demo1', 'demo2', 'demo3', 'demo4', 'demo5', 'demo6'],
                datasets: [{
                    label: '# of Votes',
                    data: data,
                    borderWidth: 1
                }]
            },
            options: {
                scales: {
                    x: {
                        beginAtZero: true
                    }
                }
            }
        });

業務で変更しないといけない最低限3箇所はこちらです~😆。

  • ラベル
  • データーセットの中のラベル
  • データーセットの中のデータ

上記の3箇所を売上のデータや何やらに使用することで活用できるかと思います。

タグ

12, 19, 2, , 39, bar, chart, const, ctx, data, document, getElementById, javascriptcode, JS, let, myChart, new, type, グラフ, コード, こちら, コレ, ソース, デモ, ブログ, ライブラリ, , , 今日, 使用, 動画, 場合, 変更, , 実際, , 業務, 編集, ,

Qiitaのfeedを取得して表示するだけのコード非同期編? #phpcode

2022.11.06

Logging

おはようございます。昨日の続きのお話ですコードは金曜日に書きました😗。

動画を見ていただければわかるかと思いますが即興で書いたコードです、最後の最後でエラーってる!?ところなんかも編集していない所が伝わってくるかと思います。ちなみに画質HDのフル画面で見ないとコードは見えないかなって思います。

任意のユーザーのQiita、feedを取得して表示するだけのコード😋非同期編?
任意のユーザーのQiita、feedを取得して表示するだけのコード😋非同期編?

音声も今後入れていくかもしれません。

任意のユーザーのQiita、feedを取得して表示するだけのコード😋非同期編?

任意のユーザーを増やしたい場合はmain.jsの先頭行(2行目?)のqiitaIDに任意のIDを追加するだけで取得可能です。解説はなしですけど一応、何をやっているのかそれなりに、わかるように心がけたつもりです。あとは盗んで覚えてください😂。

ソースコードはこちらになります。

<?php
session_start();
$toke_byte = openssl_random_pseudo_bytes(16);
$csrf_token = bin2hex($toke_byte);
$_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <style>
        .qiita_feed-list>li {
            /* font-weight: bold; */
            color: aliceblue;
        }

        .qiita_feed-list>li>a {
            color: aliceblue;
        }

        body {
            background-color: #60b111;
        }

        .shadow-lg {
            box-shadow: 0 1rem 3rem rgba(255, 255, 255, .195) !important;
        }
    </style>
    <title>Qiita-feed</title>
    <?php
    require $_SERVER['DOCUMENT_ROOT'] . "/header_script.php";
    ?>
</head>

<body>
    <input type="hidden" id="csrf_token" value="<?= $csrf_token ?>">
    <div class="container">
        <div class="row">
            <div class="col-12">
                <h1 class="text-light">Qiita-feed</h1>
            </div>
        </div>
    </div>
    <div class="container mt-2">
        <span id="view"></span>
        Copyright <?= date("Y") ?>  <a href="https://358tool.com">358tool.com</a>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
    <script src="./js/main.js?<?= time() ?>"></script>
</body>

</html>
//qiita feed
["taoka-toshiaki","mpyw","suin"].forEach(id=>{
    let data = {
        csrf_token:document.getElementById("csrf_token").value,
        feedid:[id]
    };
    let url = "./qiita-feed.php";
    qiita_feed(url,data);
});

async function qiita_feed(url, data) {
    const options = {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        },
        body: JSON.stringify(data)
    }
    await fetch(url, options).then(response =>
        response.json()
    ).then(resultdata => {
        document.getElementById("view").insertAdjacentHTML("beforeend",resultdata.reshtmlcode)
    }
    ).catch(error => {
        console.log(error);
    }
    );
}
<?php
session_start();
$obj = json_decode(strip_tags(@file_get_contents("php://input")));

if (isset($obj)) {

    if (isset($obj->csrf_token)  && $_SESSION["csrf_token"] === $obj->csrf_token) {
        $str ="";
        foreach ($obj->feedid as $key => $id) {
            $str.= '
        <div class="row shadow-lg p-3 mb-5 bg-body rounded">
            <div class="col-12">
            🌿<span class="text-light">://qiita.com/' . xss_d($id) . '/feed :[引用]</span>';
            $str .= get_Qiitafeed("https://qiita.com/" . xss_d($id) . "/feed");
            $str .= '
             </div>
        </div>      ';
        }
        $res["reshtmlcode"] = $str;
        print json_encode($res);
    }
}


function xss_d(mixed $val): mixed
{
    if (is_array($val)) {
        foreach ($val as $key => $value) {
            $val[$key] = htmlentities($value, ENT_QUOTES);
        }
    } else {
        $val = htmlentities($val, ENT_QUOTES);
    }
    return $val;
}

function get_Qiitafeed(string $feedUrl): string
{
    $xml = @simplexml_load_file($feedUrl);
    if (isset($xml->entry)) {
        $str = "<ul class='qiita_feed-list'>";
        foreach ($xml->entry as $key => $val) {
            $str .= "<li><a href='{$val->url}'>" . $val->title . "</a></li>";
        }
        $str .= "</ul>";
    }
    return $str;
}

タグ

2, feed, HD, ID, JS, main, PHPCODE, qiita, qiitaID, あと, エラー, お話, コード, こちら, ソース, つもり, ところ, プル, ユーザー, 今後, 任意, , 先頭, 動画, 即興, 取得, 可能, 同期, 場合, , 昨日, 最後, 画質, 画面, 編集, 表示, 解説, 追加, 金曜日, 音声,

Manifest V3、ブラウザ拡張機能のアレに対応した解説動画。

2022.11.02

Logging

おはようございます、カサカサ肌には大変な季節です🫠。

今日はManifest V3、ブラウザ拡張機能(Chrome拡張)のアレに対応した解説動画がありましたのでご紹介します。こちらの動画で基本は分かる感じになっています。いつまで掲載されるかわからないので、リンクだけ貼っときます。こちらになります。

尚、マニフェストの書き方だけがV3になってから変わっただけではないので、そこの所が注意しないといけない所です。自分もグーグルクロームに拡張機能を公開していたので、そちらの使用されている拡張機能は修正しました。

今、自分用に作っているV3のマニフェストの書き方だけ載せときますね。

{
  "name": "lancers footpoints",
  "version": "1.0.0",
  "manifest_version": 3,
  "description": "ランサーズ。",
  "permissions": [
    "tabs",
    "scripting"
  ],
  "action": {
    "default_icon": "icon20221101.png"
  },
  "background": {
    "service_worker": "src/background.js"
  },
  "content_scripts": [
    {
      "matches": [
        "https://www.lancers.jp/work/search*"
      ],
      "css":["src/style.css"]
    }
  ]
}

あと、backgroundとcontent_scriptsの送受信の関係などが記載されているサイトを見つけたので、そちらもリンクを貼っときます、こちらのページになります。

タグ

1.0.0, , Chrome, footpoints, Lancers, Manifest, name, quot, Version, アレ, いつ, グーグル, クローム, こちら, ご紹介, そこ, そちら, ブラウザ, マニフェスト, リンク, , 今日, 使用, 修正, 公開, 動画, 基本, 大変, 季節, 対応, 感じ, , 拡張, 掲載, 書き方, 機能, 注意, , 自分, 解説,

staticかdynamicか、php-fpmの話。#php #apache

2022.11.01

Logging

おはようございます、メモリが肥大化して落ちました🤮。

先週の朝、メモリが肥大化して落ちてしまいました。今まではphp-fpmを1時間置きに再起動していましたが、それを変更した途端。メモリを食ってしまい落ちたわけです。

php-fpmの対応はこちらのサイトを参考にしました、尚、対応方法はそちらの記事を参照ください。その記事を読んでいて思ったことはやはりサーバーを増強したいということです。

でもVPSレンタルサーバーはサクサク表示させるには、結構お金がかかってしまいます、だったら固定IPを引いて自宅サーバーで運用した方が良いのかもしれないなってこの頃、思っています。

そうすればメモリはかなり詰めるし処理もそれなりに早くなります。恐らく瞬速で表示されるようになりますが、震災などが起きると忽ちダウンしてしまいますよね。

そう考えると・・・微妙ですね。

やはりVPSサーバーをもう一つ借りて調整するか、VPSサーバーと自宅サーバーを同期して運用するかだと…。

タグ

, Apache, dynamic, IP, php, php-fpm, static, VPS, お金, かなり, こちら, こと, サーバー, サイト, そちら, それ, それなり, ダウン, はり, メモリ, もう一つ, レンタル, わけ, , 先週, 再起動, 処理, 参照, 参考, 固定, 増強, 変更, 対応, 微妙, , 方法, , 瞬速, 自宅, 表示, 記事, , 途端, 運用, 震災, ,

ポッドキャストの良さに気づく。 #Podcast #時間短

2022.10.24

Logging

おはようございます🌅。本日、ワクチン接種してきます💉💉💉💉。

さて、今になってポッドキャストの良さに気づいてしまいました。動画よりも効率的に情報収集ができます。ながら聞きが出来るので良い。ラジオと違ってダウンロードして聞くことが出来ます。また、ラジオと違うところは自分の聴きたい人、聴きたいジャンルを聞くことが出来ます。

尚、結構ポッドキャストでは無料で色々なジャンルの方が発信してたりしています。お試しじゃなくて全部、無料で話が聞けたりして凄くお得感があります。

ポッドキャストにはグーグルポッドキャストやApplePodcastなど色々なポッドキャストが存在しますが、前文で記載したポッドキャストを覚えておけば事足りると思います。また、ポッドキャストのようなWEBサービスでボイシーという物もあります。こちらのサービスは有名人もいるので良いじゃないかな。

自分もいつまで聞くかは分かりませんが、今は聴いていて飽きないですね。

タグ

ApplePodcast, Podcast, web, いつ, お得感, お試し, キャスト, グーグル, こちら, こと, サービス, シー, ジャンル, ダウンロード, ところ, ボイ, ボット, ポッドキャスト, ラジオ, ワクチン, , , 全部, 前文, 動画, 収集, 存在, 情報, 接種, , 時間, 有名人, 本日, 無料, , 発信, , 自分, 色々, 記載, ,

windowsパッケージマネージャー平たく言えば #windows

2022.10.13

Logging

おはようございます、寒さが足元から来る季節になりましたね😖。

さて、今日はwindowsパッケージマネージャーのお話をします。windowsパッケージマネージャーとはなんぞやという方もいると思いますので、簡単な説明を記載しときます。ウィンドウズパッケージマネージャーとは、Windowsにインストールされているソフトの管理をするものです。

Windowsパッケージマネージャーがインストールされていない方は、こちらのURLからインストール下さいませ。

これをインストールする事により何が良いかと言えば、ソフトウェア(アプリ)のアップデートが一括で出来たりします。コマンドプロンプトに下記のコマンドを入力すればほぼ自動でアップデートしてくれてとても便利です。

winget upgrade --all

タグ

all, upgrade, url, Windows, winget, アップデート, アプリ, インストール, ウィンドウズ, お話, こちら, コマンド, これ, ソフト, ソフトウェア, パッケージ, プロンプト, マネージャー, もの, 一括, 下記, , 今日, , 便利, 入力, 季節, , 管理, 簡単, 自動, 記載, 説明, 足元,

一週間の予約が出来るデモコードです。良かったらどうぞ😌。 #php #code

2022.09.17

Logging

おはようございます、今日から台風接近らしいですね。この投稿は昨日書きました。

さて、一週間の予約(時刻表から)が出来るデモコードを書きました。これを書いたキッカケは昔の職場の方がこんな感じのUIを作られていたのを見て、自分も書いてみようと思いDEMOコードを朝起きて調べながら書きました。調べたことは選択を解除する方法だけで、後はオリジナルコードです、設計書も何もなく組み立ていきましたので、欠陥があるかもです。また、Qiitaにも記載しましたが、コメントをほぼ書いていません。書かずともプログラマーなら分かるだろうという感覚です。

予約ー時刻表DEMO

肝心の確認部分は記載していないのにも訳があります。営業妨害になっては駄目だからです。そういう理由で確認部分以降は書いていません。

こちらにもソースコードを掲載しときますね。

<?php
ini_set("display_errors",0);
/**
 * @param array $holiday
 * @return string $str
 */
function fn_header($holiday = [])
{
    $str = "";
    $date = new DateTime();
    for ($i = 0; $i < 7; $i++) {
        !$i ? "" : $date->modify('+1 day');
        $w = $date->format("w");
        $tabindex = $i*7;
        $ho = (function ($days, $holiday = []) {
            return (array_search($days, $holiday) !== false) ? "holiday" : "";
        })($date->format("Y-m-d"), $holiday);
        $str .= "
        <th tabindex=$tabindex>
            <span class='header_no week_no_$w $ho'>" . $date->format("Y-m-d") . "</span>
        </th>";
    }
    return $str;
}
/**
 * @param int $h_min
 * @param int $h_max
 * @param int $m_interval
 * @param array $cnt
 * @param array $reserve
 * @param array $holiday
 * @return string $str
 */
function fn_time($h_min, $h_max, $m_interval,$cnt=[],$holiday = [], $reserve = [])
{
    $str= [];
    for ($h = $h_min; $h <= $h_max; $h++) {
        for ($m = 0; $m < 60; $m = $m + $m_interval) {
            print("<tr>\n");
            $date = new DateTime();
            for ($i = 0; $i < 7; $i++) {
                $cnt[$i]=!$cnt[$i]?(((($h_max - $h_min)+1)*(60/$m_interval))*($i))+7:(++$cnt[$i]);
                !$i ? "" : $date->modify('+1 day');
                $w = $date->format("w");
                $ho = (function ($days, $holiday = []) {
                    return (array_search($days, $holiday) !== false) ? "holiday" : "";
                })($date->format("Y-m-d"), $holiday);
                $time = sprintf("%02d:%02d",$h, $m);
                if ($ho) {
                    print("
                        <td class='' tabindex={$cnt[$i]}>
                            <span class='header_no week_no_$w $ho'>" . $time . "</span>
                        </td>");
                } else {
                    $r = (function ($days, $reserve = []) {
                        return (array_search($days, $reserve) !== false) ? "reserve" : "";
                    })($date->format("Y-m-d") . "_" . $time, $reserve);
                    if (!$r) {
                        print("
                            <td class='date_" . $date->format("Y-m-d") . "_{$time}' tabindex={$cnt[$i]} data-date='" . $date->format("Y-m-d") . "_{$time}'>
                                <a class='time_{$m}_" . $date->format("Y-m-d") . "_{$time}' data-sortno={$cnt[$i]}  href='#?data=" . $date->format("Y-m-d") . "_{$time}'><span class='header_no week_no_{$w} {$h}'>{$time}</span></a>
                            </td>");
                    } else {
                        print("
                            <td class='' tabindex={$cnt[$i]}>
                                <span class='header_no week_no_$w $r'>" . $time . "</span>
                            </td>");
                    }
                }
            }
            $date = null;
            print("</tr>\n");
        }
    }
    return "";
}
?>
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="Description" content="Enter your description here" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <title>予約-時刻表(デモ版)</title>
    <style>
        table,tr,td{
            user-select: none;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-12 text-center">
                <h1 class="display-1">予約-時刻表<br></h1>
                <h5>{予約:時刻をクリックするか、<br>
                    左クリック選択状態で複数選択可能です<br>
                    (日付またぎは禁止しています)}</h5>
                <h5>{ダブルクリックすると予約画面に遷移します。<br>
                    ※DEMO版ですので予約登録画面は御座いません}</h5>
            </div>
        </div>
    </div>
    <div class="container-fluid  text-center">
        <div class="row">
            <div class="col-12">
                <table class="shadow-lg table table-hover table-bordered">
                    <thead>
                        <tr>
                            <?= fn_header() ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?=fn_time(10, 20, 10,[],["2022-09-18","2022-09-23"],["2022-09-19_10:40","2022-09-19_10:50"]) ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.9.2/umd/popper.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/js/bootstrap.min.js"></script>
    <script src="./assets/js/main.js?<?=time()?>"></script>
</body>
</html>
let date_obj = document.querySelectorAll("td");
let submit_url = "https://example.com";
let is_date_data = [];
let cnt = 0;

date_obj.forEach(function (elm, key) {
    elm.addEventListener("mouseout", select_in_value);
    elm.addEventListener("click", sp_select_in_value);
    elm.addEventListener("touchend", sp_select_in_value);
    elm.addEventListener("dblclick", select_out_value);
});
function check_value(o, e) {
    if (is_date_data.length === 0) {
        return true;
    }
    let d = o.getAttribute("data-date");
    return d ? ((d) => {
        let f = is_date_data.find(element => {
            let pattern = new RegExp(d.split("_")[0]);
            return !element.match(pattern);
        }) ? false : true;
        if (!f) {
            select_clear(o, e);
            is_date_data = [];
            cnt = 0;
        }
        return f;
    })(d) : false;
}
function select_in_value(e) {
    if (e.buttons === 1 && check_value(this, e)) {
        if (this.getAttribute("data-date")) {
            this.style.backgroundColor = "#555";
            this.children[0].style.color = "#fff";
            if (is_date_data.indexOf(this.getAttribute("data-date")) && is_date_data.indexOf(this.getAttribute("data-date"))) {
                is_date_data[cnt] = this.getAttribute("data-date");
                cnt++;
            }
        }
    }
}
function sp_select_in_value(e) {
    if (check_value(this, e)) {
        if (this.getAttribute("data-date")) {
            this.style.backgroundColor = "#555";
            this.children[0].style.color = "#fff";
            if (is_date_data.indexOf(this.getAttribute("data-date")) && is_date_data.indexOf(this.getAttribute("data-date"))) {
                is_date_data[cnt] = this.getAttribute("data-date");
                cnt++;
            }
        }
    }
}
function select_out_value(e) {
    if (is_date_data.length) {
        let is_data = is_date_data.map(function (elm, index) {
            return "date[" + index + "]=" + elm;
        });
        window.location.href = submit_url + "?" + is_data.join("&");
    }
}
function select_clear(o, e) {
    let is_ClassName = [];
    is_ClassName = is_date_data.map(function (d) {
        return "date_" + d;
    });
    is_ClassName.map(class_name => {
        document.getElementsByClassName(class_name)[0].style.backgroundColor = "#fff";
        document.getElementsByClassName(class_name)[0].children[0].style.color = "#0d6efd";
    })
}

タグ

0, Code, com, demo, https, ligaLgY-uZ, php, qiita, UI, watch, www, youtube, オリジナル, キッカケ, コード, こちら, こと, コメント, これ, ソース, デモ, プログラマー, , 予約, 今日, 台風, 営業, 妨害, , 感じ, 感覚, 投稿, 接近, 掲載, , 方法, , 昨日, 時刻表, , 欠陥, 理由, 確認, 職場, 肝心, 自分, 解除, 記載, 設計書, , 選択, 部分, 駄目,

1万件のCSVを読み込みテーブルに保存する雛形コード #PHPCode

2022.09.08

Logging

おはようございます、徐々に秋ぽっい日差しになってきましたね(まだ暑いけども😌)。

今日は、1万件のCSVを読み込みテーブルに保存する雛形コードを昨日、ちょちょっと書きましたので記載します。ファイルをダウンロードして使いたい方はGithubのリンクを下に貼っときますので、ご使用頂けたらと思います。尚、テーブルなどはCSVを参考にご自身で構えてください。

※動作環境はPHP8系です、なのでPHP7系では一部エラーが出ます。fgetcsv…nullを0へ変更。

Githubのリンクはこちら

Qiitaの方に記載しようかどうしようか、迷ったのですが第一弾目がアクセス数がそこそこ伸びたのでこれ以上、注目されるのは嫌なのでブログの方に記載しました。1万件のCSVを簡単に読み込ませる方法はPHPコードを書くのではなく、SQLのコマンドで実行した方が実は早いですけど・・・。

有言実行

早いですけど、その場合、CSVがちゃんとしたファイルではないと上手くテーブルに保存されない場合や、そもそもコマンドラインで操作出来ない場合もあったりしてPHPコードなどで制御しないと駄目な事もあります。そんな時に、このコードをサンプルとして使って頂ければ良いなと思い作りました。

1万件のCSVを読み込ませるPHPコード雛形。

そんなにコードを書かなくてもまぁ動くんですよ。ちなみにソースコードには、あまりコメントを書いていないですが、プログラマーなら大体の人が理解できるレベルかと思います。

<?php
//ini_set("display_errors","On");
session_start();
require "db_config.php";

//読み込みCSVファイル名セット
class csv
{
    /**
     * @param string $filename
     * @param int $cnt
     * @return Object
     */
    public function ini_csv($filename = "", $cnt = 0)
    {
        return new csv_read($filename, $cnt);
    }
}

//CSVデータを読み込ます
class csv_read
{
    var $max = 10000;
    var $cnt = 0;
    var $handle = null;
    /**
     * @param string $filename
     * @param int $cnt
     */
    public function __construct($filename = "", $cnt = 0)
    {
        $this->cnt = $cnt;
        $this->handle =  fopen($filename, "r");
        $_SESSION["offset"] ? fseek($this->handle, $_SESSION["offset"]) : $this->handle;
    }
    /**
     * @param int $header_skip
     * @return Object
     */
    public function reader($header_skip = 0)
    {
        if ($this->handle !== FALSE) {
            $response = null;
            $data = fgetcsv($this->handle, null, ",");
            if (!$header_skip || $_SESSION["offset"]) {
                if ($data !== FALSE) {
                    $_SESSION["offset"] = ftell($this->handle);
                    $response["data"] = $data;
                    $response["cnt"] = $this->cnt > $this->max ? 0 : ($this->cnt + 1);
                    $flag = true;
                } else {
                    $_SESSION["offset"] = null;
                    $flag = false;
                }
            } else {
                $_SESSION["offset"] = ftell($this->handle);
                $response["cnt"] = $this->cnt > $this->max ? 0 : ($this->cnt + 1);
                $flag = false;
            }
        } else {
            $_SESSION["offset"] = null;
            $flag = false;
        }
        return new table_save($flag, $response);
    }
}

//tableにCSVデータを保存
class table_save
{
    var $flag = false;
    var $result = null;
    /**
     * @param boolean $flag
     * @param array  $response
     * @return void
     */
    public function __construct($flag, $response)
    {
        $this->flag = $flag;
        $this->result = $response;
        $this->column_name = "name,,...";
    }
    /**
     * @param string  $column_name
     * @return void
     */
    public function tbl_save($column_name = "")
    {
        if ($this->flag) {
            $column = $column_name ? $column_name : $this->column_name;
            $is_column = explode(",", $column);
            foreach ($is_column as $key => $val) {
                $is_value[$val] = $this->result["data"][$key];
            }
            try {
                $pdo = new PDO(DSN, USERNAME, PASSWORD);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = (function ($is_column) {
                    $INSERTFIRST = null;
                    $INSERTLAST = null;
                    foreach ($is_column as $key => $val) {
                        $INSERTFIRST[] = "$val";
                        $INSERTLAST[] = ":$val";
                    }
                    $INSERTSQL = "(" . implode(",", $INSERTFIRST) . ")values(" . implode(",", $INSERTLAST) . ")";
                    $UPDATESQL = null;
                    foreach ($is_column as $key => $val) {
                        $UPDATESQL[] = "$val = :$val";
                    }
                    return "INSERT INTO " . TABLENAME . $INSERTSQL . " ON DUPLICATE KEY UPDATE " . implode(",", $UPDATESQL) . ";";
                })($is_column);

                $stmt = $pdo->prepare($sql);
                foreach ($is_value as $key => &$value) {
                    $is_type = ($key === "test3" || $key === "test13") ? PDO::PARAM_INT : PDO::PARAM_STR;
                    $stmt->bindValue(":$key", $value, $is_type);
                }
                $this->result["sql"] = $stmt->execute();
            } catch (\Throwable $th) {
                //throw $th;
                $this->result = null;
                print $th->getMessage();
            }
        }
        print json_encode($this->result);
    }
}

//RUN...POST DATA
if (isset($_POST["csrf_token"])  && d_xss($_POST["csrf_token"]) === $_SESSION['csrf_token']) {

    $_SESSION["offset"] = (int)d_xss($_POST["reset_flag"]) === 1 ? null : d_xss($_SESSION["offset"]);
    $filename = d_xss($_POST["filename"]);
    $cnt = (int)d_xss($_POST["cnt"]);

    $column_name = "test1,test2,test3,test4,test5,test6,test7,test8,test9,test10,test11,test12,test13,test14,test15";
    $header_skip = 1;

    $csv = new csv();
    $csv->ini_csv($filename, $cnt)->reader($header_skip)->tbl_save($column_name);
    $csv = null;
} else {
    print "";
}
function d_xss($data){
    $data = strip_tags($data);
    $data = htmlspecialchars($data,ENT_QUOTES);
    return $data;
}
<?php
 // ログインした状態と同等にするためセッションを開始します
 session_start();
 // 暗号学的的に安全なランダムなバイナリを生成し、それを16進数に変換することでASCII文字列に変換します
  $toke_byte = openssl_random_pseudo_bytes(16);
  $csrf_token = bin2hex($toke_byte);
  // 生成したトークンをセッションに保存します
  $_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<title>CSV</title>
</head>
<body>
    <input type="hidden" name="csrf_token" value="<?=$csrf_token?>">
    <span class="h3" id="cnt"></span><br><br>
    <span class="h4" id="read_csv"></span><br><br>
    <span class="h4" id="debug"></span><br><br>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script>
    window.onload = function(){
        read_csv(0,1);
    };
    function read_csv(cnt,reset_flag){
        try{
            $.ajax({
            type: "post",
            url: "./assets/php/class_csv.php",
            async: false,
            data: {csrf_token:document.getElementsByName("csrf_token")[0].value,reset_flag:reset_flag,filename:"dummy.csv",cnt:cnt},
            dataType: "json",
            success: function (response) {
                    if(response){
                        cnt = response.cnt;
                        document.getElementById("cnt").innerText = cnt;
                        if(response.data){
                            document.getElementById("read_csv").innerText = response.data[0] + response.sql;
                            document.getElementById("debug").innerText = cnt ===21?response.data:document.getElementById("debug").innerText;
                        }
                        setTimeout(function(){read_csv(cnt)},0);
                    }
                }
            });
        }catch(e){
            console.warn(e);
            read_csv(cnt);
        }
    }
</script>
</body>
</html>

タグ

0, , 7, 8, CSV, fgetcsv, github, null, php, PHPCODE, qiita, SQL, アクセス, エラー, コード, こちら, コマンド, これ, ご使用, ご自身, ダウンロード, ちょ, テーブル, ファイル, ブログ, リンク, , 一部, , , 今日, 保存, 動作, 参考, 変更, 実行, , 方法, 日差し, 昨日, 有言実行, 注目, 環境, , 簡単, 記載, 雛形,

submit(サブミット):送信させない4つの方法です🙄。#javascript #サブミットキャンセル

2022.09.07

Logging

おはようございます、台風一過が去りましたね😌。

さて、今日はsubmit(サブミット):送信させない4つの方法を記載します、方法は大きく分けて2つの方法があり、それを細分化して4つの方法になります。まず、一番目は“送信する際(form側)”にてキャンセルする方法です。この場合、addEventListener(アッドイベントリスナー)でキャンセル処理する場合とonsubmitを使用してキャンセルする方法があります。

サンプルコード例1と例3にあたるコードが上記のコードになります。

次に”ボタンをクリック”した際にサブミット(送信)処理をキャンセルする方法です、この方法でも送信を阻止する事ができます。

サンプルコード例2と例4にあたります、自分としてはフォームで処理した方が良いかなと思いますが、こちらでも送信をキャンセルする事ができます。

尚、ソースコードは下記になります。また、参考にしたサイトのリンクを貼っときます。MDNのリンクです。

    <form id="frm" method="post" action="./example/">
        <input type="hidden" name="example" value="data">
        <button type="submit" class="btn btn-primary">Submit1</button>
    </form>
    <form method="post" action="./example/">
        <input type="hidden" name="example" value="data">
        <button id="btn" type="submit" class="btn btn-primary">Submit2</button>
    </form>    
    <form method="post" action="./example/" onsubmit="return func1()" >
        <input type="hidden" name="example" value="data">
        <button type="submit" class="btn btn-primary">Submit3</button>
    </form>
    <form method="post" action="./example/"  >
        <input type="hidden" name="example" value="data">
        <button type="submit" class="btn btn-primary" onclick="return func2()" >Submit4</button>
    </form>
//例1
document.getElementById("frm").addEventListener("submit",function(event){
    event.preventDefault();
});
//例2
document.getElementById("btn").addEventListener("click",function(event){
    event.preventDefault();
    event.stopPropagation();//インターフェイスのメソッドで、キャプチャおよびバブリング段階において現在のイベントのさらなる伝播を阻止します。 
});
//例3
function func1(){
    return false;
}
//例4
function func2(){
    return false;
}

タグ

, 2, , 4, addEventListener, Form, javascript, onsubmit, submit, アッド, イベント, キャンセル, クリック, コード, こちら, サブミット, サンプル, それ, フォーム, ボタン, リスナー, , 上記, , 今日, 使用, , , 処理, 台風一過, 場合, , 方法, , 細分化, 自分, 記載, 送信, 阻止, ,

よさこい祭り動画検索WEBアプリを運営しています。

2022.07.19

Logging

おはようございます。今日は自分が運営しているWEBアプリ第一弾であるよさこい動画検索アプリの紹介です。このアプリを使用すると過去のよさこい祭りのYOUTUBE動画が参照出来るようになっています。今年の8月10日~11日、開催されるよさこい祭りのスケジュールにも対応しました。まだ、アンドロイドアプリとWEBから閲覧しか出来ませんが、マネタイズ出来るようになったらMacを購入してiosアプリを作りたいと思っています。

😌Androidアプリはこちらから

🏠WEBサイトはこちらになります。

因みにその他、アプリも時間が有れば作ってみたいなって思っています。もう一つリリースしていないアプリとかもあるのですが、そちらはKotlin言語で動いています。基本的にWEBアプリをリリースしていきます、最初はWEBサービスを元にしたものが多いと思いますが、徐々にOSを意識したアプリなども展開していきたいです。全て自分が有れば良いのになを元にして作っていく予定です。

また、WEBサービスなどの知見などもgithubに公開していくつもりでいます。

タグ

10, 11, 8, Android, iOS, Kotlin, Mac, OS, web, youtube, アプリ, アンドロイド, こちら, サービス, サイト, スケジュール, そちら, その他, マネタイズ, もう一つ, もの, よさこい, よさこい祭り, リリース, , 今年, 今日, 使用, , 全て, 動画, 参照, 対応, 展開, 意識, 時間, 最初, 検索, 紹介, 自分, 言語, 購入, 運営, 過去, 開催, 閲覧,

明日からのためにデスク周りを整理しました。DIYみたいな事を…。

2022.07.15

Logging

おはようございます。あっという間にこの日が・・・来ました。今後の事とかは明日、記事にします。

さて「明日からのためにデスク周りを整理しました」というタイトル通り、デスク周りのごちゃごちゃしていた部分をDIYして机の下に収納しました。この記事は予約投稿ですので正確には月曜日時点でデスク周りは綺麗に片付いている状態になっていると思います。

まず、使わなくなった携帯電話をWEBの動作確認用に使っているのですが、雑然と机の上に置いていたものを後付の机引き出し(収納)を購入しその中に入れるようにしました。その他、ipad proと旧型iPhone、メモ用の方眼紙、英単語帳も収納に入れています

@zip358com

次に動画にも写り込んでいると思いますが、机の上にコンセントを置いていたのですが、こちらも収納入れを購入し机の下に取り付けた形になります。

また、収納とは関係ないのですがDisplayPortを購入し全てのディスプレイをビデオボードに接続し出力出来るようにしました。今までマルチポートしてオンボードに刺していたのですが、イラストレーターなどの力を最大限に活かしたい場合はマルチポート設定はOFFにした方が良いとあるサイトに記載してあったので、そのように変更しています。

今回のDIYの費用は5000円程度になりますが、良くなった感じがします(自己満足ですけどね😆)。

尚、整理したデスク周りは近日中にこの記事に追加します。

追伸:収納引き出しを購入したのですが、ipadや方眼紙が入らなかったので机の上に置いた状態になってます。そしていつも使用するものは手元にある方が効率が良い・・・。

タグ

DisplayPort, DIY, iPad, iPhone, Pro, web, あっという間, こちら, コンセント, その他, タイトル, ため, , デスク, メモ, もの, , , , 予約, , 今後, 全て, 動作, 動画, 収納, 周り, , 引き出し, , 後付, 投稿, 携帯, 整理, 方眼紙, , 旧型, 明日, 時点, 月曜日, , 正確, 状態, 確認, 綺麗, 英単語, 記事, 購入, 部分, 電話,

退職日まで日数を求める・JSでカウントダウンコードを構築してみた😆

2022.07.02

Logging

おはようございます。ちょっと退職後の事を思うと不安が過りますが、何とかなる何とかします😆。

さて、退職日まで後何日あるかを確認出来る物を作りました、土日はカウントしない場合も考慮しています。このコードは人様のコードを拝借して再構築したものになります。

参考にしたサイトはこちらです。土曜日、日曜日は除くように新たに無名関数を入れ込んでいます。土日はカウントせず月曜日のカウントになります。JavaScriptのコードは下記になります。HTMLコードに敢えて記載しません、ご自由に書き換えて試してくださいませ。

var showDiffDate = function( tYear, tMonth, tDay) {
    var nowDate = new Date();
    var dnumNow = nowDate.getTime();
    var targetDate = new Date( tYear, tMonth-1, tDay );
    var dnumTarget = targetDate.getTime();

    var diffMSec = dnumTarget - dnumNow;
    var diffDays = diffMSec / ( 1000 * 60 * 60 * 24 );
    var showDays = Math.ceil( diffDays ); 
    var Msg;
    if( showDays >= 0 ) {
       Msg = "" + showDays + " days(" + function(){
         var is_days = parseInt(parseInt(showDays) - Math.floor(showDays / 7) * 2);
         is_days = (nowDate.getDay() === 0)?is_days -2:is_days;
         is_days = (nowDate.getDay() === 6)?is_days -3:is_days;
         return is_days;
       }() +")";
    }
    else {
       Msg = "" + (showDays * -1) + "";
    }
    return Msg;
 };

 document.getElementById("days").innerText = showDiffDate(2022,7,15);

尚、このコードはそれほど難しいことはなく難易度で言えば最も簡単なコードだと思います。

タグ

date, dnumNow, function, getTime, html, javascript, JS, new, nowDate, showDiffDate, targetDate, tDay, tMonth, tY, tYear, var, カウント, カウントダウン, コード, こちら, サイト, もの, 下記, 不安, , 人様, 何日, 参考, 土日, 土曜日, 場合, , 拝借, 日数, 日曜日, 月曜日, 構築, 無名, , 確認, 考慮, 記載, 退職, 関数,

面白い事をしている人。発見することが楽しいだろうな!!!。𒁠

2022.06.12

Logging

おはようございます。この頃、睡眠時間、8時間確保を頑張りたいと思っています。

大西拓磨さんは、一年前(2022年)ぐらいにTVにも出演されてみたいですが、そこは割愛して。unicodeで面白いことをしているのが凄いな、自分もこういうことを試みてみたいなって。社会に受け入れるかどうかより自分が面白いと思うことが大事だと思います。特に制作するものってそうなんだと。

自分の場合、作っているときが楽しくて人に使われる頃には興味は薄れている。今まで作った無料サービスもそんな感じで自分が欲しいなって思って作っているだけの物が多かったりします。

さて大西拓磨さんがunicodeでどんなことをしているかという事を知りたい方はこちらをクリック

因みに自分はunicodeも好きだけど、YOUTUBEで低音厨音域テストしているのが好きです。

低音厨音域テスト“合格”した

そして一番不思議なのはどうやって生活しているのか?🤔。YOUTUBEとnoteでなんとか生きていけるような収益が出ているのなら良いのですが、なんかハイレンジIQの持ち主なのに何か生きているのか、たまにTwitterを見て「生きているな。」って「よし頑張ろう」という感覚になります。

タグ

2022, 8, TV, Unicode, youtu, youtube, クリック, こちら, こと, サービス, そこ, テスト, とき, もの, , 不思議, , , 低音, 出演, 制作, 割愛, , 場合, 大事, 大西, 感じ, 拓磨, , 時間, 無料, , 生活, 発見, 睡眠, 確保, 社会, 自分, 興味, 音域, ,

悪い円安とか言われているので、下がり具合を見てみた。

2022.05.16

Logging

おはようございます。

この頃、悪い円安とか言われているので、下がり具合を見てみました。見てみると結構下がっているのがわかります。

過去5年間でみると物凄く下がっていますよね。海外へ旅行へいくと物価が3倍だとか呟いている人もいたりして・・・。このまま円安が進めばスマホの値段も上がるでしょうね。特にiPhoneなんて20万円するようになるかも知れません。速く日本政府が対応をしなくては駄目な感じになるかなって思います。

この円安は大丈夫って言っている人もいるけれども、自分はなんとなくそうは思えないですね。お給与は上がらない、労働人口は減り続け生産性も下がっています。このまま沈んでいくのかな日本っていう不安があり将来を悲観的に思っている人達もいると思います。

日本政府には、迅速な対応を是非行ってほしいですよね。

尚、Gさんのファイナンス専門サイトがあります、気になる人はこちらから見てみてください。

タグ

20, , 5, iPhone, こちら, サイト, スマホ, ファイナンス, , 不安, , 人口, 値段, 具合, 円安, 労働, 対応, 専門, 将来, 政府, 旅行, 日本, , 海外, 物価, 生産性, 給与, 自分, 過去, , 駄目,

airpodとsonyのlinkbudsどちら買おうかと思案してます。

2022.03.30

Logging

おはよう御座います☀。日の出も徐々に早くなってきてますね。

ipodとsonyのlinkbudsどちら買おうかと思案してます。airpodとの良いところはインイヤー型のイヤホンって所なんですね。自分は耳の中までフィット感のあるのは、ちょっとゴワゴワ感が感じるので無理なんですね、、なんでインイヤー型のイヤホンをいつも選択しています。

Sony LinkBuds Official Product Video

linkbudsは外部の音も物理的に取り入れているところが売りのイヤホンです、こちらもインイヤー型のイヤホンです。

書いていて分かったのですが、airpodを買います。理由は旅先で使うときに外部音はいらないので・・・。そういう事を考えるとairpodが良いかなって思います。本当はインイヤーのairpod proがあればそちらを購入していると思います。

All-new AirPods with Spatial Audio | Apple

そう思うとairpodにノイズキャンセリング機能がつくまで待つのも良いかなって、それまでは保留にしておくのも良いかもしれないな。

それが今の心の声です。

タグ

2, 4, 5, airpod, com, https, ipod, linkbuds, Pro, SONY, watch, www, youtube, YqrlOr, イヤー, イヤホン, いん, こちら, そちら, とき, ところ, どちら, フィット, , , 売り, 外部, , 思案, , , 旅先, 日の出, 本当, 理由, , 自分, 購入, 選択, ,

sonyのwh-1000xm4の使用感、むふむふ、ふむふむ!これは!!

2022.03.27

Logging

先週の土曜日にsonyのwh-1000xm4を購入しました、その使用感を一週間ほど経過したので書いていきます。まず、音ですよね😌。今まで安いヘッドホンばかり使用していたので全然違います。重低音感が半端ないです。ヘッドホンからの音漏れもなくとても良い感じですね。因みに自分はiPhoneに専用のアプリをインストールして使用しています、またiPhoneの音制御を外して聞いています。

次にフィット感と本体の質感はどうなのかなって言えば、こちらも良い感じです。長時間、ヘッドホンしていても耳が痛くならないです。ずっと着けていても大丈夫ですが難聴になるかもしれないと思い、数時間に一回は装着を外しています。それぐらい大丈夫です。質感はスルっとしていてしっとり感があります。夏に長時間使用していると汗をかきそうかなと思う所があります。

総合的に言えば高い買い物でしたが買ってよかったです。ただ今年の後半にはwh-1000xm5が発売されそうな気がします。今まで二年スパンで新しい機種が登場しているので・・・それを考慮して検討してみてはと思っております。

タグ

, 1000, 4, iPhone, SONY, wh-, xM, アプリ, インストール, こちら, これ, する, それ, , フィット, ヘッドホン, , 今年, 使用, 使用感, 先週, 制御, 半端, 土曜日, , 専用, 後半, , 感じ, , , 本体, , , 経過, , 自分, 装着, 買い物, 質感, 購入, 重低音, 長時間, 難聴, ,

トラックボールマウスを購入しました、もはや帰れない。

2022.03.18

Logging

おはよう御座います。もう春ですね🌴。
日本は春の次に梅雨という時季があります、早く梅雨の時季が過ぎ去りますようにと今から思っています😏。

トラックボールマウスを購入しました、悩んだあげく手が勝手にポッチっていました。勝手良かったなと思います。其の理由はマウスを操作しているとふいにキーボードにマウスが当たってイラってなるのですが、それが完璧に解消された事にあります。

イラってなる対策のため今までキーボードを小型化していましたが、ついにトラックボールマウスを自分が買うなんてと思っていましたが結果、買って正解だなって思いました。

慣れればこちらの方が便利です。ポインタの動きも滑らかですしね。何より手をあまり動かさなくて良くなった事により肩こり対策にもなります。因みに一度、自分は肩こりがひどくて会社を休んだことがあります。デスクワークの仕事って腰痛と肩こりが仕事を続けていく中で問題になっていくと思いますがトラックボールマウスによって、それが軽減させられると自分は今回、トラックボールマウスを導入して思いました。

タグ

あげく, イラ, キーボード, こちら, こと, それ, ため, デスク, トラック, トラックボ, ふい, ボール, ポインタ, ポッチ, マウス, ワーク, 一度, , , , 仕事, 会社, 便利, 勝手, 問題, 完璧, 対策, 小型, , 操作, , 日本, , 時季, 梅雨, , 正解, 理由, 結果, 肩こり, 腰痛, 自分, 解消, 購入,

お店のホームページ(サイト)の作り方その弐

2022.03.05

Logging

おひさしぶりです。
ブログを数日休んでいました。こらからは不定期という感じでブログを書いてきます。
このブログはお店のホームページ作り方その壱の続きになります。

下記が予約ボタンと地図の作成手順です、こちらの変更部分をindex.phpのファイルを書き換えてください。予約には予約システムSelectType (セレクトタイプ)を使用しているのでアカウントを作りご自身のお店に合わして管理画面から設定してみてください。

会社の地図に関しては、GoogleMapを使用しています、こちらをindex.phpに貼り付けるのですが必要ない部分があるのでその部分を削除して貼り付けています。動画を注視してみるとわかるかと思います。

予約ボタン
ぐーぐるまっぷ・ お店の地図

今回はここまでです。次回はさくらレンタルサーバにファイルをアップロードする方法とSSLの設定を行い完了となります。

タグ

6, com, GoogleMap, https, index, php, SelectType, SSL, vMSy-CCthA, watch, www, youtube, アカウント, アップロード, お店, ここ, こちら, ご自身, サーバ, サイト, さくら, システム, セレクト, タイプ, ファイル, ブログ, ホームページ, ボタン, レンタル, 下記, 不定期, 予約, 今回, 作り方, 作成, 使用, 削除, 動画, 地図, , 変更, , 感じ, 手順, 数日, 方法, 次回, 注視, 画面, 管理, 設定, 部分,

お店のホームページ(サイト)の作り方その壱

2022.03.01

Logging

オハヨウゴザイマス。
片言の日本語しか使えない日本人です😌、高知県はあいにくの雨になるそうですね。

昨日のうちにお店のホームページ(サイト)の雛形作りをしておりました。デザインの参考にしたサイトはこちらになります。こちらのサイトデザインを元に自分が少しデザインを改良した感じです。

https://zip358.com/tool/sample.com/

こちらの画像や文言を変更することにより貴方が作成したいホームページが簡単にできてしまいます。解説はテキストで記載していきます。前手順としてVisualStudio codeとfilezillaソフトをWindowsやMacにインストールしてください。インストールの仕方はYOUTUBEで検索するといろいろな人が解説していますので、そちらを参考にしてください。

お店のホームページ(サイト)の作り方その壱-2

今回はお店のホームページ(サイト)の雛形をダウンロードして頂いてindex.phpというファイルをVisualStudio codeで開いてみてください。そうすると英字で記載している所が何箇所かあると思いますが英字は英字のままで何も変更しないでください、変更するのは日本語で記述されたところを貴方の店舗に合わして説明文を変更してみて保存してください。

お店のホームページ(サイト)の作り方その壱-1

画像を変えたい場合はimagesの中にある画像をそれぞれサンプルサイトを照らし合わせながら、貴方の店舗の画像に上書きしてください(画像名は変えないでください)。

次回は予約サイトの設定とGoogleMapの設定になります。

雛形はこちらからダウンロード:https://zip358.com/tool/sample.com.zip

タグ

Code, filezilla, index, Mac, php, VisualStudio, Windows, youtube, あいにく, いろいろ, インストール, うち, オハ, お店, こちら, こと, サイト, そちら, ソフト, ダウンロード, テキスト, デザイン, ファイル, ホームページ, よう, , 今回, 仕方, 作り方, 作成, , 参考, , 変更, 少し, 感じ, 手順, 改良, 文言, 日本人, 日本語, 昨日, 検索, 片言, 画像, 簡単, 自分, 英字, 解説, 記載, 貴方, 雛形, , 高知県,

強者求む:nginxとnodejsの共存が出来なくて困っています。

2022.02.11

Logging

今日は建国記念日ですね😌、とりわけ愛国心もないので何もしませんが・・・。

さて今日は朝からVPSサーバーを解約作業をしていて、こちらのサーバーにnginxとnodejsの共存を行おう作業していますが、nginxとnodejsの共存が出来なくて困っています。やり方は必ずあると思いますが、ググる力が無いため保留中です。誰か教えて頂けますか?

もし宜しければTwitterのDMもしくはリプライで教えて頂けると幸いです。

一応、アクセス数はまぁまぁあるので教えてくれる人が訪れると信じて今日はその作業をお休みします。尚、こちらで解決した場合や教えて頂いたらこの記事に追加して記載します。

タグ

DM, nginx, nodejs, Twitter, VPS, アクセス, お休み, こちら, サーバー, ため, やり方, リプライ, , 今日, , 作業, 保留, 共存, , 場合, 建国, 強者, 愛国心, , 解決, 解約, 記事, 記念, 記載, , 追加,

新サービスをいま作っています、お披露目はさくらレンタルサーバー、Newサーバ…。

2022.02.10

Logging

今日の朝は雨がシトシトと降っていますね☔。昼からは高知県、晴れるそうです。

新サービスをいま作っています、お披露目はさくらレンタルサーバー、新サーバーがリリース後になります、いま、大枠のデザインとHTMLコードを書いています、バックエンドの部分はこれからです。

【さくらのレンタルサーバ】Let's Encrypt(無料SSL)を設定してみよう

尚、このサービスはさくらレンタルサーバーのNewサーバーで出来れば運用したいと思っています、何故なら新サーバーでは、表示速度が今までと違いかなり早くなったそうです。そしてセキュリティ面もありますから、そこらへんを心配しないで良いというのは心配しないで開発だけに没頭出来ますからね。

因みにどんなサービスかといえば、掲示板なのですが2chなどと違って、今作っている掲示板では競合が少ない分野でこれからも伸びそうな分野の掲示板です。その掲示板を開発して3月頃から運用していきたいなって思っています。リリース後にこちらでもアナウンス(報告)したいなって思っていますので、ブログチェックしてみてください。よろしくお願い致します。

タグ

2, , ch, html, new, アナウンス, いま, エンド, お披露目, かなり, コード, こちら, これ, サーバ, サーバー, サービス, さくら, セキュリティ, そこら, デザイン, バック, べん, リリース, レンタル, , 今日, 分野, 大枠, 心配, 掲示, , , 没頭, 競合, 表示, 速度, 運用, 違い, 部分, 開発, , 高知県,

OpenAIのcodexでプログラムを自動生成することが出来るけど?

2022.02.04

Logging

おはよう御座います、今日は巷(エンジニア界隈)で流行っているAIに自然言語で命令するとプログラムコードを生成してくれるというものを試しました。

今回試したのはOpenAIのcodexです、感想はこんな感じです。OpenAIのcodexでプログラムを自動生成することが出来るだけど、手直ししないといけない場面が出てくるのが今の現状ですね😣。但し固定したもの、九九表を作ってといえばそれに適したコードを書いてくれて手直しなどは必要ないです。なので雛形のコードが作れるようになっていると考えて頂けたら良いと思います。

Creating a Space Game with OpenAI Codex

試してみたい方はこちらのサイトから試してみてくださいな。

タグ

, AI, B-DvwOgw, codex, com, https, OpenAI, watch, www, youtube, Zm, エンジニア, コード, こちら, こと, サイト, それ, プログラム, もの, 九九, , 今回, 今日, 命令, 固定, 場面, , 感じ, 感想, 手直し, , 現状, 界隈, 自動生成, 自然, 言語, 雛形,

WindowsやMACのタイピングを表示するアプリと検索すれば!?

2022.01.18

Logging

この頃、気温が若干低いなという感覚があります、昨日なんて寒くてウォーキングを諦めました😌。

さてWindowsやMacのタイピングを表示するアプリと検索すれば、それなりのアプリが出てきますのでそちらを使用してみてください。では、ちょっと冷たいのでメモを残しときます。Macの場合、KeyCastrというフリーのアプリが有名らしいですね、因みにこのアプリ、Githubでしか公開していないので、ターミナルで操作とか出来る人じゃないとインストール出来なそうです。

Notion書きながらKeyCastrでタイピングを表示する

その他にもキーボードのログ(キーストローク)を表示するアプリは存在します。一応、リンクを貼っときますね。こちらから参照ください。👉https://ja.altapps.net/soft/keycastr リンク切れになっていた場合は自分で上記のようなキーワードで検索すれば見つかるはずです。

How To Display Keystrokes On macOS For FREE (Keycastr)

あと、GithubでKeyCastrをインストールする方法の動画も貼っときますね。
https://github.com/keycastr/keycastr

タグ

altapps, github, https, ja, KeyCastr, Mac, net, soft, Windows, あと, アプリ, インストール, ウォーキング, キー, キーボード, キーワード, こちら, ストローク, そちら, その他, それなり, ターミナル, ダイビング, パス, フリー, メモ, リンク, ログ, 上記, , 使用, 公開, 参照, 場合, 存在, 感覚, 操作, 昨日, 有名, 検索, 気温, 自分, 若干, 表示, ,