🏠️Top Page

🖊️おもしろき こともなき世をおもしろく 住みなすものは 心なりけり.

⏩️4Kの42インチのディスプレイが欲しいと思っている.来月考える.

おはようございます.4Kの42インチのディスプレイが欲しいと思っている.いまのディスプレイの解像度はHDなんです、それを4Kの解像度に変更したい.実際こうにゅうしたいと思っているディスプレイはAmzで売っているJAPNNEXTの商品.

HDはディスプレイの分割化がやりにくいので4Kに変更したいんです.

いまのディスプレイを買って一年とちょっとぐらいでこのままでも問題ないといえば問題ないものの、やっぱ効率的な感じにしたいという俗に言う欲みたいなものです.

買おうと思っているものは色々ありますがディスプレイは優先順位が高い方にあります.欲しいものリストにMacbookがあるのですが、10月頃になんだかシークレット発表があるらしいので、その発表後に考えたいと思っています.あぁー爆買いしたいなー(笑).

明日へ続く.

⏩️この記事は何投稿目かをWordPressで表示する関数を生成AIで生成💮

おはようございます.この記事は何投稿目かをWordPressで表示する関数を生成AIで生成しました、これぐらいの事は生成AIでも出来るのですねーそれも無料のChatGPTで.こういう事が出来るので少しPHPコードができる人でもなんとかなるだなぁーって思いましたが、実際の現場では1ファイル数百行ー数千行は当たり前なので仕事としては大変かと思うものの.ホームページを主としている会社では充分な助っ人になると思います.

この頃は分からないことは生成AIに聞いてそれでも明確な答えが出ないものはググってます.自分でも思うのですが、ちょっと煩雑な文章で書いているからもう少し丁寧に情報提供して実行すれば良いかなと思うものの、それを用意するのが少し億劫で答えに満足せずにググっている自分がいます.

function getArticleCount($post_id)
{
    global $wpdb;

    // 指定された投稿の公開日時を取得
    $post_date = $wpdb->get_var(
        $wpdb->prepare("SELECT post_date FROM $wpdb->posts WHERE ID = %d AND post_type = 'post' AND post_status = 'publish'", $post_id)
    );

    if (!$post_date) {
        return 0; // 投稿が存在しない場合
    }

    // この投稿より古い投稿の数を数える
    $post_rank = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT COUNT(*) + 1 FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s", 
            $post_date
        )
    );

    return $post_rank;
}

明日へ続く.

⏩️映画館で映画を観る人です.因みにシネマ会員になってからこれまで.

おはようございます.映画館で映画を観る人です.因みにシネマ会員になってからこれまで観たログとして残っている映画の本数は335本です.これは会員になってから物なのでもっと本数は観ていると思います、いやー創作する人は凄いですね.

因みに335本を1500円として計算してみると502500円です、まさにチリツモですねー.

当初は来月は観に行く予定ではなかったのだけども最低1本は観に行く予定でいます.映画館は一人で観に行くことが多く、飲食も買わずに大体前列で観ることが多いです.前列で観る理由はベストポジションであり、そして田舎という事も関係し客がいないので貸し切り状態で鑑賞している感覚でみえることが多いので好んで前列で観ています.

趣味でお金を払っているのは映画と音楽ぐらいのものです.

明日へ続く.

⏩️一部のツールを非広告にした話.ぼーっと生きているとかけ算

おはようございます.一部のツールを非広告にした話.ぼーっと生きているとかけ算を忘れる話を書いていきます.まず、一部のツールを非広告にしました、1つ目は九九表を表示させるツールです、2つ目は100問算数というツールです.100問算数はランダムに算数の問題が出題され回答を入力しボタンを押すと採点するというツールです.案外、算数大事です.

社会人になっても算数だけはなんか使いますよね.でも何も考えずに生きていると算数すら使わずに生きている場合があります.そんなことが長く続くとかけ算すら忘れてしまう場合があります.そんな人達のために作ったのが九九表と100問算数というサービスです.恐らく毎日のように解くと間違いなくボケ防止になります.

そういう事(解く時に邪魔にならないため)もあって非広告にしました.なので元に戻すことは無いと思いますので、活用して頂ければ幸いです.

明日へ続く.

⏩️NHKの番組を検索してデスクトップ通知するWEBアプリを作ろうとしている.

おはようございます.NHKの番組を検索してデスクトップ通知するWEBアプリを作ろうとしています.NHK番組表はAPIから取得しそれを検索及びデスクトップ通知する機能を自分のために作ろうとしています.環境としてはPHP8.3で動き、フレームワークはLaravelを使用.フロント側はReatで作ったものをBABELで変換してJsとして動かしています.

因みに動作しているところはこんな感じですね.

今週の土曜日に一通りのことが出来るようにして一旦公開しようと思っています.最初は自分だけが使用できるものにしてバグ等がなければ正式に告知して運用していこうと思っています.

あまり重要はなさそうだけども、nasuneを使っている人なら分かるかも知れないけど番組名で録画予約する機能がないので不定期な番組は録画予約できないのが、作ろうと思ったきっかけです.何故、NHKの番組表しか無いのかは番組表のAPIはNHKしかなかったからです、クローラーを作って取得する手もあるのだけど、自分は民法で見るのは固定番組なので時間設定で事足りるから、こういう仕様になってます.

明日へ続く.

⏩️ディズニープラスで将軍を見ています.2話まで見てやっと.

おはようございます.秋ぽっい連休最終日に記事を書いています.この頃、将軍をウォーキング中に見るようになったんだけど、5日前に足を痛めて少しウォーキングを中断していました.

やっと二話目を見終わりなんか面白い作品かもと思いが芽生えてきました.たぶん、将軍面白い作品かもなので全話見たら感想を改めて記載します.

将軍は友との飲みの席で話題に上がったので見てみようと思ったわけで最初は将軍のドラマすら知らなかった.因みに今月の28日までにディズニープラスを一年契約すると、一年間は5千円弱で見えるので結構お得です.

自分が一番見ているサブスクはネトフリで次にディズニープラスになりそうな予感.アマプラはあまり見ない感じです、何故かといえばアマプラで見れるものはネトフリで大体見れるようになっているから見なくなりました.

因みに動画という分類で言えばYOUTUBEを一番見ている気がします.

明日へ続く.

⏩️生成AI、正直、絵に関しては見分けがつかないレベルまで来ているパッと見分からないけど.

おはようございます.生成AI、正直、絵に関しては見分けがつかないレベルまで来ているパッと見分からないけどよく見ると線が不自然な書き方があったり、微妙に歪みが絵にあるだけどそんなの多分、絵師さんしか分からない.

最近、自分の職業があと数十年で仕事を失うだろうという記事を読んで有り得るかもしれない?、でも実際そうならない気もする.理由は殆どの生成AIは有料じゃないと精度が良くないから、そして無料化して人々がコードを出力しだしても結局それを理解して使える人はあんまりいない.

コードを生成したりアプリを生成したりすることは出来るようになってきているけど、それは一から作られたアプリやホームページなど.そこからオリジナリティを出すためや自社製品としてカスタマイズするにはプログラマーが必要になる.これから一から製品を作ることが少なくなりAIが作ったものを手直しする事が増えそうな気がしてならない(当分はなさそうだけども).

あのノーコードアプリが登場したときも、これでプログラマーの職が消えると騒いでいたのに結局のところ、あまり変化がなかった.それに今の現状は酷似している😆.

因みにGさんが生成AIを浸透させるために無料化に舵を切ったけど使いこなせる人の割合は変わらないよね.たぶん.

明日へ続く.

⏩️データベースサーバをアップグレードしました.MYSQL8系

おはようございます.本日、レンタルサーバーのデータベースサーバをアップグレードしました.MYSQL8系に....少々恐いが出来ていると思います.

連休最終日に夜な夜な起きてアップグレードを行ったわけだけど、データベースの以降や何やらは苦手ですねー.シームレスに移行できればよいのだが、何処かで大なり小なりトラブルが起きるわけでそれを迅速に対応できるかが焦点になると思います.

何故、サーバー以降が深夜帯が多いかと言えば深夜はやっぱ皆さんお休みされていて、閲覧者さんが日中よりも比較的に少ない場合が多いので大体、深夜帯にサーバー以降が多い.

それは昔も今もあんまり変わってなくて金融系は今でも深夜帯にサーバーメンテナンスを行っている.何かトラブルがあっても翌朝までに対応できればセーフというわけです.何か有れば最悪だけども大体、トラブルがあった場合は昨日まで動いていた状態で運用することが多い.要するにアップデートを取りやめたりアップグレードを取りやめたりする.

はぁーこわやこわや.

明日へ続く.

⏩️自サイトのバニラJS(javascript)をvue.jsへ書き換えた話.

おはようございます.先日、友が東京から帰ってきてたみたいでお見上げを貰いました.いつも頂いているばかりでお返ししないといけないなって思うのですが、いつ帰って来るのかがさっぱり分からないのでお返しできないでいる.

さて、今日は自サイトのバニラJS(javascript)をvue.jsへ書き換えた話を書きます.少し前からバニラJSからvue.jsへ変更しようと思っていたのだけど、変更する意味が見いだせずにいた.

先日からReactを仕事で触りだしてなるほど、ちょっと便利かもって思い出したので勉強がてらに自サイトをvue.jsに編集しました.

自サイトの全部を置き換えていないけれど、置き換えたほうが良さげな部分は置き換えた形になります.尚、vue.jsをモジュール呼び出しで使用したい場合は呼び出す参照ファイルに下記のタグを追加すると呼び出せます.またモジュールファイルのインポートの書き方も記載しときます.参考にしてみてください.

<script src="./js/example.js" type="module"></script>
import { ref, createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

明日へ続く.

⏩️vue3.jsでWordPressを無限スクロールするコードを書いた話.

おはようございます.長いので説明は省きますが、これは生成AIと自分との合作みたいなコードです.一度目の指示では上手くコードを生成してくれなかったので何度か壁打ちみたいなことをしました.尚、WordPressと言ってもREST APIとかいうのを使用した奴です.WordPress側でREST APIを有効にしないと上手く機能しませんのであしからず🙇.

そして、このコードはスマホとPCではスクロール位置が違うようになっているサイト用の専用コードです.なので、普通のレスポンシブ対応サイトだったら判断部分を削除してbody対応のコードだけで無限スクロールが可能になります.

因みにこんな事をしなくてもv3-infinite-loadingのライブラリが合ったりします.それを使用するともっと効率的なコードが書けるみたいだけども、自分はvue初心者さんなのでこんな感じになってます.

          <div id='app' class="page">
            <?php if (have_posts()):?>
                <div v-for="post in posts" :key="post.id" class="blogpage">
                  <h3>{{ post.title.rendered }}</h3>
                  <p> {{ formattedDate(post.date) }}</p>
                  <p v-html="post.content.rendered"></p>
                </div>
            <?php endif; ?>                
          </div>    
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://unpkg.com/moment@2.30.1/min/moment.min.js"></script>
<script src="<?= get_template_directory_uri() ?>/asset/Infinity.js?<?=time()?>" type="module" ></script>
import { ref, onMounted, onUnmounted, createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';

createApp({
    setup() {

        const posts = ref([]);
        const page = ref(1);
        const loading = ref(false);
        const hasMore = ref(true);

        onMounted(async () => {
            await fetchPosts();

            if (window.innerWidth < 600) {
                window.addEventListener('scroll', handleScroll);
            } else {
                document.querySelector('#app').addEventListener('scroll', handleScroll);
            }

        });

        onUnmounted(() => {
            if (window.innerWidth < 600) {
                document.documentElement.removeEventListener('scroll', handleScroll);
            } else {
                document.querySelector('#app').removeEventListener('scroll', handleScroll);
            }
        });
        const formattedDate = (dateString) => {
            return moment(dateString).format('YYYY年MM月DD日');
        };

        const fetchPosts = async () => {
            if (loading.value || !hasMore.value) return;

            loading.value = true;
            try {
                const response = await axios.get(`/wp-json/wp/v2/posts?page=${page.value}`);
                if (response?.data?.length) {
                    posts.value = [...posts.value, ...response.data];
                    page.value++;
                    hasMore.value = true;
                }else{
                    hasMore.value = false;
                }

            } catch (error) {
                //console.error(error);
            } finally {
                loading.value = false;
            }
        };

        const handleScroll = async () => {
            let scrollHeight = null;
            let clientHeight = null;
            let scrollTop = null;

            if (window.innerWidth < 600) {
                scrollHeight = document.documentElement.scrollHeight;
                clientHeight = document.documentElement.clientHeight;
                scrollTop = document.documentElement.scrollTop;

            } else {
                scrollHeight = document.querySelector('#app').scrollHeight;
                clientHeight = document.querySelector('#app').clientHeight;
                scrollTop = document.querySelector('#app').scrollTop;
            }

            if (scrollTop + clientHeight >= scrollHeight - 100 && hasMore.value) {
                await fetchPosts();
            }
        };
        return { posts, page, loading, hasMore, fetchPosts, handleScroll, formattedDate };
    }

}).mount('#app')

明日へ続く.