Push通知ってブラウザ閉じても通知出来る様に出来るのか?

2024.11.04

Logging

おはようございます.Push通知ってブラウザ閉じても通知出来る様に出来るのか?答えは出来るのですが無料でその機能を実装できるのか.こたえはYesに近い?.有料のサービス機能push7を使用すればもっと簡単に可能です.

サービスワーカーとかいう機能を使えば良いみたいですね.知らないは一時の恥ですね.サービスワーカーとGCPやララベルの拡張Webpushなどを使えば出来そうですがまだ試していません.

因みにPusherサービスを使用して実装しました.当分、無料枠で対応可能な感じですね💁.

下記はリアルタイムPush通知の動作とソースコードの一部になります.

<?php
namespace App\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class NotificationEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $title;
    public $message;
    public $userId;

    public function __construct($title, $message,$userId='')
    {
        $this->title = $title;
        $this->message = $message;
        $this->userId = $userId;
    }

    public function broadcastOn()
    {
        return new Channel('notifications.' . $this->userId);
    }

    public function broadcastAs()
    {
        return 'notification-event';
    }
}

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

construct, GCP, gt, InteractsWithSockets, lt, Message, notification-event, notifications, public, return, SerializesModels, use IlluminateBroadcastingChannel, use IlluminateBroadcastingInteractsWithSockets, use IlluminateBroadcastingPrivateChannel, use IlluminateContractsBroadcastingShouldBroadcast, use IlluminateFoundationEventsDispatchable, use IlluminateQueueSerializesModels, userid, yes, ララベル,

npushに改善したい事はプシュ通知.追加した機能はこれ.

2024.10.30

Logging

おはようございます.npushに改善したい事はプシュ通知.本日追加した機能はこれです.使わなくなったスケジュールを定期的に削除する機能です.コード的には3行ほどのコードなんだけど、そこまで手が回らなかった.アクセス数が頻繁にあるサイトは定期的に機能追加とかしているのだけど、npushは全然駄目で運営が軌道に乗るまでかなり時間がかかりそうです.

<?php

namespace App\Jobs;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Models\ListItem;
use App\Models\TelevisionSchedule;
use DateTime;

class delDataJob implements ShouldQueue
{
    use Queueable;

    /**
     * Create a new job instance.
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     */
    public function handle(): void
    {
        //
        $datetime = new DateTime();
        ListItem::where('created_at','<=',$datetime->format('Y-m-d H:i:s'))->delete();
        TelevisionSchedule::where('end_time','<=',$datetime->format('Y-m-d H:i:s'))->delete();
    }
}

そもそもNHKを見る人はデジタル世代に少なそうということはこのサービスを作った時点で分かっていたのだけど、それでも作ったのは単なる自分が必要だっただけなんですね.ともあれ、もう運用しているので何とか軌道に乗せたいなって思いますが道は険しいです.このままではサービス停止もあり得ることなのかも.

最後に技術的なお話.Laravel11からスケジュール設定を書く場所が変更になりました.下記の場所にスケジュールを登録しないと動かないようですね.Laravel9からLaravel10、11と引き継いで来た場合は旧の階層で大丈夫そうです.

routes/console.php
<?php

use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schedule;
use App\Jobs\delDataJob;

Schedule::job(new delDataJob())->dailyAt('10:10');

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$datetime, construct, format, job, ListItem, lt, npush, routes, Schedule, TelevisionSchedule, use IlluminateContractsQueueShouldQueue, use IlluminateFoundationBusDispatchable, use IlluminateFoundationInspiring, use IlluminateFoundationQueueQueueable, use IlluminateQueueInteractsWithQueue, use IlluminateQueueSerializesModels, use IlluminateSupportFacadesArtisan, use IlluminateSupportFacadesSchedule, void, where,

文字の背景に色を付ける.ハイライトを追加してみました.#即興コード.

2024.10.22

Logging

おはようございます.文字の背景に色を付ける=ハイライトを追加してみました.付けた結果、ちょっとごちゃごちゃしている感はありますが、文章の目を引くことになるのかなと思っています、ちなみにハイライトをつけようと思ったきっかけはこのサイトを見て思いました.

思ってから実行に移すのは「思い立ったが吉日」タイプなので直ぐに手を動かすして書きました.

それほど対したコードではないものの.WordPressの記事の文章内にタグを基にして今回のようにハイライトを付けたり太文字にと思っている人は一定数いると思ったので何かの参考にしてみてください.

ソースコードはバニラJS(javascript)とCSSになります.

if (maincontent = document.querySelectorAll('#main_content > p')) {
    let words = [...document.querySelectorAll('.zip358tag > a')].map((elm) => {
        return elm.textContent;
    });
    if (words.length) {
        [...maincontent].forEach((maincontentElm) => {
            words.forEach((word) => {
                const regexp = new RegExp(word, 'g');
                if (maincontentElm.querySelectorAll('a').length === 0 && maincontentElm.querySelectorAll('img').length === 0) {
                    maincontentElm.innerHTML = maincontentElm.innerHTML.replace(regexp, '<strong class="highlight">' + word + '</strong>');
                } else {
                    nodeReplace(maincontentElm, regexp, words, word);
                }
            });
        });
    }
}

function nodeReplace(elm, regexp, words, word) {
    let key = [];
    if (elm.querySelectorAll('a').length) {
        [...elm.querySelectorAll('a')].forEach((e) => {
            key.push(e.outerHTML);
        });
    }
    if (elm.querySelectorAll('img').length) {
        [...elm.querySelectorAll('img')].forEach((e) => {
            key.push(e.outerHTML);
        });
    }

    if (nodeElmJudge(word, key) === true) {
        elm.innerHTML = elm.innerHTML.replace(regexp, '<strong class="highlight">' + word + '</strong>');
    }
}

function nodeElmJudge(word, key) {

    let result = [];
    result.push(...key.map(element => {
        const regex = new RegExp(word, 'g');
        return regex.test(element);
    }));
    return result.every(e => e === false);
}
strong.highlight{
    background: linear-gradient(transparent 40%, #2ff6da 40%);
}

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

background, document.querySelectorAll, element, elm, foreach, innerHTML, linear-gradient, lt, maincontent, maincontentElm, nodeElmJudge, nodeReplace, querySelectorAll, quot, RegExp, result.push, textContent, words, words.forEach, words.length,

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

2024.09.29

Logging

おはようございます.この記事は何投稿目かを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;
}

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$post_date, $post_id, $post_rank, $wpdb, ChatGPT, from, function getArticleCount, global, gt, gt;get_var, if, lt, posts WHERE post_type, prepare, quot, quot;SELECT COUNT, quot;SELECT post_date, return, 助っ人, 関数,

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

2024.09.22

Logging

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

さて、今日は自サイトのバニラ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';

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

createApp, from, gt, import, javascript, JS, js&quot, lt, module&quot, react, ref, script src, script&gt, type, vue.js, インポート, お見上げ, バニラJs, モジュールファイル, モジュール呼び出し,

この投稿は1年以上前に公開されました。という文言を表示するようにコードを生成した話.

2024.09.18

Logging

おはようございます.この投稿は1年以上前に公開されました。という文言を記事の上部に表示するようコードを生成した話.これぐらいのコードなら手を動かして書くより生成AIに指示したほうが楽ですねー🎈.

function display_old_post_warning() {
    // 現在の日付
    $current_date = new DateTime();
    // 記事の公開日
    $post_date = new DateTime(get_the_date('Y-m-d'));
    // 日付の差
    $interval = $current_date->diff($post_date);

    // 記事が1年以上前に公開された場合
    if ($interval->y >= 1) {
        $warning_message = '<div class="alert alert-danger shadow-lg" role="alert" style=\'background-color: #ff5162!important;\'>';
        $warning_message .= '<strong>この投稿は1年以上前に公開されました。</strong> 現在の情報とは異なる可能性がありますので、ご了承ください。';
        $warning_message .= '</div>';
    }
    return $warning_message;
}

楽にコードが生成出来るけど、ソースコードを生成してもソースコードを読む力がないと何処にコードを当てはめたら良いのか分からないし、またコードがバグだった時の対応ができないので結局のところプログラマーは永遠に必用な職業かもしれない.

先日も書いたけど、これから義務教育でアルゴリズムの勉強をした子供たちが大人になっていく中でプログラマーの存在は変わってくるとは思っている.

優秀なプログラマーしかプログラマーと呼ばれないかもなってーーてへ😆.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$current_date, $interval, $interval-&gt, $warning_message, background-color, diff, gt, if, important, lt, new DateTime, quot;alert alert-danger shadow-lg&quot, quot;alert&quot, return, role, strong&gt, style, アルゴリズム, プログラマー, 文言,

ある基準に基づき、等級分けや数値化をおこなったものである.イロレーティング計算システム.

2024.09.01

Logging

おはようございます.レーティングとは、ある基準に基づき、等級分けや数値化をおこなったものである.さて台風も去り上々の日和のなか、某ブログでイロレーティング計算システムを作ると意気込んでいた記事を拝見.データベース設計と画面設計は出来てから数日か経過するが一向に次の記事が出てこないような気がする(辞めたのかも知れない🤔なんて事も).

データベース設計を某ブログを参考に興してみました.下記は実行したスクショになります.

尚、accountテーブルが存在するのだけどLaravelにはuserテーブルがあるのでaccountテーブル以外を真似て作成した抜粋ソースコードになります.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('game_results', function (Blueprint $table) {
            //
            $table->id();
            $table->foreignId('game_group_id')->constrained('game_groups');
            $table->foreignId('player_id')->constrained('players');
            $table->enum('result',[1,0,0.5])->default(0)->comment('result');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('game_results', function (Blueprint $table) {
            //
            $table->dropIfExists('game_results');
        });
    }
};

来週か再来週に暇な時間があったら画面設計から徐々に興していきます.そんなに時間はかからない気もしますが、某ブログよりも先に公開するつもりは今のところ無いです.ソースコード公開も営業妨害にならない程度に公開しようと思っています.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

Blueprint, constrained, create, enum, foreignId, function, game_groups, gt, Laravel, lt, Migration, schema, TABLE, timestamps, use IlluminateDatabaseMigrationsMigration, use IlluminateDatabaseSchemaBlueprint, use IlluminateSupportFacadesSchema, void, レーティング, 再来週,

Photo by Pixabay on Pexels.com

steamのAPIを使用して積みゲーを調べてみました.積みゲー有り

2024.08.27

Logging

おはようございます.xAIの申請に通らなかったので来月のQiitaの投稿を何にしようかなと考えてた所、ふと積みゲーのことが頭に浮かんできたので、Steam APIとかあるのかなと調べてみました.そしたらAPIが在ったのでさっそく作ってみました.

ソースコードはgithubにもあげているので試してみてください.こちらのソースコードをコピペするよりお手軽ですよ.

https://github.com/taoka3/steam/tree/main

<?php
require 'config.php';

class steam
{

    public $result;

    public function getOwnedGames($urls = 'http://api.steampowered.com/IPlayerService/GetOwnedGames/v1/?')
    {
        $params = http_build_query([
            'key'=>APIKEY,
            'steamid'=>STEAMID,
            'include_appinfo'=>1,
            'include_played_free_games'=>0,
            //'appids_filter'=>''
        ]);
         $this->result = file_get_contents($urls.$params,true);
         return $this;
    }

    public function viewOwnedGames()
    {
        $data = json_decode($this->result);
        
        foreach($data->response->games as $val){
            $tumiGames = (int)$val->playtime_forever === 0?' [積みゲー]':'';
            printf('ゲーム名:%s プレイ時間:%02d時%02d分%s<br>',$val->name,(int)($val->playtime_forever / 60),(int)($val->playtime_forever % 60),$tumiGames);
        }
        return $this;
    }
}

(new steam)->getOwnedGames()->viewOwnedGames();

    

因みに実行結果は下記になります.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$params, APIKEY, foreach, getOwnedGames, github, gt, int, json_decode, lt, php require, printf, public, qiita, response, result, return, STEAMID, URLs, val, xAI,

【#javascript定番】日付のカウントダウンを行う

2024.07.14

Logging

おはようございます.日付のカウントダウンを行うJavaScript言語の定番プログラムコードを作りましたので公開します.昨今、生成AIを使用してこのぐらいのコードは生成出来るかと思っていたのですが、こんなコードでも手直しが必要になりました.

やはり今の生成AIは事細かい指示を出さないと上手く動かないような気がします.それはプログラミングじゃない事でもそんな感じなのかもしれません.

<h1 id="countdown" data-y="2025" data-m="07" data-d="11"></h1>
function countdown() {
    let Y = document.querySelector('#countdown').getAttribute('data-Y');
    let m = Math.floor(document.querySelector('#countdown').getAttribute('data-m')) -1;
    let d = document.querySelector('#countdown').getAttribute('data-d');
    let strCountDown = '';
    let nowDate = new Date();
    let countdownDate = new Date(Y,m,d,0,0,0);
    let distance = countdownDate.getTime() - nowDate.getTime();
    const day = Math.floor(distance / 1000 / 60 / 60 / 24);
    const hour = Math.floor(distance / 1000 / 60 / 60) % 24;
    const minute = Math.floor(distance / 1000 / 60) % 60;
    const second = Math.floor(distance / 1000) % 60;

    strCountDown = `${day}日 ${hour}:${minute}:${second}`;

    view(strCountDown);
}

setInterval(countdown, 1000);

function view(str) {
    document.querySelector('#countdown').textContent = str;
}

デモページはこちらになります.

https://zip358.com/tool/demo94

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

countdown, countdownDate.getTime, data-y, distance, document.querySelector, floor, getAttribute, gt, hour, let, lt, minute, nowDate.getTime, querySelector, quot, second, setInterval, STR, strCountDown, textContent,

任意のディレクトリ連番を調べてURLを返却する.

2024.06.21

Logging

おはようございます、任意のディレクトリ連番を調べてURLを返却するPHP言語のコードです.このコードは昨日に書いた記事を読んで頂けたら分かると思いますが、ある配下のディレクトリ名が連番で名前付けしていたら、その連番のディレクトリを確認してindex.phpかindex.htmlが存在したらindexページを返却し無ければ、そのディレクトリ内にあるphpファイルのリンクアドレスを返却するようになっています.

<?php
class lists
{
    public $toolDir;
    public $toolUrl;

    public function __construct($toolDir = __DIR__ . '/../', $toolUrl = 'https://zip358.com/tool/')
    {
        $this->toolDir = $toolDir;
        $this->toolUrl = $toolUrl;
    }

    public function getList($dir = 'demo', $max = 999)
    {
        $response = [];

        for ($i = 0; $i <= $max; $i++) {
            $demoDir = $dir . ($i ?: '');
            if (file_exists($this->toolDir . $demoDir . '/index.php')) {
                $response[] = $this->toolUrl . $demoDir . '/';
            } elseif (file_exists($this->toolDir . $demoDir . '/index.html')) {
                $response[] = $this->toolUrl . $demoDir . '/';
            } else {
                $filelist = scandir($this->toolDir . $demoDir, 1);
                foreach ($filelist as $file) {
                    $fileInfo = pathinfo($file);
                    $basename = $fileInfo["basename"];
                    $filename = $fileInfo["filename"];
                    if ($basename != $filename && $fileInfo["extension"] == "php") {
                        $response[] = $this->toolUrl . $demoDir . '/' . $filename . '.php';
                    }
                }
            }
        }
        return $response;
    }
}
<?php
require 'lists.php';
$res = (new lists())->getList();

使用する場合はindex.php側を呼び出してご自身のディレクトリ構造とURLなどに合わしてご使用ください.尚、変数の$resには配列が返却されます.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$basename, construct, DIR, else, elseif, file_exists, filename, foreach, getList, gt, lt, pathinfo, php require, public, res, response, return, toolUrl, 連番, 配下,

駆け出しエンジニアとコールバック関数?イミフ

2024.06.18

Logging

おはようございます、コールバック関数とは別の関数に引数として渡される関数のことです。コールバック関数は、指定されたイベントや条件が発生したときに呼び出されます。なので下記の例コードは間違っていないと言えるのではないかと.

<?php
// Your code here!
function hoge(){
    return 'コールバック関数ですよね';
}

function bar($f){
    print $f();    
}

bar("hoge");

自分は駆け出しエンジニアみたいなモノ、勤続年数だけが多くて未だに仕事で「げっ」と思うことがあります.ググれば出てくる仕事なら良いですが、この頃の仕事はググっても出てこないので英語がわからないのでドキュメントを翻訳して何とか頑張っている感じです.

芸能人のタモリさんが言っていた名言がいまの自分に刺さります.

タモリさん曰く「自分の中で『これくらいの力がついたらこれくらいの仕事をしよう』と思ってもその仕事は来ない。必ず実力よりも高めの仕事が来る。それはチャンスだから、絶対ひるんじゃだめ」だそうです.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

-f, bar, function bar, function hoge, lt, php, print, quot;hoge&quot, return, Your code here, コールバック関数, タモリさん, チャンス, ドキュメント, 勤続年数, 名言, 実力, 引数, 関数, 駆け出しエンジニア,

x.comのAPI(FREE)にて自分のユーザー情報を取得するには

2024.06.05

Logging

おはようございます.x.comのAPI(FREE)にて自分のユーザー情報を取得するにはってググってもv1.1の情報だらけだったので情報を記載します.v2対応です.一部、有料でないと取得できない部分があり返却もエラーで返ってきますが、雛形コードを記載します.

注意事項
TwitterOAuthというComposerライブラリを使用しています.
APIなどの値はご自身のAPIに合わしてください.

参考にしたサイト
https://developer.x.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me

<?php
date_default_timezone_set('Asia/Tokyo');
require_once "../vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

class xMyProfile
{

    public $connection = null;
    public $response = null;

    public function __construct()
    {
        $this->connection = new TwitterOAuth(APIKEY, APISECRET, ACCESSTOKEN, ACCESSTOKENSECRET);
        $this->connection->setApiVersion("2");
        $this->response = $this->connection->get('users/me', [
            'expansions'=>'pinned_tweet_id',
            'tweet.fields'=>implode(',',[
                'attachments',
                'author_id',
                'context_annotations',
                'conversation_id',
                'created_at',
                'edit_controls',
                'entities',
                'geo',
                'id',
                'in_reply_to_user_id',
                'lang',
                'non_public_metrics',
                'public_metrics',
                'organic_metrics',
                'promoted_metrics',
                'possibly_sensitive',
                'referenced_tweets',
                'reply_settings',
                'source',
                'text',
                'withheld'
            ]),
            'user.fields' => implode(',', [
                'created_at',
                'description',
                'entities',
                'id',
                'location',
                'most_recent_tweet_id',
                'name',
                'pinned_tweet_id',
                'profile_image_url',
                'protected',
                'public_metrics',
                'url',
                'username',
                'verified',
                'verified_type',
                'withheld'
            ])
        ]);
        return $this;
    }

    /**
     * プロフィール情報全てを取得
     */
    public function getMyProfile()
    {
        return $this->response;
    }
    /**
     * プロフィールアイコンURLを取得
     */
    public function getIconUrl()
    {
        return $this->response->data->profile_image_url;
    }
}
var_dump((new xMyProfile)->getMyProfile());
//print (new xMyProfile)->getIconUrl();

この記事はQiitaに掲載していた記事になります.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

connection, construct, edit_controls, getIconUrl, getMyProfile, implode, lt, null, organic_metrics, print, promoted_metrics, public, qiita, quot, response, return, use AbrahamTwitterOAuthTwitterOAuth, users, vendor, X.com,

PHP言語で連想配列の指定キーにて並び替える方法.

2024.06.04

Logging

おはようございます、PHP言語で連想配列の指定キーにて並び替える方法は下記です.下記の方法を行うことにより日付キーかつ降順で並び替えを行えるようになります.よく使う関数かどうかは分からないけど頭の片隅に残しておいた方が良い気がしましたので記事にしました.

<?php
$data = [
    [
    'title'=>'Aタイトル',
    'date'=>'2024.05.31 05:00',
    ],
    [
    'title'=>'Cタイトル',
    'date'=>'2024.05.30 05:00',
    ],
    [
    'title'=>'Bタイトル',
    'date'=>'2024.05.31 07:10',
    ],
];
$dateArray = array_column($data, 'date');
array_multisort($dateArray, SORT_DESC, $data);
var_dump($data);

因みに上記の内容(ソース・コード)を実行すると下記の結果が返ってきます.いやーarray_columnとarray_multisortの関数は良いですよね、便利です😌ということで技術共有でした.

array(3) {
  [0]=>
  array(2) {
    ["title"]=>
    string(13) "Bタイトル"
    ["date"]=>
    string(16) "2024.05.31 07:10"
  }
  [1]=>
  array(2) {
    ["title"]=>
    string(13) "Aタイトル"
    ["date"]=>
    string(16) "2024.05.31 05:00"
  }
  [2]=>
  array(2) {
    ["title"]=>
    string(13) "Cタイトル"
    ["date"]=>
    string(16) "2024.05.30 05:00"
  }
}

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$dateArray, array, array_column, array_multisort, Bタイトル&quot, data, lt, php, PHP言語, quot, quot;Aタイトル&quot, quot;date&quot, quot;title&quot, SORT_DESC, string, var_dump, 片隅, 連想配列, 関数,

php7.4から使用できるようになったアロー関数.

2024.06.01

Logging

おはようございます、php7.4から使用できるようになったアロー関数のことを記載しますと言っても書き方はこんな感じで結果は9になりますということしか言えない.

<?php
$a = fn($x,$y) => $x*$y;
var_dump($a(3,3));
<?php
$a = (fn($x,$y) => $x*$y)(3,3);
var_dump($a);

ちなみにカッコで包んで即時関数?にすることも出来ます.この方法の方がjavascript様な書き方なのかも知れないなって思います.そんなアロー関数ですが、あまり使用している方を見かけないですね.コードを書くときは無名関数で書くことが多い気がします.

無名関数が関数になってしまうようなコード量だったら関数にしてしまう方が良いのかも知れませんが、そのコードの内だけで使用するものなら関数にしなくても良い気もしますが、これはレビューする人によって違う気がしますので現場によりかけりだと思います😌.

なお、アロー関数はコールバック関数としても使用可能です📝.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

-y, A`, fn, javascript様, lt, php, var_dump, X, アロー関数, かっこ, コード, コード量, コールバック関数, , 即時関数, 書き方, 無名関数, 現場, 結果, 関数,

頻繁にランダム番号が重複しないようにするクラス.

2024.05.24

Logging

おはようございます、頻繁にランダム番号が重複しないようにするクラスを作りましたのでお裾分けです.実際、Laravelで個人開発しているものに同じ様なコードを走らせています.因みに昨日、Qiitaに投稿したコードと同じものになります.このコードはどういう時に使用しているか.

自分の場合、ランダムにポストするのにこちらのコードを可変したコードを走らせています.

<?php
// 頻繁にランダム番号が重複しないようにするクラス.
class randomizeClass
{
    /**
     * ランダムに配列のインデックス番号を取得する
     */
    public function getRandomIndex($hasArray,$index,$filename='rand.dat',$max=15)
    {
        try {

            //過去のランダム番号を保存しているファイルが無ければ空ファイルを作成する
            if(!file_exists($filename)){                
                file_put_contents($filename,'');
            }

            //過去のランダム番号を保存しているデータを取得
            $fileData = file_get_contents($filename);

            //下記の場合は処理しない
            if ($fileData === false || count($hasArray) < $max) {
                return $index;
            }
            //ファイルデータをカンマで配列に分離
            $isArray = explode(',',$fileData);

            //過去のランダム番号に存在しないか?
            if (array_search($index,$isArray,false) === false) {
                //ランダム格納前処理
                array_unshift($isArray,$index);
                if (count($isArray)>$max) {
                    array_pop($isArray);
                }
                array_filter($isArray,function($val){
                    return $val !=='';
                });
                //ランダム番号を格納
                file_put_contents($filename,implode(',',$isArray));

                return $index;
            }
            //過去のランダム番号に合致したため再帰処理を行う.
            return $this->getRandomIndex($hasArray,array_rand($hasArray),$filename,$max);

        } catch (\Throwable $th) {
            throw $th;
            echo $th->getMessage();
        }
    }
}

//テスト用配列を生成
$hasArray = (function(){
    $val = [];
    for($i=0;$i<100;$i++){
        $val[] = $i;
    }
    return $val;
})();
$filename = 'rand.dat';
//ランダム番号::配列インデックスを取得し表示
print (new randomizeClass)->getRandomIndex($hasArray,array_rand($hasArray),$filename);
print PHP_EOL;
//過去のランダム番号を保存しているデータを取得し表示
print file_get_contents($filename);
print PHP_EOL;

ご自由にコピペでお使い頂ければと思っています😌.そんなに対したコードではないのでオープンにしています.今回は一応、日頃あまり書かないコメントを書きましたが書き慣れていないためか日本語が変かもですね...

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

catch, count, echo, explode, false, filename, function, getMessage, getRandomIndex, gt, Laravel, lt, print, qiita, return, throw, Throwable, try, val, カンマ,

あれから数年経過.コロナは落ち着きましたね?

2024.05.15

Logging

おはようございます、昔、アロー演算子の数珠繋ぎの作り方みたいなのはどうやって作るかという事を思っていた時にオープンソースを見てなるほどなぁと思っていたのですが、あれから数年経過してもっと簡略的に作れること、そしてthisの受け渡しでもいろいろ出来るよって話まで行き着きました.

あれから4年経過すると自分の過去のソースコードが残念に思います.これから数年経過するとこのコードの例も残念なコードになるかも知れませんが今最善の例コードになります.

<?php
/**
 * チェーンクラス?数珠繋ぎクラス?関数の作り方.
 */
class ChainClass{
    public $value = 0;

    /**
     * 加算関数
     */
    public function add($value)
    {
        $this->value = $this->value + $value;
        return $this;
    }

    /**
     * 乗算関数
     */
    public function multiplication($value)
    {
        $this->value = $this->value * $value;
        return $this;
    }

    /**
     * 解を表示する関数
     */
    public function answer()
    {
        printf('答えは%dです',$this->value);
        return $this;
    }
}

(new ChainClass)->add(2)->add(3)->multiplication(10)->add(5)->answer();

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

gt, gt;add, gt;answer, gt;value, lt, multiplication, php, printf, public, return, this, value, アロー演算子, 乗算関数, 加算関数, 数珠繋ぎ, 数珠繋ぎクラス, 最善, 関数,

ダミー情報を生成する定番.

2024.03.29

Logging

ダミー情報を生成する定番を生成する定番のコードを記載します.
Composerを使用し’faker’をインストールします.

composer require fakerphp/faker

使用方法例のコードとしてcsv出力するコードを記載(下記).

<?php
require 'vendor/autoload.php';
use Faker\Factory;

class CsvGenerate{
    /**
     * ダミー情報を生成する
     * @param int $max
     * @return string
     */
    public function csvMake(int $max=0):string
    {
        $faker = Factory::create('ja_JP');
        $hasData = [];
        for($i=0;$i<$max;$i++){
            $datas = [];
            $datas[0] = $faker->name();
            $datas[1] = $faker->email();
            $datas[2] = $faker->phoneNumber();
            $datas[3] = $faker->address();
            $hasData[$i] = implode(',',$datas);
        }

        return implode(PHP_EOL,$hasData);
    }
}

print((new CsvGenerate)->csvMake(1000));
//file_put_contents('data.csv',(new CsvGenerate)->csvMake(1000));

実際使用する場合は、file_put_contents行のコメントを解除してください.
同階層にdata.csvファイルが作成されます.
尚、コマンドよりファイルを実行することを想定しています.

※参考にしたサイト
https://fakerphp.github.io/
https://qiita.com/kurosuke1117/items/c672405ac24b03af2a90

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$datas, $hasData, Address, Composer, create, csvMake, faker’, gt, implode, items, lt, name, phoneNumber, php require, print, qiita.com, string, vendor,

Tensorflow.jsの画像認識って

2024.03.11

Logging

おはようございます、Tensorflow.jsの画像認識ってドキュメント通り書いて上手く画像認識できますか?自分が試してみたら、どうも下記のエラーがでて上手く動作してくれなかったのでもしかしたらと思いバージョンをアップしたら動作してくれました。

Uncaught (in promise) Error: Tensorflow Op is not supported: _FusedConv2D
<!-- Load TensorFlow.js. This is required to use MobileNet. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.17.0"> </script>
<!-- Load the MobileNet model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.1.1"> </script>

<!-- Replace this with your image. Make sure CORS settings allow reading the image! -->
<img id="img" src="cat.jpg.webp"></img>

<!-- Place your code in the script tag below. You can also use an external .js file -->
<script>
  // Notice there is no 'import' statement. 'mobilenet' and 'tf' is
  // available on the index-page because of the script tag above.

  const img = document.getElementById('img');

  // Load the model.
  mobilenet.load().then(model => {
    // Classify the image.
    model.classify(img).then(predictions => {
      console.log('Predictions: ');
      console.log(predictions);
    });
  });
</script>

因みに自分は画像投稿系のサイトで使用するために今回のTensorflow.jsを使用するのですが、よくよく調べているとファインチューニングが出来るようです。ファインチューニングとは一度学習したものに再学習を埋め込む手法といえば良いのかな?要するにカスタマイズしてある分類に特化させる手法のことを指します。今のところ学習済みのモデルで全然判定されるのでOKだと思うのですが、ユーザーさんから認識できないという不満の声が上がれば対応しないといけなくなりそうです。

明日へ続く。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

'src', below, const img, Error, getElementById, gt, img, img&quot, Load TensorFlow.js, lt, MobileNet, mobilenet.load, model, predictions, quot, statement, then, Uncaught, ファインチューニング,

PayjpとLaravel

2024.02.16

Logging

おはようございます、Pay.jpで商品支払いとサブスクリプションに対応したコードを書いたので記載しときます。なお、似たようなコードがネットに落ちていると思いますがどうしても似通ってしまいますね。因みにサブスクリプションの場合、Pay.jpの管理画面からサブスクリプション(プラン)の作成して名前付けしないといけません。

また、クレジットカードの記入画面はリファレンスのサンプルから作るのが早いかなって思います。そしてクレジットカードのデモ用コードもPay.jpのリファレンスかドキュメントに記載していますので、そちらを参考にしてください。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Payjp\Payjp;
use Payjp\Charge;
use Payjp\Customer;
use Payjp\Subscription;

class PaymentController extends Controller
{
    //
    public function index()
    {
        return view('payment.index');
    }

    public function payment(Request $request)
    {
        Payjp::setApiKey(config('app.secret_key'));
        // クレカトークンが送られる(tok_xxxxxxxxxxxxxxxxxxxx)
        $token = $request->input('tokenId');
        $result = Charge::create(array(
            "card" => $token,
            "amount" => 3500,
            "currency" => 'jpy',
            'description' => 'ABC商品',
            'product' => 'ABC',
            'metadata' => [
                'user_id'  => '123',
                'user_name'  => 'あいうえお',
                'email' => 'mail@abc.com'
            ]
        ));
        return back();
    }

    public function subindex()
    {
        return view('payment.subscription');
    }

    public function subscription(Request $request)
    {
        $token = $request->input('tokenId');
        Payjp::setApiKey(config('app.secret_key'));
        // 顧客情報の登録
        $customer = Customer::create(array(
            'email' => 'mail@abc.com',
            'card' => $token, // クライアントから受け取ったトークンを記載します。
            'metadata' => [
                'user_id'  => '123',
                'user_name'  => 'あいうえお',
                'email' => 'mail@example.com'
            ]
        ));

        // 課金処理
        $charge = Subscription::create(array(
            'customer' => $customer->id,
            'plan' => 'plan01', // あらかじめpay.jp側に登録しておいた値。
            'metadata' => [
                'user_id'  => '123',
                'user_name'  => 'あいうえお',
                'email' => 'mail@example.com'
            ]
        ));
        return back();
    }
}

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

array, Charge, config, create, Customer, index, input, lt, mail@example.com, namespace AppHttpControllers, PayJP, payment.subscription, request, setApiKey, subindex, subscription, use IlluminateHttpRequest, use PayjpSubscription, サブスクリプション, リファレンス,

何かの役に立つ#bluesky

2024.01.29

Logging

おはようございます、QiitaにblueSkyのプロフィールURLからRSSを抽出するコードを書きました。先日、blueSkyにRSS機能を追加したという記事を読んだので、その日のうちに対応した形になります。

特に難しいコードでもないので、コメントは一切書いていませんが、それなりに役に立つと信じてリリースしました、ソースの改修などを行って頂けて構いませんが出来ればQiitaもしくはこちらの記事にリンクを貼っていただけたら幸いです。

PHP環境は8.2になっていますが、PHP7系でも動くソースコードなので安心してご使用いただけるかと思います。使用にあたって最終行はコメントアウトを行ってください、url変数も自分にあったurlに変えていただければと思います。

<?php
class blueSkyRss{
    public $rss = null;
    /**
     * __construct
     * @param $url
     * @return void
     */
    public function __construct($url)
    {
        try {
            $html = file_get_contents($url);
            preg_match('/https:\/\/bsky\.app\/profile\/did.*\/rss/',$html,$matches);
            if($rssUrl = $matches[0]){
                $feed = simplexml_load_file($rssUrl);
                $this->rss = $feed;    
            }
        } catch (\Throwable $th) {
            //throw $th;
        }
    }
    /**
     * getRss
     * @return object
     */
    public function getRss():object
    {
        $response = [];
        if(isset($this->rss->channel)){
            $cnt = 0;
            foreach($this->rss->channel->item as $item){
                $response[$cnt]['link']    = $item->link;
                $response[$cnt]['comment']   = $item->description;
                $response[$cnt]['date'] = $item->pubDate;
                $cnt++;
            }
        }
        return (object)$response;
    }
}
$url = 'https://bsky.app/profile/xxxxxxx.bsky.social';
//var_dump((new blueSkyRss($url))->getRss());

明日へ続く。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

bluesky, catch, cnt, construct, description, did, foreach, getRss, isset, lt, object, PARAM, preg_match, pubDate, qiita, return, RSS, throw, Throwable, try,

例外処理をスローする奴(throw=飛ばす?) #php

2023.12.09

Logging

おはようございます、久しぶりにちょっとした技術のお話です。トライキャッチ(try-catch)した後にたまにスローしているコードとか見かけると思います。大体、エラーメッセージとか出力していると思いますが、これ独自のクラスなどに変更することが可能なんですよね。

なので、こんな事が出来るわけです、コケたら違う処理を行ってリカバリみたいな事やコケた値を拾ってバックアップするとか、いろいろな事が出来てしまいます。

PHPの公式でも例文を書いていますが、アレだとなんかわからない方もいると思いますので、もっと簡略化した例文コードを書いてみました。このコードを実行するとゼロによる除算エラーになりますが、トライキャッチ(try-catch)の中に書いているのでエラーにならずcatchへ処理は推移します。そしてスローでオリジナルのクラスを呼び出しているわけです。

<?php
    class errors{
        public function __construct($msg,$x) {
            print $msg;
            print $x;
        }
    }
    try {
        $x=5;
        $a = $x/0;
        //code...
    } catch (\Throwable $th) {
        throw new errors($th->getMessage(),$x);
    }

トライキャッチの良いところはエラーにならないところですが、エラーにならない事が困り物になる場合もあるので注意が必要です。そこは現場の諸先輩方の話を聞いて対応したほうが良さげかと思います。

明日へ続く。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

$msg, $th, $th-&gt, catch, class errors, construct, getMessage, lt, php, print, public function, throw new errors, Throwable, try, try-catch, スロー, リカバリ, 例文, 除算エラー,

オーバーライドとは何なのか。それは。

2023.11.27

Logging

おはよう御座います、もう20年前になるのかな駆け出しのエンジニアだった頃の話。そのころ、オブジェクト指向が何なのかなんてことも知らないのに粋がっていました。その事を思い出すと恥ずかしいばかりです。その駆け出しのエンジニアの頃にオブジェクト指向のことをどうしても勉強しないといけなくて参考書を買ったのは良いのだけど専門用語が多くてついて行けなかった、そんな記憶があります。今ではchatGPTという何でも適当にだいたい正しそうな回答してくれる優しくてひねくれ者のツールがあるので、本当に良いなって思います。

さて、オーバーライドとは何なのかという事ですがchatGPTよりもっと要約した回答を書くと継承クラスの上書きです。これでもチンプンカンプンな人に例文を書いてみました。これで分からない方は何かを諦めた方が良いかも知れません。

<?php
//testClass.php
trait testClass {
    public function Hello(){
        return 'Hello';
    }
}
<?php
//test.php
require './testClass.php';
class test1{
    use testClass;
    public function run (){
        print $this->Hello().PHP_EOL;
    }
}
class test2{
    use testClass;
    protected function Hello(){
        return 'Good night';
    }
    public function run (){
        print $this->Hello().PHP_EOL;
    }
}

(new test1)->run();
(new test2)->run();

この2つのファイル(コード)を保存してtest.php実行してみてください。そうするとよく分かると思います。ちなみに実行結果はこの様になります。
https://zip358.com/tool/demo79/

明日へ続く。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

ChatGPT, gt, gt;Hello, lt, php, PHP_EOL, print, return, run, test.php require, testClass, testClass.php trait, this, use testClass, オーバーライド, オブジェクト指向, チンプンカンプン, ひねくれ者, 上書き, 例文,

アイキャッチ画像を表示するように変更。PHPコード

2023.11.25

Logging

おはよう御座います、先日アイキャッチ画像を表示するように変更しました、PHPコードはこんな感じです。Bootstrapでレスポンシブ画像に対応しています。アイキャッチ画像を表示するようにした訳はデザインも変えたのでアイキャッチいれても変じゃないかなって思ったことです。そういう訳で先日の休みに対応しましたというのが経緯(いきさつ)です。

            <div>
              <?php
              print get_the_post_thumbnail_url() ? '<img src="' . get_the_post_thumbnail_url() . '" class="img-fluid">' : '';
              ?>
            </div>

そんな休みの日にこんなタイムラインが流れてきました、こんなのが浸透したら商売が破綻すると思う人がいると思うけれども、たぶん今の生成AIで凄いことが出来るのに殆んどの人が使えていない。これが浸透するのにかなり月日がかかると思います。一般の人に浸透するにはラグが存在するので、それまでにどうすれば良いか対処出来ると思います。ちなみにポストが消えてしまった時のために上のポストの内容を解説しておくと、画像(デザイン)からフロントエンドエンジニアやデザインナーが行うHTML作成作業を生成AIが変わって行ってくれる。今の所、完璧なコードが生成される訳ではないので手直しが必要ですが、いずれは必要なくなることは時間の問題という話なんだけど、実際ひとが思っている未来の斜め上を行くのが未来かと思います。なので落胆はせずに上手く取り入れていく方が賢明かなって自分は思います。

明日へ続く。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

Bootstrap, class, div&gt, get_the_post_thumbnail_url, gt, img src, img-fluid&quot, lt, php, print get_the_post_thumbnail_url, quot, アイキャッチ, デザインナー, ラク, レスポンシブ画像, 商売, 手直し, 生成AI, 経緯, 落胆,

Photo by Pixabay on Pexels.com

#久しぶりのコード`Xにポストするコード`

2023.11.17

Logging

おはよう御座います、さて正月休みは11日ぐらいあります、いやー正月休みはネトフリとゲームざんまいしてみたいと思っているのですが、結局どこかに出ていったりとかして目標達成できずにズルズルと休みを過ごすことになりそうです。👈前と言っていることが違いますね🙇。

さて、久しぶりにコードを書きました、この記事だけ見るとプログラマーじゃないかって思われるので最初に記載しときます。毎日のように仕事ではコードを書いています、仕事以外でコードを書いたのは一週間ぶりかなぁ。でも、このコードはポストでも書いている通り、特に難しいコードでもないのでオープンに公開しました。

このコードには必要ないコードが紛れているのはこのコードが使いましたコードだからです😂。

<?php
date_default_timezone_set('Asia/Tokyo');
ini_set("display_errors", 0);
require_once "../tw-config-v2.php";
require_once "../vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

class merukari{
    public $connection = null;
    public $pdo = null;

    public function __construct()
    {
        $this->connection = new TwitterOAuth(APIKEY, APISECRET,ACCESSTOKEN,ACCESSTOKENSECRET);
        $this->connection->setApiVersion("2");
    }

    public function tweet($pattern)
    {
        $result = $this->connection->post("tweets", ["text" =>$pattern], true);
    }
    
    public static function pattern()
    {
        $pattern = [
            'メルカリで参考書を取り扱ってます📖 どれも綺麗な状態です。#学び #python Cシャープ #プログラム ⏭ https://jp.mercari.com/user/profile/808093563',
            'メルカリで参考書を出品してます📖 どれも綺麗な状態です。#学び #機械学習 #AI #プログラム ⏭ https://jp.mercari.com/user/profile/808093563',
            'メルカリで参考書を売ってます📖 どれも綺麗な状態です。#学び #人工知能 #python #プログラム ⏭ https://jp.mercari.com/user/profile/808093563',
            'メルカリで参考書を取り扱ってますよ📖 どれも綺麗な状態です。#学び #テック #企業 #学び #プログラム ⏭ https://jp.mercari.com/user/profile/808093563',
        ];

        return $pattern[ (int)rand(0,(count($pattern)-1))];
    }
}

try {
    if($argv[1] === 'merukari'){
        (new merukari())->tweet(merukari::pattern());
    }
} catch (\Throwable $th) {
    //throw $th;
}

もしかしたら、以前にもコードを公開して2回目になっていたりするかも知れません。そうだったらごめんなさい、無駄に記事を量産しています(反省。

そうそうXのハッシュタグ廃止は誤解だそうです。思い出したので書いときます、、、。

明日へ続く。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

argv, Asia, catch, connection, construct, int, lt, null, pattern, Python, quot, rand, return, throw, Throwable, true, try, Tweet, use AbrahamTwitterOAuthTwitterOAuth, vendor,

よさこい祭り動画検索を久しぶりにバージョンアップ

2023.08.24

Logging

おはようございます、よさこい祭り動画検索を久しぶりにバージョンアップしました。バージョンアップした理由はGさんがAndroid12に対応していないアプリは駄目だよと警告⚠を頂きまして、その対応のため、アプリを更新しました。このアプリはサイトを読み込んで表示しているだけのアプリなのでそのうち改修しようと思っているのだけどなかなか、手直ししていないアプリです。

Androidアプリでリリースしているものは、これだけでこのアプリがGさんに出禁になっても別に良いやというアプリですが、それでもなんだか知らない間にアプリのインストールも増えていて、びっくりしています。更新したのですが、実機で確認するとなんだかエラーが出てたりして何度か手直しを行いました。原因はマニフェストの書き方が駄目だったみたいです。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yosakoi_app">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

こんな感じに書かないとお叱りを受けるようです、皆さまも気おつけてください🙇。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

Androidアプリ, example.yosakoi_app&quot, gt, lt, manifest xmlns, Package, quot, quot;android.permission.ACCESS_NETWORK_STATE&quot, quot;android.permission.INTERNET&quot, uses-permission android, インストール, うち, エラー, お叱り, バージョン, マニフェスト, 何度か手直し, 出禁, 皆さま, 警告,