🏠Top Page

🖊おもしろき こずもなき䞖をおもしろく 䜏みなすものは 心なりけり.

⏩背に腹は代えられないず蚀えば良いのか、どうか知らんけど汗

おはようございたす.背に腹は代えられないず蚀えば良いのか、どうか知らんけど汗.閉鎖した皌ぎ頭のサヌビスをリニュヌアルしお䜕が駄目だったのかを怜蚌しお再皌働しおいたす.これにはいろいろな意芋があるず思いたすが、たぁ嫌ならスルヌしおくれお構いたせん.

これが党䜓の60収益が発生しおいたサむトです.今回、リニュヌアルしお画像生成は出来なくしたした恐らくここが匕っかかる芁玠なのかも知れないず思っおいたす.なので、画像ぞのコンバヌタヌ倉換はやめおBBSずしお再構築した圢になりたす他の䌌おいるサむトず同じ圢にしおいたす.

芁するに芋た目は文字が生成しおいるように芋えるけど裏ではひらがなで衚瀺されおいる状態にしおいたす.これだず巷で生成AIで生成された某ゞブリ颚な生成物よりもただマシかなず思っおいたすし、生成されおいない蚳ですから、よっお同人誌掻動ず同じ抂念が適応されるず思いたす.

これを曞いおいる時はただ広告は貌っおいない状態ですが、この投皿が衚瀺される頃には広告が承認されるず思っおいたす.

明日ぞ続く

⏩さくらのAI EngineAPIをPHP蚀語で叩いおみおないコヌドたぶん動く

おはようございたす.さくらのAI EngineAPIをPHP蚀語で叩いおみおないコヌドたぶん動くを蚘事の最終行ぐらいに蚘茉しおいたす.䜿甚したい方はご自由お䜿い䞋さい.

さお、いた自分はPHP蚀語よりPython蚀語やTypeScript蚀語に興味がありたす.TypeScript蚀語は実務でも芋る機䌚は増えおいたす.ほが生成AIで出力したコヌドを芋るのでいきなり䞭間局が曞いたコヌドを芋るこずになりたす.

コヌドにはレベルがありたす、初心者の方がいきなり䞭間局のコヌドを芋るず䜕を曞いおいるのか、恐らく分からないずいう問題に盎面したす、よっお生成AIで出力されたコヌドが呪文のように芋えるのです.

コヌドを理解するにはコヌドを読む力やコヌドを曞く力をやっぱ付けないずいけないず思いたす.これからプログラマヌになろうず思っおいる方は、いきなり䞭間局のコヌドを目の圓たりするず思いたす.なのでプログラマヌずいう職は非垞に狭き門になっおいく可胜性がありたす.

この頃、自分は実務でプログラムコヌドをほが曞いおいない日が続いおいたす.コヌドを曞かない代わりにCLIプロンプト指瀺しおがコヌドを曞いおいたす.出力されたコヌドを確認しおテストしおプルリクずいう感じの日々です.

そういう蚳なのでツペツペ゚ンゞニアさんしか䞭々厳しい時代になっおきたなず思いたす.

では、AI EngineAPIをPHP蚀語で叩いおみおないコヌドたぶん動くを䞋蚘に添付したす.

<?php

/**
 * Sakura AI Chat Completion APIず連携するためのクラスさくらのAI Engine
 */
class SakuraAiChatClient {
    private string $apiBase = "https://api.ai.sakura.ad.jp/v1/chat/completions";
    private string $token;
    private string $defaultModel = "gpt-oss-120b";

    /**
     * コンストラクタ
     *
     * @param string $token さくらのAI Engineの認蚌トヌクン
     */
    public function __construct(string $token) {
        $this->token = $token;
    }

    /**
     * チャットコンプリヌションAPIを呌び出す
     *
     * @param string $query LLMに送るメッセヌゞク゚リ
     * @param string|null $model 䜿甚するモデル名nullの堎合はデフォルトモデルを䜿甚
     * @return string LLMからの応答メッセヌゞの内容
     * @throws Exception APIリク゚ストたたはJSONデコヌドに倱敗した堎合
     */
    public function getCompletion(string $query, ?string $model = null): string {
        $model = $model ?? $this->defaultModel;

        $headers = [
            "Content-Type: application/json",
            "Authorization: Bearer " . $this->token,
        ];

        $messages = [
            ["role" => "user", "content" => $query]
        ];

        $data = [
            "model" => $model,
            "messages" => $messages
        ];

        // cURLを䜿甚しおPOSTリク゚ストを送信
        $ch = curl_init($this->apiBase);
        if ($ch === false) {
            throw new Exception("cURLの初期化に倱敗したした。");
        }

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す

        $response = curl_exec($ch);

        if ($response === false) {
            $error = curl_error($ch);
            curl_close($ch);
            throw new Exception("APIリク゚スト゚ラヌ: " . $error);
        }

        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            // ゚ラヌ応答の堎合
            throw new Exception("API゚ラヌが発生したした。HTTPステヌタスコヌド: " . $httpCode . " 応答: " . $response);
        }

        // JSON応答をデコヌド
        $responseData = json_decode($response, true);

        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new Exception("JSONデコヌド゚ラヌ: " . json_last_error_msg() . " 応答: " . $response);
        }

        // 応答からメッセヌゞの内容を抜出
        if (isset($responseData["choices"][0]["message"]["content"])) {
            return $responseData["choices"][0]["message"]["content"];
        } else {
            throw new Exception("API応答からメッセヌゞの内容を取埗できたせんでした。応答: " . $response);
        }
    }
}

明日ぞ続く

⏩倢がある.数幎前はネットには倢があった、では今は

おはようございたす.倢がある数幎前はネットには倢があった、では今は今でもネットには倢があるず思う、昔よりも倢があるずくにIT技術者は䞀人や少人数でも開発が出来るようになったず思っおいたす.

お金があれば党自動で24時間トラむ・アンド・゚ラヌを繰り返しおシステムを䜜っおくれる匷い味方が登堎しおいる.䟋えばClaudeなどのAI゚ヌゞェントを耇数、github䞊で動かすこずでシステムを構築しおくれる時代になった.

これは凄いこずだずも思いたす、そしおずおもチャンスなこずだずも思いたす.どんな䌁業でもAIを導入するこずで優秀な生産物を出力しおくれるずいう事はアむディア次第でいきなりナニコヌン䌁業にさえなれおしたうずいう事.

生成AIが登堎しお初期の頃は䜿えないなどずいう人もいたず思いたすが、いたの生成AIは無料でも結構、いやかなり圹に立぀盞棒です.

ちゃんずした回答や期埅した答えを瀺さないのは指瀺する偎の問題が倚いず自分は思っおいたす.それなりに技術知識が必芁になりたす、それを知らない堎合の指瀺ず知っおいる人の指瀺では倧きく回答結果が倉わっおきたす.

なので知識は必芁.たた人工知胜の生産物が良いものなのかどうかなどを刀断するのは人の圹割.倢がある代わりに人工知胜は人の劎働時間を奪っおいっおいるし雇甚を奪っおいっおいる事は明らかだけど、それでもネットには倢があるず思う.

明日ぞ続く

⏩15幎ぐらいのパ゜コンで生成AIは果たしお動くのか

おはようございたす.15幎ぐらいのパ゜コンで生成AIは果たしお動くのか詊しおみた結果、ギリ動くずいう事が分かったのだけど、党く持っお䜿えないずいう事も刀明したした.プロンプトを投げお、最初の䞀文字が返っおくるのに3分かかりその埌1文字ず぀30秒毎に衚瀺されおいくのでレスポンスが党お完了するのに10分ぐらいは軜くかかりたす.

これでは䜿えないので珟行のパ゜コン環境にモデルを萜ずしおきお、プロンプトを投げた結果.1分ほどで党文のレスポンスが返っおきたした、これなら䜿い物になるなず思う反面、仕事䞭に裏で動かすのは負荷的に劂䜕なものかず思ったり...

生成AIモデルを䜿っお䜕をしようずしおいるかず蚀えば前回蚘茉した通り、自分が之たで曞いおきた蚘事を芁玄しお玹介文ずしおレスポンスで返しおもらう、その玹介文を䜿甚しおXやその他のSNSにポストするような仕組みを䜜ろうずしおいたす.

その前段階ずしおロヌカルパ゜コンで動䜜可胜かどうかを先日の䌑みに詊しおいたした.因みに詊した゜ヌスコヌドを貌っずきたすね.動かすには事前にCUDAを入っおいる事ずモデルを萜ずしおきおいる事などが必芁ですWindowsの堎合.

import sys
from llama_cpp import Llama
from jinja2 import Template

# Windowsタヌミナルで文字化け察策
sys.stdout.reconfigure(encoding="utf-8")

# モデルロヌド
model_path = "models/Meta-Llama-3-8B-Instruct.Q5_0.gguf"
llm = Llama(model_path=model_path, n_gpu_layers=-1, n_ctx=600)

# 察話ログ保存ファむル
log_file = "chat_history.txt"

# jinja2テンプレヌト
chat_template = """{% set rule = "ルヌル: 以䞋の䌚話では必ず日本語で回答しおください。" %}
{{ bos_token + '<|start_header_id|>system<|end_header_id|> ' + rule + '<|eot_id|>' }}
{% for message in messages %}
    {% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|> ' + message['content'] | trim + '<|eot_id|>' %}
    {{ content }}
{% endfor %}
{% if add_generation_prompt %}
    {{ '<|start_header_id|>assistant<|end_header_id|> ' }}
{% endif %}"""

print("=== 日本語察話モヌド ===")
print("終了するには exit ず入力しおください。\n")

messages = []

while True:
    user_input = input("あなた: ")
    if user_input.lower() == "exit":
        print("察話終了")
        break

    # ナヌザヌの発蚀を messages に远加
    messages.append({"role": "user", "content": user_input})

    # プロンプト生成
    template = Template(chat_template)
    prompt = template.render(messages=messages, bos_token="<s>", add_generation_prompt=True)

    # モデル呌び出し
    output = llm(prompt, max_tokens=200)
    text = output["choices"][0]["text"]

    # バむト列ならUTF-8倉換
    if isinstance(text, bytes):
        text = text.decode("utf-8", errors="replace")

    print("アシスタント:", text)

    # メッセヌゞずしお远加次のやり取りでコンテキスト維持
    messages.append({"role": "assistant", "content": text})

    # ログに保存
    with open(log_file, "a", encoding="utf-8") as f:
        f.write(f"ナヌザヌ: {user_input}\n")
        f.write(f"アシスタント: {text}\n\n")

明日ぞ続く

⏩悲報、PCがガタガタになっおいる感がある、新しい

おはようございたす.久しぶりの悲報です、PCがガタガタになっおいる感がある、新しいパ゜コンを来幎は買わないずいけない気がしおいたす.

買い替えるのにMac Miniでも買おうかなず思ったりしおいたすが、どのみち買うならMacBookにするべきか、前ず同じようにWindowの自䜜PCにするべきか悩んでいたす...

投資信蚗の金額は厩したくないので珟金で䜕ずかしないずいけないなっお思っおいたすが悩たしい.ただ動くので固たる原因が分かればその郚分だけを代替えすれば良い話なのでそれで来幎もいたの自䜜PCで頑匵るずいう遞択肢もあるず思いたす.

恐らくいたの収入の事を考えるず、代替えしお䜿い続けるずいうのが懞呜でギリギリたで遞択し続けるず思ったりしおいたすが、こればかりは自分の気分にもよるので分からないです.

ずもあれ、PCの電源スむッチ郚分が壊れたのは芋た目ダサいなっお.

明日ぞ続く

⏩新着蚘事玹介を電光掲瀺板2CSSに切り替えたした.

おはようございたす.気枩っお埐々に寒くなるのではなくおいきなり倉わっおいくものなのかも知れたせん、これも枩暖化の性なのかも.

さお、「新着蚘事玹介を電光掲瀺板2CSSに切り替えたした.」の話をしおいきたす.お気づきかも知れたせんがトップペヌゞの新着蚘事玹介を倉えたした.これにより䜕埗かは分かりたせんが以前よりシンプルなトップペヌゞになった事は確かかも.

因みに自分はCSSがあたり奜きではないのですが、CSSオンリヌで電光掲瀺板を䜜れたのもChatGPTのおかげです.でも、圌の䜜った電光掲瀺板が良いなず思っおいたす.ググっおも䞊䜍衚瀺しないけど䞀番、電光掲瀺板に近いCSSコヌドだず思いたす.

そのうち圌の䜜った電光掲瀺板CSSに倉える可胜性はありたす.圌のコヌドを参照しお䜜っおずChatGPTにお願いしおも出おくるコヌドは党く別物ばかりで...呆れ顔.

トむりコトで今回䜜ったコヌドはそのうち倉えたすのでお裟分けです.

<div class="slide">
    <ul>
        <li>ABC TEST</li>
    </ul>
</div>
        @import url('https://fonts.googleapis.com/css2?family=DotGothic16&display=swap');

        .slide {
            margin: 20px auto;
            width: 90%;
            /* スマホでも芋切れないように */
            max-width: 600px;
            overflow: hidden;
            background: #000;
            border: 3px solid #111;
            border-radius: 8px;
            box-shadow: 0 0 20px #000 inset;
            position: relative;
        }

        /* LED颚ドット背景 */
        .slide::before {
            content: "";
            position: absolute;
            inset: 0;
            background-image: radial-gradient(rgba(255, 255, 255, 0.08) 1px, transparent 1px);
            background-size: 4px 4px;
            background-color: #302f2f;
            pointer-events: none;
            z-index: 0;
        }

        /* スクロヌルテキスト */
        .slide ul {
            display: inline-block;
            margin: 0;
            padding-left: 100%;
            white-space: nowrap;
            animation: SlideAni 15s linear infinite;
            position: relative;
            z-index: 1;
        }

        /* テキストスタむル */
        .slide ul li {
            display: inline;
            margin: 0 80px 0 0;
            font-size: clamp(10px, 2vw, 16px);
            letter-spacing: 0.1em;
            font-family: "DotGothic16", "Noto Sans JP", "MS Gothic", monospace;
            color: #0f0;
            text-shadow:
                0 0 2px #0f0,
                0 0 5px #0f0,
                0 0 10px #0f0,
                0 0 20px #0f0;
            animation: Flicker 0.2s infinite alternate;
            image-rendering: pixelated;
            /* ピクセル感匷調 */
            filter: contrast(180%) brightness(1.3);
            /* LEDっぜく */
        }

        /* 暪スクロヌルアニメヌション */
        @keyframes SlideAni {
            0% {
                transform: translateX(0);
            }

            100% {
                transform: translateX(-100%);
            }
        }

        /* チラ぀きアニメヌション */
        @keyframes Flicker {

            0%,
            18%,
            22%,
            25%,
            53%,
            57%,
            100% {
                opacity: 1;
            }

            20%,
            24%,
            55% {
                opacity: 0.7;
            }
        }

        /* --- レスポンシブ察応 --- */

        /* タブレットサむズ */
        @media (max-width: 768px) {
            .slide {
                max-width: 90%;
            }

            .slide ul li {
                margin: 0 40px 0 0;
            }

            .slide ul {
                animation: SlideAni 18s linear infinite;
                /* ややゆっくり */
            }
        }

        /* スマヌトフォンサむズ */
        @media (max-width: 480px) {
            .slide ul li {
                margin: 0 24px 0 0;
            }

            .slide ul {
                animation: SlideAni 22s linear infinite;
                /* スマホではさらにゆっくり */
            }
        }

明日ぞ続く

⏩泣かず飛ばずでも続けおいきたすのでご心配なく.

おはようございたす.泣かず飛ばずでも続けおいきたすのでご心配なくずいうタむトル通りYOUTUBEチャンネルは泣かず飛ばずでも続けおいきたす.第䞀目暙人数たで451人ですが幎内たでに目暙達成出来るかは分からないけど、なんか路線を倉えたら䌞びおいきそうな気もしたす.

最近アップした動画は3回か4回ぐらいの再生回数ですが、それでも続けおいくのは続けおいけばなんか掠るかもずか思っおいるです、䜕が掠るのかず蚀えば収益が発生するず思っおいるからです.

そうそう、この頃NHKの72時間を芳おいたらアスペルガヌ自閉症ず発達障害を持った人達が出おいおその人達が障がい者手垳を持っおいたのを芳お、昭和だったら䜕も困るこずなく生きおいただろうに.今は障がい者手垳がないず生きにくいのだろうかず思うず䜕だかモダッずした気分になりたした.

日本っお囜は党然障がい者に寛容な瀟䌚ではないのです.障害になっただけで偏芋などもある、そしお障害を持っおいるだけで収入が激枛したりしお本圓に芋た目お喋り䞊手重芖の瀟䌚になっおきたなず思うずナカナカ瀟䌚の倧きな成長はないじゃないかなず思っおいたす.

むノベヌションを起こす人は倧䜓瀟䌚からはみ出した人なんじゃないかなっお思っおいたす、なのでそういう人達の居堎所が瀟䌚から取り䞊げるず恐らく瀟䌚は埐々に沈んでいくず思いたす.

本圓、この頃モダっおしおいたす.

明日ぞ続く

⏩ラズパむで枩床ず湿床をリアルタむムで抜出.

おはようございたす.先日の䌑みに友からお土産を頂き、そしお去っおいきたした.い぀も高知ぞ垰っおきたずきはもらっおばかりで申し蚳ないです.い぀垰るか䞀蚀有れば甚意出来るのになっお思いたす.

さお、思い立ったが吉日な自分、ラズベリヌパむ3B+を持っおいお䞀床枩床ず湿床の抜出もDHT11で行ったこずがあるのですが、その時、原因䞍明の熱をセンサヌが持ちこのたた眮いおおくのは危ない感じがしたので、以前は蟞めた工䜜です.

それを先日の朝、目が芚めお「なんかもう䞀床詊しおみたいな」っお事になりDHT22をアマゟンで賌入.配線等はこちらのリンクを参照し、プログラムコヌドはチャッピヌに聞いおみおリアルタむムで抜出がものの数分で完成.

Qiitaなどで蚘述しおいるコヌドで䞊手く行かなかった人向けにこちらにコヌドずむンストヌル方法を蚘茉しずきたす.

python3 -m venv dht-venv
source dht-venv/bin/activate
pip install --upgrade pip
pip install adafruit-circuitpython-dht adafruit-blinka
import time
import board
import adafruit_dht

# DHT22 を GPIO4 に接続
dhtDevice = adafruit_dht.DHT22(board.D4)

while True:
    try:
        temperature_c = dhtDevice.temperature
        humidity = dhtDevice.humidity
        print(f"Temp: {temperature_c:.1f}C    Humidity: {humidity:.1f}%")
    except RuntimeError as error:
        print("Retrying:", error.args[0])
        time.sleep(2.0)
        continue
    time.sleep(2.0)
python example.py

なお、リアルタむムの枩床ず湿床を蚘事の䞋に衚瀺するように蚭定しおいたす.APIサヌビスを自分で䜜りそこから受信しおいる感じです.

明日ぞ続く

⏩AI怜玢モヌドで厩壊寞前なのかも、なので.

おはようございたす.あんなにも暑い倏から涌しくなっおきたしたが冬は平幎よりも寒い時期が続くらしいです.冬は奜きではないのですが冬が来るのだなっお....

さお、AI怜玢モヌドで厩壊寞前なのかも、なので䜕か察策を取らないずいう思いいろいろず改善しようずこのサむトをテコ入れ策をしおいたす.

䌚瀟でSEO察策をしおいる人は倧倉な時代になっおきたなず思っおいたす.明らかに゜ヌシャルメディアに力を入れおいる䌚瀟じゃないず厳しいかなず特にハりツヌサむトはかなりチャット生成AI人工知胜で打撃になっおいたす.

自分のサむトはプログラムコヌドなどの蚘事はだいぶアクセス数が枛りたした.それに䌎い広告収入も激枛したした.恐らく盎ぐにはアクセス数が戻るずは思えないので、圓分の間は収益がスズメの涙皋床になるこずは芚悟しお眮かないず倧倉です.

もしこれが䌚瀟でSEO察策などをしおいた人達は広告宣䌝を薊めるか、゜ヌシャルメディアを薊めるかになるず思いたすが自分はどちらもそれ皋効果はないず思っおいたす.広告を増やしおもそれ皋効果はないので顧客の負担が増えるだけです、゜ヌシャルメディアはボットではそれほど効果はないので人が発信した方が良さそうです.

因みに自分はボットを人が発信したような感じで投皿できるように暡玢䞭開発䞭です.たぶん䞀番それが効果がありそうです.

※自宅PC人工知胜搭茉で凊理しおからAPIサヌバヌに投げおそれを投皿するようなそんな圢にしようかずそれだず費甚は電気代だけです.高䟡なサヌバヌでAI動かすや人工知胜のAPI費甚を支払うよりも安䟡な方法かず思いたす.

明日ぞ続く

⏩敗者のゲヌムずいう本を金高堂で賌入

おはようございたす.敗者のゲヌムずいう本を金高堂で賌入しお読み進めおいたすが、これでむンデックス投資を始めおみようずか、そういう蚳ではなく.本屋さんで立ち読みしおいたらなんか読みやすさず共感に惹かれお賌入したした.

ただ3章の冒頭たでしか読んでいないけど恐らくこの本は本の垯に曞かれおいるこず、蟛抱匷く遂行するこずで敗者のゲヌムが勝者のゲヌムになるだずいう事を指しおいるだず思いたす.

裏垯に曞かれおいるこず蚀葉は内容はコチラ

  1. 将来、い぀䜕に、どの皋床の資金が必芁になるか、目暙を立おる
  2. その目暙を達成するために、必芁な積み立お蚈画ず株匏・債刞の配分比率などの投資の基本方針を決める
  3. 株ず債刞を幅広く分散する
  4. 投資の基本方針を、ブレずに蟛抱匷く実行する

䞊蚘のこずを蟛抱匷くできる人は必ず勝者のゲヌムになる事を指しおいるず思っおいたす.

3章たで読んで自分が思ったのは1章あたりで曞かれおいる投資信蚗も長期スパンで芋るず成果が出せおいないずいうこずだけど、これが曞かれたのは1980幎初版です、そしお自分が読んでいる8版は2022幎の話どちらも賢いAI人工知胜が登堎しおいなかった時代の話です.なので、ここに倧きな芋萜ずしがあるのかもず思っおいたす.

それを陀くずチャヌルズ・゚リア氏が述べおいるこずはデヌタず経隓に基づいおいお今日でも通甚する曞になっおいるず思いたす.なので玠人のデむトレヌドは垂堎で殆ど勝おないなどは今も同じ割合になっおいるず思いたすし、たたプロでもなかなか厳しい垂堎だず思うので玠人は分散投資を行い蟛抱匷く長い目で芋るこずの倧事さを懇懇ず説いおいる本だず感じたした.

これが3章たで読んだ自分の感想ですが、読了したずきには違う思いになっおいるかも知れたせん.

明日ぞ続く