【#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

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

タグ

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

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

タグ

$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

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

タグ

-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

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

タグ

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

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

タグ

$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

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

タグ

-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

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

タグ

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

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

タグ

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

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

タグ

$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"></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

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

タグ

'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

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

タグ

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

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

タグ

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

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

タグ

$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

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

タグ

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

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

タグ

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

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

タグ

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

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

タグ

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, インストール, うち, エラー, お叱り, バージョン, マニフェスト, 何度か手直し, 出禁, 皆さま, 警告,

Laravelでユニットテストをする中Factoryは欠かせない。

2023.08.11

Logging

おはようございます、Laravelでユニットテストをする中Factoryは欠かせない存在だと思っています。毎回、データを初期化していると処理が重くなってしまいます。ユニットテストが多くなるに連れて時間がかかるのは仕方がないのかなって思いますが、極力時間短縮したいと思うのは普通のことだと思います(github上にpull requestしphpstan(静的解析ツール)やphpunit(ユニットテスト)を行っていく中で結構時間がかかるのはユニットテストだと思います。)。

恐らくユニットテストでデーターベースの初期化をしない事が良いだろうと思うようになってきました。そんな中で役に立つのがFactoryです。これを使用することで次のテストに影響を与えないみたいなんですね。なので、この頃はFactoryを使用しています。

Factoryは下記のCommandで生成することが出来ます。

php artisan make:factory filename

仕様の仕方はこんな感じになります💁

<?php
$user = User::factory()->make([
 'username'=>'test',
 'password'=>'testpass',
]);
print $user->username;

著者名  @taoka_toshiaki

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

タグ

-Command, Factory, factory filename, github上, gt, gt;username, Laravel, lt, php, php artisan make, phpunit, print, pull requestしphpstan, user, この頃, データーベース, ユニットテスト, 中Factory,

Laravelにてnpmが使えないサーバにてログイン画面の構築。

2023.08.06

Logging

おはようございます、Laravelにてnpmが使えないサーバにてログイン画面の構築のお話です。お話というより動画を作りました。この動画を全画面表示でみると大体のことが分かると思います。この動画は画面ができるまですので、この後、Commandを使用して下記のCommandを打ち完成となります。

php artisan migrate
laravelのログイン機能と日本語化とバリデーション日本語化

前提条件として.envファイルの設定は済ましていることとします。因みにさくらレンタルサーバーでは初期のドメインより.envファイルが見える仕様になっているので、.htaccessファイルを使用して隠しファイルは見えないように設定してあげてください🗿。さくらレンタルサーバーの公式ブログではこの事に一切触れていないのだけど大丈夫なのか?気になるところです。

<Files ~ "^(\.en|\.edi|\.git|\.dat|\.sql|composer\.|artisan)">
deny from all
</Files>
{
    "Login": "ログイン",
    "Register": "新規登録",
    "Forgot Your Password?": "パスワードを忘れた場合",
    "Reset Password": "パスワード再設定",
    "Send Password Reset Link":  "パスワード再設定URLを送信",
    
    "Name": "お名前",
    "Email Address": "メールアドレス",
    "Password": "パスワード",
    "Confirm Password": "パスワード(確認用)",
    "Remember Me": "ログイン状態を保存",
    
    "Hello!": "ご利用ありがとうございます。",
    "Reset Password Notification":  "パスワード再設定のお知らせ",
    "You are receiving this email because we received a password reset request for your account.": "あなたのアカウントでパスワード再発行のリクエストがありました。",
    "This password reset link will expire in :count minutes.": "再設定URLの有効期限は :count 分です。",
    "If you did not request a password reset, no further action is required.": "もしパスワード再発行をリクエストしていない場合、操作は不要です。",
    "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser: [:actionURL](:actionURL)": "\":actionText\"ボタンを押しても何も起きない場合、以下URLをコピーしてWebブラウザに貼り付けてください。\n[:actionURL](:actionURL)",
    "Regards": "よろしくお願いいたします"
    }

著者名  @taoka_toshiaki

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

タグ

-Command, actionText, actionURL, artisan, count, dat, edi, en, envファイル, git, gt, Laravel, lt, npm, quot, quot;Login&quot, quot;Regards&quot, quot;Register&quot, sql|composer, will expire,

windows11を初期化した話。バックアップ失敗?

2023.06.17

Logging

おはようございます。前々から初期化しようと思っていた、メインのパソコンを初期化しました。これは先日の話になります。

初期化は比較的にすんなりと出来たのですが、Dockerのimageデータが読み込めないという問題が発生しました。バックアップを取る際にMacなどのOS用のコマンドを使用してバックアップを取っていたのが問題でした。

docker save ubuntu -o ubuntuv.tar
docker load -i ubuntuv.tar
docker save ubuntu > ubuntuv.tar
docker load < ubuntuv.tar

上記のことを知らずにリナックス用のバックアップコマンドで行い、load確認をせずに初期化を強行してしまったのが間違いでした。結果、データは残っていたので再度、DockerComposeからコンテナを立ち上げ直し、なんとか対応出来ましたが心臓に悪いなって感じましたね。

著者名  @taoka_toshiaki

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

タグ

docker, docker save ubuntu, DockerCompose, gt, i ubuntuv, imageデータ, load確認, lt, Mac, tar, ubuntuv.tar, ubuntuv.tar docker load, コマンド, こんてな, バックアップ, バックアップコマンド, リナックス用, 再度, 前々, 心臓,

配列を連想配列に置き換えるPHPの関数。便利すぎる😌

2023.06.11

Logging

おはようございます。配列を連想配列に置き換えるPHPの関数。便利すぎます。この関数を知ったのはつい最近の話ですが、こんな関数があるのだと知っているのと知らないとではコードの書きようが違うわけです、実際、PHPの関数を全部知っているわけではないのですが公式のドキュメントを見るといろいろな関数が存在することが分かります。

自分はあまり関数を知っているわけではないので余計なコードを書いている可能性があります、なので余計なコードを書かずに純粋な関数を使用してシンプルなコードがかければなと思います。

<?php
    var_dump(array_combine([1,2,3],["one","two","three"]));

そんな自分もこの頃はPHP公式サイトのドキュメントを見ることも以前よりは増えてきています。昔は公式サイトで調べるよりググって調べることが多かったのですが、この頃は公式サイトと検索のパラメーターであるsite:URL+キーワードを使用して調べることを心がけています。あとはchatGPTを使用します。

調べるときの手順にchatGPTという選択肢があるのですが、正解ばかりの回答ではないのでやはり今の段階では補助ツールですね。いまのAIの役割は面倒くさいと思われる組み合わせのパータンを全て網羅してくれて思いがけない答えを導き出せるという所にあると自分は思っています。なので、現段階では人の回答に答えるのにはあまり向いていないのかもしれないですね。

ともあれ、知らないより知っていたほうが良い業界なので勉強ですね。

著者名  @taoka_toshiaki

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

タグ

AI, array_combine, ChatGPT, lt, php, quot;one&quot, quot;three&quot, quot;two&quot, site, var_dump, ドキュメント, パータン, パラメーター, 手順, 正解, 組み合わせ, 連想配列, 配列, 関数,

ContactForm7で現在ページのURLを送る方法。 #カスタマイズ

2023.05.27

Logging

おはようございます。ContactForm7で現在ページのURLを送る方法です、全ての記事の下にお問い合わせフォームを設置している人はあまりいないかもしれないけれど。そのあまりいない人の一人です😂。

記事の下にショートコードを設置するにはプラグインを自作するか、テンプレート内に埋め込むかどちらかだと思います。自分は前者のプラグインを自作してショートコードを埋め込んでいます。

ショートコードを埋め込むコードはこんなコードです。

<?php
do_shortcode('[contact-form-7 id="XXXX" title="comment"]')

これで全記事にショートコードを埋め込むことが可能ですがこれだけでは動きません。こんな感じのプラグインを作ってみてください。プラグインの設置方法などはググって下さい。

<?php
/*
  Plugin Name: comment-add
  Plugin URI:
  Description: 記事の下にアドセンス広告などを貼り付けるのに使用
  Version: 1.0.0
  Author: @zip358com
  Author URI: https://www.zip358.com
 */


function comment_add($content)
{
    if (is_single() && 'post' == get_post_type()) {
        $content = $content.do_shortcode('[contact-form-7 id="xxxx" title="comment"]');
        return $content;
    } else {
        return $content;
    }
}
add_filter('the_content', 'comment_add');
remove_filter('the_content', 'wpautop');

これだけでは、どのページから問い合わせしたのか分からないので、名前などの入力欄以外に入力欄を設置します。次に設置したそのNoを控えて下さい。

<script>
//Contact Form 7 現在ページのURL
if(document.querySelectorAll("[name='text-564']")){
    [...document.querySelectorAll("[name='text-564']")].forEach(elm=>{
        elm.setAttribute("type","hidden");
        elm.value = decodeURIComponent(location.href);
    });
}
</script>

上記のコードを</body>タグ直前に設置してください。設置後、text-564を控えたNoに変更シテクダサイこれで設置が完了です☹。

⚠ContactForm7のメール送信欄にも控えたNoを設置してください。これで完了です!!
最後に送信のご確認を忘れずに😐。

著者名  @taoka_toshiaki

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

タグ

add_filter, body, comment-add, decodeURIComponent, description, document.querySelectorAll, elm, else, foreach, hidden&quot, lt, php, php do_shortcode, quot, remove_filter, return, setAttribute, title, Version, wpautop,

php:トレイトって言うよりclassの中でuseを使用。

2023.05.19

Logging

おはようございます、php:トレイトって言うよりclassの中でuseを使用する方法って言った方がわかり易いのかも知れません。詳しい説明は公式を参照して下さい。コード例とtraitの説明を書いときます。

トレイトは、PHPのようなプログラミング言語でコードを再利用するための仕組みのひとつです。通常、プログラムではクラスを使ってコードを組み立てますが、トレイトを使うことで、異なるクラスに属するメソッドのグループを独立したクラスとして再利用することができます。これにより、単一継承という制限を緩和することができます。トレイトを使うことで、多重継承やMixinといった問題を回避することもできます。

トレイトはクラスと似ていますが、トレイトは単に機能をまとめるためのものです。トレイト自体のインスタンスを作成することはできません。トレイトを使うことで、従来の継承に機能を追加するだけでなく、クラスのメンバーを水平方向に追加することもできます。つまり、継承しなくてもクラスに新しい機能を追加することができるようになります。

実行サンプル=>https://zip358.com/tool/demo75/

<?php
require_once "hello/hello_class.php";

use hello\Hello;

class Test
{
    use Hello;
    public function main()
    {
        print("-goodbye");
    }
}

(new Test())->main();
<?php

namespace hello;

trait Hello
{
    public function __construct()
    {
        print("Hello");
    }
}

著者名  @taoka_toshiaki

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

タグ

class, construct, goodbye&quot, gt, lt, Mixin, namespace hello, php, php require_once, print, quot, quot;hello, quot;Hello&quot, trait, trait Hello, use, use helloHello, トレイト, トレイト自体, 単一継承,

ブルータス、お前もか?古代の暗号シーザー。 #phpcode

2023.04.30

Logging

おはようございます。古代にも暗号というものがあったらしい。古代の人が使っていたシーザーという暗号をPHP化しました。demo74のページを見ると実行結果が表示されていると思います。

古代にはPCというものが無かったので、これでも解読するのにある程度、時間がかかったんでしょうね。ぱっと見、暗号化されているのは分かるけど瞬時に解読できる人はあまりいなかっただと思います。近年では量子暗号とか、パッと見どころかPCがあっても鍵が無いと解読に途方も無い時間を費やする暗号までありますよね。そう思うと暗号の歴史を辿るのも面白いかもしれないですね。

<?php
function caesarCipher($str, $shift) {
  $result = "";
  $len = strlen($str);
  // 26文字のアルファベットを配列として定義する
  $alpha = range('a', 'z');
  
  for ($i = 0; $i < $len; $i++) {
    $char = strtolower($str[$i]); // 大文字を小文字に変換する
    if (in_array($char, $alpha)) { // アルファベットの場合のみシフトする
      $index = array_search($char, $alpha); // アルファベットの位置を検索する
      $newIndex = ($index + $shift) % 26; // シフト後のアルファベットの位置を計算する
      $result .= $alpha[$newIndex]; // シフト後のアルファベットを結果に追加する
    } else {
      $result .= $char; // アルファベット以外はそのまま結果に追加する
    }
  }
  return $result;
}

// 使用例
$plaintext = "hello world";
$ciphertext = caesarCipher($plaintext, 3);
echo $ciphertext; // "khoor zruog"

著者名  @taoka_toshiaki

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

タグ

$alpha, $ciphertext, $len, $newIndex, $plaintext, $shift, caesarCipher, char, echo, else, lt, quot, range, result, return, STR, strlen, シーザー, 小文字, 解読,

いいねボタンと悪いねボタンを実装予定。 #いいね👍

2023.04.07

Logging

おはようございます、週末の夜から休日を使用して、とあるサイトにいいねボタンと悪いねボタンを実装予定です。これにより、コミュニティが盛り上がることを少し期待しているけども、そんなに変わらないだろうなって思います。ですが作ろうと思っています( ・ิω・ิ)。

<button id="likeBtn">👍</button>
<button id="dislikeBtn">👎</button>

<p><span id="likeCount">0</span></p>

いいねの数カウントと悪いはカウントしないものを実装です、そうYOUTUBEと同じ外見的、仕様です、中身はガタガタな物なんですが・・・。外見だけでも合わせようと思います、同じ仕様にするのは、それが巨人が一番良いと結論付けたのだからそれには大いに意味があるだろうという理由から、そうするように決めました。

// カウンターの初期値を設定
let likeCount = 0;
let dislikeCount = 0;

// 「いいね」ボタンのクリックイベントを追加
document.getElementById("likeBtn").addEventListener("click", function() {
  likeCount++;
  document.getElementById("likeCount").textContent = likeCount;
});

因みに、今月から金曜日も仕事になりました、先月末まで4勤務だったので、少しばかりアレですが5勤の方がONとOFFの切り替えが出来てよいです。フルリモートなので、ONとOFFの切り替えが難しいでしょうという人もいると思いますが、息を吸うようにいつもコードを書いているので正直な所、難しい事ではないです。仕事の場合、注意をはらっているのですが…まだまだ抜けがあるのが現状です。それが嫌だなって思います。そこを直したいなって日々思っています。

トイウコトデ、日曜日には実装済みになっていると思います。

著者名  @taoka_toshiaki

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

タグ

addEventListener, button&gt, dislikeBtn&quot, function, getElementById, gt, let dislikeCount, likeCount, lt, quot;click&quot, quot;likeBtn&quot, quot;likeCount&quot, span&gt, textContent, youtube, クリックイベント, トイウコトデ, 外見, 設定 let, 追加 document.getElementById,