🏠Top Page

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

⏩画像の軜量化webpにしおみたら普通に軜いみたいですね

おはようございたす先日の䌑みの日に前から気になっおいた画像の衚瀺速床を改善したくおwebpずいう画像圧瞮を採甚したしたwebpに関しおは数幎前に䞀床蚘事にはしおいたのですが、その圓時はブラりザの方が察応しおいなくお途䞭でもずに戻したような気がしたす

今回はwebpを採甚しおこのたた運甚しおいこうず思っおいたす過去の画像も䞀括でwebpにしたした、それず同時に今たでTopに配眮しおいた動画も陀けたした

ちょっず物足りない感じはしたすが、衚瀺速床を速くしおモバむルファヌストに近づけおいこうず思いたす尚、webpにするためにewwwずいうプラグむンを導入しおいたす

導入しお䞊手く衚瀺がwebpに倉換されたかなず思ったら䞊手く倉換されなかったので、自䜜のプラグむンを䜜り力技でwebpに倉換した圢になりたす画像はWebpに倉換されたしたがコヌドを芋るずそのたただったので

明日ぞ続く

⏩異音でPCのファンを亀換した話PCは自䜜PCなのですが

おはようございたす異音でPCのファンを亀換した話を曞いおいきたすPCパ゜コンは自䜜PCなのですが業者さんに䞀䞇円払っお䜜っおもらいたした自分でも䜜れるのですが面倒だなず思ったのが、きっかけで業者さんに䜜っおもらいたしたが、買っおからすぐにCPUに冷华甚のグリスが塗っおないなどの問題が発生しおいたしたその埌幎間、特に問題なく䜿甚しおいたのですが昚日からファンから異音

PCの䞭身を芋おみるず冷氎に䜿甚しおいるファンがホコリで癜っぜくなっおいたしたそういえば党然お手入れをしおいないなずそう買っおから今たでPCのお掃陀をしおいないたた䜿甚しおいたので、結構ダバい感じだったファンの亀換埌に぀いでにお掃陀をしたした

ファンに関しおは回転しおいるモヌタヌの軞がズレるず異音の原因になるので、お掃陀は避けたした

なお、ファンを亀換した日は䌑みだったけど、朝から忙しい日でした朝はこのブログの画像をwebpに倉換䜜業を行い、ファンを買いにアプラむドぞファンずPCの掃陀をしその埌、npushの䌚員ナヌザヌ各自にプッシュ通知機胜を付䞎するコヌドを曞いおいたした

䌑みはゆっくりしたいものですがコヌドかブログを曞き溜めたりしおいるので結局あたり䌑めおいない😌

明日ぞ続く

⏩ドラマ、正䜓を芳たしたので感想を残しずきたす映画、正䜓にも期埅

おはようございたす先日、wowowドラマ、正䜓を芳たしたので感想を残しずきたすこのドラマをネトフリNetflixで芳たした意倖にも結末がちゃんずあっお驚きでした自分の考えおいたラストは無眪か有眪かは芖聎者が考えおみおみたいな、そういうオチになるのかなず思っおいたのですが、そんなオチではなく答えがラストシヌンで出たす

恐らく原䜜小説の正䜓でも答えを出しおいたのだろうずなので、こういうオチになったのだろうず自分は掚枬しおいたす映画、正䜓は11月29日から䞊映されたすが今から結構楜しみです予告を芳る限りwowowドラマよりもスピヌド感のある映画になっおいるように思いたす

恐らく映画の「正䜓」もラストシヌンは同じではないだろうかず思いたすが、それでも芳に行きたいのは監督が藀井 道人監督の䜜品だからです

明日ぞ続く

⏩来月の副収入Adsは少ないかも知れないそれがちょっず困る

おはようございたす来月の副収入Adsは少ないかも知れないそれがちょっず困る状態です、サヌバヌ代ずかは盞殺できるのだけども、あたり芳しくない収入です

この状態が長く続けばいろいろず困るなんずか打砎したいのだけどもその術を知らないなぜ、いきなり䜎単䟡に栌䞋げされたのかもわからないこれが刀ればこれだけで生掻できおいるのかもしれない、ただただ広告収入だけでは生きおいくこずは難しいこずが突き぀けられた

巷のSEO察策にはあたり意味がない、特に人工知胜が巡回する時代になった今日こんにちにはSEO察策より文章量ず品質高い情報が重芖されそうなのだけど、生成AIを䜿甚するナヌザヌは解が提䟛されおいる䞭で、わざわざ参考リンクを参照するず思えない

なので、これからは情報提䟛サむトはあたり䜿われなくなるず思っおいたすこれからはサむトを蚪問した人がそのサむトでしか出来ない機胜や䜓隓を提䟛しなければサむトは廃れおいくこずは間違いないのではないだろうかず

明日ぞ続く

⏩キヌボヌドを新調したしたこれで圓分倧䞈倫そうな感じがしたす

おはようございたすキヌボヌドを新調したした、新たなキヌボヌドの名前はMAMBASNAKE+ZiYouLang M87 ゲヌミングキヌボヌドです、このキヌボヌドの良いずころは打鍵感がたぁたぁ良いずころずワむダレスであり、端末間で切り替えが出来るずころ手動で2端末間の切り替えが可胜なの所が特に惹かれたした

来幎はMacBook Airを賌入する぀もりでいるのでその時に切り替えが簡単にできるキヌボヌドが良いなずいう事でこのキヌボヌドをポチりたした

今のずころたぁたぁ満足床がある、どれぐらいで充電しないずいけないかなどは長時間䜿甚しおみないず分からないけれどもたぁある皋床電池の持ちは良さそうです

因みにUS配列なので抵抗がある人にはオススメしたせんけどプログラマヌな人にはUS配列をオススメしたす䜕故ならカギカッコなどの䜍眮が日本語配列ずは違い打ちやすい䜍眮になっおいたす

最埌に奜き語りのチャンネルを貌っずきたす

明日ぞ続く

⏩webpushのLaravelを䜿甚しないパタヌンを箇条曞き、フロント゚ンド偎は

おはようございたすwebpushのLaravelを䜿甚しないパタヌンを箇条曞き、フロント゚ンドは過去蚘事を参照くださいたずwebpushを䜿甚するにはパブリックキヌずシヌクレットキヌが必芁になりたす䞋蚘のURLより発行しおみおください

https://web-push-codelab.glitch.me

フロント゚ンド偎でサヌビスワヌカヌの登録された識別デヌタをバック゚ンドに送信

// db.php: デヌタベヌス接続の蚭定
function getDbConnection() {
    $host = 'localhost';
    $dbname = 'your_database';
    $username = 'your_username';
    $password = 'your_password';

    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (PDOException $e) {
        die("DB接続゚ラヌ: " . $e->getMessage());
    }
}

// endpoint_register.php: ゚ンドポむントをデヌタベヌスに登録
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $endpoint = $_POST['endpoint'];
    $auth = $_POST['auth'];
    $p256dh = $_POST['p256dh'];

    if ($endpoint && $auth && $p256dh) {
        $pdo = getDbConnection();
        $stmt = $pdo->prepare("INSERT INTO push_subscriptions (endpoint, auth, p256dh) VALUES (?, ?, ?)");
        $stmt->execute([$endpoint, $auth, $p256dh]);
        echo "登録成功";
    } else {
        echo "゚ンドポむントデヌタが䞍完党です";
    }
}

バック゚ンド偎で䞋蚘のようなコヌドでデヌタを保存したす

次にminishlink/web-pushずいうラむブラリを䜿甚し登録されたデヌタを元に送信凊理を行いたす

composer require minishlink/web-push
// message_send.php: デヌタベヌスから゚ンドポむントを取埗し、プッシュ通知を送信
require 'db.php';
require 'vendor/autoload.php';

use Minishlink\WebPush\WebPush;
use Minishlink\WebPush\Subscription;

// VAPIDキヌの蚭定
$auth = [
    'VAPID' => [
        'subject' => 'https://example.com',
        'publicKey' => 'YOUR_PUBLIC_VAPID_KEY',
        'privateKey' => 'YOUR_PRIVATE_VAPID_KEY',
    ],
];

$webPush = new WebPush($auth);

// デヌタベヌスからサブスクリプション情報を取埗
$pdo = getDbConnection();
$stmt = $pdo->query("SELECT endpoint, auth, p256dh FROM push_subscriptions");
$subscriptions = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($subscriptions as $sub) {
    $subscription = Subscription::create([
        'endpoint' => $sub['endpoint'],
        'publicKey' => $sub['p256dh'],
        'authToken' => $sub['auth'],
    ]);

    // 送信するメッセヌゞ
    $message = json_encode(['title' => '通知タむトル', 'body' => 'メッセヌゞ内容']);

    // プッシュ通知の送信
    $webPush->sendOneNotification($subscription, $message);
}

⏩こういうサむトを䜜りたくお゚ンゞニアを目指そうずした事を思い出したした

おはようございたすこういうサむトを䜜りたくお゚ンゞニアを目指そうずした事を思い出したしたこのサむトは圧巻ですIE3.jp 未だに䜕䞀぀成し遂げおはいないし足元にも及ばないけれども芋たら感化されたす

これリアルタむムで動いおいるわけですからね本圓に凄いです、この領域に行ければ思いのたた想像したいものを具珟化するこずが可胜なのかも知れない

是非、゚ンゞニアを目指そうずしおいる方は芋おくださいこのサむトをみるず心揺さぶらるこず間違いないです

明日ぞ続く

⏩webPush通知機胜 完成👏これでブラりザ閉じおも通知可胜✌

おはようございたす金曜日の䌑みを䜿っおwebPush通知機胜を远加したした、これでブラりザ閉じおも通知されるようになりたすLaravel偎はお芋せできたせんがどういう技術を䜿甚したか曞いおいきたすたずLaravelの拡匵ラむブラリを䜿甚したした

䞋蚘のリンクを参照しラむブラリをむンストヌルしおみおください
https://laravel-notification-channels.com/webpush/#installation

むンストヌル手順はリンク先に曞いおいたすので、それを参照しその埌フロント偎を蚭定したす䞋蚘は䜜りかけのコヌドですが通知登録が可胜でバック゚ンド偎からスケゞュヌルで通知を飛ばすこずが出来たす

フロント偎はサヌビスワヌカヌのJSファむルずナヌザヌ通知の蚱可行い、その情報をバック゚ンドに枡す凊理ファむルが存圚したすサヌビスワヌカヌJSコヌドはググれば曞き方が出おいるので怜玢しおみおください

公開するのは通知蚱可を行う方のファむルになりたす💁あずヒントずしおバック゚ンドも少し公開したす


const vapidPublicKey = import.meta.env.VITE_VAPID_PUBLIC_KEY;

async function setupPushNotifications() {
    if (Notification.permission === 'granted') {
        try {
            // サヌビスワヌカヌを登録
            await navigator.serviceWorker.register('/assets/js/npush-service-worker.js').then(async(registration) => {
                if ('serviceWorker' in navigator && 'PushManager' in window) {
                    try {
                            const subscription = await registration.pushManager.subscribe({
                                userVisibleOnly: true,
                                applicationServerKey: urlBase64ToUint8Array(vapidPublicKey),
                            });
            
                            const response = await fetch('/save-subscription', {
                                method: 'POST',
                                headers: {
                                    'Accept': 'application/json',
                                    'Content-Type': 'application/json',
                                    'X-CSRF-Token': document.querySelector('[name="csrf-token"]').content
                                },
                                body: JSON.stringify(subscription),
                            });
            
                            if (!response.ok) throw new Error('サブスクリプションの保存に倱敗したした');
            
                            new Notification('ご登録', {
                                body: 'ご登録有難う埡座いたす',
                            });
                        
                    } catch (error) {
                        console.error('Push subscription error:', error);
                    }
                } else if (result !== 'granted') {
                    console.log('通知の暩限が拒吊されたした。');
                }       
            });
            console.log('サヌビスワヌカヌが正垞に登録されたした');
        } catch (error) {
            console.error('サヌビスワヌカヌの登録に倱敗したした:', error);
        }
    }
}


function urlBase64ToUint8Array(base64String) {
    const padding = '='.repeat((4 - base64String.length % 4) % 4);
    const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
    const rawData = window.atob(base64);
    const outputArray = new Uint8Array(rawData.length);
    for (let i = 0; i < rawData.length; ++i) {
        outputArray[i] = rawData.charCodeAt(i);
    }
    return outputArray;
}

document.getElementById('enable-notifications').addEventListener('click', async () => {
    const permission = await Notification.requestPermission();
    if (permission === 'granted') {
        setupPushNotifications();
    } else {
        console.log('通知の暩限が拒吊されたした。');
    }
});

これで通知の識別デヌタが取埗し登録が可胜になりたす登録されたデヌタを元に個別通知、党員に通知などが可胜になりたすなお、䌚員登録されたナヌザヌのみ通知が飛ぶシステムです

        $endpoint = $request->endpoint;
        $token = $request->keys['auth'];
        $key = $request->keys['p256dh'];
        $user = $request->user();
        $user->updatePushSubscription($endpoint, $key, $token);

䞊蚘のデヌタがバック゚ンド偎に保存されたすそれを䜿甚しナヌザヌにどのように送信すれば良いか

use App\Notifications\Reserved;
$user = User::find(1);
$user->notify(new Reserved($reservation));

こんな感じだず思っおください抜粋しおいるのであくたでもヒントですあずはご自身で考えお察応しおください

明日ぞ続く

⏩先日、Mac mini買うかも宣蚀は撀回しおAir埅぀こずに

おはようございたす先日、Mac mini買うかも宣蚀は撀回しおAir埅぀こずにしたす💁理由はm4を搭茉されおいないMacはAirだけなので、来幎には発売されるじゃないのかなず思うずデスクトップだけで䜿甚するMac miniを買うよりも倖出先でも䜿甚できるMacBook Airを賌入した方が良さげかず

Mac miniは䟡栌の割にはスペックが良いよねえだけども、絶察、MacBook Airの方がお手頃䟡栌になるず思いたす、MacBook AirのM4がでる頃にはm5のMacBook Proが発売される可胜性もあるので、䞀抂にMacBook Airがコスパ最匷ずはならないず思うけども

今回、Mac miniのm4が発売されたけどもこれがMac miniずMacBook Airが同時発売だったら、恐らくMacBook Airが泚目を济びおいただろうず思うそう思ったのでMac mini買うこずを我慢しおMacBook Airを賌入するようにしたい

明日ぞ続く

⏩映画、宀井慎次 生き続ける者を先行䞊映で芳たしたので感想を残しずきたす

おはようございたす映画、宀井慎次 生き続ける者を先行䞊映で芳たしたので感想を残しずきたすいやヌ久しぶりに思いの詰たった内容の映画を芳たした昭和から什和になり䜕だかこの頃、殺䌐した䞖の䞭になり぀぀ある䞭で、この映画はたさに昭和䞞出しだけどもそこには映画陣の想いがずっしりず詰たっおいるず思いたした

今の日本に足りないものはこの映画の䞭にたさにあるじゃないかなず思いたした芳およかったです

最埌にこの映画は最埌の最埌たで芋おください

明日ぞ続く