ワードプレスのテーブルwp_postsデータを取ってきてLaravelで表示.

2025.07.15

Logging

おはようございます.ワードプレスのテーブル(wp_posts)データを取ってきて別サイト(Laravel)にて表示してます.別サイトには広告が付かない感じです.因みにデータは自サイトのブログデータを使用していますが随時去年あたりのデータから取得するようにSQLに記述しています.

尚、どうやって取得しているかをお話するとSQLのコネクション変更する設定をコンフィグフォルダのデータベースファイルに記述してモデルにもその事を明記しています.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class Blog extends Model
{
    protected $connection = 'second_db';
    protected $table = 'wp_posts';
}

そしてそれらを呼び出しているだけです、とても簡単なコードで動いています.そんな感じなのでブレイドのコードをシェアします、流石にコントローラーは見せられないけどYoutubeのリンクやXのリンクは出力する前に置き換えていることをヒントとしてお伝えしときますね.

<!doctype html>
<html lang="ja" class="transition-colors duration-300">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
    <meta name="robots" content="noindex,nofollow" />
    <title>blog - [taoka toshiaki]</title>
    <link rel="icon" href="https://taoka-toshiaki.com/images/g4DV7mRe_400x400.jpg?t=1752317617"
        sizes="16x16 24x24 32x32 48x48 64x64">
    <!-- Prism CSS -->
    <link id="prism-theme" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism.css" />
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs@1/plugins/line-numbers/prism-line-numbers.css" />
    <link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.css"
        rel="stylesheet" />
    <style>
        body {
            background-color: #f9fafb;
            color: #1f2937;
            transition: background-color 0.3s, color 0.3s;
            word-wrap: break-word;
            overflow-wrap: break-word;
        }

        .dark body {
            background-color: #242425;
            color: #f9fafb;
        }

        article {
            background-color: #fff;
            transition: background-color 0.3s;
            word-wrap: break-word;
            overflow-wrap: break-word;
        }

        .dark article {
            background-color: #3d3d47;
        }

        time {
            color: #6b7280;
        }

        .dark time {
            color: #9ca3af;
        }

        .prose {
            color: inherit;
            word-wrap: break-word;
            overflow-wrap: break-word;
        }

        pre[class*="language-"] {
            overflow-x: auto;
            padding: 1em;
            border-radius: 0.5rem;
        }

        code[class*="language-"] {
            white-space: pre;
        }

        a,
        a:hover {
            border-bottom: solid 2px #fbf81c;
        }
    </style>
    @include('header_script')
</head>

<body class="transition-colors duration-300">

    <div class="max-w-3xl mx-auto p-6">
        <h1 class="text-2xl font-bold mb-6"><a href="/" class="text-current">🏠️Top Page</a></h1>
        <p class="mb-3 font-bold"><a href="/blog">🖊️</a>おもしろき こともなき世をおもしろく 住みなすものは 心なりけり.</p>
        @if (request()->input('page') == 108)
            <a href="/blog" class="text-[54px]">📖</a>
            <h1 class="text-2xl font-bold text-[108px] mb-6">108🧘️</h1>
        @endif

        <button id="darkModeToggle"
            class="mb-6 px-4 py-2 bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded">
            ダークモード切り替え
        </button>

        <div class="space-y-10">
            @foreach ($items as $item)
                <article class="shadow-md rounded-lg p-6 transition-colors duration-300">
                    <h2 class="text-xl font-semibold mb-2 break-words">⏩️{{ $item->post_title }}</h2>
                    <time class="text-sm block mb-4">{{ $item->post_date }}</time>
                    <div class="prose prose-sm max-w-none break-words">
                        {!! $item->post_content !!}
                    </div>
                </article>
            @endforeach
        </div>

        <div class="mt-10">
            {{ $items->links() }}
        </div>
    </div>
    <!-- トップに戻るボタン -->
    <button id="scrollTopBtn"
        class="fixed bottom-6 right-6 hidden bg-gray-600 text-white px-4 py-2 rounded-full shadow-lg hover:bg-gray-700 transition-opacity">
        ▲ 上へ戻る
    </button>
    <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
    <script src="https://cdn.jsdelivr.net/clipboard.js/1.5.13/clipboard.min.js"></script>
    <!-- Prism.jsのコアファイル -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js"></script>
    <!-- Prism.jsのオートローダ -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
    <!-- Toolbarプラグインのスクリプト -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js"></script>
    <!-- その他のプラグインのスクリプト -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/highlight-keywords/prism-highlight-keywords.min.js"></script>

    <script>
        const toggleBtn = document.getElementById('darkModeToggle');
        const prismTheme = document.getElementById('prism-theme');
        const darkThemeHref = 'https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism-tomorrow.css';
        const lightThemeHref = 'https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism.css';

        if (localStorage.getItem('darkMode') === 'true') {
            document.documentElement.classList.add('dark');
            prismTheme.href = darkThemeHref;
        }

        toggleBtn.addEventListener('click', () => {
            const isDark = document.documentElement.classList.toggle('dark');
            prismTheme.href = isDark ? darkThemeHref : lightThemeHref;
            localStorage.setItem('darkMode', isDark);
        });

        document.addEventListener("DOMContentLoaded", () => {
            document.querySelectorAll('pre[class*="lang-"]').forEach(pre => {
                const match = pre.className.match(/lang-(\w+)/);
                if (match) {
                    const lang = match[1];
                    pre.className = `language-${lang} line-numbers`;
                    const code = pre.querySelector('code');
                    if (code) code.className = `language-${lang}`;
                }
            });
            // トップへ戻るボタンの処理
            const scrollTopBtn = document.getElementById("scrollTopBtn");
            window.addEventListener("scroll", () => {
                scrollTopBtn.classList.toggle("hidden", window.scrollY < 200);
            });

            scrollTopBtn.addEventListener("click", () => {
                window.scrollTo({
                    top: 0,
                    behavior: "smooth"
                });
            });
        });

        //全選択ボタンを作成&クラス名付与
        Prism.plugins.toolbar.registerButton('select-code', function(env) {
            var newButton = document.createElement('button');
            newButton.className = 'code-select-btn';
            newButton.innerHTML = 'コードを選択';

            newButton.addEventListener('click', function() {
                if (document.body.createTextRange) { // ms
                    var range = document.body.createTextRange();
                    range.moveToElementText(env.element);
                    range.select();
                } else if (window.getSelection) { // moz, opera, webkit
                    var selection = window.getSelection();
                    var range = document.createRange();
                    range.selectNodeContents(env.element);
                    selection.removeAllRanges();
                    selection.addRange(range);
                }
            });
            return newButton;
        });

        //使用言語表示ボタンを作成&クラス名付与
        Prism.plugins.toolbar.registerButton('show-lang-btn', function(env) {
            var newButton2 = document.createElement('button');
            newButton2.className = 'show-lang-btn';
            newButton2.innerHTML = env.language;
            return newButton2;
        });

        $(function() {
            //各ボタン要素の親要素にクラス名付与
            $('.toolbar-item .code-select-btn').parents('.toolbar-item').addClass('code-select');
        });
    </script>

</body>

</html>

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

```, ;;⏩, あたり, いん, オート, お伝え, お話, クラス, コード, コア, こと, コネクション, コントローラー, コンフィグフォルダ, サイト, シェア, スクリプト, その他, それら, ダーク, データ, データベース, テーブル, ドップ, ヒント, ファイル, フラグ, ブレイド, プレス, ブログデータ, ボタン, モード, モデル, もの, よう, リンク, ローダ, ワード, 付与, 作成, 使用, 処理, 出力, 切り替え, 去年, 取得, 変更, 広告, 感じ, 明日, 明記, 流石, 簡単, 表示, 要素, 言語, 記述, 設定, 選択, 随時,

Llama-3-ELYZA-JP-8Bとは何か?モデルという奴です.

2025.07.03

Logging

おはようございます.Llama-3-ELYZA-JP-8Bは、MetaのLlama 3(8Bパラメータ)をベースに、日本語の指示応答能力を強化するためELYZAがファインチューニングした日本語特化型の大規模言語モデルです。

ではモデルとは何か?モデルとは、データからパターンやルールを学習し、新しい入力に対して予測や生成を行うための数学的・計算的な仕組みやプログラムのことです。

Llama-3-elyza-jp-8bを走らせてみた🤖

今回、自分が試したのはLlama-3-ELYZA-JP-8Bの一番軽量ものを試してみました.軽量すぎてたまに回答が無限ループに陥ることがあります.これはカーソル(cursor)やディビン系でも無限ループに陥ることがあるらしいです.俗に言うトークン食いですね.

トークン食いが一度発生すると次のプロンプトにも影響が出る場合があるので、一度離脱して再度プロンプトを投げることで回避出来るようです.

因みにモデルをCPUで動かしたい場合は、llama.cpp で動かすようにするのだけど、既存のモデルをggufに一度、変換してあげる必要があります.そうすることでグラボが貧弱でも動きます.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

カーソル, グラボ, クン, こと, これ, ため, データ, ディビン, トー, パターン, パラメータ, ファインチューニング, プログラム, プロンプト, ベース, モデル, もの, よう, ループ, ルール, 一番, 予測, 今回, 仕組み, 入力, 回答, 回避, 場合, 変換, 学習, 強化, 影響, 必要, 応答, 指示, 数学, 既存, 日本語, 明日, 無限, 生成, 発生, 能力, 自分, 規模, 言語, 計算, 貧弱, 軽量, 離脱, 食い,

AIで今後どうなるだろうな.自然言語処理で指示出し出来てきた今日.

2025.07.01

Logging

おはようございます.何だか梅雨明けした休日にGeminiCliでコードを生成しています.仕事ではまだ自分はChatに分からない事を質問するぐらいの事しかしていないのだけども絶対にCliなどで作業すると時間短縮になるのは間違いです(仕事でも導入しているのですが自分は使用していない).

休日に作業するときはコパイロットとGeminiを使用して開発しているのです、どちらも無料版なのだけど自分は無料板で事足りています.

因みにコパイロットとGemini、どちらが優秀かという問いに関しては今のところコパイロットの方が優秀なソースコードを書いてくれるというイメージが強いです.有料版ではカーソルやデビィンなどが優秀らしいけども余裕資金があんま無いので試していない.

お金に余裕があればいろいろと試したいことはあります.例えばグラボ(グラフィックボード)を取り替えて機械学習の学習をローカルで試してみたいなどがあります.

この頃思うのだけど、何かとこの業界は移り変わりが激しいのと新しい技術を学ぶときにたまに技術投資が必要になります.昔はオープンソース的な感じだったけどこのIT業界ビックテックはお金を取り出して来ています.

その中でMETA社?だけがオープンソースでいろいろと提供してくれていてとても有り難いです.それでもやっぱそれを動かす端末の推奨環境という物があるので古いPCだと動かなかったりします.

今後、Llm(大規模言語モデル)は容量が小さくなっていくということとローカル端末で動かすのが当たり前になる時代が来るそうです.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

あんま, イメージ, オープン, お金, カーソル, グラフィック, グラボ, コード, こと, コパイロット, ソース, そう, それ, たま, デビィン, とき, ところ, どちら, ビックテック, ボード, みたい, モデル, ローカル, 今後, 仕事, 休日, 余裕, 作業, 使用, 優秀, 問い, 学習, 容量, 導入, 当たり前, 必要, 感じ, 技術, 投資, 推奨, 提供, 明け, 明日, 時代, 時間, 有料, 梅雨, 業界, 機械, 無料, 環境, 生成, 短縮, 移り変わり, 端末, 絶対, 自分, 規模, 言語, 資金, 質問, 開発, 間違い,

Photo by Victor Dunn on Pexels.com

AIで記事を学習して新たな記事を生み出すにはお金が必要だと思っていたがそうでも.

2025.06.22

Logging

おはようございます.AIで記事を学習して新たな記事を生み出すにはお金が必要だと思っていたがそうでもなくローカルPCでそこら辺に落ちているLlamaモデルを持ってきてチューニングすれば何とかなるじゃねぇという思いに至った.

実はあなたの手元にあるPCと、そこら中に「落ちている」オープンソースのAIモデル、特にLlama 3があれば、十分記事が生成できるんです。


ローカルAI記事生成は、もはや夢物語じゃない

「AIで記事生成」と聞くと、SFのような世界や、大企業だけが使える特権のように感じるかもしれません。しかし、今は違います。オープンソースの強力な言語モデル、特にMetaが公開したLlama 3の登場は、この常識を大きく覆しました。

Llama 3は、その性能の高さにもかかわらず、誰でも無料で利用できるという点が最大の魅力です。さらに、80億パラメータの8Bモデルであれば、最新のゲーミングPCとまではいかなくとも、ある程度の性能を持つPCであれば十分に動作します。これにより、高額なクラウドサービスを利用せずとも、自分のPCでAI記事生成の環境を構築することが現実的になりました。


なぜLlama 3があなたのPCと相性抜群なのか?

Llama 3がローカルPCでの記事生成に適している理由はいくつかあります。

  • 完全無料のオープンソース: 利用に費用がかからないため、予算を気にせずAIを試したり、本格的に導入したりできます。
  • 選べるモデルサイズ: Llama 3には様々なサイズのモデルがあり、PCのスペックに合わせて選べます。特に8Bモデルは、個人利用に最適なバランスを持っています。
  • 活発な開発者コミュニティ: 世界中の開発者がLlama 3を使った新しいツールや効率的なチューニング方法を日々共有しています。困ったときには助けを借りられる心強い味方です。
  • 「量子化」でさらに軽量に: モデルのサイズを大幅に小さくする「量子化」という技術を使えば、より少ないメモリでLlama 3を動かせるようになります。これにより、より多くのPCで利用の道が開けます。

あなたのPCを「記事生成マシン」に変える秘訣

もちろん、いきなりプロのライター並みの記事をAIに書かせるのは難しいかもしれません。しかし、ちょっとした工夫で「何とかなる」レベルの記事生成は十分に可能です。

  1. 少量のデータでファインチューニング: 大量の記事データは不要です。あなたが書きたい記事のテーマやスタイルに合った、質の良い記事を数十〜数百程度集めてLlama 3を学習(ファインチューニング)させれば、その分野に特化した記事生成能力が格段に向上します。
  2. プロンプト(指示文)の工夫: AIへの「指示の出し方」は非常に重要です。具体的で明確なプロンプトを与えることで、チューニングが完璧でなくても、驚くほど質の高い記事が生成できます。これはまるで、優秀なアシスタントに的確な指示を出すようなものです。
  3. 効率的な学習方法の活用: 「LoRA(Low-Rank Adaptation)」のような効率的なファインチューニング手法を使えば、少ないGPUメモリでも短時間でモデルを特定のタスクに最適化できます。

あなたの創造性が、今、AIで加速する

かつては一部の専門家や企業にしか手の届かなかったAIによる記事生成が、今やあなたのPCで実現できる時代になりました。これはまさにAI技術の「民主化」です。

とまぁそういう訳なので何とかしてみますが、ファインチューニングにどれぐらい時間がかかるのかが未知数だったりする.

ファインチューニングPythonコード

以下のPythonコードは、Llama 3モデルをロードし、提供されたテキスト記事でファインチューニング(LoRA使用)を実行し、結果を保存します。 上記の入力値は、このコードに自動的に反映されます。 このコードをPythonファイル(例: `finetune_llama.py`)として保存し、実行してください。

import os
import torch
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training, TaskType

# GPUの利用可能性を確認
print("GPUが利用可能か確認中...")
if not torch.cuda.is_available():
    print("GPUが見つかりません。Fine-tuningにはGPUが強く推奨されます。")
    # GPUがない場合は、ここでスクリプトを終了するか、CPUモードで続行するか選択できます。
    # exit("GPUがないため終了します。")
else:
    print(f"GPUが利用可能です: {torch.cuda.get_device_name(0)}")

# --- 1. モデルとトークナイザーのロード ---
# Llama 3モデルのパスを指定します。Hugging Faceのモデル名(例: "meta-llama/Llama-3-8B")
# またはローカルにダウンロードしたモデルのパスを指定してください。
MODEL_NAME = "meta-llama/Llama-3-8B" # ユーザーが入力したパスがここに挿入されます

print(f"モデルとトークナイザーをロード中: {MODEL_NAME}")

# 4bit量子化設定 (GPUメモリの節約に役立ちます)
# bnb_4bit_compute_dtypeは、Ampere以降のNVIDIA GPUに推奨されるbfloat16を使用しています。
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4", # NF4 (NormalFloat4) 量子化タイプ
    bnb_4bit_compute_dtype=torch.bfloat16 
)

# トークナイザーをロード
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)
# Llama 3はデフォルトでbos_tokenを付与しないことがあるため、明示的に追加。
# また、padding_side='right'はLlamaモデルに推奨される設定です。
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"

# モデルをロードし、量子化設定を適用し、自動的にGPUにマッピングします。
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    quantization_config=bnb_config,
    device_map="auto", # 利用可能なデバイス(GPU)に自動的にモデルを分散
    trust_remote_code=True # リモートコードの実行を許可
)
print("モデルロード完了。")

# k-bit学習用にモデルを準備 (PEFTライブラリのため)
# gradient_checkpointingを有効にすることで、メモリ使用量をさらに削減できます。
model.gradient_checkpointing_enable()
model = prepare_model_for_kbit_training(model)
print("k-bit学習用にモデルを準備しました。")

# --- 2. データセットの準備 ---
# あなたのテキスト記事ファイルが格納されているディレクトリを指定します。
# 例: 'your_article_data/' の中に 'article1.txt', 'article2.txt', ... と置かれている場合
DATA_DIR = "./your_article_data/" # ユーザーが入力したパスがここに挿入されます

print(f"データセットをロード中: {DATA_DIR}")

# 'text'形式でデータセットをロードします。指定されたディレクトリ内のすべての.txtファイルを読み込みます。
# 各ファイルが1つのエントリとして扱われます。
try:
    dataset = load_dataset('text', data_files={'train': os.path.join(DATA_DIR, '*.txt')})
    print(f"データセットのサンプル数: {len(dataset['train'])}")
except Exception as e:
    print(f"データセットのロード中にエラーが発生しました。ディレクトリとファイル形式を確認してください: {e}")
    exit("データセットロード失敗。")

# データセットをトークン化する関数
# 長い記事をモデルの最大入力長に分割します。
def tokenize_function(examples):
    # Llama 3の最大入力長は通常8192ですが、お使いのGPUのVRAMに合わせて調整してください。
    # ここでは一般的な値として2048を設定しています。
    max_length = 2048 
    # truncate=Trueで最大長を超えるテキストを切り捨てます。
    return tokenizer(examples["text"], truncation=True, max_length=max_length)

# データセットをトークン化します。
# num_procはCPUコア数に応じて並列処理を行い、処理を高速化します。
tokenized_dataset = dataset.map(
    tokenize_function,
    batched=True,
    num_proc=os.cpu_count(),
    remove_columns=["text"] # 元のテキスト列は学習に不要になるため削除します。
)
print("データセットのトークン化が完了しました。")

# --- 3. PEFT (LoRA) の設定 ---
# LoRA (Low-Rank Adaptation) は、元のモデルの重みをフリーズし、
# 小さなアダプター層を追加して学習させることで、効率的にファインチューニングを行います。
# これにより、GPUメモリの使用量を抑えつつ、高い性能を実現できます。
lora_config = LoraConfig(
    r=16, # LoRAのランク。値を大きくすると表現力が増すが、メモリ消費も増える。
    lora_alpha=32, # LoRAのスケーリング係数。rの2倍程度が推奨されることが多いです。
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], # LoRAを適用する層。Llamaモデルで一般的な層。
    bias="none", # バイアスを学習しない設定。
    lora_dropout=0.05, # ドロップアウト率。過学習を防ぐために設定します。
    task_type=TaskType.CAUSAL_LM, # タスクタイプを因果言語モデルに設定。
)

# モデルにLoRAアダプターを追加します。
model = get_peft_model(model, lora_config)
print("モデルにLoRAアダプターを適用しました。")
model.print_trainable_parameters() # 学習可能なパラメータ数を確認します。

# --- 4. 学習の実行 ---
# 学習済みモデルを保存するディレクトリ
OUTPUT_DIR = "./llama3_finetuned_model/" # ユーザーが入力したパスがここに挿入されます

# 学習の設定
training_args = TrainingArguments(
    output_dir=OUTPUT_DIR,
    num_train_epochs=3, # エポック数。データセットのサイズと希望する精度に応じて調整してください。
    per_device_train_batch_size=1, # GPUあたりのバッチサイズ。VRAMが少ない場合は1に設定。
    gradient_accumulation_steps=4, # 勾配を蓄積するステップ数。実質的なバッチサイズは per_device_train_batch_size * gradient_accumulation_steps になります。
    optim="paged_adamw_8bit", # 8bit AdamWオプティマイザを使用し、メモリ効率を向上させます。
    save_steps=500, # 500ステップごとにモデルを保存します。
    logging_steps=100, # 100ステップごとにログを出力します。
    learning_rate=2e-4, # 学習率。
    fp16=True, # 混合精度学習を有効化 (GPUが対応している場合)。VRAM削減と高速化に寄与します。
    max_steps=-1, # num_train_epochsに基づいて学習します。
    group_by_length=True, # 同じ長さのシーケンスをグループ化し、パディングを削減します。
    lr_scheduler_type="cosine", # 学習率スケジューラーのタイプ。
    warmup_ratio=0.03, # ウォームアップ比率。
    report_to="none", # レポート先を指定しない (wandbなどを使用しない場合)。
)

# トレーナーの初期化
# data_collatorは、モデルの入力形式に合わせてデータを整形します。
trainer = Trainer(
    model=model,
    train_dataset=tokenized_dataset["train"],
    args=training_args,
    data_collator=lambda data: {
        'input_ids': torch.stack([f['input_ids'] for f in data]),
        'attention_mask': torch.stack([f['attention_mask'] for f in data]),
        'labels': torch.stack([f['input_ids'] for f in data]), # 因果言語モデルでは、入力自体がラベルとなります。
    },
)

# 学習の開始
print("Fine-tuningを開始します...")
trainer.train()
print("Fine-tuningが完了しました。")

# --- 5. 学習済みモデルの保存 ---
# LoRAアダプターのみを保存します。これにより、ファイルサイズが小さく、効率的に管理できます。
trainer.save_model(OUTPUT_DIR)
print(f"学習済みLoRAアダプターが '{OUTPUT_DIR}' に保存されました。")

# 保存したアダプターを使って推論を行う方法の例 (コメントアウトされています):
# このコードは、ファインチューニング後にモデルをロードして推論を行うための参考例です。
# from peft import PeftModel
#
# # 元のモデルをロード (学習時と同じ量子化設定を使用します)
# base_model = AutoModelForCausalLM.from_pretrained(
#     MODEL_NAME,
#     quantization_config=bnb_config,
#     device_map="auto",
#     trust_remote_code=True
# )
#
# # 保存したLoRAアダプターを元のモデルに結合します。
# peft_model = PeftModel.from_pretrained(base_model, OUTPUT_DIR)
#
# # 推論モードに設定します。
# peft_model.eval()
#
# # テキスト生成の例
# prompt = "ローカルPCでのLlama 3ファインチューニングの利点とは"
# inputs = tokenizer(prompt, return_tensors="pt").to("cuda") # 入力をGPUに移動
#
# with torch.no_grad(): # 勾配計算を無効化し、メモリ使用量を削減
#     outputs = peft_model.generate(
#         **inputs,
#         max_new_tokens=200, # 生成する新しいトークンの最大数
#         do_sample=True, # サンプリングによる生成を有効化
#         top_p=0.9, # Nucleusサンプリングの閾値
#         temperature=0.7, # 生成の多様性を制御する温度
#         eos_token_id=tokenizer.eos_token_id # 終了トークンID
#     )
# print("\n--- 生成されたテキスト ---")
# print(tokenizer.decode(outputs[0], skip_special_tokens=True))

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

```, ;;), )。, アウト, アシスタント, アダプター, あたり, アップ, あなた, いくつ, ウォーム, エポック, エラー, エントリ, オープン, オプティマイザ, お金, クラウドサービス, グループ, クン, ゲーミング, コード, コア, ここ, こと, コミュニティ, コメント, これ, サイズ, サンプリング, サンプル, シーケンス, スクリプト, スケーリング, スケジューラー, スタイル, ステップ, スペック, すべて, ソース, そこら, タイプ, ダウンロード, タスク, ため, チューニング, ツール, データ, データセット, テーマ, ディレクトリ, テキスト, デバイス, デフォルト, トー, トークナイザー, とき, どれ, トレーナー, ドロップ, バイアス, パス, バッチ, パディング, パラメータ, バランス, ファイル, ファイルサイズ, ファインチューニング, ファインチューニングコード, フリーズ, プロ, プロンプト, マシン, マッピング, メモリ, モード, モデル, もの, ユーザー, よう, ライター, ライブラリ, ラベル, ランク, リモート, レベル, レポート, ローカル, ロード, ログ, 一般, 一部, 上記, 不要, 世界, 世界中, 並み, 並列, 予算, 付与, 以下, 以降, 企業, 使い, 使用, 係数, 保存, 個人, 優秀, 入力, 公開, 共有, 具体, 処理, 出力, 分割, 分散, 分野, 初期, 利点, 利用, 制御, 削減, 削除, 創造, 加速, 助け, 効率, 動作, 勾配, 十分, 参考, 反映, 可能, 向上, 味方, 因果, 場合, 多様, 夢物語, 大幅, 大量, 失敗, 学習, 完了, 完全, 完璧, 実現, 実行, 実質, 寄与, 対応, 専門, 導入, 少量, 工夫, 希望, 常識, 強力, 形式, 必要, 思い, 性能, 手元, 手法, 技術, 抜群, 指定, 指示, 挿入, 推奨, 推論, 提供, 整形, 新た, 方法, 日々, 明日, 明確, 明示, 時代, 時間, 最大, 最新, 最適, 有効, 未知数, 本格, 格段, 格納, 構築, 様々, 比率, 民主, 活用, 活発, 消費, 混合, 済み, 温度, 準備, 無効, 無料, 特定, 特権, 現実, 理由, 環境, 生成, 発生, 登場, 的確, 相性, 短時間, 確認, 秘訣, 移動, 程度, 管理, 節約, 精度, 終了, 結合, 結果, 続行, 能力, 自体, 自分, 自動的, 蓄積, 表現, 言語, 計算, 記事, 設定, 許可, 調整, 費用, 軽量, 追加, 通常, 適用, 選択, 重み, 重要, 量子, 開始, 開発, 関数, 閾値, 非常, 高速, 高額, 魅力,

配列で返して変数で受け取る事を分割代入というであってる.

2025.05.16

Logging

おはようございます.配列で返して変数で受け取る事を分割代入という…どんなコードか具体的に書いたのが下記です.

<?php

function getArray(): array {
  return [10, 20];
}

[$x, $y] = getArray();

echo "x: " . $x . "\n";
echo "y: " . $y . "\n";

// 要素数が合わない場合
function getMoreArray(): array {
  return [100, 200, 300];
}

[$p, $q] = getMoreArray(); // $q には 200 が代入され、300 は無視される
echo "p: " . $p . "\n";
echo "q: " . $q . "\n";

[$m, , $n] = getMoreArray(); // カンマで要素をスキップ
echo "m: " . $m . "\n";
echo "n: " . $n . "\n";

// 連想配列のようなキー指定も可能 (PHP 7.1以降)
function getAssocArray(): array {
  return ['name' => '太郎', 'age' => 30];
}

['name' => $userName, 'age' => $userAge] = getAssocArray();

echo "名前: " . $userName . "\n";
echo "年齢: " . $userAge . "\n";

?>

最初、凄くこれに違和感を覚えたのを覚えています.理由はカッコカッコで括ってあるから、なんだか配列を連想するのですよね.とても便利ですけどね、因みにPHP言語でも比較的に新しいバージョンだったら使用できます.

尚、PHPバージョン7.1以下だった場合はlistを使用すると同じようなことになります.

<?php

function getArray(): array {
  return [10, 20];
}

list($x, $y) = getArray();

echo "x: " . $x . "\n";
echo "y: " . $y . "\n";

// 要素数が合わない場合
function getMoreArray(): array {
  return [100, 200, 300];
}

list($p, $q) = getMoreArray(); // $q には 200 が代入され、300 は無視される
echo "p: " . $p . "\n";
echo "q: " . $q . "\n";

list($m, , $n) = getMoreArray(); // カンマで要素をスキップ
echo "m: " . $m . "\n";
echo "n: " . $n . "\n";

?>

それにしても分割代入って呼び名、直ぐに忘れそう・・・.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

```, $代, カッコカッコ, カンマ, キー指定, コード, スキップ, バージョン以下, 分割代, 分割代入, 呼び名, 変数, 太郎, 新しいバージョン, 最初, 要素, 言語, 連想配列, 違和感, 配列,

ReactとVueだったらReactを選択すると思う.間違いないアレはキラキラだ.

2025.03.08

Logging

おはようございます.この頃、米国市場がどんより傾向でここ数週間で一つの口座では10万ぐらいは減ったようです.減った時に株の買い回しをすると景気が回復したときに倍に増える可能性はありますが、何だかトランプ大統領は予測しにくいですね.トランプ大統領の発言で売買システムを構築している人達は大変そうです.AIの精度を上げないとかなり損をしそうです、早く辞めて頂きたい.

さてReactの話を書いています.ReactとVueだったらReactを選択すると思うけれどもVueも大事だという話.シェア率から言えばReactの方が多いと思います.React推しの人はReactで何でもしてしまいますが、実際適材適所で言語を選ぶ方が表示が早くなったりSEOに強くなったりします.

でも、ReactとTypeScriptが大事に成りつつあることは確かです.自分もさえないReactのコードを書いています.イマイチ、使いこなせていない部分があります.もっと洗練したコードを書きたいなって思いますが全然ダメでついついバニラで対応してしまいます.

先日、リリースした掲示板もReactに改修しようと思っていますが、今のところ誰も使用していないので当分バニラJSのまま置いときますが行く行くはReactに対応していきます.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

かなり, コード, ところ誰, トランプ大統領, バニラ, , 傾向, 口座, 売買システム, 実際適材適所, 掲示板, 景気, , 発言, 米国市場, 精度, 言語, 話シェア率, 買い回し, 部分,

低学年向けの学習サイトを作ってみました. 今のところ無広告で運営中.

2025.02.10

Logging

おはようございます.低学年向けの学習サイトを作ってみました. 今のところ無広告で運営中です、因みにこのサービスは数年前にこのサイトにも存在しているものをlaravelとvueで再構築した形になります.

このサイト制作に費やした時間は1時間ぐらいです、いやー結構かんたんにそれらしい物が出来たので、自分としては満足です.アクセス数が多くなれば広告掲載などを考えています.

楽しんで学ぶ

広告掲載はトップのみに表示させるようにします.学習中に広告があるのは気が散りますからね.尚、このサイトは生成AIのちからを借りて制作したのでものの1時間ぐらいで完成した形になります.これから先こんな感じで自然言語の命令でコードを生成AIに書かして人はソースコードのチェックや動作チェックだけをするようになるのかも知れないなと思いましたが、やはり100%と生成AIが生成したものに対して保証が担保出来ない限り、コーダーさんやプログラマーさんの職が無くなることはなさそうです.

因みに自分は生成AIに課金していません.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

アクセス数, コーダーさん, コード, ソースコード, ちから, ところ無広告, プログラマーさん, 低学年向け, 保証, 再構築, 動作チェック, 命令, 学習サイト, 学習中, , , 生成, , 言語, 限り,

フルテキストインデックスを業務で使用して思ったこと.MYSQLとかで

2025.02.07

Logging

おはようございます.フルテキストインデックスを業務で使用して思ったこと.MYSQLとかで自然言語などを検索するときに便利、例えば商品検索を曖昧な単語で検索する時にフルテキストインデックスを与えていれば曖昧な単語でもヒットする確率が増えるというもの.

ただ、日本語はMeCab(メカブ)とか入れないとヒットしないかもですが、レンタルサーバーでも設定を変えれる人ならば使用できるかもです.試してみてはないので「かも」止まりですが….

こういうのを全文検索とかいうらしい.

尚、MYSQLやMariaDBなどでは対応しています、バージョンが低いと出来ない可能性はあります.

自分が今作っているサービスにも全文検索を一部導入する予定でいます、例えばYosakoi-Video.comなどもチーム名の曖昧な検索ができれば良いなと思っています.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

サービス, チーム名, バージョン, フルテキストインデックス, メカブ, レンタルサーバー, 一部, , 全文検索, 単語, 可能性, 商品検索, 日本語, 検索, 業務, 確率, 自分, 言語, 設定,

blueskyAPIが処理されなくなったので、対応を行った話.

2025.01.06

Logging

おはようございます.今日から仕事始めの方も多いはず自分もそんな感じです.さてblueskyAPIが処理されなくなったので対応を行った話を書いていきます.ブルースカイの独自処理が上手く処理されなくなったのでその対応を行っていました.今まで公式に落ちているPHP言語のライブラリーを使用していたんだけど、レンタルサーバーの環境が変わった関係により処理がされなくなったので、自前のAPI処理を他のエンジニアが公開されているコードを参考にしてカード板自動投稿を作りました.

ソースコードは下記になります.

    public function cardPost($text, $imagePath = null, $link = null)
    {
        $imageUri = $imagePath ? $this->uploadImage($imagePath) : null;

        $record = [
            "\$type" => "app.bsky.feed.post",
            "text" => $text,
            "createdAt" => Carbon::now()->format('c'),
        ];

        if ($imageUri && $link) {
            $record['embed'] = [
                "\$type" => "app.bsky.embed.external",
                "external" => [
                    "uri" => $link,
                    "title" => $text,
                    "description" => $text,
                    "thumb" => $imageUri
                ]
            ];
        }

        $ch = curl_init("https://bsky.social/xrpc/com.atproto.repo.createRecord");
        curl_setopt_array($ch, [
            CURLOPT_CONNECTTIMEOUT => 10,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_HTTPHEADER => [
                "Content-Type: application/json",
                "Authorization: Bearer {$this->jwt}",
            ],
            CURLOPT_POSTFIELDS => json_encode([
                "repo" => $this->handle,
                "collection" => "app.bsky.feed.post",
                "record" => $record,
            ]),
        ]);

        $response = curl_exec($ch);
        curl_close($ch);

        return json_decode($response, true);
    }

これでカード型のポストが出来ます.参考にしたサイトはこちらの@ma7ma7pipipiさんのソースコードになります.そのコードにカード型のコードを追加した形になります.

https://qiita.com/ma7ma7pipipi/items/bf7fda65ee71c873c70a

一からコードを書かないで良かったのでとても助かりました.感謝ですね😌、ありがとうございます.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

```, エンジニア, カード型, カード板自動投稿, コード, ソースコード, ライブラリー, レンタルサーバー, 下記, 仕事始め, 公式, 処理, 参考, 多いはず自分, , 感謝, 環境, 自前, 言語,

ブログ通知を付けました.4時間置きに通知が飛びます.#サービスワーカー

2025.01.05

Logging

おはようございます.去年の暮にブログ通知を付けました.4時間置きに通知が飛びます.ソースコードは以前に書いたコードをベースとして再構築した形になります.平たく言うとLaravelを使用しないでWEB通知を行うものになります.一度作ってしまえば使いましが出来るようにコードを今回は書いたので使いまわそうと考えています.

以前、Laravelで作っていたので考え方は苦労せずに出来たのですが…

今まで知らないことが出てきてしまってそこでロスしてしまいました.知らなかったこととはjavascriptのfetchです.使用する機会は結構多めなんだけど知らないことがありました.それはurlのパラムに/exampleと書くか/example/index.phpと書くかでphp言語のグローバル変数$_SERVER[‘REQUEST_METHOD’]の値がPOSTで送っているのにも関わらずGETになるのです.

fetchを書く場合は/example/index.phpと書くことでPOST送信と判断されます.これをデバックもせずに悩んでいました(笑).デバック大事.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

グローバル変数, コード, ソースコード, デバッグ, デバック大事, パラム, ブログ通知, ベース, 一度, , 去年, , 時間置き, , 機会, , 考え方, 言語, 送信, 通知,

ビットフライヤーはビットコインのビットコインをリアルタイムで受信するphpコード

2024.12.30

Logging

おはようございます.ビットフライヤーはビットコインのビットコインをリアルタイムで受信するphpコードを書きましたのでお裾分けです.以前書いていたものとは違う感じになります.ビットフライヤーさんのAPIを参照するとルビやJSの例コードはあるものの、何故かPHP言語のコードが無いので書いてみた形になります.ベースは生成AIに出力してもらったの物になります.それを自分の方がクラス化して使いやすくした形になります.

<?php
require 'vendor/autoload.php';

use WebSocket\Client;

class bitflyer
{
    public $client = null;
    public $channelName = "lightning_board_snapshot_BTC_JPY";
    public $wsUrl = 'wss://ws.lightstream.bitflyer.com/json-rpc';

    public function connecting()
    {
        try {
            // WebSocketクライアントを初期化
            echo "Connecting to WebSocket server...\n";
            $this->client = new Client($this->wsUrl);

            echo "Connection established. Subscribing to channel...\n";

            // サブスクライブメッセージを送信
            $subscribeMessage = json_encode([
                'method' => 'subscribe',
                'params' => ['channel' => $this->channelName],
                'id' => null,
            ]);
            $this->client->send($subscribeMessage);
        } catch (\WebSocket\ConnectionException $e) {
            echo "WebSocket connection error: " . $e->getMessage() . "\n";
            sleep(1); // 1秒待機して再接続
            $this->client = null;
            $this->connecting()->receive();
        } catch (Exception $e) {
            echo "General error: " . $e->getMessage() . "\n";
            $this->client = null;
            $this->connecting()->receive();
        }
        return $this;
    }

    public function receive()
    {
        try {
            // メッセージ受信処理
            while (true) {
                $message = $this->client->receive();

                // 受信データが空でないか確認
                if (!empty($message)) {
                    $data = json_decode($message, true);

                    // デコードが成功したか確認
                    if (json_last_error() === JSON_ERROR_NONE) {
                        if (isset($data['method']) && $data['method'] === 'channelMessage') {
                            print_r($data['params']);
                        }
                    } else {
                        echo "JSON デコード エラー: " . json_last_error_msg() . "\n";
                    }
                } else {
                    echo "返却値 空.\n";
                }
            }
        } catch (Exception $e) {
            echo $e->getMessage();
            $this->client = null;
            $this->connecting()->receive();
        }

        echo "Ctrl+C にて終了\n";
        return $this;
    }
}

(new bitflyer)->connecting()->receive();

尚、レンタルサーバーなんかでこのコードを動かすのは禁止されていますので、必ずローカルマシンで動かしてください.もし何かトラブルになっても保証出来ないので注意してください.因みに自分はDocker内で動かしています.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

```, エラー, お裾分け, クライアント, コード, サブスクライブメッセージ, デコード, ビットコイン, ビットフライヤー, ビットフライヤーさん, ベース, リアルタイム, ルビやの例コード, レンタルサーバー, ローカルマシン, , 接続, 秒待機, 言語, 返却値,

ガチで知らなかった.もう何年もPHP言語使っているのに恥

2024.12.28

Logging

おはようございます.ガチで知らなかった.もう何年もPHP言語使っているのに恥…下記のコードで動くことを知らなかった.そもそもそんな返却の仕方が出来ないと思い込んでいたのでlist関数を使用していた.

function abc(){
    return ['a','b','c'];
}
[$a,$b,$c] = abc();
echo "a={$a} b={$b} c={$c}";

改修とか機能追加とか、新規開発で他の人のコードとかを見るけど、そういう使い方をしている人を見たことがなかったので、知る由もなく今の今まで来てしまった.これphpのサンドボックスでバージョンの違うものを実行してみたらphp7.4系でも動いたので絶句してしまった.因みに7.0系は動かない.

自分はphp5系のからPHP言語を主とした仕事をしてきたわけです.仕事で使用するコードってある程度似ているので同じような関数などを使う反面、バージョンアップで追加された機能を使うことはほぼ無い.非対応になった関数を置き換えることはあっても.そういう事もあり今の今まで知らずにいた.

知るきっかけになったのは、プルリクエストしマージ後に自動でコードの正規化が行われた時にコードが置き換わった事によることで知ることに…

知るは一時の恥、知らぬは一生の恥.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

```, ガチ, きっかけ, コード, サンドボックス, バージョン, バージョンアップ, プルリクエストしマージ後, 一生, , 仕方, 反面, , 恥下記, 改修, 正規化, , 言語, 返却, 関数,

Python初学者は無料のあのドキュメントを読めば良いと思った話.

2024.12.23

Logging

おはようございます.Python初学者は無料のあのドキュメントを読めば良いと思った話を書いていきます.Python言語は飛ぶ鳥を落とす勢いです、とても人気の言語でもありますが自分はクラスやメソッドが{}でしまっていないので読みづらさを感じます.

# コレクション作成
users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}
# 方針:  コピーを反復
for user, status in users.copy().items():
    if status == 'inactive':
        print(user)
        del users[user]

# 方針:  新コレクション作成
active_users = {}
for user, status in users.items():
    if status == 'active':
        active_users[user] = status
print(active_users[user]) 

さて、この上記のコードは何処のコードかといえばPython公式のドキュメントです.これを読むだけで初学者さんは勉強になると思います.それもこれ日本語で書いてくれています.

これを読むだけで高い参考書籍を買う必要はない気がします.それでも分からない方は参考書籍を買ってみてください.

Pythonの話ではないのですが、最近React公式のドキュメントが読みやすくなっているって界隈でちょっと騒ぎになっていました.

これも生成AIが恩恵なのかもしれません.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

クラス, コード, コピー, コレクション作成, ドキュメント, メソッド, 何処, 初学者, 初学者さん, 勉強, 勢い, 参考書籍, 反復, 恩恵, 方針, 景太郎, 生成, 界隈, 言語, ,

Pythonの仮想環境で使おうの巻. python3 -m venv

2024.12.19

Logging

おはようございます.Pythonの仮想環境で使おうの巻です、この頃PHP言語の技術的なお話は避けようと思っていて代わりにpyの話を書こうと思っています.PHPのお話を避ける理由は業務で使用しているので、何処まで書いて良いのやらになっている事が理由です.

その代わりにPythonは業務で今のところ使用していないので書きやすい.そういう理由からPythonの事を書いていこうと思っています.この頃、Python記事が多いのもそういう経緯があります.

python -m venv 仮想環境名任意「英字」

今日、ご紹介するのはPythonを実行するのは仮想環境下で行おうという話です.上記のコマンドを打つと仮想環境が任意のディレクトリ配下に作成されます.仮想環境をアクティブにしたい場合は下記のコードでアクティブ化出来ます.アクティブ化した後、インストールやPythonを実行しましょうって話です.

Macやリナックス
. 仮想環境名任意/bin/activate
うぃんどーず
.\仮想環境名任意\Scripts\activate

こうすることで何が良いのかと言うことだけどもCドライブやドキュメント配下がライブラリに侵食されないという利点があります.あとDockerで立ち上げなくても良いというのもあるかな?

トイウコトデ、仮想環境のお話でした.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

インストール, コード, コマンド, ディレクトリ配下, トイウコトデ, ドキュメント配下, ドライブ, ライブラリ, リナックス, 下記, 仮想環境, 仮想環境下, 仮想環境名任意, 何処, 利点, , 業務, 経緯, 英字, 言語,

読めるのに書けないってプログラムコードでも有り得るようになるのかも.

2024.12.15

Logging

おはようございます.今後、生成AIが進化する中、読めるのに書けないってプログラムコードでも有り得るようになるのかもとふと思ってしまう.例えばPHP言語なら自分はある程度コードはかけるのだけど、Pythonになるとあまり慣れていないせいか、あまり思うように書けない.

ついつい生成AIに頼ってしまう.そうなると生成AIで記載されたコードを読んでカスタマイズすることになる.

そう、読めるのにコードが1から書けない状態に陥ってしまう.これを打開するには自分でコードを書くしかほかならない.これから先、生成AIが進化する中で自分みたいに読めるのに書けない人もエンジニアも仕事をしていくことになるだろうか.

ともあれ生成AIは進化している中でプログラムコードはエンジニアが書くという機会は減っていくのは必然なのかもしれない.

生成AIに頼ってしまうは検索サービスよりも依存してしまいそうだ.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

エンジニア, コード, プログラムコード, , 仕事, 必然, 検索サービス, 機会, 状態, 生成, 程度コード, 自分, 言語,

meta(旧Facebook)、凄いなこれ無料かよ.いろいろと広告で叩かれている

2024.10.29

Logging

おはようございます.休みの日にPythonを勉強している.勉強しているというか機械学習のサンプルを動かしてちょっとでも理解しようと奮闘しています.自分は馬◯なので、数学的な観点から書かれた本ではなく、一切そういうことを書かれていない.手を動かして理解する本で理解しようと奮闘しています.

本のタイトルは「Python3年生 機械学習のしくみ 体験してわかる!会話でまなべる!」です.表紙もまるで低学年向けに書かれた本の様で中身もかなり噛み砕いた内容、なのでこんな自分にも理解しやすい.これを読んだ後に「実務で役立つPython機械学習入門」を読もうとしている(先日買いました).

Pythonとは別にReactとVue.jsを並行して業務で対応を行っているだけども、慣れない言語はベストが分からないのでやっぱ大変ですね.もっと良いコードが書けるのではないかなどプルリクエストを行った後に思うわけですが...

ともあれ、Pythonは趣味で触っているのでそういう意味では気兼ねなく楽しめている気がします.

最後にタイトルへ釣られたひとにLlama 3.2モバイル(ローカル)でも動くもののリンクを貼っときます.RaspberryPi4や5なら動くと思います、手持ちのRaspberryPi3B+では駄目でした.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

Python, RaspberryPi3B, RaspberryPi4, react, vue.js, サンプル, しくみ, ひと, プルリクエスト, 中身, 会話, 低学年向け, 実務, 役立つPython機械学習入門, 手持ち, 最後, 機械学習, 表紙, 観点, 言語,

凄腕CGクリエイターだけど学生さん.好きこそ物の上手なれだな.#努力と才能.

2024.10.23

Logging

おはようございます.ひさびさにこの人凄いなと思った方が現れました.まだ学生さんだと言うのが驚きです、CGなのにここまで自然な動きができるとは驚きです.

Origami/折紙 | 日本初 学生アカデミー賞®受賞作品 | Award Winning CGI Animated Short Film by Kei Kanamori

Kei Kanamoriさんは日本ではなくアメリカで何年か働いて日本に戻ってきた方が良い.日本はどうしても出る杭は打たれる社会なので中々難しいだと感じます.もしくは白組で何か作っていただきたいですね.

おそらくお話は来ているとは思いますが...(もう作成されているかもですが)

本当に才能と努力がかけ合わさると凄いことになるのだなぁ.ちなみにAIにはこういうの作れないと自分は思います.どんなにAIが高性能になっても自分の表現したいものを自然言語の指示だけでは不可能だと思います.やはり手を動かしたもの勝ちですね、本当に.

明日へ続く

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

AI, Cg, Kei Kanamoriさん, アメリカ, お話, , 凄いこと, 努力, 学生さん, , 才能, 指示, 日本, , 白組, 社会, 自分, 良い.日本, 言語, 高性能,

高校生だったら.今でも変わらないもの.#雑記

2024.07.19

Logging

おはようございます.ふと思い出したことの中で自分が高校生か高校卒業後だったかな?パソコンを祖父に買ってもらった.最初のパソコンはソニーのデスクトップVAIOだった事を覚えている.

高校卒業後あたりから、独学でHPなどを趣味で作り出し最終的にバックエンドの開発をするまでになったのだけども.もし今、高校生だったら自分は何をしているのだろうかと思うと、やっぱりcodeを書いているだろうなと思います.

今だったら、人工知能などのことに興味をもっているかもしれない.むかし、HPを作るにはPerl言語というものを使用して掲示板などを構築するのが一般的だった.今ではいろいろな言語でサイトを構築することが出来るのだけども、その当時はPerl言語が一番流行っていた.その後、動的サイトを構築するのにActionScriptというものを使用するようになっていたんだけど、脆弱性が発見されて直ぐに下火になって今ではほぼ枯れた.

そんな感じでプログラム言語には流行りがある.今ならPython言語を学んでいる方が良いらしい.ただ、WEB系は今でもPHP言語が手堅い、PHP言語とReact言語、あとTailwind(CSSフレームワーク)などを学んでいると何とかなると思います.

流行りはあるけど、いま自分が高校生だってもプログラミング好きには変わらないだろうなって.

明日へ続く.

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

ActionScript, Code, CSSフレームワーク, Perl言語, PHP言語, Python言語, React言語, tailwind, ソニー, デスクトップVAIO, プログラミング好き, プログラム言語, 下火, 人工知能, 手堅い, 掲示板, 独学, 祖父, 脆弱性, 言語,

配列と乱数

2024.04.10

Logging

おはようございます、配列の中からランダムでデータを取得したい場合はアレイランドがベストです.この関数の良いところは、指定回数が設けれているところです.デフォルトは1回に設定されていてintで返却されますが、指定数が1以上の場合は配列にインデックスが返されます.

自分の説明が分からない方用に、Geminiにも解説してもらいます.

PHPのarray_rand関数は、配列からランダムな要素(キー)を1つまたは複数取得する関数です。

array_rand(array $input, int $num_req = 1): mixed
  • $num_reqが1の場合: ランダムな要素(キー)
  • $num_reqが1より大きい場合: ランダムな要素(キー)の配列
https://gemini.google.com/

この関数を知る前は配列をカウントしてランダムを発生していましたが、array_rand関数を知ってからはこちらを使用しています.調べたところ他の言語でも同じ様な関数が用意されているようですね.

明日へ続く.

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

$num_req, array, array_rand, array_rand関数, gemini, input, int, mixed, php, アレイランド, インデックス, キー, デフォルト, ランダム, 指定回数, 複数取得, 要素, 言語, 配列, 関数,

Cloudflare(クラウドフレア)良いね.

2024.04.04

Logging

おはようございます、cloudflare(クラウドフレア)というサービスをご存知でしょうか?これを使用すれば無料でサクサクっとウェブサイトやサービスが作れてしまいます.ただ、PHPなどは動かないようです、動かすことが出来るのはvue.jsやReact.js系です.当然、それらに付随するフレームワークは動きます.

自分もつい最近クラウドフレアでお試しにReact.jsを動かしてみました.

因みにReact.jsを身に付けようと思ってごりごりとコードを書いています、今までバニラjsを使っていたのでお作法を覚えるのがちょっと苦ではありますが、仕事で必要なので身につけようとしています.

当分、React.jsを覚えていたら食いっぱぐれはない言語なのかもなぁって思っています.

明日へ続く.

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

cloudflare, php, React.js, React.js系, vue.js, ウェブサイト, お作法, お試し, クラウドフレア, コード, ご存知, サービス, それら, バニラJs, フレームワーク, 仕事, , 言語, , 食いっぱぐれ,

cakePHPのDoc

2024.03.15

Logging

おはようございます、cakePHPのドキュメントはどんなのかなって見てみるとLaravelに似ているなという印象、やはり一つフレームワークの感覚を身につけると応用が効くだなって思いました。この感覚は一つの言語を覚えると他の言語もそれほど難しいとは思わなくなるのと一緒の感覚に近いです。

一つ覚えてしまえば似ている言語を覚えるのはそれほど時間がかからないけれど、即戦力になるとは限らない、やはり調べながらの手順が必要ですので慣れるまでは何でもそうですが時間がかかります。仕事ではLaravelを使用していますが、私用では違うフレームワークを使用してみるのも悪くないなって思いました。

明日へ続く。

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

cakePHP, Laravel, ドキュメント, フレームワーク, 一つ, 一つフレームワーク, 仕事, 印象, 即戦力, 応用, 感覚, 手順, 時間, 私用, 言語,

Open Interpreterってのがヤバい?

2023.09.22

Logging

おはようございます、Open InterpreterをBard(バード)に説明してもらいました。

Open Interpreter は、自然言語によるプログラミングをローカルで実現するオープンソースツールです。Python、JavaScript、Bash などの言語に対応しています。

Open Interpreter は、ChatGPT の Advanced Data Analysis(旧Code Interpreter)と同様の機能をローカル環境で動かすことができます。

Open Interpreter の機能には、画像生成、動画の編集、データ分析、資料作成などがあります。

Open Interpreter の活用事例には、メール文章の作成・自動送信、S&P500 の 20 年分のデータのプロットなどがあります。

Open Interpreter は、OpenAI が提供する ChatGPT の「Advanced Data Analysis(旧Code Interpreter)」のオープンソース版とも言われています。

https://bard.google.com/

これオープンソースライセンスなので、無料で使用できるみたいです。清水亮(Ryo Shimizu)氏が解説している動画があったので掲載しときます。

ハッカー魂 すごいAI登場!Open Interpreter

因みにこの記事は、名探偵ポアロを観て帰ってきた日の深夜書いています。これが公開される日にも映画を観に行く予定です。9月の後半から11月まで観たい映画が連チャンで上映されるので映画ヲタには楽しみですが出費でもあります。明日へ続く~。

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

Advanced Data Analysis, Bard, bash, ChatGPT, Open Interpreter, OpenAI, Python, Ryo Shimizu, S&amp, ソースライセンス, パート, プログラミング, プロット, 出費, 名探偵ポアロ, 旧Code Interpreter, 映画ヲタ, 清水亮, 言語, 連チャン,

chatGPTでは自然言語で指示が出来る。 #chatGPT

2023.04.11

Logging

おはようございます、chatGPTでは自然言語で指示が出来ます。例えば下記のような文言で指示をすると以降、そのルールに対応して回答をChatGPTが行ってくれます。これはChatGPTに限らず日本ではまだ公開(提供)されていないBardでも同じことが出来ます。

以降からルールを決めます。文字の先頭に▲がある場合は日本語に翻訳してください。文字の先頭に■がある場合は英語に訳してください。また、それ以外は、通常の回答を行ってください。

今回のルールは単純なものでしたが、ルールを複数作ることで複雑な問題も解決してくれるchatGPTになります。尚、基本中の基本ですがNewChatをあまり作らずに分類ごとにまとめ、その分類ではその内容の質問を投げかけることで、より良いchatGPTになります。

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

Bard, ChatGPT, NewChat, ルール, 下記, 先頭, 分類, 分類ごと, 回答, 基本, 指示, 文字, 文言, 良いchatGPT, 英語, 複数, 言語, 質問, 通常,

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などのを理解している人はライブラリは特に必要ないのかなとも思います。ライブラリを使用すればお手軽ですが、万が一何かあった時に困るのでライブラリを使用せずにコードを書くという方もいらっしゃると思います。

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

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

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

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

Photo by Pixabay on Pexels.com

Twitter-API-v2ツイート数珠繋ぎ #コード公開 #php

2022.10.04

Logging

おはようございます。土日祝も関係なくブログは毎日書いています🤮。

さて、今日はPHP言語でTwitterAPIバージョン2(v2)を使用してツイート数珠繋ぎをする方法を抜粋して記載していきます。こういうコードは今のところ出回っていないようです。少し調べれば公式サイトに記載しているのだけども・・・。まだ、日本語に対応した記事が少ないようです。v2でツイートする方法やリツイートする方法は何故かあるのだけどリプライ(Reply)[/statuses/update]する方法が記事としては記載していなかったので?記載します。

<?php
require_once "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

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

    function pickup_tweets(mixed $tw_text=null){
         $obj = (object)[];
        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;
        }
        return false;
    }
}

最初に結論とコードのアルゴリズムに付いて解説します。まず、tweetsのパラメーターでリプライ出来るように変更されています。v1.1とはそこが変わっているので同じ仕組みを検索しがちですがそれでは検索にヒットしないようです🤔。まずはエンドポイントの変更点の確認が必要みたい👏。

エンドポイントのv1.1からv2への対応表

エンドポイントのv1.1からv2への対応表が公式から出ているので確認してみてください↑。

次にコードの解説ですがまずTwitterOAuthライブラリをインストールを行い、defineなどの設定なども考慮した上で実行してみてください(コードに追記記載が必要)。変数、$tw_textは配列です。また投稿する文字が入っていると考えてください。そしてこのコードを下記のような考え方で実行してみてください。

<?php
       require_once "tw-index.php";
       $tw_text[0] ="test1";
       $tw_text[1] ="test2";
       $tw = new tw();
       if($tw->pickup_tweets($tw_text)){
        $ret["msg"] = "ok";
       }else{
        $ret["msg"] = "NG";
       }
       var_dump($ret);

※前提条件としてtwitter社にAPIの申請を行って受理されている事。

Twitter API v2 ツイート数珠繋ぎ

これで思った通り実行出来たと思います。尚、自分のように管理画面などを作って数珠繋ぎの投稿するのも良いかも知れません🫠。

著者名  @taoka_toshiaki

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

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

OFUSEで応援を送る

タグ

2, Abraham, autoload, class, connection, function, lt, null, once, php, quot, Reply, require, statuses, tw, Twitter-API-v, TwitterAPI, TwitterOAuth, UPDATE, use, var, vendor, コード, サイト, ツイート, ところ, バージョン, ブログ, リツイート, リプライ, , 今日, 使用, 公式, 公開, 土日, 対応, 少し, 抜粋, 数珠繋ぎ, 方法, 日本語, 毎日, , 言語, 記事, 記載,