カウンターを簡易的な設置してみた話。#phpcode

2023.03.24

Logging

おはようございます、黄砂によるP.M.2.5とやらが辛いです😭。

前置きはさておきブログタイトルの近くにカウンターを設置してみました、かなり適当なカウンターですが上手く動いているようです。ソースコードはこんな感じになります。これはchatGPTが創作したコードでは有りません。

counterHtml = "<br><span id='counter'>アクセスカウンター:0</span><br><br>";
document.getElementById("site_description").insertAdjacentHTML("afterend",counterHtml);
if(!(localStorage.getItem("counter")) || ( parseInt(localStorage.getItem("counter")) + 420000 < (new Date()).getTime()) ){
    fetch("/counter/?counter=1").then(response=>response.json()).then(data=>{
        document.getElementById("counter").innerText = "アクセスカウンター:" + data.cnt;
        localStorage.setItem("counter",(new Date()).getTime());
    });
}else{
    fetch("/counter/?counter=0").then(response=>response.json()).then(data=>{
        document.getElementById("counter").innerText = "アクセスカウンター:" + data.cnt;
        localStorage.setItem("counter",(new Date()).getTime());
    });
}

自分で書いたソースコードになります。実際、GPTにPHP言語とJS言語を使ってカウンターを作ってと投げたら答えが返ってくると思いますが、これは自前コードです。テストというテストもろくにせず動作させています。

<?php
if($_GET["counter"]==1){
    $cnt = (int)(file_get_contents("cnt.txt"));
    $cnt++;
    file_put_contents("cnt.txt",$cnt);
    print json_encode(["cnt"=>$cnt]);
}else{
    print json_encode(["cnt"=>(int)file_get_contents("cnt.txt")]);
}

タグ

ChatGPT, cnt, counter, counterHtml, data.cnt, document.getElementById, fetch, getElementById, getTime, GPT, innerText, insertAdjacentHTML, int, json, localStorage, lt, parseInt, quot, response, then,

laravelの非同期処理でDELETE・PATCH・PUT😗する方法。 #php #code

2023.01.27

Logging

おはようございます、華の金曜日ですね~🙄。けんすうさんは一体何歳なんだろか?自分より若いのかな?それとも・・・・。

https://www.youtube.com/watch?v=3vHiqXHH5oc
【後藤達也は椅子にハマれ】けんすうが説くお金の使い方【と、起業家ひろゆきの素顔】

さて、今日は久しぶりにlaravelの非同期処理でDELETE・PATCH・PUTをする方法を記載しておきます。大体の人が知っているもしくは非同期処理でRESTの設計を使わないよという方もいるかもしれない。ですが、あまり遷移させたくない、遷移させると余計にコードを書かないといけない等、そういう場面があると思います。是非、そういう時は非同期処理でDELETE・PATCH・PUTして上げてください。

因みにこの頃、知ったのですがBootstrapからtailwindへ鞍替えする人が続出してダウンロード数が逆転した話を知りました。web業界に限らずですが隅から隅まで覚えている人は凄いなと関心します。自分は、どうしてもググったりドキュメントでググったりします。

document.getElementById('btn').addEventListener('click', () => {
    const formData = new FormData();
    formData.append('id', document.getElementById('id_number').value);
    formData.append('_method','PUT');//DELETE・PATCH・PUT

    fetch('ajax-test', {
        method: 'POST',
        headers: {'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content}, // CSRFトークン対策
        body: formData
    })
        .then(response => response.json()) 
        .then(res => {
            console.log('res: '+res[0].id);
            document.getElementById("result").innerHTML = "ID番号" + res[0].id + "は「" + res[0].name + "」です。価格は「" + res[0].price+"円」です。";
        })
        .catch(error => {
            console.log(error); // エラー表示
        });
});

タグ

addEventListener, ajax-test, catch, document.getElementById, document.querySelector, fetch, formData, formData.append, getElementById, headers, innerHTML, Laravel, METHOD, quot, res, response, response.json, tailwind, then, ,

サイト内の文字をハイライトする一万円の案件は。 #案件

2022.12.18

Logging

おはようございます、笑う門には福来る😆この記事は月曜日の朝に書いたものです💦。

先日、Chromeの拡張機能でサイト内の文字をハイライトする一万円の案件を募集しておりました。この一万円の案件は妥当な金額なのかが“????”。例えば人工知能をゴリゴリと使えるスーパーエンジニアにとっては朝飯前の案件だと思いますが、見習いエンジニアにとっては難しい案件なのかもしれない。

この一万円という金額は人によって高くもなるし安くもなるかもしれないです。要するに見習いエンジニアが3日間かけて納品した場合とスーパーエンジニアがものの数秒で納品した場合を日本の平均時給で考えると一方は黒字でもう一方は赤字になる。

そう考えると今回の文字をハイライトするという案件は適正価格なのかもしれない。

因みにこの文字をハイライトするChromeの拡張機能はもう存在しており無料で公開されている。そう考えると一万円も貰えるというのはラッキーなのかも知れない。

尚、文字をハイライトするコードは下記により参照ください(デモページはこちら)。

let funs = {
    init: { htmlcode: document.getElementById("vals").innerHTML },
    highlight: function (e) {
        document.getElementById("vals").innerHTML = funs.init.htmlcode;
        if (!String(this.value).match(/[a-zA-Z]/) && this.value) {
            document.getElementById("vals").innerHTML = String(funs.init.htmlcode).replace(new RegExp(this.value, 'g'), '<span style="color:red">' + this.value + '</span>');
        }
    },
    inputevent:function(){
        document.getElementById("txt").addEventListener("input", this.highlight);
    }
};
funs.inputevent();

タグ

a-zA-Z, addEventListener, document.getElementById, function, funs.init.htmlcode, getElementById, gt, highlight, htmlcode, init, innerHTML, inputevent, lt, match, quot, replace, string, this.highlight, this.value, 朝飯前,

JavaScriptで背景色を変更するコードです。保持機能あり。

2022.07.22

Logging

こんにちは、JavaScriptで背景色を変更するコード+保持機能ありのコードを記載しますね。カラー色の保管はCookieを使用して対応しています。もう少しソースコードを短く出来るような気がしますが、お昼から出かけるのでこれで一旦終了とさせて頂きます。

let htmlcode = ["#181B39","#262a2e","#192734","#1c483b","#bf7800","#83094f"].map(elm =>`<span class='color_code' style='color:${elm}' data-color-code='${elm}'>■</span>`).join("\n");
const basecolor = "#262a2e";
let cookiefn = function (val) {
    let CodeColor = val;
    let r = document.cookie.split(';');
    return r?((r)=>{
        for(let ii = 0 ;ii<r.length;ii++){
            let content = r[ii].split('=');
            for(let i = 0 ;i<content.length;i++){
                if(content[i].replaceAll(" ","")==="bgcolor_code"){
                    CodeColor = content[i +1];
                }
            }
        }
    return CodeColor;        
})(r):CodeColor;
};
let old_color = cookiefn(basecolor);
console.log("log=" + old_color);
document.getElementById("site_description").insertAdjacentHTML("afterend", htmlcode);
let ColorCodeObject = document.querySelectorAll(".color_code");
for (const key in ColorCodeObject) {
    if (Object.hasOwnProperty.call(ColorCodeObject, key)) {
        const element = ColorCodeObject[key];
        element.addEventListener("click", function (element) {
            for (let ii = 0; ii < document.styleSheets.length; ii++) {
                if (String(document.styleSheets[ii].href).match(/mag_tcd036-child\/style\.css\?ver=/)) {
                    for (let i = 0; i < document.styleSheets[ii].cssRules.length; i++) {
                        let element_css_code = document.styleSheets[ii].cssRules[i];
                        let rgbfn = function (hex) {
                            let red = parseInt(hex[1] + hex[2], 16);
                            let green = parseInt(hex[3] + hex[4], 16);
                            let blue = parseInt(hex[5] + hex[6], 16);
                            return `rgb(${red},${green},${blue})`;
                        };
                        try {
                            if (element_css_code.style.backgroundColor.replaceAll(" ","") === rgbfn(old_color).replaceAll(" ","")) {
                                console.log(rgbfn(old_color));
                                element_css_code.style.backgroundColor = rgbfn(ColorCodeObject[key].getAttribute("data-color-code"));
                            }
                        } catch (error) {
                            //console.log("not backgroundColor");
                        }
                    }
                    old_color = ColorCodeObject[key].getAttribute("data-color-code");
                    document.cookie = "bgcolor_code=" + old_color;
                }
            }
        });
    }
}
(function(){
        for (let ii = 0; ii < document.styleSheets.length; ii++) {
            if (String(document.styleSheets[ii].href).match(/mag_tcd036-child\/style\.css\?ver=/)) {
                for (let i = 0; i < document.styleSheets[ii].cssRules.length; i++) {
                    let element_css_code = document.styleSheets[ii].cssRules[i];
                    let rgbfn = function (hex) {
                        let red = parseInt(hex[1] + hex[2], 16);
                        let green = parseInt(hex[3] + hex[4], 16);
                        let blue = parseInt(hex[5] + hex[6], 16);
                        return `rgb( ${red}, ${green}, ${blue})`;
                    };
                    try {
                        console.warn(element_css_code.style.backgroundColor.replaceAll(" ","") + " === " + rgbfn(old_color).replaceAll(" ",""));
                        if (element_css_code.style.backgroundColor.replaceAll(" ","") === rgbfn(basecolor).replaceAll(" ","")) {
                            element_css_code.style.backgroundColor = rgbfn(old_color);
                        }
                    } catch (error) {
                        //console.log("not backgroundColor");
                    }
                }
                document.cookie = "bgcolor_code=" + old_color;
            }
        }    
})();

あとソースコードとは関係ありませんが、今日は44度を超える県が出てくると人工知能が予測したそうです、44度って凄まじく暑いと思いますので熱中症対策はしっかりとしてくださいね。

尚、このコードを可変してご自由に使用して構いませんが、出来ればお声掛けして頂けると嬉しいです。また、この記事のシェア、いいね等よろしくお願いします。

タグ

backgroundColor.replaceAll, basecolor, catch, CodeColor, ColorCodeObject, cookiefn, document.getElementById, element, elm, hex, htmlcode, insertAdjacentHTML, join, match, parseInt, querySelectorAll, replaceAll, RGB, styleSheets, val,

タイトルの下に背景色を変える■を追加しました。

2022.07.22

Logging

おはようございます、背景色を変える■を追加しました。四角をクリックすると背景色が変わります、ソースコードは下記になります。取り分けて難しくないソースコードになると思いますが、少しだけ解説をします。このソースコードはスタイルシートの記述(ファイルなど)を読み込んでバックグラウンドカラーの一部のカラーだけを任意のカラーに置き換えています。

let htmlcode = `
    <span class='color_code' style='color:#262a2e' data-color-code='#262a2e'>■</span>
    <span class='color_code' style='color:#192734' data-color-code='#192734'>■</span>
    <span class='color_code' style='color:#1c483b' data-color-code='#1c483b'>■</span>
    <span class='color_code' style='color:#bf7800' data-color-code='#bf7800'>■</span>
    <span class='color_code' style='color:#83094f' data-color-code='#83094f'>■</span>
`;
let old_color = "#262a2e";
document.getElementById("site_description").insertAdjacentHTML("afterend", htmlcode);
let ColorCodeObject = document.querySelectorAll(".color_code");
for (const key in ColorCodeObject) {
    if (Object.hasOwnProperty.call(ColorCodeObject, key)) {
        const element = ColorCodeObject[key];
        element.addEventListener("click", function (element) {
            for (let ii = 0; ii < document.styleSheets.length; ii++) {
                if (String(document.styleSheets[ii].href).match(/mag_tcd036-child\/style\.css\?ver=/)) {

                    for (let i = 0; i < document.styleSheets[ii].cssRules.length; i++) {
                        let element_css_code = document.styleSheets[ii].cssRules[i];
                        let rgbfn = function(hex){
                            let red = parseInt(hex[1]+hex[2],16);
                            let green = parseInt(hex[3]+hex[4],16);
                            let blue = parseInt(hex[5]+hex[6],16);
                            return `rgb(${red}, ${green}, ${blue})`;                            
                        };
                        try {
                            if (element_css_code.style.backgroundColor === rgbfn(old_color)) {
                                //console.log(rgbfn(old_color));
                                element_css_code.style.backgroundColor = rgbfn(ColorCodeObject[key].getAttribute("data-color-code"));
                            }
                        } catch (error) {
                            //console.log("not backgroundColor");
                        }
                    }
                    old_color = ColorCodeObject[key].getAttribute("data-color-code");
                }
            }
        });
    }
}

ソースコードも上から下へ進む感じで読んでいただけたら、読めるはずです。尚、躓く箇所といえば16進数でスタイルシートに記述しているものもRGBで格納されている所ですね。ここの比較が「えっ」って感じになるぐらいでしょうか。あとはそれ程、難しくないソースコードだと自負しております😌。

この頃、jqueryを触らなくなって悲しいかな仕様を半分ぐらい忘れております。やはりコードは毎日書くべきかなって思います。

タグ

backgroundColor, catch, ColorCodeObject, cssRules, document.getElementById, element, getAttribute, hex, htmlcode, Ii, insertAdjacentHTML, jquery, match, parseInt, querySelectorAll, quot, RGB, rgbfn, string, styleSheets,

githubにはgistってのがある。ソースコードを貼り付けるやつこの頃見かけるようになったね!!

2022.07.21

Logging

おはようございます。これからはgistを使用しソースコードの共有していきます。

document.getElementById("test-code").insertAdjacentHTML("afterbegin",function(a){
    return "<h1>" + a + "</h1>";
}("test-code"));

そしてこのブログの立ち位置、個人の見解という所は変わらないですが、クローズドからオープンなスタイルで書いていくという考えだけは変わります。昔の記事を見返すと何を書いているのかと思う記事もあるものの、あまり真の部分は変わっていないなというのは、見返して思う所があります。

特に人を批判するような記事は書いていないと思うのでそのままで行こうと思っています。記事を読んでどう思うかは人それぞれです、ですので消さないで蓄積していこうと思っています。

Thank you for 10 years of code

有名なYOUTUBERさんを見ると過去の動画を今でもそのまま残している人は多くいると同じ感覚で、たまに読み返してみると青いなって思う反面、今の自分より弁が立つところもあったりして自分で頑張ろうって思うこともあります。

ブログに記載してある過去のソースコードも移植出来ればしていこうと思っていますので、プログラミングに興味のある方は参照くださいな😌。

では、これからもよろしくお願い致します🙇。

タグ

"afterbegin&quot, A`, document.getElementById, function, gist, h1&gt, insertAdjacentHTML, lt, quot, quot;test-code&quot, return, YOUTUBERさん, クローズド, ソースコード, プログラミング, 反面, , , 立ち位置, 見解,

asyncとawaitとthenの関係と使い道。

2021.01.27

Logging

asyncとawaitとthenの関係と使い道は?まず、関係性はこの3つでまぁ一つの役割を果たすと考えても良いかもしれません。どんな時に使うかは、例えば、innerHTMLに計算した値を渡したいとか…。いや違うな。同期処理として使うのが正解ですね。尚、asyncは非同期でawaitで非同期通信を同期処理とする。

ちなみにIE11では動かない処理なので氣をつけてご使用ください。今どき、IE11なんてと思うかもしれないけど、使っている人がいるから・・・。

document.getElementById("btn").addEventListener("click", async (e) => {
	test1();
	test2();
	test3();
	await test1();
	await test2();
	await test3();
});

function test1() {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log("btn = 1");
			resolve('1');
		}, 3000);
	});
}
function test2() {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log("btn = 2");
			resolve('2');
		}, 2000);
	});
}
async function test3() {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log("btn = 3");
			resolve('3');
		}, 100);
	});
}

IE11を使っているパターン、例えば社長や上司がシニア世代だったりするとIE11をいまだに使っていたりする。そもそもWindows10にIE11がインストールされている時点で悪だ・・・と思う開発者もいるはずです。そろそろマイクロソフト、IE11なんてものを強制的に削除するようなバージョンアップをして戴きたいと思ってます。それぐらい問題だと。あと、IE11で引っかかったことがあります。新しいブラウザでは下記のコードをHTMLに記入すると察してくれてjsファイルを読み込んでくれるが、IE11は違うのだ。

<script src="./assets/js/common.js"></script>

これじゃ読み込んでくれない。厳密に書かないとファイルを読み込んでくださらない。やっぱ早くIE11の撲滅を願う。

<script type="text/javascript" src="./assets/js/common.js"></script>

タグ

'src', addEventListener, assets, async, await, await test, common.js&quot, document.getElementById, gt, innerHTML, lt, quot, quot;btn, quot;btn&quot, quot;text, resolve, setTimeout, then, 撲滅, ,

demo23、javascriptの非同期同期処理?

2020.11.18

Logging

今日はJavaScriptで非同期、同期処理のことに付いて考えてみた。関数を呼び出して返却の値を変数に渡す処理を作って頂けると非同期処理と同期処理の違いがわかるかと思います。例えばこういうJSの処理があるとします。

document.getElementById("btn").addEventListener("click", async (e) => {
	test1();
	test2();
	test3();
	await test1();
	await test2();
	await test3();
});

function test1() {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log("btn = 1");
			resolve('1');
		}, 3000);
	});
}
function test2() {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log("btn = 2");
			resolve('2');
		}, 2000);
	});
}
async function test3() {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log("btn = 3");
			resolve('3');
		}, 100);
	});
}

こちらの処理を試すと結果、このような内容がデバックモードで表示されます。予想通りの結果が返ってきましたか?それとも予想外の結果が返ってきましたか?

asyncが付いていてawaitがついてない場合とついている場合とでは違いの差がわかるかと思います。いろいろと試してみると非同期処理の応用が出来るかと思います、逆に言えば上手く非同期処理を使いこなすことが出来るとコードが短縮出来たり、効率的に回せるのではないかと思います。自分もこれらを使っていろいろと作ってみたいですね(´Д`)。因みに今回、Promiseを簡略化したパターンでコードを書いています。

尚、Demo23にはデモコードが存在しますので動作を検証してみてください。
https://zip358.com/tool/demo23/

タグ

addEventListener, async, async function test, await, await test, console.log, document.getElementById, function test, JS, Promise, quot, quot;btn, quot;btn&quot, quot;click&quot, resolve, setTimeout, デバックモード, 変数, 返却, 関数,

javascriptの並列処理について

2018.02.13

Logging


 
javascriptの並列処理についてdemoサイトを作りましたので
参照し見てください。尚、コードは下記になります。
注意点とかは下記の画像を参照してみて下さい。
使用してわかったことは落ちないというのは良いことだということ。
落ちても表面上はエラー警告などはないので、結構便利なんじゃないだろうかという事です。
ちなみにこちらがデモサイトのリンクになります。
https://zip358.com/tool/worker/

<!DOCTYPE html>
<html>
    <head>
        <title>worker</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script>
            var wkr = new Worker("worker.js");
            wkr.onmessage = function(d) {
                document.getElementById("wkr").innerHTML = document.getElementById("wkr").innerHTML +  d.data + "<br>";
            };
        </script>
    </head>
    <body>
        <div id="wkr">
        </div>
    </body>
</html>
var e = 0;
function en(){
    e = e + 1;
    postMessage((e*3.14));
    if(e < 1000)en();
}
en();

 
 

タグ

AM, body&gt, device-width, div&gt, DOCTYPE html&gt, document.getElementById, function en, head&gt, initial-scale, innerHTML, meta charset, meta name, new Worker, script src, script&gt, title&gt, var wkr, wkr.onmessage, worker.js, worker&lt,