@Blog
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。

馬鹿なことをしてしまった、たまにやらかします.そして凹む.
2025.07.27
おはようございます.自分が運用しているサイトで馬鹿なことをしてしまった、たまにやらかします.そして凹むです.今回やらかしたのは身内は自分が運用しているサイトの広告を表示させないようにするというコードを改修している時にエラーが出て5分ぐらい機能が使えなくなったというやらかし.
原因はイズセットの使い方がお馬鹿さんなコードの書き方をしていたのにも関わらず、その矛盾に気が付かずオロオロしてしまったということ.めちゃ焦ります、サイトの訪問者が少なければ焦らせないですけど、まぁある程度、アクセスがあるサイトなので止まってしまうと焦ります.
そういう時に我に返ることが簡単に出来れば良いのだけども自分の場合はパニクると中々冷静に対応できない所がある.
因みにどんなミスコードかと言えば下記のようなコードになります.イズセットが偽の時に次の判断処理に行くのでエラーになるという事です.本当にやらかしですw
皆さんもこんな凡ミスをしないようにリリースする前にはローカル環境でチェックとユニットテストをお忘れなくーーー!
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
ーーー, アクセス, イズセット, エラー, コード, こと, サイト, サン, たま, チェック, テスト, パニク, ミス, ユニット, よう, リリース, ローカル, 下記, 今回, 使い方, 冷静, 処理, 判断, 原因, 場合, 対応, 広告, 改修, 明日, 書き方, 機能, 環境, 皆さん, 矛盾, 簡単, 自分, 表示, 訪問, 身内, 運用, 馬鹿,

駆け出しエンジニアとつながりたい的なコードを書いてみた.ごっさんです.
2025.07.21
おはようございます.下記のコードを知っておくと便利ですよ、フレームワークとかなら使わないかもしれないけども素(えいてぃぶコード)のPHP言語で書くと便利ですね.この頃、素のPHP言語で書くことが無くなりつつあります.仕事ではフレームワークやフロントエンドでもライブラリを使用してコードを書くことが多いですね.たまにバニラJSで書くこともありますが.
<?php
$foo = [
'name' => '山田 太郎',
'age' => 25,
'tel' => '09012341234'
];
var_dump($foo);
var_dump(array_keys($foo));
var_dump(array_values($foo));
駆け出しエンジニアがもういないよなぁ…コードの土台はAIによって書くことが多くなりプロジェクトの改修時に古のコードを見るようになるだろうなぁ.たまに見かける痛いコードを昔は書いていたなぁと思いつつ、今でも痛いコードを書いていると思った方が良いなって.数ヶ月前に書いたコードが痛いコードに見えるので…まだまだ成長過程かなって思っています.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, イブ, エンジニア, エンド, ヶ月, コード, こと, たま, バニラ, フレーム, プロジェクト, フロント, よう, ライブラリ, ワーク, 下記, 仕事, 使用, 便利, 土台, 太郎, 山田, 成長, 改修, 明日, 言語, 過程, 駆け出し,

チャットワークのAPIを使ってみました.プロンプトでほぼ書いています.
2025.07.13
おはようございます.チャットワークのAPIを使ってみました.プロンプトでほぼ書いたコードになります、チャットGPTの無料版にリファレンスのURLリンクとPHPのクラス化、リターンに$thisで返却出来る所は$thisを使用してスマートにコードを書いてと指示を出しました.
出来上がったコードが下記になります.ソースコードは自分の方でモンキーテスト的に動かしてみましたが、ちゃんと動作するようです.
<?php
class ChatworkClient
{
private string $apiToken;
private string $baseUrl = 'https://api.chatwork.com/v2';
private int $retryCount = 3;
private int $retryDelay = 1000000; // microseconds
public function __construct(string $apiToken)
{
$this->apiToken = $apiToken;
}
public function setRetry(int $count, int $delayMicroseconds): self
{
$this->retryCount = $count;
$this->retryDelay = $delayMicroseconds;
return $this;
}
private function request(string $method, string $path, array $params = []): array
{
$attempts = 0;
while ($attempts < $this->retryCount) {
$attempts++;
$ch = curl_init();
$url = $this->baseUrl . $path;
if ($method === 'GET' && $params) {
$url .= '?' . http_build_query($params);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = ['X-ChatWorkToken: ' . $this->apiToken];
if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
if ($attempts < $this->retryCount) {
usleep($this->retryDelay);
continue;
}
throw new RuntimeException("cURL error after {$attempts} attempts: {$error}");
}
if ($status >= 200 && $status < 300) {
return [
'status' => $status,
'body' => $body ? json_decode($body, true) : null,
];
}
if ($attempts < $this->retryCount && $status >= 500) {
usleep($this->retryDelay);
continue;
}
return [
'status' => $status,
'body' => $body ? json_decode($body, true) : null,
];
}
throw new RuntimeException("Request failed after {$this->retryCount} attempts");
}
public function setToken(string $token): self
{
$this->apiToken = $token;
return $this;
}
public function me(): array
{
return $this->request('GET', '/me');
}
public function getMyStatus(): array
{
return $this->request('GET', '/my/status');
}
public function getMyTasks(array $filters = []): array
{
return $this->request('GET', '/my/tasks', $filters);
}
public function getContacts(): array
{
return $this->request('GET', '/contacts');
}
public function getRooms(): array
{
return $this->request('GET', '/rooms');
}
public function createRoom(array $params): array
{
return $this->request('POST', '/rooms', $params);
}
public function getRoom(int $roomId): array
{
return $this->request('GET', "/rooms/{$roomId}");
}
public function updateRoom(int $roomId, array $params): array
{
return $this->request('PUT', "/rooms/{$roomId}", $params);
}
public function deleteRoom(int $roomId, string $action = 'leave'): array
{
return $this->request('DELETE', "/rooms/{$roomId}", ['action_type' => $action]);
}
public function getMembers(int $roomId): array
{
return $this->request('GET', "/rooms/{$roomId}/members");
}
public function updateMembers(int $roomId, array $params): array
{
return $this->request('PUT', "/rooms/{$roomId}/members", $params);
}
public function getMessages(int $roomId, bool $force = false): array
{
return $this->request('GET', "/rooms/{$roomId}/messages", ['force' => $force ? 1 : 0]);
}
public function postMessage(int $roomId, string $body, bool $selfUnread = false): self
{
$this->request('POST', "/rooms/{$roomId}/messages", ['body' => $body, 'self_unread' => $selfUnread ? 1 : 0]);
return $this;
}
public function markRead(int $roomId): self
{
$this->request('PUT', "/rooms/{$roomId}/messages/read");
return $this;
}
public function markUnread(int $roomId): self
{
$this->request('PUT', "/rooms/{$roomId}/messages/unread");
return $this;
}
public function getMessage(int $roomId, int $messageId): array
{
return $this->request('GET', "/rooms/{$roomId}/messages/{$messageId}");
}
public function getRoomTasks(int $roomId, array $filters = []): array
{
return $this->request('GET', "/rooms/{$roomId}/tasks", $filters);
}
public function createTask(int $roomId, array $params): array
{
return $this->request('POST', "/rooms/{$roomId}/tasks", $params);
}
public function uploadFile(int $roomId, string $filePath, string $message = ''): array
{
if (!file_exists($filePath)) {
throw new InvalidArgumentException("File not found: {$filePath}");
}
$ch = curl_init();
$url = $this->baseUrl . "/rooms/{$roomId}/files";
$cfile = curl_file_create($filePath);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ChatWorkToken: ' . $this->apiToken]);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => $cfile, 'message' => $message]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
throw new RuntimeException(curl_error($ch));
}
curl_close($ch);
return ['status' => $status, 'body' => json_decode($body, true)];
}
}
人が今回のコードを書いた場合、早い人でも10分ぐらいはコードを書かないといけないと思います、どんなに早くてもそれぐらいの時間は必要だと思いますが、生成AIはこれを数十秒で書ける訳ですから、確実に時間短縮になります.
なので人工知能が使える現場は間違いなく最初のコード出力は人工知能に任せた方が良いです.特に新規案件の土台は生成AIに任せると開発コストは削減出来ます.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, クラス, コード, コスト, これ, スマート, ソース, それ, チャット, テスト, プロンプト, モンキー, よう, リターン, リファレンス, リンク, ワーク, 下記, 人工, 今回, 使用, 出力, 削減, 動作, 土台, 場合, 必要, 指示, 新規, 明日, 時間, 最初, 案件, 無料, 現場, 生成, 知能, 短縮, 確実, 自分, 返却, 開発, 間違い,

laravelはenvで設定するのがベターですけど、そうではない環境もenvで
2025.07.11
おはようございます.laravelはenvで設定するのがベターですけど、そうではない環境もenvで構築した方が良いです、なぜかと言えばテスト環境との切り替えが簡単になるということなんです.
使い方はこんな感じまずComposerのライブラリをインストールします.
composer require vlucas/phpdotenv
次に使用方法はこんな感じです.こうしとけば結構楽になりますし使いまわしの時に便利です、Laravel(ララベル)ってライブラリの纏まりで構築されているのでワードプレスの環境でも組み込む事は可能です.自分が使用しているのはenv周りとデータベース周りのライブラリです.
require_once __DIR__ . '/vendor/autoload.php';
use Dotenv\Dotenv;
// .env ファイルを読み込む
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
// 環境変数の取得
echo getenv('APP_NAME'); // ✅ OK
echo $_ENV['APP_NAME']; // ✅ OK
echo env('APP_NAME'); // ❌ Laravel外では未定義
そうそう.envをルート上に置いている場合は.htaccessに下記の記述を書くことをお忘れなく!!これを置いていない場合は筒抜けになります(エンジンエックスの場合も記載しときますね).
<Files .env>
require all denied
</Files>
location ~ /\.env {
deny all;
}
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, インストール, エックス, エンジン, こと, これ, データベース, テスト, ファイル, プレス, ベター, ライブラリ, ララベル, ルート, ワード, 下記, 使い方, 使用, 便利, 切り替え, 取得, 可能, 周り, 場合, 変数, 定義, 感じ, 方法, 明日, 構築, 環境, 筒抜け, 簡単, 自分, 記載, 記述, 設定,

AI時代のマーケティング激変に備えよグーグル検索の60%がクリックされない
2025.07.05
おはようございます.先日、自分が言っていた事は間違いなかったんだなって下記の動画を見て思いました.これから先、SNSとAIを駆使しないと集客出来ない時代になるということですね.要するに検索というものは廃れていくということです.最後にサイトとして残るのはユーザーが体験出来るサイトしか残らないような気もしています.
動画を内容をGeminiに解説してもらいましたのでマーケティングしている人は必見だと思います.
HubSpotのCEO、ヤミニ・ランガン氏が語るAIがビジネスに与える影響についての要点は以下の通りです。
AIの現状と影響
- AI開発の中心はサンフランシスコで、OpenAIやAnthropicがLLMの主導権を争っています [03:54]。
- AIは人間の仕事を「拡張」するものであり、一部の職種では人員削減に繋がる可能性もありますが、営業や開発のように生産性向上により、より多くの人間が必要となる職種もあります [06:30]。
- AmazonやMicrosoftもAIによる効率化と人員削減に言及しています [05:53]。
HubSpotにおけるAIの活用
- HubSpotは2023年にAI中心の製品ロードマップに転換し、社内でもAIを積極的に導入しています [09:50]。
- カスタマーサポートでは、ティア1のサポートチケットの約50%をAIで解決し、人員を維持しながら顧客ベースを拡大しています [10:56]。
- 営業では、AIを活用してアカウント調査、メール作成、会議設定を自動化し、数万件の会議設定に成功しています [11:48]。
- マーケティングでは、AIでウェブサイト訪問者の意図を分析し、パーソナライズされたコンテンツを提供することで、コンバージョン率を80〜100%向上させています [13:26]。
- ヤミニ氏自身も、ChatGPT、Claude、GeminiなどのAIツールを個人的に活用しているとのことです [14:10]。
AIによる検索とSEOの変革
- Google検索のAI概要が直接回答を提供するため、従来のSEOは通用しなくなりつつあります [17:09]。
- 人々がGoogle検索だけでなく、ChatGPTのようなLLMから直接情報を得るようになっているため、ウェブサイトへの訪問者数が減少する可能性があります [18:02]。
- 「AI最適化」という新しい分野が台頭しており、AIが特定の質問に回答できるようにコンテンツを最適化することに焦点を当てています [18:47]。
- HubSpotは、ブログトラフィックの減少に対応するため、ポッドキャスト、メールニュースレター、YouTubeなど、多様なチャネルへのコンテンツ戦略を拡大しています [21:07]。
AIによる営業とカスタマーサービスの変革
- 営業: AIは、アカウント調査、メール作成、デモ準備など、営業担当者の非対面業務の多くを自動化できます [24:22]。
- AIは、通話やメールの記録から自動的に顧客情報をCRMに取り込み、パーソナライズされたメールのドラフト作成などを支援します [25:32]。
- AIは営業における「人間的なつながり」を強化するものであり、置き換えるものではないとヤミニ氏は考えています [28:00]。
- カスタマーサービス: AIはティア1のサポート質問に最適であり、顧客満足度を維持しながら迅速な問題解決を可能にします [29:33]。
- HubSpotの顧客は、AIエージェントによって平均52%のチケット解決率を達成しており、中には80%を解決している顧客もいます [30:56]。
この動画は、AIがビジネスのあらゆる側面に深く浸透し、企業がその変化に適応する必要があることを強調しています。
トイウコトでやっぱりこれから先はECサイトやアンサーサイトはかなりダメージを受けてくると思っています.逆に影響を受けないのはBtoBのサイトなのかも.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
)。, アカウント, アンサーサイト, いた事, ウェブサイト, エージェント, カスタマーサービス, カスタマーサポート, こと, コンテンツ, コンバージョン, サイト, サポート, サンフランシスコ, ため, ダメージ, チケット, チャネル, ツール, つながり, ティア, デモ, トイウコト, ドラフト, ニュースレター, パーソナライズ, ビジネス, ブログトラフィック, ベース, ポッドキャスト, マーケティング, マップ, メール, もの, ヤミニ, ヤミニ・ランガン, ユーザー, よう, ロード, 一部, 下記, 中心, 主導, 人々, 人員, 人間, 仕事, 以下, 企業, 会議, 体験, 作成, 個人, 側面, 先日, 内容, 分析, 分野, 削減, 効率, 動画, 可能, 台頭, 向上, 問題, 営業, 回答, 変化, 変革, 多く, 多様, 対応, 対面, 導入, 平均, 強化, 強調, 影響, 従来, 必要, 必見, 情報, 意図, 成功, 戦略, 担当, 拡大, 拡張, 提供, 支援, 明日, 時代, 最後, 最適, 検索, 業務, 概要, 活用, 浸透, 減少, 満足, 準備, 焦点, 特定, 現状, 生産, 直接, 社内, 積極, 維持, 職種, 自分, 自動, 自動的, 自身, 製品, 要点, 解決, 解説, 言及, 記録, 訪問, 設定, 調査, 質問, 転換, 迅速, 通り, 通用, 通話, 達成, 適応, 開発, 間違い, 集客, 顧客, 駆使,

英語学習にお金を使うように考えを変えます.今まで何度も
2025.07.04
おはようございます.英語学習にお金を使うように考えを変えます.今まで何度も挫折してきた英語学習にお金をかけようと思っています.自分が望むものはサブスクでスマホやPCで勉強が学べるものです.
そういうものを考えたときに浮かぶのがスタディサプリです.スタディサプリみたいなアプリが他にもないのか調べてみました.
自分で調べるのは面倒なのでGeminiさんに調べてもらいました、下記が返答結果になります.
スタディサプリ以外にも、オンラインで学習できるサービスはたくさんあります。対象年齢や学習内容によって様々な選択肢があるので、ご自身の目的やレベルに合わせて検討してみてください。
いくつか代表的な類似サービスやカテゴリーを挙げます。
大手予備校・通信教育系のオンラインサービス
- Z会: 小学生から高校生、大学受験生まで幅広い層に対応した通信教育の老舗。映像授業と丁寧な添削指導が特徴です。
- 進研ゼミ: ベネッセが提供する、小・中・高校生向けの通信教育。タブレット学習やAIを活用した個別最適化された学習が強みです。
- 東進ハイスクール在宅受講コース / 東進オンライン学校: 有名講師による質の高い映像授業が特徴。大学受験に強いです。
- 学研プライムゼミ: 高校生・浪人生向けのハイレベルな映像授業が中心。難関大学対策に特化しています。
- 河合塾One: 河合塾が提供するオンライン学習サービスで、短時間で手軽に学べるコンテンツが特徴です。
AI学習・個別最適化に特化したサービス
- アタマプラス (atama+): AIが生徒の理解度に合わせて最適なカリキュラムを生成し、個別指導のように学習を進められるサービスです。塾や学校への導入も進んでいます。
- すらら: AIが生徒の学習状況を分析し、最適な問題を提供。特に苦手克服や学習習慣の定着に力を入れています。無学年式なので、さかのぼり学習も可能です。
- スマイルゼミ: タブレットを活用した小・中学生向けの通信教育。AIが学習状況に合わせた問題を出題し、定着を促します。
資格取得・ビジネススキル系のオンライン学習サービス
- Schoo (スクー): ビジネススキルやITスキルなど、幅広い分野のオンライン授業をライブ配信や録画で提供しています。
- Udemy (ユーデミー): 世界中の講師が様々な分野の講座を販売しているプラットフォーム。買い切り型で、セール時には大幅割引もあります。
- スタディング: 簿記やITパスポートなど、資格取得に特化したオンライン講座を多数提供しています。
- ユーキャン / ヒューマンアカデミー / 資格のキャリカレ / フォーサイト など: 各種資格取得に特化した通信講座を提供しています。
その他
- N予備校: KADOKAWAとドワンゴが運営する、高校生向けのオンライン学習サービス。多様な講座やプログラミング学習もできます。
- Classi (クラッシー): 学校で導入されていることが多い学習支援プラットフォームで、学習動画やドリルなどが提供されます。
自分で調べるより本当にチャットAIで調べたほうが早いですね便利です、ちなみに生成AIに勉強を教えてもらうという方法もあるようです、自分もある程度身についたらそういう方向にシフトしていくつもりでいますが、何せ土台がガタガタなのでお金をかけて勉強をしようと思っています.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, アカデミー, アタマ, アプリ, いくつ, オンライン, お金, ガタガタ, カテゴリー, カリキュラム, キャリカレ, クラッシー, コース, こと, コンテンツ, サービス, サブスク, サン, シフト, スキル, スクー, スタディサプリ, スタディング, スマイル, スマホ, セール, セミ, その他, たくさん, タブレット, チャット, つもり, とき, ドリル, ドワンゴ, ハイスクール, ハイレベル, パスポート, ビジネス, ヒューマン, フォーサイト, プライム, プラス, プラットフォーム, プログラミング, ベネッセ, ほう, みたい, もの, ユーキャン, ユーデミー, よう, ライブ, レベル, 丁寧, 下記, 世界中, 中心, 予備校, 代表, 以外, 便利, 個別, 克服, 内容, 出題, 分析, 分野, 割引, 勉強, 動画, 取得, 受講, 受験, 受験生, 可能, 各種, 向け, 問題, 土台, 在宅, 多数, 多様, 大学, 大幅, 大手, 学年, 学校, 学研, 学習, 定着, 対応, 対策, 対象, 導入, 小・中学生, 小学生, 年齢, 強み, 手軽, 指導, 挫折, 授業, 提供, 支援, 教育, 方向, 方法, 明日, 映像, 最適, 有名, 東進, 検討, 様々, 河合塾, 活用, 浪人, 添削, 特徴, 状況, 理解, 生徒, 生成, 目的, 短時間, 簿記, 結果, 習慣, 老舗, 考え, 自分, 自身, 苦手, 英語, 講師, 講座, 販売, 資格, 返答, 通信, 運営, 選択肢, 配信, 録画, 難関, 面倒, 類似, 高校生,

GeminiCliを使ってみました、まぁまぁ使えるかもしれない.
2025.06.30
おはようございます.GeminiCliを使ってみました、まぁまぁ使えるかもしれないというのが第一印象です、ただデザイン修正には使えそうにない.デザインを提示すればその通りになおしてくれると思うのだけどテキストだけの指示ではなかなか難しいと感じました.
ディレクトリ配下にあるソースコードを読ます場合は下記のようなプロンプトを一度打つとスムーズに機能追加してくれるので良いですよ.
コードベースを把握して
最初にこの言葉をGeminiに投げることでどんな機能のプログラムコードなのか把握します.これがないと駄目な訳でもないだけどもスムーズに指示出しが出来ます.
特定のコードに対して修正やらを書けたい場合は@(アットマーク)を入力するとソースコードの候補が表示されるので選択をしてプロンプトを指示を出すと良いです.
あとGeminiCliを終了する場合は下記のコマンドを打てば終了します.
/exit
!を入力しls -aなどと入力するとMacの場合は階層のファイル一覧が表示されます的なことも出来ます.

ともあれ、ジェミナイ(ジェミニ)は無料で使用できるトークンも他よりも比較的に多いので自分としてはかなり嬉しいです、休日の個人開発はこれで何とか頑張っていけそうです.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
あっとまーく, あと, コード, こと, コマンド, これ, ジェミナイ, ジェミニ, スムーズ, ソース, そう, ディレクトリ, テキスト, デザイン, トーク, ファイル, プログラム, プロンプト, ベース, よう, 一覧, 下記, 休日, 使用, 修正, 個人, 候補, 入力, 出し, 印象, 場合, 把握, 指示, 提示, 明日, 最初, 機能, 比較, 無料, 特定, 終了, 自分, 表示, 言葉, 追加, 通り, 選択, 配下, 開発, 階層, 駄目,

どんだけ演算処理しているだよ.もはやリアルな世界なのかも.
2025.06.15
おはようございます.下記のゲーム動画を見て昔のゲームと比べると進化が著しい変化なのでついていけてないですね.でも本当に凄いと思っています.
こういうゲームというのは、どうやって作るのだろうかという事が興味深いです、一応、ユニティやアンリアルエンジンで作られているという事は知っているのですが、どこをどうやってこうなるのかは分からない.今までゲーム開発とかした事がないですし、勉強しようと考えた事もないので未知な領域です.
いまはでは敵キャラなどにもAIアルゴリズム?と言えば良いのかな、そういうアルゴリズムが組み込まれているらしく、自発的に考えて動いたり攻撃したりするそうです.それを並列処理している訳だから、演算処理はかなり高くなり、ゲーム機が発熱するのは避けられないのが現状だとか.
今でも制約がある中でゲームって作られているという認識です.いかに軽く動かすことが出来るかが鍵になりそうですね.また自分には雲の上ようなエンジニアさんたちが日夜必死に働いてこういうゲームが出来ていると思うと頭下がりますね.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
アルゴリズム, アンリアルエンジン, いま, エンジニア, キャラ, ゲーム, こと, サン, すいか, そう, それ, タチ, どこ, ユニティ, よう, 下記, 並列, 処理, 制約, 勉強, 動画, 変化, 必死, 攻撃, 日夜, 明日, 未知, 演算, 現状, 発熱, 自分, 自発, 認識, 進化, 開発, 雲の上, 領域,

x.gdのURL短縮機能を利用するためのコードを作りましたので、お裾分け.
2025.06.08
おはようございます.x.gdのURL短縮機能を利用するためのコードを作りましたので、お裾分けです、コードは下記になります.ドキュメントをぱぱっと見て作った感じなので不具合などが潜んでいるかもしれないけど恐らく大丈夫そうという事で木曜日の早朝にXでコードをシェアした形になります.
なお、x.gdからAPIの発行を行う作業をお忘れなく(こちらからAPIを発行).
因みに自分はt2t.jpというドメインを私有していて、こちらで自分専用の短縮URLを発行出来るようにしています.この頃は自分が作った短縮URLをあまり使ってないので、こちらをサービス化しようかな等と考えていたりします.
因みにどうするかは未定ですけどね.もしみんなが使用出来るようにしたら、このサイトでも告知します.
<?php
require 'config.php';
class ShortUrl
{
public $apiKey = null;
public $endPoint = 'https://xgd.io/V1/shorten?';
public function __construct($api_key = null)
{
$this->apiKey = $api_key;
return $this;
}
public function getShortUrl($url = null, $shortid = null, $analytics = true, $filterbots = false)
{
if (empty($this->apiKey)) {
return json_encode(['status' => 0, 'message' => 'api-keyがありません']);
}
if (empty($url)) {
return json_encode(['status' => 0, 'message' => 'URLがありません']);
}
if (isset($url) && !preg_match('/^http[s]?:\/\/(www\.)?/', $url)) {
return json_encode(['status' => 0, 'message' => 'URLが無効です']);
}
if (isset($shortid) && !preg_match('/^([0-9a-zA-Z_]{6,15})$/', $shortid)) {
return json_encode(['status' => 0, 'message' => '短縮コードが無効です']);
}
if (!is_bool($analytics)) {
$analytics = true;
}
if (!is_bool($filterbots)) {
$filterbots = false;
}
$parameter = [
'key' => $this->apiKey,
'url' => $url,
'shortid' => $shortid,
'analytics' => $analytics ? 'true' : 'false',
'filterbots' => $filterbots ? 'true' : 'false'
];
$response = @file_get_contents($this->endPoint . http_build_query($parameter));
return $response;
}
}
if($argv[1]){
$url = $argv[1];
$shortid = isset($argv[2]) ? $argv[2] : null;
$analytics = isset($argv[3]) && $argv[3] === 'true' ? true : false;
$filterbots = isset($argv[4]) && $argv[4] === 'true' ? true : false;
echo (new ShortUrl(APIKEY))->getShortUrl($url, $shortid, $analytics, $filterbots);
}
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, お裾分け, コード, こちら, サービス, サイト, シェア, そう, ため, ドキュメント, ドメイン, みんな, よう, 下記, 不具合, 作業, 使用, 利用, 告知, 大丈夫, 専用, 感じ, 早朝, 明日, 木曜日, 未定, 機能, 無効, 発行, 短縮, 私有, 自分,

デジタルアドレスAPIのコードを書いてみました.書いたのは
2025.05.30
おはようございます.デジタルアドレスAPIのコードを書いてみました.書いたのは生成AIだけど一度で上手く正しいコードが生成出来たわけではなくて二、三回の指示出しを行って下記のコードが生成されました.
デジタルアドレスのAPIを使用するには企業もしくは個人事業者で屋号を登録されている方でないとAPIのアカウント登録は今のところ出来ないので、自分はリファレンスと生成AIが出力したコードを見て恐らく正しく処理されるだろうと思ったのでgist.githubに公開しました.
尚、引数にIPアドレスを渡さないといけない所があるけれど、これはサーバーのIPアドレスになります.
<?php
class JapanPostAPIClient
{
private string $clientId;
private string $secretKey;
private string $clientIp;
private ?string $accessToken = null;
private ?array $lastResponse = null;
public function __construct(string $clientId, string $secretKey, string $clientIp)
{
$this->clientId = $clientId;
$this->secretKey = $secretKey;
$this->clientIp = $clientIp;
}
public function authenticate(): self
{
$url = 'https://api.da.pf.japanpost.jp/api/v1/j/token';
$data = json_encode([
'grant_type' => 'client_credentials',
'client_id' => $this->clientId,
'secret_key' => $this->secretKey
]);
$headers = [
"Content-Type: application/json",
"x-forwarded-for: {$this->clientIp}"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode !== 200) {
throw new Exception("Token request failed with status {$httpcode}: {$response}");
}
$responseData = json_decode($response, true);
$this->accessToken = $responseData['token'] ?? null;
$this->lastResponse = $responseData;
return $this;
}
public function searchCode(string $searchCode, array $params = []): self
{
if (!$this->accessToken) {
throw new Exception("Access token is not set. Please call authenticate() first.");
}
$defaultParams = [
'page' => 1,
'limit' => 10,
'choikitype' => 1,
'searchtype' => 1
];
$queryParams = http_build_query(array_merge($defaultParams, $params));
$url = "https://api.da.pf.japanpost.jp/api/v1/searchcode/{$searchCode}?{$queryParams}";
$headers = [
"Authorization: Bearer {$this->accessToken}",
"Accept: application/json"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
throw new Exception("Search request failed with status {$httpCode}: {$response}");
}
$this->lastResponse = json_decode($response, true);
return $this;
}
public function getJson(): string
{
return json_encode($this->lastResponse, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}
public function getArray(): ?array
{
return $this->lastResponse;
}
}
// 使い方の例:
// $client = new JapanPostAPIClient('YOUR_CLIENT_ID', 'YOUR_SECRET_KEY', 'IPアドレス.xxx.xxx.xxx');
// echo $client->authenticate()->searchCode('1000001')->getJson();
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, アカウント登録, アドレス, コード, サーバー, デジタルアドレス, リファレンス, 下記, 企業, 使い方, 例, 個人事業者, 屋号, 引数, 所, 指示出し, 正しいコード, 生成, 自分,

AIでは作れないものの例えばこの人の職業は今後数十年は安泰だと思いました.
2025.05.25
おはようございます、AIでは作れないものの例えばこの人の職業は今後数十年は安泰だと思いました.下記のような職業は全然、AIの影響は受けていないと思います.こんな感じでリアルで何かを創作する人達はあまり影響を受けないかと思います.
今から影響を受けてくるのは、エンジニアやデスクワークの方々なんですよ、これ結構な勢いで置き換わっていくと思います.いままでエンジニアしか出来なかったプログラミングの職業もAIを使用してちょっとしたアプリなんかを作れるようになって来ています.
いわゆるバイブコーディングという奴です.でもこれを修正することは素人には難しいので、結局のところプログラミングの素養が必要みたいです.いま一番影響を受けているのはデジタルなクリエイターだと思います.
ちょっとお金を支払えばAIでかなり良い物が作れるようになってきて…正直なところこれから大変になってきそうです.殆どのユーザーが生成AIで良いと思ったらそれはカナリ辛いものだと思います.
因みに何故、日本はAI生成の影響を受けにくいかといえば、生成AIの操作するユーザーインターフェースが英語で表記しているからなんだと思います.ここを取っ払うことが出来てくると浸透してくると自分は思っています.
AIで作ったものが溢れてきてしまうのは時間の問題なのかも知れない.
これからはリアルで創作するか、もしくはAIを上手く使用してモノづくりするべきなのかもと思います.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
アプリ, エンジニア, カナリ辛いもの, クリエイター, デスクワーク, ところプログラミング, バイブコーディング, プログラミング, ユーザー, ユーザーインターフェース, 下記, 勢い, 影響, 方々, 殆ど, 生成, 素人, 素養, 職業, 英語,

デフォルトではLaravel12にはapi.phpがないのでインストールが必要かも.
2025.05.15
おはようございます.デフォルトではLaravel12にはapi.phpがないのでインストールが必要かもです.インストールが必要な方は下記のコマンドよりインストールください.
php artisan install:api
この頃、サーバー移行した時に何故かYosakoiのサービスが落ちてしまって最新のLaravel12を入れたりしました.本当はUPDATEで解決したかったのですが、それがライブラリを管理しているオートローダーが変になってしまって新規に入れ直して対応しました、因みにどうもサーバー上のファイルが物理的に壊してしまったようです.
ローカルサーバーではちゃんと動くのにサーバー上では上手く機能しないという超稀な事象に…
これを解決するには時間がかかりそうという事でLaravelのプロジェクトを作って今までのファイルを移植した形になります.
その時にLaravel12にはAPIファイルがないだなって気づいて昨日直しました.
因みにLaravel11から消えたそう🤔
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
インストール, オートローダー, コマンド, サーバー上, サーバー移行, サービス, デフォルト, ファイル, プロジェクト, ライブラリ, ローカルサーバー, 下記, 事象, 形, 時間, 最新,

こんなサイトを作りました.無償で制作します、続きがあるよ.
2025.04.25
おはようございます.こんなサイトを作りました.無償で制作します、続きがあるよ.下記の画像を拡大してみてくれると分かるかと思いますが、無償でWEBサービス制作する代わりに運営権はこちらにあり、広告掲載を行って収益化を図るというもの.
収益化出来なかった場合はデジタル販売出来るところに置いて売る.設置等は分かる人に置いてもらうことになると思うけども、こちらとしては利益を得る可能性があるということでビジネス的には赤字になるけど依頼していたユーザーは買う可能性があるのでペイ出来れば良いかなと思っています.
なぜ、こういうサイトを作ったかというとこの頃アイディアが前よりあまり出てこなくなったので、ユーザーさんからアイディアを頂いて作るという仕組みを作ったのだけど、今のところ誰からも要望はないです.
これが有名なひとだったら依頼が来るだろうけど無名なので当分は来ないだろうなって思っています.
明日へ続く

著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
アイディア, この頃アイディア, デジタル販売, ところ, ところ誰, ユーザー, ユーザーさん, 下記, 依頼, 利益, 収益化, 可能性, 広告掲載, 無償, 画像, 良いか, 要望, 設置, 赤字, 運営権,

404画像をそのまま残しておくとSEOに影響があるのでどうするか?#php
2025.04.23
おはようございます.404画像をそのまま残しておくとSEOに影響があるのでどうするか?php の場合、下記のコードで404ページに飛んでいるかどうかの確認は出来る.でも毎回、確認しているとページを表示している時に遅延が発生してとても良い処理とは言えないなのでDBに画像あるなしが確認できるテーブルを作ります.
<?php
class HttpCodeChecker
{
public function getHttpStatusCode(string $url): int|false
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
if (curl_errno($ch)) {
curl_close($ch);
return false; // エラーがあった場合
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpCode;
}
}
画像のステータス確認できるコードで定期的にページをクロールしてステータスをテーブルに保存(更新)することにより404画像によってSEOに影響を与えない作りになります.
他にも方法はあるけど、レンタルサーバーではこの方法がベストプラクティスな解なのかもしれない.クロールするのが出来ない場合は一度、画像URLをJsonデータで出力してフロントエンド側で画像有無を判断し存在するものだけを表示するという案もあるのだけども、今のSEO的にはあまりオススメはしない.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, エラー, コード, ステータス, データ, テーブル, フロントエンド側, ベストプラクティス, レンタルサーバー, 下記, 保存, 影響, 方法, 案, 毎回, 画像, 画像有無, 確認, 良い処理, 遅延,

CSSだけで3Dボックス(箱)が作れるようにいつの間にかなっていた.自動回転!?
2025.04.16
おはようございます.CSSだけで3Dボックス(箱)が作れるようにいつの間にかなっていた話を書いていきます.生成AIにCSSだけで3Dボックス(箱)を作ってと指示を行ったら自動回転してくれるものを出力してくれて驚愕している.
CSSだけで3Dボックスが作れることは知っていたのだけど、自動回転はJSを使用しないと無理だろうと思っていたので、実際生成AIが出力されたのを見て驚きでした.こんな感じで旧の知識を生成AIはアップデートしてくれるのには、凄く良いと思っています.
ただ、質問して実際動かないものも出力されるので要は使う側もそれなりに知識を持っていないと嘘を信じてしまうことにもなるので、生成AIを使う側も最低限の知識は必要になると思っています.
因みにソースコードは下記になります.これをテキストファイルに保存して拡張子をhtmlに変えた後に、そのファイルをブラウザにドロップすると表示されます.
明日へ続く
デモページ:https://zip358.com/tool/demo96/
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>3D Box</title>
<style>
body {
margin: 0;
background: #111;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
perspective: 1000px;
}
.scene {
width: 200px;
height: 200px;
position: relative;
transform-style: preserve-3d;
animation: rotate 10s infinite linear;
}
.face {
position: absolute;
width: 200px;
height: 200px;
background: rgba(0, 150, 255, 0.7);
border: 2px solid #fff;
}
.front { transform: translateZ(100px); }
.back { transform: rotateY(180deg) translateZ(100px); }
.right { transform: rotateY(90deg) translateZ(100px); }
.left { transform: rotateY(-90deg) translateZ(100px); }
.top { transform: rotateX(90deg) translateZ(100px); }
.bottom { transform: rotateX(-90deg) translateZ(100px); }
@keyframes rotate {
from { transform: rotateX(0deg) rotateY(0deg); }
to { transform: rotateX(360deg) rotateY(360deg); }
}
</style>
</head>
<body>
<div class="scene">
<div class="face front"></div>
<div class="face back"></div>
<div class="face right"></div>
<div class="face left"></div>
<div class="face top"></div>
<div class="face bottom"></div>
</div>
</body>
</html>
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
ソースコード, テキストファイル, デモページ, ファイル, ブラウザ, ボックス, 下記, 側, 嘘, 実際, 実際生成, 感じ, 拡張子, 指示, 旧, 最低限, 生成, 知識, 箱, 自動回転は,

VScodeでMCPを試してみました.#playwright-mcp
2025.04.11
おはようございます.IT界隈で流行っているMCPやってみたを自分も試してみました.今回、試したのはplaywright-mcpです.テキスト指示だけでブラウザを開きYahooページに行き、ITニュースを参照してと指示するとITニュースを開いてくれる.
当然、指示だけでログインなんかも出来てしまいます.何気に便利そうでしたがポップアップ画面に文字を入力して投稿なんてのは出来ない感じでしたね.そしてクリックしてという指示は出来るものの「続行」というボタンをこちらでクリックしないといけないので、これでは本末転倒だなって思いました.
そもそもそういう用途に使用するために作られたMCPではないのでしょうが無いですけどね.今回、参考にした記事は下記になります.
https://zenn.dev/dotdtech_blog/articles/9250aa8303a72f
尚、手順通りでは上手くsettings.jsonが開けなかった感じでしたね.これで開く事が出来ます.ctrl+pと押して下記を入力.
>settings.json
尚、MCPを有効にするにはブラウザのアドレスバーに下記を入力してください.
vscode://settings/chat.agent.enabled
後は上記のリンク通りに設定してchatをエージェントに切り替えて実行すれば出来ます.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
アドレスバー, エージェント, テキスト指示, ニュース, ブラウザ, ボタン, ポップアップ画面, リンク通り, ログイン, 上記, 下記, 入力, 参考, 手順通り, 投稿, 指示, 文字, 用途, 界隈, 続行,

Not Foundページのある際に画像の存在有無を調べる方法. #画像存在有無
2025.02.18
おはようございます.Not Foundページのある際に画像の存在有無を調べる方法を書いてみました.これでローカルNode.jsサーバーを走らして画像がちゃんとサーバーにアップしているかなどの確認することが出来ます.下記のコードは画像の存在有無だけの処理ですので画像URLリスト処理が必要なります.
Node.jsでもmysql接続可能ですので例えばPHPで画像のURLを発行しているなどの場合はPHPで書いているコードと同じようなコードをNode.jsでも発行して回してあげればサイト内の画像の存在有無を確認することが出来ます.
function checkImage(url, callback) {
const img = new Image();
img.onload = function () {
callback(true); // 画像が正常にロード
};
img.onerror = function () {
callback(false); // 画像が存在しない(404など)
};
img.src = url;
}
checkImage("https://taoka-toshiaki.com/icon.jpg", function (exists) {
if (exists) {
console.log("画像が存在します");
} else {
console.log("画像が見つかりません(Not Found)");
}
});
全然関係ない話ですが、阿修羅のごとくはあと三話でコンプリートです、この記事がUPしている頃にはあと二話ぐらいになっている頃だとは思いますが、ドラマは全話7時間とちょっとなので結構見るのに体力が必要になります.観溜めするひとはマジでリスペクトですねー.コードはずっと書いていられるけど、ドラマは1日、一話か二話が限界です.ではでは~.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
コード, コンプリート, サーバー, ドラマ, ひと, リスペクト, ローカルサーバー, ロード, 下記, 体力, 処理, 存在有無, 接続, 画像, 画像リスト処理, 話, 関係, 阿修羅, 限界, 際,

Vue.jsでコードを書き直してみたけどバニラJSが良い時もある技術的な話といえばそんな感じ.
2025.02.09
おはようございます.何もしていないわけではないけど毎日小銭が入ってきた頃を思うといまは前に戻った感じがあります、やっぱり無いよりある方が良いですね.さてHxH-moji.comサービスのバニラJSコードをVue.jsへ置き換えてみたのだけどもレンダリングが遅くなってこれは駄目だなと思ったので元の状態に戻しました.
たまにバックのソースコードがどんな感じに動いているのかを調べている人がいるのだけど、そんなに大したソースコードが動いているわけではないのでお恥ずかしいですね.最近やっと名前付けを変更してソースコードを見たらわかる感じにしたつもりでいます.
因みに下記がレンダリングが遅くてボツにしたコードです.本当ならVue.jsでサクサクと動くコードを作りたいのですがVue.jsはまだまだ初心者さんレベルです..あまりVue.jsもReactもあまり分からないのが現状です、業務で使用することはあるものの一から作るとなるとあんまり上手く作れないです.
トホホ・・・.
この頃思うのは広告掲載だけで何とか回るものを作りたいなとサブスクは個人ではちょっと荷が重い.重いもありますが何せ審査が通りそうにないECサービスはまだ手を付けていないのはそんな理由です.自分のテンション上がるのを待って作りたいと思います.
const { createApp, ref, onMounted, nextTick } = Vue;
const app = createApp({
setup() {
const canvas = ref(null);
const languageInput = ref('');
const fontsize = ref(16);
const alertMessage = ref('');
const mobileText = ref('');
const isMobile = ref(window.innerWidth <= 768);
const fetchText = async (flg) => {
try {
const body = new FormData();
body.append('txt', languageInput.value);
const response = await fetch("/common/jpcvn", {
method: "POST",
headers: { "X-CSRF-TOKEN": document.querySelector("[name='token']").value },
body: body
});
const resultdata = await response.json();
drawCanvas(resultdata.txt);
mobileHxH(resultdata.txt);
canvas.value.toBlob((blob) => {
const formData = new FormData();
formData.append("upload_data", blob, "canvas_image.png");
formData.append("name", document.getElementsByName("name")[0].value);
formData.append("sns_name", document.getElementById("sns").value);
formData.append("text_data", resultdata.txt);
if (!flg) formSave(formData);
}, "image/png");
} catch (error) {
console.error(error);
}
};
const drawCanvas = async (text) => {
await nextTick();
if (!canvas.value) return; // canvasがnullの場合は処理を中止
const ctx = canvas.value.getContext("2d");
ctx.clearRect(0, 0, canvas.value.clientWidth, canvas.value.clientHeight);
const background = new Image();
background.src = "/images/paper_00107.jpg";
background.onload = () => {
ctx.drawImage(background, 0, 0, canvas.value.clientWidth, canvas.value.clientHeight);
ctx.fillStyle = "rgba(0, 0, 0)";
ctx.font = `${fontsize.value}px HUNTERxHUNTER`;
const lines = textChange(text, fontsize.value);
lines.forEach((line, i) => {
ctx.fillText(line, 3, 10 + fontsize.value * (1.1618 * i + 1));
});
};
};
const textChange = (t, f) => {
let n = parseInt(350 / f);
let s = t.split("");
let LLine = 0;
for (let i = 0; i < s.length; i++) {
if (LLine && (LLine + 1) % n === 0) {
if (s[i] !== "\n") s[i] += "\n";
LLine = 0;
} else {
LLine++;
if (s[i] === "\n") LLine = 0;
}
}
return s.join("").split("\n");
};
const formSave = async (formData) => {
alertMessage.value = '';
try {
const response = await fetch("/common/image_save", {
method: "POST",
headers: { "X-CSRF-TOKEN": document.querySelector("[name='token']").value },
body: formData,
});
const result = await response.json();
if (result.ret === "ok" && result.url) {
window.location.href = result.url;
} else {
alertMessage.value = result.txt;
}
} catch (error) {
console.error(error);
}
};
const mobileHxH = (tt) => {
if (isMobile.value) {
mobileText.value = tt;
}
};
const adjustTextareaRows = () => {
isMobile.value = window.innerWidth <= 768;
};
onMounted(() => {
adjustTextareaRows();
window.addEventListener("resize", adjustTextareaRows);
});
return {
canvas,
languageInput,
fetchText,
alertMessage,
mobileText,
isMobile,
fontsize
};
}
});
app.mount('#app');
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, コード, サブスク, ソースコード, テンション, トホホ, バニラコード, ボツ, ももあまり, レンダリング, 下記, 中止, 何せ審査, 元, 処理, 名前付け, 小銭, 業務, 現状, 荷,

blueskyAPIが処理されなくなったので、対応を行った話.
2025.01.06
おはようございます.今日から仕事始めの方も多いはず自分もそんな感じです.さて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
タグ
```, エンジニア, カード型, カード板自動投稿, コード, ソースコード, ライブラリー, レンタルサーバー, 下記, 仕事始め, 公式, 処理, 参考, 多いはず自分, 形, 感謝, 環境, 自前, 言語,

Pythonの仮想環境で使おうの巻. python3 -m venv
2024.12.19
おはようございます.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
タグ
インストール, コード, コマンド, ディレクトリ配下, トイウコトデ, ドキュメント配下, ドライブ, ライブラリ, リナックス, 下記, 仮想環境, 仮想環境下, 仮想環境名任意, 何処, 利点, 巻, 業務, 経緯, 英字, 言語,

Pythonでノイズキャンセリングアプリ化するコードです😤デスクトップアプリ
2024.12.14
おはようございます.昨日の続きを記載します、Pythonでデスクトップアプリを作りました、デスクトップにPythonが入っている環境で下記のファイルを実行することでノイズキャンセリングが出来ます.
尚、前手順でライブラリを2つインストールください.
pip install scipy noisereduce
import tkinter as tk
from tkinter import filedialog, messagebox
from scipy.io import wavfile
import noisereduce as nr
import os
def select_file():
file_path = filedialog.askopenfilename(
filetypes=[("WAV files", "*.wav")]
)
if file_path:
file_entry.delete(0, tk.END)
file_entry.insert(0, file_path)
def reduce_noise():
file_path = file_entry.get()
if not os.path.isfile(file_path):
messagebox.showerror("エラー", "Please select a valid WAV file.")
return
try:
# Load data
rate, data = wavfile.read(file_path)
# Perform noise reduction
reduced_noise = nr.reduce_noise(y=data, sr=rate)
# Save reduced noise file
output_path = os.path.splitext(file_path)[0] + "_reduced_noise.wav"
wavfile.write(output_path, rate, reduced_noise,stationary=True,prop_decrease=0.7)
messagebox.showinfo("成功", f"出力先:\n{output_path}")
except Exception as e:
messagebox.showerror("Error", f"An error occurred: {e}")
# Create the main application window
root = tk.Tk()
root.title("ノイズキャンセリングツール")
# Input file selection
frame = tk.Frame(root)
frame.pack(pady=10, padx=10)
tk.Label(frame, text="Select a WAV file:").grid(row=0, column=0, pady=5, padx=5)
file_entry = tk.Entry(frame, width=40)
file_entry.grid(row=0, column=1, pady=5, padx=5)
select_button = tk.Button(frame, text="Browse", command=select_file)
select_button.grid(row=0, column=2, pady=5, padx=5)
# Noise reduction button
process_button = tk.Button(root, text="ノイズ除去", command=reduce_noise, bg="lightblue")
process_button.pack(pady=10)
# Run the application
root.mainloop()
因みにこのコードをパッケージ化したい場合はPythonの下記のライブラリをインストールするとパッケージ化が出来ます.
pip install pyinstaller
pyinstaller noise-cut.py
自分でもノイズキャンセリングを試してみましたが精度はいまいちでした、noisereduceの微調整が必要になりそうです.
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
エラー, コード, デスクトップ, デスクトップアプリ, ノイズキャンセリング, ノイズキャンセリングツール, ノイズ除去, パッケージ化, ファイル, ライブラリ, 下記, 出力先, 前手順, 微調整, 成功, 環境, 精度, 自分,

Push通知ってブラウザ閉じても通知出来る様に出来るのか?
2024.11.04
おはようございます.Push通知ってブラウザ閉じても通知出来る様に出来るのか?答えは出来るのですが無料でその機能を実装できるのか.こたえはYesに近い?.有料のサービス機能push7を使用すればもっと簡単に可能です.
サービスワーカーとかいう機能を使えば良いみたいですね.知らないは一時の恥ですね.サービスワーカーとGCPやララベルの拡張Webpushなどを使えば出来そうですがまだ試していません.
因みにPusherサービスを使用して実装しました.当分、無料枠で対応可能な感じですね💁.
下記はリアルタイムPush通知の動作とソースコードの一部になります.
<?php
namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class NotificationEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $title;
public $message;
public $userId;
public function __construct($title, $message,$userId='')
{
$this->title = $title;
$this->message = $message;
$this->userId = $userId;
}
public function broadcastOn()
{
return new Channel('notifications.' . $this->userId);
}
public function broadcastAs()
{
return 'notification-event';
}
}
明日へ続く
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
```, サービス, サービスワーカー, サービス機能, ソースコード, ブラウザ, ララベル, リアルタイム通知, 一部, 下記, 動作, 恥, 拡張, 有料, 機能, 無料, 無料枠, 答え, 通知,

指定日に記事を削除するWPのプラグインの雛形.
2024.10.24
おはようございます.指定日に記事を削除するWPのプラグインの雛形を作りましたが記事の削除部分(article_del_R)はご自身で作ってください.削除部分をご自身で作り自分のサイト(WP)を定期的にcronで叩けば削除される仕組みです.
毎度のことですみませんがソースコードを解析してお使いいただければと思います.また、このコードは試作品になります.
WPプラグインの画面はこんな感じです.

ソースコードはQiitaで公開しています.
因みにワードプレスで非同期処理を行うのは少し面倒です、たまに間違った情報を掲載しているサイトがあるので注意が必要です.下記で非同期処理を設定しまうとログアウトした状態でも叩けるらしいので気おつけてください!.
“wp_ajax_nopriv_{$action}”
明日へ続く.
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
Action, article_del_R, cron, qiita, wp, wp_ajax_nopriv, WPプラグイン, コード, ソースコード, プラグイン, ワードプレス, 下記, 削除部分, 毎度, 注意, 状態, 画面, 試作品, 雛形, 非同期処理,

ネットを一日使用せずに生活をしてみた.結果.
2024.10.04
おはようございます.休みの日にネットを一日使用せずに生活をしてみました.結果.とても空き時間が増えました.そういえば学生時代はこんな感じだったなと、ネットを見ない分テレビを見たり本を読んだりとすることが多くなりましたが、下記の動画のようにスマホをONにした途端、友達からLINE通知が飛んでくることもなかったので.
二三日だったら、それほど困らない感じがします.ネットをしないことでわかったことは調べ物が瞬時にわかるということはどれほど楽なことだということと、日頃から情報を浴びている為か覚えていないということ.調べれば瞬時にわかるということは逆に言えば覚えるという行為をしないことだとも感じました.
明日へ続く.
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
LINE通知, ON, スマホ, ネット, 一日, 下記, 休み, 分テレビ, 動画, 友達, 学生時代, 情報, 日頃, 本, 生活, 瞬時, 空き時間, 結果, 行為, 調べ物,

サジェストでautoComplete.jsを使用したときの話.
2024.08.19
おはようございます.サジェストでautoComplete.jsを使用したときの話を書いていきます.まずよさこい祭り動画検索の方でサジェストを導入しようと決めて調べていた所、autoComplete.jsが簡単に導入できて良いよと記載されていたので使用してみました.
使用して分かったことは、一度取り込んだサジェストデータを置き換えたい場合は下記のようにしないと駄目です.SELECT部分がチェンジしたらサジェストデータの再読込みを行えば良いのかなと思っていましたが、データが一向に書き換わらないので、もしやと思って公式サイトのドキュメントを読んでいたら何となくこれは置き換わらないことに気づきました.
autoCompleteJS.unInit();
尚、書き換えるためにautoCompleteJSはグローバル扱いにしました、本当はもっとスマートなやり方があるだろうけど、これが自分にとってはベストかなと思ったのでこのような形にしています.
明日へ続く.
著者名
@taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
autoComplete.js, autoCompleteJS, autoCompleteJS.unInit, SELECT部分, サジェスト, サジェストデータ, データ, ドキュメント, やり方, 一度, 下記, 公式サイト, 再読, 形, 所, 祭り動画検索, 自分, 話,