🏠️Top Page

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

⏩️メディアライブラリにメディアをコピペ保存出来るプラグイン

おはようございます.メディアライブラリにメディアをコピペ保存出来るプラグインを作りました.メディアライブラリの項目を開きコントロール+V(ペースト)する事でコピーしたメディアをメディアライブラリに保存できるプラグインです.

この頃、ブログのアイキャッチ画像は生成AI画像をクリップボードでコピーして、そのまま記事に貼り付けてメディア保存していたのだけど、それだと記事を書かない時にもそういう対応しないといけないのが手間だったのでプラグインを生成AIと共に作りました.

そのお裾分けのコードになります.

コードをクローンしたい方はプラグインをgithub上に置いてあるのでお使い下さい.

<?php

/**
 * Plugin Name: Clipboard Media Saver Plus
 * Description: クリップボードから画像・音声・動画を貼り付けるだけでメディアライブラリに保存
 * Version: 1.1.0
 * Author: @toshiaki_taoka
 * Author URI: https://x.com/toshiaki_taoka
 */

if (!defined('ABSPATH')) exit;

class Clipboard_Media_Saver_Plus
{

    public function __construct()
    {
        add_action('admin_enqueue_scripts', [$this, 'enqueue']);
        add_action('wp_ajax_clipboard_media_upload', [$this, 'upload']);
    }

    public function enqueue($hook)
    {
        // 念のため二重ガード
        if ($hook !== 'upload.php') {
            return;
        }

        wp_enqueue_script(
            'clipboard-media-saver-plus',
            plugin_dir_url(__FILE__) . 'clipboard-media-saver-plus.js',
            [],
            '1.1.0',
            true
        );

        wp_localize_script('clipboard-media-saver-plus', 'CMSP', [
            'ajax'  => admin_url('admin-ajax.php'),
            'nonce' => wp_create_nonce('clipboard_media_upload')
        ]);
    }

    public function upload()
    {
        check_ajax_referer('clipboard_media_upload', 'nonce');

        if (!current_user_can('upload_files')) {
            wp_send_json_error('権限がありません');
        }

        if (empty($_FILES['file'])) {
            wp_send_json_error('ファイルがありません');
        }

        require_once ABSPATH . 'wp-admin/includes/file.php';
        require_once ABSPATH . 'wp-admin/includes/media.php';
        require_once ABSPATH . 'wp-admin/includes/image.php';

        $file = $_FILES['file'];

        // MIMEと拡張子をWP基準で再判定(超重要)
        $check = wp_check_filetype_and_ext(
            $file['tmp_name'],
            $file['name']
        );

        if (!$check['ext'] || !$check['type']) {
            wp_send_json_error('不正なファイル形式');
        }

        $upload = wp_handle_upload($file, [
            'test_form' => false,
            'mimes'     => get_allowed_mime_types()
        ]);

        if (isset($upload['error'])) {
            wp_send_json_error($upload['error']);
        }

        $attachment = [
            'post_mime_type' => $check['type'],
            'post_title'     => sanitize_file_name(pathinfo($file['name'], PATHINFO_FILENAME)),
            'post_status'    => 'inherit'
        ];

        $attach_id = wp_insert_attachment($attachment, $upload['file']);

        // 画像のみメタ生成
        if (strpos($check['type'], 'image/') === 0) {
            $meta = wp_generate_attachment_metadata($attach_id, $upload['file']);
            wp_update_attachment_metadata($attach_id, $meta);
        }

        wp_send_json_success([
            'id'  => $attach_id,
            'url' => wp_get_attachment_url($attach_id),
            'type' => $check['type']
        ]);
    }
}

new Clipboard_Media_Saver_Plus();
(function () {
  document.addEventListener('paste', function (e) {
    if (!document.body.classList.contains('upload-php')) {
      return;
    }

    const items = e.clipboardData?.items || [];

    for (const item of items) {
      if (item.kind !== 'file') continue;

      const file = item.getAsFile();
      if (!file) continue;

      let ext = '';
      if (file.type.startsWith('image/')) ext = '.png';
      else if (file.type.startsWith('image/')) ext = '.jpg';
      else if (file.type.startsWith('image/')) ext = '.gif';
      else if (file.type.startsWith('image/')) ext = '.webp';
      else if (file.type.startsWith('audio/')) ext = '.mp3';
      else if (file.type.startsWith('video/')) ext = '.mp4';
      else continue;

      const filename = file.name && file.name.includes('.')
        ? file.name
        : `clipboard-${Date.now()}${ext}`;

      const formData = new FormData();
      formData.append('action', 'clipboard_media_upload');
      formData.append('nonce', CMSP.nonce);
      formData.append('file', file, filename);

      fetch(CMSP.ajax, {
        method: 'POST',
        credentials: 'same-origin',
        body: formData
      })
        .then(r => r.json())
        .then(r => {
          if (!r.success) {
            alert(r.data || 'Upload failed');
          } else {
            alert('保存しました.リロードします.');
            console.log('Saved:', r.data.url);
            this.location.reload();
          }
        })
        .catch(err => console.error(err));
    }
  });
})();

明日へ続く

⏩️ロボット元年だと言われている2026年.

おはようございます.ロボット元年だと言われている2026年にボストン・ダイナミクス社が2028年からロボットを量産するとの記事を見て思うことを綴っていきます.恐らくこのロボットの量産は前倒しで進んでいくと思います.

まずは危険や辛い仕事がロボットに置き換わっていくと思います.その後、徐々に軽作業にも浸透していくようになるだろうけど、ロボットを導入するかは人件費と生産性を考慮すると思うので直ぐにブルーカラーの仕事を奪っていくとは思っていませんが、24時間365日休まずに仕事をしてくれるロボットが人件費より安くなれば、その時はブルーカラーの仕事が無くなる事に繋がると思います.

因みにボストン・ダイナミクス社のロボットは車を生産するラインで量産できるらしいです.そのため、部品なども特殊な部品を使っていなくて車を作るかのようにロボットを量産できるみたいです、これは凄いことだと.

量産出来るようになった2028年頃の世界が楽しみですね.SFのような世界観ではないけど、工場などに行けばロボットが働いている姿が後2年後には見れるようになるなんて、なんか凄くないですか???

徐々にロボットや人工知能が仕事を奪っていくと今までの社会システムが機能しなくなると言われていますので、これから先は社会の仕組みを創ることが大事になって来ると思います.

ともあれ、楽しみです.

明日へ続く

⏩️音楽とリピートリストを作っている.

おはようございます.音楽をよく聞く人はメンヘラ傾向が強いとか言われている.自分と音楽の出会いは中学生あたりで、その頃から爆音で音楽を聞いています.それがこの40代になっても変わっていなくて爆音で音楽を流しています.

何故、音楽を爆音で聞くのかはその方が現実逃避感があり気分も心地よいからです.ある意味音楽を聞いている時は自分の空間で浸っているときです.

また音楽は自分にとっては無くてはならない存在だったりします.音楽を聞いていると落ち着くので、県外に一人で旅に行くときはイヤホンして行くことが殆どです.

因みに音楽はリピートリストを3つぐらい作っていて、それを自分の気分によって聞くというスタイルです.そして聞き飽きた音楽は保管ジャンルリストへ移行する形を取っています.

皆さんは音楽を聞きますか?また、どんなジャンルの音楽を聞くことが多いですか?一言コメントから教えて下さい!

明日へ続く

⏩️デコボコな能力を持っている気がします.

おはようございます.ある領域は他の人より秀でているかもしれないけど、その他のコミュニケーションスキルは人よりも劣っている気がします.特に自分を表現する力に関しては劣っていると自分は思っています.

この話は先日の緊張と滑舌の話の延長線にある話になるのだけど自分は「コードを書いたり創作したりする以外の能力が他の人達より無い」と自分は思っています.他のことの一番ダメダメだと思っていることは文章ではなく言葉での自分を表現する力です.

これが過度な緊張、例えば面接などになると頭の中が真っ白になり十分に話が組み立てできません.文章を書くのは瞬時に単語が出てくるので全然苦にならずに次の文章が湧き出てくるので、テキストで面接したいと思うぐらい天と地ぐらいの差があります.

緊張さえ克服出来たら、いろいろな事が出来るようになるとも思います.例えば営業職だったりします、緊張してセールスどころではない可能性が高いです.ましてや飛び込み営業なんか出来そうにもないですね.それぐらいド緊張になるのです.

緊張スイッチが入ってしまうとボコボコ感が顕わになります.デコの部分も緊張しているといつもの能力すら出せない時があります.これが改善されるには治療が必要なのかもしれないなと思う時があります.

緊張って結局、自信がないからそういう事になるのだと思います.そういう自尊心というモノが欠落している感じがしていて....でも今更褒めてもらっても難しいように思えるので、やはりプロに診てもらうのが良いのかもしれないなと思っています.

話が長くなるので、ここら辺で締めます.

明日へ続く

⏩️今年の資産目標金額に達成してしまった.

おはようございます.今年の目標にしていた資産金額を10日間で達成してしまいましたのでちょっと困惑しています.収入がないのに資産が増えている状況に本当にお金がお金を呼ぶだなと思って・・・.

このままインフレが進むといずれバブル崩壊になるのでは思いつつも恐らく世界恐慌になったとしてもAIが上手く資産運用してくれるのではないかなと思っています.

AI投資信託だけで資産が膨らんでいるのだから株式運用している人達は富が膨らんでいる人も多くいるのではないかなって思います.因みに自分はいま失業中の身なのでもしお金に困ったらこの資産を現金化して何とか転職先が決まるまで持ち堪えようと思っています.

将来的な資産目標は5000万円です、自分の場合年金がかなり低いので何としても老後まで5000万円まで運用しないとその後の生活がかなり大変なことになるという事だけが確定しています.そんなに貯め無くても何とかなるかもしれないけど、やっぱ不安は付きまといます.

無収入な今の自分がこの金額を達成する確立は40%ぐらいです.その確立を上げる為にはまずは転職先を決めてお給与の8割を運用に放り込まないと恐らく達成できないと思います.

本音を言えばこの金額を5年で達成したいと思っています.

明日へ続く

⏩️ドラゴンクエストVII Reimagined(リイマジンド)ドラクエ7

おはようございます.先日ドラゴンクエストVII Reimagined(リイマジンド)の先行プレイをPS5でプレイしてみました.購入するかは別としてとても完成度の高いゲームだという事は伝わってきます.

因みに自分はドラクエ7をプレイしたのは、小学校以来でその当時は6がスーパーファミコンで出ていたように記憶していますが、それ以降のドラクエをプレイしたことがないです.ドラクエよりファイナルファンタジーに鞍替えしたのがその当時でした.

今回、数十年ぶりにドラクエをプレイした形になります.ミニチュアサイズのキャラで世界観もミニチュア的に作られていて、これは子供がプレイしたら夢中になるだろうなという思いと同時にもしいま少年だったら、間違いなく学校が終わったら速攻いえに帰ってゲームをプレイしていただろうなというのが目に浮かびます.

それぐらい完成度は高いゲームだと思いますが、ドラクエ7をプレイした人達には意見が分かれるようです.

これが初めてプレイするRPGだったら間違いなくRPGの虜になるじゃないかなと先行プレイをプレイしながら思いました.因みに自分はまだファイナルファンタジー7リバースもクリアしていないので、これ以上積みゲーを増やさない為にも購入は控えますが、クリアしたらポチる可能性はあります.

明日へ続く

⏩️緊張と滑舌

おはようございます.先日、緊張と滑舌でズタボロ感のある面接をしてきました.滑舌が悪いのは仕方がないのですが、緊張ぐらいは何とか治したいと思っています.

何故、自分は緊張するのだろうかと思うときがあります.全然緊張しない面接もあるのに何故かドが付くほどの緊張をする時もあります.恐らく自分を良く見せようというバイアスが脳内にかかっているのだろうと思うわけですが、そうでもない時も緊張して「ドーパミンがどばぁー」ってなっている時もあります.

緊張というのは自分にとってあまり嬉しいものではないです.良く芸能人の方が緊張するとか言っているけど、あの緊張は適度な緊張感なのだろうな.緊張を操れる人と緊張に呑み込まれる人ではかなり違うように思います.

緊張して後から思うと何も話できてないなぁって思ったり、滑舌が悪かったなって自暴自棄に落ちたりしてもう40後半なのに何一つそういう所が20代から変わっていないなと思うと...

ただ、救いなのが全く緊張しない時もあるのでそういう時は面接が上手く進みます.トモアレ、緊張しない体質になりたいと.

明日へ続く

⏩️都市と田舎と格差が開く一方.

おはようございます、ハローワークの求人を見ているとブルーカラーの職業は初任給18万だと高い方で17万円が相場な田舎の求人.安い所では14万円という仕事もあり、労働時間が少ないからこの金額なのかも知れないけど、なかなか、生活が大変だなと思うような金額ばかり.

やっぱりインフレになって思うのは格差が開いているということですね.お給与の良い大企業と田舎の中小企業や零細企業との差が年々開いています.若者たちが都会へ就職するという意味も分かる.

分かるけども、やっぱ行く行くのことを考えて地元を選択して欲しいなって思います.コレばかりは仕方がない、このまま高知県も緩やかに沈んでいくのかもしれない.

人口減少が加速すると公共交通がガタガタになっていくので、老いてから自動車を手放すと生きにくいと思います.そうならない為にも人口減少を食い止めないと...でもそれは無理そうなので人口が減少しても生活しやすい”まちづくり”を今行わないと数年後には厳しい現実が待っています.

「風の谷」という希望――残すに値する未来をつくるというタイトルの分厚い本を安宅和人 氏が出したけど、この本の中にはヒントや答えがある気がします.行政に携わっている人には読んで欲しい本ですね、恐らく行政に関わっている人が一番購入した本だとも思います.

明日へ続く

⏩️画像生成AIの使い道はいろいろあるけど🍌.

おはようございます.画像生成AIの使い道はいろいろあるけど、自分が無料版で使ったことを書いていきます.まず自撮りしてそれをジェミナイのナノバナナ(画像生成AI)に白髪にしてや金髪にして等と指示(プロンプト)を出すとものの数十秒で白髪になった姿に写真(画像)を変更してくれます.

染めたらどうなるのかというのは今までだと分からない事だったので、これはとても良いと感じました.因みに髪型の変更を指示してみましたがこちらはイマイチだったです.

あと仕事で使う場合は商品の背景などを画像生成AIで変更する事が多いと思います、仕事ではそれぐらいの活用かもしれないですね.後はアイキャッチ画像などを画像生成AIを使って作るやプレゼン資料作りのイメージ画像を作ってもらう等かもしれません.

ともあれ、画像生成AIはとても良いですね.今までこういう編集作業はかなり時間がかかっていた作業だと思うのですがそれを数十秒で出来るということは驚異的だと感じました.

明日へ続く

⏩️まだ猫も杓子もAI使っていないけど若者世代はもう

おはようございます.まだ猫も杓子もAI使っていないけど若者世代はもうAIを使いこなしていますよね.「御社の会社ではAI導入されていますか」などと面接の時に聞くらしい.いやー分かる自分も聞くと思うからね.

因みに高知県の企業でAIを導入している会社は2割にとどまるらしいので残りの8割の会社はAI導入していないみたいです.もう何かしらAIを導入していないと企業格差が生まれると自分は思っています.

学生さんもそれを良く分かっているのだと思っています.日本の会社は保守的な会社が多く導入は他の国よりも遅いのが現状.そして地方では高齢な方が現役で社長さんを起こっている会社も多くあります.そういうのがAI導入に消極的になるのかもです.ただ高齢の社長さんでもガンガン最新のテクノロジーを貪欲に取り入れる方も中にはいらっしゃるので一概には言えないですが.

トモアレ、今後AI使って若者世代が起業する人が増えてくるのではないかと自分は思っています.最近見たYOUTUBEの動画で非ITの方がAIの力を使ってアプリを作ろうとしていました.上流工程の仕様書作りをAIでほぼ自分が思った通り出来ている模様.こういう動画を見ると生成AI(人工知能)を使用する人としない人では大きな格差が開いているように思います.

明日へ続く