眠れるサイトを再構築したって話。 #phpcode

2023.03.25

Logging

おはようございます、お腹がキリキリ痛む時があります、プレッシャーでしょうか?

今日は眠れるサイトを再構築したって話です、このサイト、放ったらかしにしてもう10年以上の年月が経過しているのですが、まともに稼働したことがありません。今回、そんな眠れるサイトを再構築しました、このサイトで出来ることは24時間しか投稿が表示されない。

掲示板サイトです、24時間後には投稿が自然消滅します、厳密に言えばデータは保管されているのですけど、表示されないような処理を書いています。なので、表面上は表示されません…。

24時間後にデータを消しても良いのですが、もし何かの問題が起きた時にデータを提出出来るようにデータはデータベースに保管しています。

このサイトで問題が起きた場合、自分のTwitterアカウントか運営しているサイトのアカウントにDM無いしReしてくれたら対応を行います。

因みにこのサイトはものの数分で構築しました・・・・。見る人が見れば簡単やなって呟くことだと思いますが、複雑なサイトがウケるとも限らず案外、簡単なものがウケる場合もあるだと思います。

トイウコトデ、釣りMAPというサイトも名前改めて釣りったーに改名して近々リリースします。近々が何時になるかは分からないですが・・・😂。

タグ

24時間, 24時間後, DM, map, Twitterアカウント, アカウント, お腹, データ, データベース, トイウコトデ, プレッシャー, 処理, 名前, 問題, 年月, 投稿, 掲示板サイト, 自分, 表面上, ,

理詰め。そんなに変わるだろうかと思う反面。 #人工知能 #シンギュラリティ

2022.11.25

Logging

おはようございます、祝日の昨日は雨でしたね😗。今日は3記事ほど予約投稿出来ました。

そんな中、PIVOTの対談を朝(夜も)から観ていました。佐々木さんと対談された落合陽一さん。落合陽一さん曰く、シンギュラリティは再来年にはやってくるだそうです。

【落合陽一のシンギュラリティ論】シンギュラリティは2025年に来る/ディフュージョンモデルの衝撃/知的ホワイトカラーが没落する/最新版デジタルネイチャー/音楽と論文が数秒でできる

落合陽一さんが得意ではない方もいるかと思いますが、聞いていて日本は遅れているなというのは良くわかります。英語圏の方は人工知能を使用して絵を作成したり、音楽を作成したりすることが容易に出来るけど、日本人は英語力がない人が多いのでテキストで思い通りに人工知能に指示することが出来ない。

【落合陽一の未来予測】シンギュラリティ後の世界と人間/大恋愛時代が来る/国家意識が薄れ、戦争が増える/自分以外は死なない/ロボットが消費者に/体を鍛えて、感じよく生きよ/ビジネス書は意味がない
デジタルネイチャー時代

そんな感じなので、絵を創作するならstability.ai、音楽を創作するならmubert(Mubert-Text-to-Music)を落合陽一さんが使用していたように海外の人たちは、もうこういうツールを使い始めています。日本だけが特殊な環境にあるなって思うところはあります。いろいろな分野にAI(人工知能)が浸透していくのは時間の問題かもしれないと思います。

特にホワイトカラー職は大手から変わるじゃないかと思います。下請けに外注していた単純作業などは恐らくAIに取って代わられる運命に有ると思います。猫も杓子もAIを使いだしたら、世の中は大きく変わるじゃないかな・・・。

タグ

, AI, mubert, Mubert-Text-to-Music, PIVOT, stability, こと, シンギュラリティ, ツール, テキスト, デジタル, ネイチャー, , 予約, , 人工, 今日, 佐々木, 作成, 使用, 再来年, 創作, 反面, , 容易, 対談, 得意, 思い通り, 感じ, 投稿, 指示, , 日本, 日本人, 昨日, 時代, 曰く, , 海外, 理詰め, 知能, 祝日, , 英語力, 英語圏, 落合, 記事, 陽一, , 音楽,

AとBをテストするABテスト #abtest

2022.11.19

Logging

おはようございます、土曜日の朝🌅。今日は高知県は雨らしいですね。

ABテストとは何かは割愛させてもらってABテストの話を書いていきます。自分はこのABテストを結構します。特にブログやYOUTUBEはABテストを行っています、プレビュー数、再生数はどうすれば伸びるのか、試すにはABテストは最適です。

【10分で分かる】ABテストについて統計学的観点も交えて詳しく解説!

そういうテストを繰り返して小技を蓄積していくと伸びるものが創れるようになるし、勘どころが分かるようになります。これは伸びる伸びないなどがよくわかります。

これをテストするにはある程度、訪問者や閲覧者がいないと出来ないです。初期のブログはなかなか訪問者数もいないのでテストが出来ないですが、YOUTUBE等は投稿すればチャンネル登録者数がいなくてもYOUTUBEのアルゴリズムで、ある程度表示してくれます。

YOUTUBEのアルゴリズムは関連性の高い動画だと認識させれば、再生回数は伸びますしアイキャッチなども結構大事です、それはブログもそうなんですけどブログの場合は記事の内容が大事になります。

滞在時間と離脱してから次の行動も恐らくですがGアルゴリズムもページの善し悪しに盛込んでいると自分は考えています。もし自分なら、そういうアルゴリズムにしますから・・・。

まとめ、ABテストはSEOというよりは、人に寄り添って考える事が大事なのかなって思います🙇。

タグ

ab, abtest, com, D-leDiVDiqU, https, watch, www, youtube, アルゴ, アルゴリズム, これ, チャンネル, テスト, プレビュー, ブログ, もの, リス, 今日, 何か, 再生, 初期, 割愛, 勘どころ, 土曜日, 小技, 投稿, 最適, , 登録者, , 自分, 蓄積, 表示, 訪問者, , 閲覧者, , 高知県,

そういやインフラ系やサーバーサイドのYOUTUBERってあまり知らないよね。

2022.10.26

Logging

おはようございます。先日、コロナワクチンを接種して熱が出たので昨日、薬を飲みました。本日は通常と変わらないですという予約投稿を書いている日曜日の夜。

さて、今日はサーバーサイドのYOUTUBERを見かけたのでご紹介です、お名前はうんちゃまさん、何故、そんな名前なのかや動画をまだ三本しか見ていないので、どんな人なのか等は分からない部分は有るものの。そんな悪人さんではないみたいなので、今回、ご紹介します。

マイクラサーバーのセキュリティ対策って何をするの?【マイクラサーバーお悩み相談室】

サーバーを建てるに当ってどういう所を気にしているのかとか、自分の知見はどの程度なのかの答え合わせが出来て良かったと思っています。

因みにうんちゃまさんは、マイクラサーバーを運営している人です、自分も昔、マイクラサーバーを運営したいなと思って友人にマイクラサーバーは儲かるのか質問した事があります。結果、儲からないとの返答を得たので結局、運営せずに今に至っています。うんちゃまさんは、有志などがいて何とかなっているらしいです。自分もそういうITエンジニアの横のつながりが欲しいなというこの頃。

トイウコトデ、うんちゃまさんのYOUTUBEチャンネルはこちら

散財系鯖主うんちゃま

タグ

YOUTUBER, インフラ, うん, コロナ, ご紹介, サーバー, マイクラ, ワクチン, 三本, 予約, , , , 今回, 今日, , 先日, 動画, 友人, 名前, , 悪人, , 投稿, 接種, 日曜日, , 昨日, 有志, 本日, , , 知見, 程度, 答え, 結果, 自分, , 質問, 返答, 通常, 運営, 部分,

WP予約投稿ツイートプラグイン作り方。#php言語 #code #v2

2022.10.11

Logging

おはようございます😤 お仕事に飢えてます…寒い季節ですね…。

さて、今日はWP予約投稿ツイートプラグイン作り方を記載していきます。ワードプレスでプラグインを作る場合はWordPressの下記の場所に任意のフォルダを作り、その中にディレクトリ名(任意名)と同じファイル名でphpファイルを作ります。※昔の名残なので今は命名が違っても動くかも知れませんが・・・。

cd /wp-content/plugins
mkdir mytweets
vi mytweets.php

そして、命名したファイル名を開き、ファイルの上部に下記のコメントを記載します。プラグイン名やプラグインの説明、プラグインバージョンをそれぞれ変更して頂き保存、その後サーバーサイドにアップロードします(フォルダごと)。

<?php
/*
Plugin Name: My tweets
Description: tweets
Version: 1.0
*/

これで何も動作しないプラグインが出来上がります。

後はコマンドラインからプラグインフォルダにcomposerをインストールしtwitteroauthのライブラリを入れます。

此処までが前手順です。此処までで挫折した人は結構いると思います🙄。

因みに此処までの事がすんなりと出来る人は、このブログの情報は必要ないものです。なのでココからはソースコードを記載します。WP予約投稿ツイートプラグインなんてオチャノコサイサイだと思います。

<?php
/*
Plugin Name: My tweets
Description: tweets
Version: 1.0
*/
if (!defined('ABSPATH')) exit;
require_once  "tw-v2-config.php";
require_once  "./vendor/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

function mytweets($new_status, $old_status, $post)
{
    
    if ($new_status == 'publish' && $old_status != 'publish') {
        try {
            $connection = new TwitterOAuth(APIKEY, APIKEYSECRET, ACCESSTOKEN, ACCESSTOKENSECRET);
            $connection->setApiVersion('2');
            $response = $connection->post('tweets', ['text' => get_the_title($post->ID) . "\n" . get_permalink($post->ID)], true);
        } catch (\Throwable $th) {
            //throw $th;
        }
    }
}
add_action('transition_post_status', 'mytweets', 10, 3);

上記のコードを記載した上で上書き保存&アップロードします。その後ワードプレスの管理画面よりプラグインを有効にして出来上がり、今回はtwitteroauthのライブラリを使用しましたがcrulなどのを理解している人はライブラリは特に必要ないのかなとも思います。ライブラリを使用すればお手軽ですが、万が一何かあった時に困るのでライブラリを使用せずにコードを書くという方もいらっしゃると思います。

自分も極力、公式のライブラリしか使わないようにしています🙇。

トイウコデ、ワードプレスのプラグインの作り方でした。

タグ

2, cd, Code, description, lt, mkdir, My, mytweets, name, php, plugin, plugins, Tweets, Vers, vI, WordPress, wp, wp-content, アップロード, お仕事, コメント, サーバー, それぞれ, ツイート, ディレクトリ, バージョン, ファイル, フォルダ, プラグイン, プレス, ワード, 上部, 下記, , 予約, , 今日, 任意, 作り方, 保存, 名残, 命名, 場合, 場所, 変更, 季節, , 投稿, , 言語, 記載, 説明,

数珠繋ぎのツイートシステムに予約機能を付けました😂 #php #code

2022.10.07

Logging

おはようございます、偏頭痛持ちは雨が降るが一番大変です☔。

先日、数珠繋ぎのツイートシステムを作ったのですが、そのシステムに予約機能を付けました。尚、TwitterAPIのバージョン2でスケジュールのパラメーターが今のところ無いですね。これから先、機能が付くかも知れないですが今のところ無いようです。因みにソースコードは近日中にQiitaGithubにUPします。此処ではソースコードの一部を掲載します(※記事を更新しました下へスクロール🫠)。

Twitter API v2 ツイート数珠繋ぎ

尚、crontabでPHPファイルを叩くようにしています、あと注意事項ですが予約を一度した投稿については変更等は出来ません、編集機能等の機能追加の予定はないです。また、予約管理はsqlite3を使用して管理しています。

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

use Abraham\TwitterOAuth\TwitterOAuth;

class tw
{
    var $connection = null;
    var $pdo = null;
    function __construct()
    {
        $this->connection = new TwitterOAuth(APIKEY, APISECRET, ACCESSTOKEN, ACCESSTOKENSECRET);
        $this->connection->setApiVersion("2");
    }
    function db_connection()
    {
        try {
            //code...
            $res = $this->pdo = new PDO("sqlite:./data/tw-tweets-db.sqlite3");
        } catch (\Throwable $th) {
            //throw $th;
            //print $th->getMessage();
            $res = false;
        }
        return $res;
    }

    function timecheck($timeonoff, $times)
    {
        if (!$timeonoff) return true;
        $n = new DateTime();
        $t = new DateTime($times);
        return $t <= $n ? true : false;
    }

    function pickup_tweets(mixed $tw_text = null, int $timeonoff = 0, mixed $times = null, string $id = "")
    {
        if (!$times) return false;
        $obj = (object)[];
        $times = preg_replace("/\-/", "/", $times);
        $times = preg_replace("/T/", " ", $times);

        if ($this->timecheck($timeonoff, $times)) {
            if (isset($tw_text) && is_array($tw_text)) {
                foreach ($tw_text as $key => $value) {
                    if (preg_replace("/[ | ]/", "", $value)) {
                        $obj = !$key ? ($this->connection->post("tweets", ["text" => $value], true)
                        ) : ($this->connection->post("tweets", ["reply" => ["in_reply_to_tweet_id" => $obj->data->id], "text" => $value], true)
                        );
                    }
                }
                return true;
            }
        } else {
            return $timeonoff ? $this->save_sqlite($tw_text, $timeonoff, $times, $id): true;
        }
    }

    function save_sqlite($tw_text = null, int $timeonoff = 0, mixed $times = null, string $id = "")
    {
        if ($this->db_connection()) {
            try {
                //code...
                if (isset($tw_text) && is_array($tw_text)) {
                    foreach ($tw_text as $key => &$value) {
                        if (preg_replace("/[ | ]/", "", $value)) {
                            $stmt = $this->pdo->prepare("insert into tweets (tw_id,user,times,tw_text)values(:tw_id,:user,:times,:tw_text)");
                            $stmt->bindValue(":tw_id", $key, PDO::PARAM_INT);
                            $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                            $stmt->bindValue(":times", $times, PDO::PARAM_STR);
                            $stmt->bindValue(":tw_text", $value, PDO::PARAM_STR);
                            $stmt->execute();
                        }
                    }
                }
                $this->pdo = null;
                return true;
            } catch (\Throwable $th) {
                //throw $th;
                return false;
            }
        }
    }
    function tweets_load(string $id = "")
    {
        if (!$id) return false;
        try {
            //code...
            $value = null;
            if ($this->db_connection()) {
                $stmt = $this->pdo->prepare("select * from tweets where user = :user order by times,tw_id asc;");
                $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                $res = $stmt->execute();
                $value = $res ? $stmt->fetchAll() : false;
                $this->pdo = null;
            }
            return $value;            
        } catch (\Throwable $th) {
            //throw $th;
            return false;
        }
    }
    function tweets_update(int $key = 0, int $timeonoff = 0, mixed $times = null, string $id = "",mixed $tw_text="")
    {
        try {
            //code...
            if(!preg_replace("/[ | ]{0,}/","",$tw_text))return false;
            if ($this->db_connection()) {
                $stmt = $this->pdo->prepare("update tweets set tw_text = :tw_text where tw_id = :tw_id and user = :user and times = :times");
                $stmt->bindValue(":tw_id", $key, PDO::PARAM_INT);
                $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                $stmt->bindValue(":times", $times, PDO::PARAM_STR);
                $stmt->bindValue(":tw_text", $tw_text, PDO::PARAM_STR);
                $stmt->execute();
                $this->pdo = null;
            }
        } catch (\Throwable $th) {
            //throw $th;
            return false;
        }
        return true;

    }

    function tweets_delete(int $key = 0, int $timeonoff = 0, mixed $times = null, string $id = "")
    {
        try {
            //code...
            if ($this->db_connection()) {
                $stmt = $this->pdo->prepare("delete from tweets where tw_id = :tw_id and user = :user and times = :times");
                $stmt->bindValue(":tw_id", $key, PDO::PARAM_INT);
                $stmt->bindValue(":user", $id, PDO::PARAM_STR);
                $stmt->bindValue(":times", $times, PDO::PARAM_STR);
                $stmt->execute();
                $this->pdo = null;
            }
        } catch (\Throwable $th) {
            //throw $th;
            return false;
        }
        return true;
    }

    function bat_tweets(mixed $value = null)
    {
        if (!$value) return false;
        $obj = (object)[];
        $t = "";
        foreach ($value as $key => $val) {
            if ($this->timecheck(1, $val["times"])) {
                $obj = ($val["times"]<>$t)? ($this->connection->post("tweets", ["text" => $val["tw_text"]], true)
                ) : ($this->connection->post("tweets", ["reply" => ["in_reply_to_tweet_id" => $obj->data->id], "text" => $val["tw_text"]], true)
                );
                $this->tweets_delete($val["tw_id"], 1, $val["times"], $val["user"]);
                $t = $val["times"];
            } else {
              //  var_dump($val);
              //  break;
            }
        }
    }
}

if ($argv[0]) {
    $tw = new tw();
    $value = $tw->tweets_load(xss_d($argv[1]));
    $tw->bat_tweets($value);
}
function xss_d($val = false)
{
    if (is_array($val)) {
        foreach ($val as $key => $value) {
            $val[$key]  = strip_tags($value);
            $val[$key]  = htmlspecialchars($val[$key]);
        }
    } else {
        $val  = strip_tags($val);
        $val  = htmlspecialchars($val);
    }
    return $val;
}

追記:予約編集機能なども付けました🙄。

GithubとQittaのリンクはこちらです。
Github:https://github.com/taoka-toshiaki/tweets-system-box1
Qitta:https://qiita.com/taoka-toshiaki/items/5ef12b60b267742bf584

タグ

2, , 39, Asia, Code, crontab, date, default, github, ini, lt, php, qiita, Se, set, Sqlite, timezone, Tokyo, TwitterAPI, UP, コード, これ, システム, スクロール, スケジュール, ソース, ツイート, ところ, バージョン, パラメーター, ファイル, 一部, , 予定, 予約, 事項, , 使用, 偏頭痛, , 先日, 変更等, 大変, 投稿, 掲載, 数珠繋ぎ, 更新, 機能, 機能等, 此処, 注意, 管理, 編集, 記事, 近日, 追加, ,

WPのapply_filtersとadd_filterの説明が難解に書いているサイトが多い事に🤬。 #php #wordpress

2022.09.28

Logging

おはようございます、今月もそろそろ終わります🤔。

さて、来月から毎月一回しか投稿しなかったブログサイトを不定期更新に変更します。指針の変更にあたってブログデザインもデフォルトのテンプレートから無料のcocoonというテンプレートに変えました。

今までYOUTUBE動画URLを記載しているだけの投稿だったので、アイキャッチー画像等は無い状態でした。その為、テンプレートを変えるとノーイメージという画像が表示されるという事象が発生。これをプラグイン側で解決したかったのですが、独自の関数を多く使用しておりプラグイン側だけでは無理だということで、独自のアイキャッチー画像を処理しているコアの部分にapply_filtersを差し込み、プラグイン側でadd_filterで処理するという流れの対応を行いました。

apply_filtersというのはテンプレート側(他のプラグインでも可能)の関数の中に目印(付箋)を付けることが出来る機能(関数)です。
add_filterは目印(付箋)の部分の処理が走った時に、自分が作った処理を割り込ませることが出来る機能(関数)です。

※まずはカッコの中は読まずに理解してください😌。

巷では、これをややこしい例えで解説している所が多いのですが、それだけの話しです。今回、image-funcs.phpファイル(cocoon)の関数get_original_image_tagにapply_filtersを挿入し独自プラグインから呼び出して、ノーイメージの時にYOUTUBEのサムネイル画像を表示させるという事を行っていました。前、次ページのサムネイル画像は現在のページのサムネ画像が表示されるというバグはあるものの、ちゃんと跡のサムネ画像は変わっています。

サンプルコードを掲載します。ご参考程度に😌。

<?php
//オリジナルサムネイルタグの取得
if (!function_exists('get_original_image_tag')) :
  function get_original_image_tag($image_url, $width, $height, $class, $alt = null)
  {
    $html = '<img src="' . esc_url($image_url) . '" alt="' . esc_attr($alt) . '" class="' . esc_attr($class) . '" width="' . esc_attr($width) . '" height="' . esc_attr($height) . '" />';
    $html = convert_all_lazy_load_tag($html);
    $html = apply_filters("youtubeimage",$html);
    return $html;
  }
endif;
<?php
/*
Plugin Name: youtube image
Description: youtube image chg
Version: 1.0
*/
if (!defined('ABSPATH')) exit;
function youtubeimage_chg($imgurl){
    $url = null;
    if(preg_match("/(https:\/\/www\.youtube\.com\/watch\?v=[\-|_|a-zA-Z|0-9]{1,})/",get_the_content(),$matches)){
        $url = "https://img.youtube.com/vi/".preg_replace("/(https:\/\/www\.youtube\.com\/watch\?v=)/","",$matches[0])."/hqdefault.jpg";
        $url = preg_replace("/(src=\"https:\/\/.*no\-image\-[0-9]{2,3}\.png\")/","src=\"".$url."\"",$imgurl);
     }
     return $url?$url:$imgurl;
}

add_filter("youtubeimage","youtubeimage_chg");

余談:この対応はテンプレートが更新(アップデート)際にファイルが上書きされる可能性があります。その際にページが見えなくなるという問題を秘めています🙇。

タグ

Add, apply, cocoon, filter, filters, php, url, WordPress, wp, youtube, あい, イメージ, キャッチー, コア, こと, これ, サイト, デザイン, デフォルト, テンプレート, ノー, プラグイン, ブログ, , 不定期, , 事象, 今月, 使用, 処理, 動画, 変更, 多く, 対応, 投稿, 指針, 更新, 来月, 毎月, , 無料, 状態, 画像, 発生, 表示, 解決, 記載, 説明, 部分, 関数, 難解,

Sqliteで作った簡易掲示板のコードを配布致します。#php #code

2022.09.20

Logging

おはようございます。台風は過ぎ去りましたがせっかくの三連休が残念です💦。

今日は先日、Sqliteを使用して簡易掲示板を作ってみましたのでコードを配布致します、尚、PHP8の環境下で動作させています(PHP7系でも動作すると思います)。

Sqliteってnow()関数がなかったりだとか、Deleteする時に、noカラムを昇順しlimitを使用して削除出来ないだとか、いろいろとMysqlとは違う所があり、面倒だなと思いながらコードを書きました、尚、SqliteはWebサーバーの階層に置かないように、置いても良いですが・・・。そのままの状態だと誰でもダウンロードが可能になってしまいますのでご注意ください。自分は地下に眠らしています😅。

一応、二重投稿防止の為に20秒経過しないと再投稿出来ないようにしています😌。トライしていない事は禁止ワード等がありません🤔。つけようと思ったのですがまぁ良いかなと、、、。

動作している環境のリンクはこちら。

https://reborn9.sakura.ne.jp/

軸となるPHPのソースコードを2つ貼っときますね。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="Description" content="Enter your description here" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <link rel="stylesheet" href="assets/css/style.css?<?= time() ?>">
    <title>掲示板</title>
</head>

<body class="p-3 text-white">
    <div class="p-4 shadow rounded" style="background-color:#d6dbdf;">
        <div class="container mt-5">
            <div class="row">
            <div class="col-12 text-center">
                <h1 class="shadow" style="color:#195a57;">掲示板::version 2.5</h1>
            </div>
                <div class="col-12">
                    <div class="input-group shadow rounded">
                        <div class="input-group-append">
                            <span class="input-group-text bg-dark text-white" id="my-addon">ニックネーム</span>
                        </div>
                        <input class="form-control" type="text" name="name" placeholder="ニックネームを入力" aria-describedby="my-addon">
                    </div>
                    <div class="form-group shadow rounded">
                        <label for="my-textarea">コメント</label>
                        <textarea id="my-textarea" class="form-control" name="comment" rows="7"></textarea>
                    </div>
                    <button id="btn" class="mt-2 btn btn-info text-white shadow rounded" type="button">投稿する</button>
                </div>
            </div>
        </div>
        <div class="container mt-5">
            <div class="row">
                <div id="view" class="col-12"></div>
            </div>
        </div>
    </div>
    <footer>
        <a href="/">TOP</a> :: © Reborn9.sakura.ne.jp <?=date("Y")?>
    </footer>
    <input type="hidden" name="csrf_token" value="<?= $csrf_token ?>">
    <script src="https://code.jquery.com/jquery-3.2.1.min.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.9.2/umd/popper.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/js/bootstrap.min.js"></script>
    <script src="assets/js/main.js?<?= time() ?>"></script>
</body>

</html>
<?php
class db
{
    var $pdo = null;
    function __construct()
    {
        try {
            $this->pdo = new PDO("sqlite:../../bbs.sqlite3");
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);        //code...
        } catch (\Throwable $th) {
            //throw $th;
            print $th->getMessage();
        }
    }
    function select_limit()
    {
        if($this->pdo){
            $stmt = $this->pdo->prepare('select * from bbs order by no desc limit 0,5');
            $stmt->execute();
            $result = $stmt->fetchAll();
            $stmt = null;
            $this->pdo = null;
            return new view($result);
        }
    }
    function insert($name,$comment,$sns_cnt=0)
    {

        try {
            $stmt = $this->pdo->prepare('INSERT INTO bbs (`time`,`name`,`comment`,sns_cnt)values(strftime(\'%Y年%m月%d日 %H時%M分%S秒\',CURRENT_TIMESTAMP, \'localtime\'),:name,:comment,:sns_cnt)');
            $stmt->bindParam(':name', $name, PDO::PARAM_STR);
            $stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
            $stmt->bindParam(':sns_cnt', $sns_cnt, PDO::PARAM_INT);
            $stmt->execute();
            $stmt = $this->pdo->prepare('DELETE FROM bbs WHERE bbs.no = (SELECT no from bbs ORDER BY no ASC LIMIT 1);');
            $stmt->execute();
            $stmt = null;
            $this->pdo = null;
            return true;
        } catch (\Throwable $th) {
            print $th->getMessage();
            return false;
        }
    }
}

class view{
    var $item = null;
    function __construct($item)
    {
        $this->item = $item;        
    }
    function view_item($item="")
    {
        try {
            $item = $item?$item:$this->item;
            ob_start();
            ?>
            
            <?php
            foreach($item as $key=>$value){
                ?>
                <div class="mt-2 row txtbox shadow rounded">
                <div class="col-3 name_<?=$value["no"]?> rounded-start fs-6">
                    ニックネーム::<?=$value["name"]?>さん
                </div>
                <div class="col-9 time_<?=$value["no"]?> fs-6">
                    投稿日時::<?=$value["time"]?>
                </div>
                <div class="col-12 comment_<?=$value["no"]?>">
                    <?= nl2br($value["comment"])?>
                </div>
                <div class="col-12 sns_cnt_<?=$value["no"]?>">
                    <!-- <?=$value["sns_cnt"]?> -->
                </div>
                </div>
                <?php
            }        
            ?>
                
            <?php
            $ret["view"]= ob_get_clean();
            $ret["msg"]= "done";
    
        } catch (\Throwable $th) {
            //throw $th;
            $ret["msg"] = "error";
        }
        return $ret;
    }
}

session_start();
$ret = null;
$mode =  xss_defence($_POST["mode"]);
// $time =  ;
$name =  xss_defence($_POST["name"]);
$comment =  xss_defence($_POST["comment"]);
$sns_cnt =  (int)xss_defence($_POST["sns_cnt"]);
if (isset($_POST["csrf_token"]) 
 && $_POST["csrf_token"] === $_SESSION['csrf_token'] && (function($t){
    return time() - $t > 20?true:false;
 })($_SESSION["save"])) {
    if($mode==="save"){
        $name = !preg_replace("/[ | ]/","",$name)?"匿名":$name;
        $comment = !preg_replace("/[ | ]/","",$comment)?"":$comment;
        if($comment){
            $db = new db();
            $db->insert($name,$comment);
            $_SESSION["save"] = time();
        }
    }
    $db = null;
    $db = new db();
    $ret = $db->select_limit()->view_item();
    print  json_encode($ret);
}
function xss_defence($value){
    if(is_array($value)){
        foreach($value as $key=>$val){
            $value["$key"] = strip_tags($val);
            $value["$key"] = htmlspecialchars($value["$key"],ENT_QUOTES);
        }

    }else{
        $value = strip_tags($value);
        $value = htmlspecialchars($value);
    }
    return $value;
}

配布コードはこちらです。

タグ

20, 7, 8, Code, Delete, LIMIT, MYSQL, no, Now, php, Sqlite, web, いろいろ, カラム, コード, ご注意, サーバー, せっかく, そのまま, ダウンロード, トライ, ワード, 三連, , , 今日, , 使用, 先日, 削除, 動作, 可能, 台風, 地下, , 投稿, 掲示, 昇順, , 残念, , 状態, 環境, 禁止, 簡易, 経過, 自分, , , 配布, 関数, 防止, 階層, 面倒,

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

2022.09.17

Logging

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

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

予約ー時刻表DEMO

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

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

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

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

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

タグ

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

WEBマーケティング?SEOの話。凄いコンサルの人が教えないと✕○になるよ。

2022.08.25

Logging

こんばんわ。これを投稿するときは寝ていると思います👨🏼‍💻。

昔、某WEB会社に勤めていた時の話を織り交ぜながら、そして自分の教訓も織り交ぜて記載します。当時、自分は主にECシステムの導入から機能改善や保守などのシステムを担当していました。そんな中で自分とは別の担当者がWEBコンサルを担当していたのですが、この当時からコンサルという物がいかに胡散臭いのかと思いながら見ていたのです😶。{中にはそうではない人もいますが🙄}

Summer Sky Time Lapse | RX100 VI and a6300
綺麗な動画を挿絵として挟みつつ。

お客様にはこうすれば良いですよ等とアドバイスをする訳ですが、アドバイスする側が実際ECサイトを運営している訳でもなく、パフォーマンスのあるサイトを運用している訳でもないのにお客様にアドバイスをしているのを見て、何だかコレは自分が昔のある知人にアドバイスしていた光景に似ているなと感じました。

本当に凄いコンサルに頼まないと詐欺師にお金を渡しているのと同じだし、購買やアクセス数を上げるなんて殆ど再現性がないものです🤔。今では色々な人がコンサルをしているのを見ると何だか胡散臭く感じるのです。

よくよく考えてください。本当に儲けていたらコンサルするより、そのシステムを無数に作り運用しているはずです😌。そして何よりGさんの検索システムは人工知能技術を使用して動いています。その学習した中身はブラックボックス(3D可視化は出来るようになっています)で一般人は見えることさえ出来ない物です、それなのにこうしたら良いとアドバイスするのは陳腐な話を聞いているのと同じです。

【注意】これが投資詐欺の仕組みです【テスタ/切り抜き】
色々な所に詐欺はあります。

また、ECサイトの運営でそこそこの収益化があるサイトはコンサルに頼らずにSNSなどを使用し試行錯誤しながら運営していく方が余程良いと思います。

ココまでで少しなんちゃってコンサルを見抜くアドバイスをします。

  • コンサル会社の運営しているアクセス数を教えてもらう。
  • コンサル会社のSNSアカウント数チェック(お金でユーザーを買っている場合があるので注意)。
  • SNSアカウントがないコンサル会社は論外。
  • アドバイスを実行しても然程変わらない場合。
  • コンサルが無料からはじまる場合。

タグ

EC, SEO, web, アドバイス, お客様, お金, これ, コレ, コンサル, サイト, システム, とき, パフォーマンス, マーケティング, , , 会社, 保守, , 光景, , 動画, 実際, 導入, 当時, 投稿, 担当, 担当者, 挿絵, 改善, 教訓, , , 本当, , 機能, , 知人, 綺麗, 自分, 記載, , 詐欺, , 運営, 運用,

一部のサービスのアクセス数が極端に増えたことで思うこと。

2022.08.16

Logging

おはようございます。今日は3時に起床してみました。たぶん二度寝することになりそうですが🙄。

さて、一部のサービスでアクセス数が極端に増えてたみたいです、昨日の話。基本的に自分は作るまでが楽しくて作ったものは自分では使用しません。バージョンアップやテスト投稿などはしますが、それ以外の書き込みなどは全くです。

極端にアクセス数が増えたりするというのは、大体、シェアや口コミからの流れが多いことがあります。

自分にとってはアクセス数よりも収益に繋がったのかや皆が楽しく使っているのかなどの方が重要です。今、あるサービスでは匿名での投稿が殆どです、投稿内容の質もイマイチです(似たような投稿ばかり)。このまま匿名投稿を継続させるのか、Twitterのアカウントなどソーシャルなアカウントと結び付けないと使えないようにするか考えています。

アクセス解析ツールで分かることは年代、男女の比率、何処からのアクセスなのかなどは分かります。そういう傾向を見ると何だか偏っている、そして何より自分の思惑とはかなり違った方向に行っている気がします。コレばかりは仕方がない事なのかも知れませんが悩みどころですね。

トイウコトデ、検討中です。

タグ

, Twitter, アカウント, アクセス, アップ, いまいち, こと, このまま, サービス, シェア, ソーシャル, それ, ツール, テスト, バージョン, もの, 一部, , , 今日, 何処, 使用, 内容, 匿名, 収益, 口コミ, 大体, 年代, 投稿, , 昨日, 極端, 殆ど, 比率, 男女, , 継続, 自分, 解析, , , 起床, 重要,

ブログを書いていなかったので、今頃、日誌を書きます。

2022.08.11

Logging

※この記事は2022/08/12に書いた記事ですが投稿日は昨日の日付になっています。

こんにちは、昨日ブログを書いていなかったので埋め合わせの記事を今、書いています。

昨日はよさこい祭りの最終日でしたね。その頃、自分はLaravelで開発をしていました。昼からは体調不良だったので、仮眠を取ってたりして何とか夕方頃から復活して、続きのコードを書いたりしていました。全然、今日までブログを書いていたつもりになっていていました。

まだまだ暑い日が続きますが、熱中症やコロナには気をつけてお過ごしください。

あとこの頃、TikTokとか言うもののアカウントを作りました、一応開設して動画を投稿したりしています。YOUTUBEのショートに上げた内容を今後、TikTokにもUPするつもりでいます。あと、YOUTUBEも実名アカウントも併用しつつ今まで使っていたアカウントもたまに使用しながら活動していきます。

トイウコトデ、近況報告でした🙇。

タグ

08, 12, 2022, Laravel, TikTok, UP, youtube, アカウント, コード, コロナ, ショート, たま, つもり, , ブログ, よさこい祭り, 不良, , 今後, 今日, 今頃, 仮眠, 体調, 併用, 使用, 内容, 動画, 夕方, 実名, 復活, 投稿, , 日付, 日誌, 昨日, , 最終日, , 活動, 熱中症, 自分, 記事, 開発, 開設, ,

Laravelで再構築した2bbs-video.comをヨロシク😌

2022.08.10

Logging

こんにちは、よさこいをしている踊り子さん達へ、熱中症にはお気をつけてくださいませ。

本日はあまり使用されていなかった、2bbs-video.comをLaravelで再構築したお話を記載します。2bbs-video.comはYOUTUBE動画を共有するのに特化したサイトになります。当然、YOUTUBEのアドレスのない投稿はできません。今のところ動画の投稿内容は管理人が独断と偏見で管理します、その為、投稿していた内容が削除されるという事もあります。

2bbs-video.comのサイトキャッチャー

サイトをLaravelで再構築していて、ページネーションが半端ないぐらい楽に生成できたのは凄く便利だなって感じましたが、逆にベタで構築できる技術も必要じゃないかなって思います。

そしてLaravelにはパッケージが豊富にあるのだけど、正直な所、どれが良いパッケージ(有名所)なのか分からないので調べる必要があるなって感じました。それまでは自分で作るしか無いかもしれない、そういう所などの経験値を積まないとLaravelゴリゴリ使えますとは言えないなと。ただ、大体の勘所は掴めましたね。あとは習うより慣れろ感覚でいろいろと制作していきます😌。

タグ

2, bbs-video, com, Laravel, youtube, アドレス, お気, お話, キャッチャー, サイト, ところ, どれ, ネーション, パッケージ, ページ, ベタ, よさこい, , , 使用, 便利, 偏見, 共有, 内容, 削除, 動画, 半端, 必要, , 技術, 投稿, 有名, 本日, 構築, 正直, , 熱中症, 特化, 独断, 生成, 管理, 管理人, 記載, 調, 豊富, 踊り子, ,

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

2022.07.15

Logging

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

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

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

https://www.youtube.com/watch?v=vNWDaAntLpU

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

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

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

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

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

タグ

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

円安って海外圏のアファリエイトとかしている人には!!

2022.07.13

Logging

おはようございます。来週は全体的に雨模様らしいのですが晴れてたりするのでしょうか?(予約投稿です)

さて、今日のお題「円安って海外圏のアファリエイトとかしている人には!!」ですが、円安はドル払いしてくれるので、とてもウハウハですね、多分、YOUTUBERさんとか今、結構儲かっている人が多いと思います、羨ましい限りです。自分も月にサーバー代の収益が入っていきます。

有り難いことです。ただ書いているだけでお金を生み出しているのは凄いことだなって思います。好きで書いていることがお金に変換できるって素晴らしいと思いますし、ブログなんて誰でも出来ますし、アファリエイトの広告も審査に受かれば掲載することも可能です。

広告審査はある程度、アクセス数と記事の信頼性が必要になると思います、自分も再審査を何度か受けた事があります。収益は高収入まではまだまだです。もし高校生や小学生だったら毎月のお小遣い代を自分で稼ぐ事を自分はしていたと思います、書くことにより自分の知識も増えたりして良いじゃないかと思いますね。但し、未成年の場合、アフェリエイトの規約で駄目な場合もあるかもなので、そこは注意してください。

ともあれ無料から利益を得るには何か創作することが一番の近道だと思います、尚、いろいろと掛け合わすことでココだけしか読めない記事になり、其れが大衆に受けが良かった場合、それだけで生活できると思っても良いです。

タグ

YOUTUBER, アクセス, アファリエイト, お小遣い, お金, こと, サーバー, ドル, ブログ, 予約, , , , 今日, 何度か, 信頼性, 円安, 収入, 収益, 可能, 変換, 審査, 小学生, 広告, 必要, , 投稿, 掲載, , 来週, 毎月, 海外, 自分, 記事, , 限り, 雨模様, , 高校生,

先日のau通信障害。今も続いていたら悲惨だな。

2022.07.05

Logging

おはようございます。通信障害は改善されたでしょうか。

復旧されていない場合もこのまま投稿タイトルで、記載していきます。因みに通信障害一日目の夜に夜な夜なデスクトップに向かって一週間分の予約投稿記事を書いていたりします。この記事は火曜日に投稿される予定です。

さて、先日のau通信障害ですが一応、不便なく電子決済とかお昼は出来たので助かりましたが夕方、仕事帰りに試しに機内モードをOFFONしてみたところ、繋がらない状態になりました。これでやっと不便だなって感じましたが、そもそも今日は土曜日出社だったので直行帰宅。

因みにこういう時の為に、オフラインデータ等を自分は保持しているので其処ら辺は大丈夫でしたが、やはり電子決済出来ないのは不便。今まで何時もお金を入れていない状態でしたので、これで何かあると大変だなってヒシヒシと感じました。ある一定の金額は財布にも入れておくべきですね。

タグ

au, OFFON, オフライン, お昼, お金, このまま, これ, タイトル, データ, デスクトップ, ところ, モード, , 一定, 不便, 予定, 予約, , 今日, 仕事, 保持, 先日, 其処ら, 出社, 土曜日, 場合, 夕方, , 大変, 帰宅, 復旧, 悲惨, 投稿, 改善, , 機内, 決済, 火曜日, , 状態, 直行, 自分, 記事, 記載, 財布, , 通信, 金額, 障害, 電子,

映画、ドリームプランを観た感想を今頃書いてみた。

2022.06.27

Logging

おはようございます。最高の瞬間に悪魔は囁く。その誘いに負けてはならない。

映画、ドリームプランを映画館で観てきたのですが感想を書いていなかったので今頃書きます。因みに、今週は映画ネタ多めにしています(予約投稿です)。

映画『ドリームプラン』日本版予告 2022年2月23日(水・祝)公開

この映画、実話ベースの映画ですが、かなり人生を短縮して一つのストーリーにしているためか、最初の父が掲げたドリームプランが何たるかは、知っていて当たり前のようなストーリー作りになっています。ビーナス&セリーナ・ウィリアムズ姉妹の父、この父を受け入れる人ならこのストーリーを受け入れると思いますが、父のキャラが強くて自分は受け入れなかったです。

ちょっと感動するとかいう所まではいかなった映画ですが、観る価値はあると思います。

タグ

ウィリアムズ, かなり, キャラ, ストーリー, セリーナ, ため, ドリーム, ネタ, ビーナス, プラン, ベース, 一つ, 予約, , 人生, 今週, 今頃, 価値, 多め, 姉妹, 実話, 当たり前, 悪魔, 感動, 感想, , 投稿, 映画, 映画館, 最初, 最高, , 瞬間, 短縮, 自分, 誘い,

物体認識ではラズパイが必ず必要でもないとふと思った。

2022.06.24

Logging

おはようございます。記事の投稿の時間帯から変えようか悩んでいます。

さて、今日のお題は「物体認識ではラズパイが必ず必要でもないとふと思った。」です。Iot(Internet of Things)で脚光を浴びたのが小さなパソコンとも言われるラズベリーパイです。これを使用して温度計や湿度、気圧などを測ったりそれを記憶出来たりします。ラズパイにカメラを接続し機械学習させて物体認識なども可能です。

ただ、物体認識に言えばお使いのWindowsやMacの入ったパソコンでもそういや出来てしまうなと思ったので、それを記事にしました。物体認識で重要なのはやはり学習なのですが世の中にはオープンソースで機械学習をある程度してくれているモデルが出回っています。なので、そちらをベースに再学習させる事により学習が可能かと思います。

物体認識するためには、WEBカメラが必要ですし、機械学習が出来る環境構築も必要になります。例えばTensorFlow(テンソルフロー)が動作出来る環境だとか、、、因みに古いパソコンでもTensorFlow(テンソルフロー)のバージョンを変えれば動きます。githubのmasterを使用せず古いバージョンを使いさえすれば。

タグ

Internet, IoT, Mac, of, te, Things, web, Windows, オープン, お使い, カメラ, これ, ソース, そちら, それ, ため, はい, パソコン, ベース, モデル, ラズ, ラズベリー, , , , 今日, 使用, 可能, 学習, , 必要, 投稿, 接続, 時間, 構築, 機械, 気圧, 温度計, 湿度, 物体, 環境, 脚光, 記事, 記憶, 認識, 重要, ,

Gさんのスマートグラスはスマホの次の覇者になるのかなぁ🤔

2022.05.20

Logging

おはようございます。これが投稿された頃には梅雨になっているかもしれません。

Gさんのスマートグラスはスマホの次の覇者になるのかなぁ🤔、下記の動画を見てください。

Breaking down language barriers with augmented reality | Google

これは凄いなって思います。それぞれ中国語と英語を喋っているのにコミュニケーションが取れている。他にも出来ることが増えていくと思います、特に自分が期待しているのは、誘導です。ここで言う誘導とは仕事の効率的にする誘導や初めての街を歩く時に目的地までの誘導などに期待しています。

今でもGさんはグーグルマップでライブ機能(スマホカメラ使用)すれば出来るのですが使用している人を見たことがありません。理由は道に迷っているという事がわかるからだと思いますが、スマートグラスを使用して同じ事ができればバレずにグーグルマップが誘導してくれると思います。

【#GoogleIO2022】スマホを時代遅れにしちゃうスマートグラス、ついに!!

最終的にはスマートグラスだけで完結することが出来るようになると思いますが、最初はBluetoothでスマホからデーターを転送し表示させる機能になると自分は思っていますが、Gさんはいきなりスマートグラスで全てを完結したものを提供してくれるかもしれません。

いやースマートグラスにはかなり夢がありますね!!

タグ

com, ExJ-sISIJrY, https, watch, www, youtube, カメラ, グーグル, クラス, ここ, こと, コミュニケーション, これ, スマート, スマホ, それぞれ, バレ, マップ, ライブ, 下記, 中国語, , , , 仕事, , 使用, 初めて, 動画, 投稿, , 期待, 梅雨, 機能, , 理由, 目的, 自分, 英語, , 覇者, 誘導, , ,

日帰りで5月15日大阪行くのだが何かある。何もない〆

2022.05.10

Logging

おっおっおはようございます。

今日のお題は「日帰りで5月15日大阪行くのだが何かある。何もない〆」です。5月15日の朝8時台のANAで大阪に向かいます。そしてその日の夕方には帰ってきます😌。ある意味弾丸ツアーみたいな感じですが、今のところ庵野秀明展を見に行くことだけしか予定ない状態です。見を終わったあとは京都にでも行こうかなとか思っていたりしますが、どこに行くのかなど全然予定ないし。がら空き状態です。

「庵野秀明展」15秒CM映像

大阪行き前には予定を決めているとは思うものの、今は不安しかないです。東京は一人で何度か行ったこともあるし、仕事で一年ほど居たので何となく大丈夫なんですけど、大阪、一人旅は今回が初めてです。今からドキドキしてます・・・・。

https://www.youtube.com/watch?v=tfM0-rfdcLI

因みにこの投稿を見て、一緒に行ってくれる方を密かに募集しています(嘘😂)。旅行中は時間差で現在地などをツイートすると思いますので、是非タイムラインを追ってくださいませ…。

追記:昨日の夜、予定を決めました😌。

タグ

-rfdcLI, 0, 15, 5, 8, ANA, com, https, tfM, watch, www, youtube, あと, がら空き, こと, , ツアー, どこ, ところ, , 一人, 一人旅, 不安, 予定, 京都, , 今回, 今日, 仕事, 何度か, 初めて, 募集, , 夕方, 大阪, 庵野秀明, 弾丸, 意味, 投稿, , 旅行, , 日帰り, 時間差, , 東京, 状態, ,

デベロッパーコミュニティサイトがありますよね。

2022.04.06

Logging

おはよう御座います。

デベロッパーコミュニティサイトがありますよね。日本ではQiitaを知らないひとはエンジニアではないとも言われています(嘘ー)😌。それぐらいQiitaはエンジニアとって認知度の高いサイトです。海外ではdev.toを知らずしてエンジニアを語れないと言われているかも知れません。

Amelie Lens – Ultra Music Festival – Miami 2022

Qiitaも昔は初心者向けの投稿が多かったのですが、この頃は中級レベルや上級者に向けた発信をするユーザーも増えてきて、メンターのいない自分にとってはとても大事なサイトになりつつあります。自分の場合、上流工程の経験が全然ないとくに資料作りなどは最低レベルなので、そこのレベルアップしたいなって思っています。設計を作らず開発工程ばかりしていたので、転職活動にはとても不利な気がします。ここらへんを改善できればワンランクアップした仕事につけるかも知れません。転職活動はしていませんが、一般的にはシニアエンジニアは上流工程に就いていることが多いですね。ちなみに35歳引退説は今では何処吹く風だと思っています、現役、シニアプログラマーは結構な割合でいます。

タグ

dev, qiita, To, アップ, エンジニア, くに, ここら, こと, コミュニティ, サイト, シニア, そこ, それぐらい, デベロッパー, ひと, べん, メンター, ユーザー, ランク, レベル, ワン, 上流, 上級者, 不利, 中級, 仕事, 初心者, , 場合, 大事, 工程, 投稿, 改善, 日本, , 最低, , 活動, 海外, 発信, 経験, 自分, 設計, 認知, 資料, 転職, 開発, ,

待つということ。

2022.04.05

Logging

おはよう御座います。朝早いですねって言われるかも知れませんが、これは予約投稿なので今は寝ています、たぶん?😌。

okadada DJ set / Lost Decade 9 20161216

何も言わずに待つということは、結果、自分の場合は理になっている事が多い気がする。言わずに待つということは出来ない人もいるかと思います。出来ることに関しては助言したくなる事もあると思いますが、言わずに待つということが大事になるじゃないかなって思います。

特に仕事で前職ではこうしていましたから、こうしたらどうかなどと提案はしない方が良いと思っています。何故なら今まで会社にはそれぞれ社風もあり独自のルールもあり、蓄積(経験)の中からルールが生み出されてきたわけなので、そのルールを変えるというのは非常にリスクが高いと思っています。

なので、自分で経験しそれが適切な提案なのか思案して、そして時を待つことをオススメします。

何処かのタイミングで自分に発言がまわってきた時にいうべき事なのだと思っています。すべての事柄が時を待つというのは違いますが、時を待つというのは大事なコトなのかなって、この頃、改めて思ったので記事として残しときます。

タグ

おすすめ, こと, これ, すべて, それ, それぞれ, タイミング, リスク, ルール, わけ, , 予約, , 事柄, , , 仕事, 会社, , 何処か, 前職, 助言, 場合, 大事, 思案, 投稿, 提案, , , , , 発言, 社風, 経験, 結果, 自分, 蓄積, , 適切,

🍎Mac studioとipad airとiPhoneとMac book Pro

2022.03.11

Logging

Mac studioとipad airとiPhoneとMac book Proが欲しい今日のこの頃ですが、どれも今の所買い替えません😭。

https://www.youtube.com/watch?v=Cg-XmqgK3jg

一週間ぐらいブログを休んでいましたが、再度ブログを書き始めます。今までいろいろとゴタゴタしていてブログに手を付けられませんでした。これを解消するべく一週間分予約する形で始めます。

昔働いていた時はこのような形でブログを更新していましたが、この頃は毎日、朝更新するという形式でしたが、それは当分の間難しいので予約投稿で更新します。

その為、リアルタイムのネタは扱えないというデメリットもあります。この一週間ほどブログを休んでいた期間にIT記事を読むということやプログラミングも一週間ほどお休みしていました。そういう事を休んでいると何だかIT関係から少し遠ざかったような気にもなりましたが、遠ざかったことによりITの事が好きなものに戻ろうとしている気がします。

https://www.youtube.com/watch?v=MjvfYX82R3s

あの魔女の宅急便の名言は本当だっただなって思います😌。遠ざかると何が好きなことなのか分かるし、自分がどんな道が向いているのかわかります。自分はプログラミングをするという事に関しては向いていると思いますが、コミュニケーションはあまり得意ではないとか、自分が出来ること出来ないことが遠ざかると見えてきます。本当は寝ても覚めてもプログラミングだけして生計を立てたい。

こんな人におすすめな職業は個人アプリやWEBサービスで生計を立てるという事です。ある程度以上の技術が必要になってきますが、頑張ればそれで生活出来ます。唯、そんな人になるにはかなりの積み重ねが必要になるかもしれません。

あぁMacが欲しい😏。

タグ

, air, book, Cg-XmqgK, com, https, iPad, iPhone, IT, JG, Mac, Pro, Studio, watch, www, youtube, いろいろ, お休み, こと, これ, それ, デメリット, どれ, ネタ, ブログ, プログラミング, リアルタイム, , 予約, , , 今日, 再度, 少し, 当分, , 形式, , , 投稿, , , 更新, , 期間, 毎日, , 解消, 記事, , 関係, ,

kotlinで開発したアプリを申請しました。予約投稿なので報告が遅れています。

2021.11.10

Logging

kotlinで開発したアプリを申請しました。予約投稿なので報告が遅れています。このアプリをiosに移植しようと思ったのですが、何やら面倒くさそうなので当分、アンドロイド端末でのアプリ開発をして、その後、Swift言語で開発しようかなと思っていたのが昨日までの自分の想い。今日いろいろと調べていたら、どうもクロスプラットフォーム開発するなら、フェイスブックが開発したReact Nativedeで開発したほうが良さげだと。学習コストはそれ程高くないような気がしてます。Expoなら尚更・・・!?

React Native Tutorial – Getting set up with Expo

何ヶ月か前にクロスプラットフォーム開発が出来るFlutterに手を出していたのだけど一つアプリをリリースしてからは勉強していませんでした。今回、久しぶりにアプリを作ろうかと考えて手を動かして、何となく自分がアプリ開発で身につきやすいのは今まで使用した言語の延長線上にあるものかなと思い始めました。なのでReact Nativeで開発していきたいなと今は思っています(浮気性・・・?)。

そして何よりReact Nativeは機械学習の要素も取り入れることが出来たり、カメラや位置情報も取れデーターベースも使えるサンプルもネットに落ちているので何とかなりそうだということ。そして求人情報などにもReactを経験した人は重宝されるみたいなので勉強して損はないかなととも思っています(React Nativeを勉強すれば自ずとReactの勉強にもなるので一石二鳥かなと個人的には思っています)。

※浮気性になった理由はkotlinでアプリ開発していて三項演算子が使えないことを知り、気持ちが萎えた事が一番の理由でkotlin開発よりReact Nativeでアプリ開発しようという気持ちなったのです?。それぐらい三項演算子が使えないのは痛い。バージョンが上がれば使えるようになるかもしれないけれども・・・。

因みに海外ではFlutterの方が人気です、日本もそうなるかは未知数です。

タグ

Expo, flutter, iOS, Kotlin, Nativede, react, swift, アプリ, アンドロイド, いろいろ, クロス, コスト, フェイスブック, プラットフォーム, もの, リリース, 一つ, 久しぶり, 予約, 今回, 今日, 何ヶ月, 使用, , 勉強, 報告, 学習, 尚更, 延長, , , 投稿, 昨日, , 申請, 移植, 端末, 線上, 自分, 言語, 開発,

このサイトの背景色を勝色に変えました。縁起の良い色ということで。

2021.10.31

Logging

今日はブログ投稿お休みの日だけど、報告ということで書いています。このサイトの背景色を勝色に変えました。縁起の良い色ということで、その色にしました?

前々から背景色を黒に近い色に変えようと思っていたのですが、なかなか踏ん切りがつかなくてやっとこさ、本日変えました。これでちょっとアンダーワールドなサイトに見えるかもしれませんが、それはそれで良いです。飽きたらまた白に変えるかもしれませんが今の所、この勝色で置いておこうと思います。

あと、サンプルコードの動画はもうネタ切れなので、これからは自分が作ったコードをサラッと見せるとかDEMOコードをサラッと見せるようにします。

トイウコトデ、今日は10月最後の日曜日でハロウィーンらしいですが高知のひろめ市場に行くこともなく、皆が騒いで終電で帰る頃には自分は夢の中だと思います。まだ仕事も決まらず悔しい思いの中、年を越しそうですね。ちょっと悔しいですが、結果は結果なので坦々と日々頑張るしかないかなと思います。

タグ

10, demo, あと, アンダーワールド, お休み, コード, こと, これ, サイト, サンプル, それ, トイウコトデ, ネタ切れ, ハロウィーン, ひろめ, ブログ, , , 今日, 仕事, 前々, 動画, 勝色, , 報告, , 市場, , , 投稿, , 日曜日, 最後, 本日, , , 終電, 結果, 縁起, 背景色, 自分, , , 高知, ,