blogのURLどうしようかなこれ

そういえば

WordPressの投稿データを抜き出して云々をやっていて気づいたのだが、URLそのままにオレオレblogシステムを作る場合にRouter周りはどうやって実装すればいいんだ?と。

WAFのRouter

通常、というか俺の知る限りだとbootstrapファイルにリクエストを集約させて、リクエストURIから分岐して云々がデフォだ。MVCではないWordPressでも同じ。例えばPHPのPhalconではnginxの設定に下記記述をする。

    # Represents the root of the domain
    # https://localhost:8000/[index.php]
    location / {
        # Matches URLS `$_GET['_url']`
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

Phalcon Documentation - Web Server Setup

そのリクエストに対してFWのコアでゴニョゴニョやって、下記のようなURLパターンで処理を分岐させ実行している。

/<Contoroler>/<Function>/<Param>

ASP.netの場合、MVCテンプレートを作るとStartup.csには自動で下記のようなコードが生成される。

            app.UseEndpoints(endpoints => {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });

Go(Gin)の場合は、この間作ったメールフォームのを引用するとこんなん。

const (
    IndexPath    = "/contact/"
    ConfirmPath  = IndexPath + "confirm"
    CompletePath = IndexPath + "complete"

    /* ----- 省略 ----- */

    // action
    engine.GET(IndexPath, index)
    engine.POST(ConfirmPath, confirm)
    engine.POST(CompletePath, complete)
    // 404
    engine.NoRoute(notFound)

で、

WordPressにはdefaultでcategoryなどがあるので、Frontend側はIndex, Categoryの2つのコントローラでいいよなーと何の疑問もなく考えていた。(コメントとか検索とかは全く不要なので)

自分のblogのパーマネントリンク設定なんて忘れていたのだ。

wp-permalink

前回のエントリ記事のURLは https://www.dobusarai.net/blog/omaera-mo-deskmawari-wo-miseroyo/ である。/blogというのは単にこのWebサーバ内のblogディレクトリの中にWordPressを突っ込んでいるからそうなっているだけで、WordPressから見ればURLは /omaera-mo-deskmawari-wo-miseroyo/ こうである。これはwp_posts.post_nameである。

`post_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',

unique付いてないんだな、phpで存在チェックしてるんだな、とかはどうでもよい。普通のMVCフレームワークで作ると……通常は上のparamをIndexControllerで受けつけようとすると /index/omaera-mo-deskmawari-wo-miseroyo となる。PHPでナウな感じじゃないなら /?post_name=omaera-mo-deskmawari-wo-miseroyo とかでもいいけど。

そういうわけで潜る前に

や、こんなんどこかでURLを解析して分岐してるだけなのはわかっている(そして美しくないコードであることも)のだが、このpost_nameをキーにして個別ページを描画するというルールに則った場合、お行儀の良いMVCにするのは不可能だなと。URLパターン変えてnginx側でredirectさせてもいいのだが(そもそもこんな泡沫blogのURLなんてどうでもいいのだが)めんどくさい!コードたくさん書くよりミドルウェアの設定を変えるほうがよっぽど!

追記 2020-12-21

debuggerで追いかけてみた。/wp-includes/class-wp.php内で鬼のような数の正規表現パターン(commentがーsearchがー等々)を所有してループで回し、リクエストにhitするかどうかーみたいのをやってる。想像通り(実装はあ"ーって感じだが)なのでもう追いかけるの終わりにする。

( ゚Д゚) お前等もデスク周りをみせろよ

はじめに

これはデスク周りの写真、自宅作業環境 Advent Calendar 2020 12/06のエントリです。

自身のPC周りを晒すことに快感を覚えるキチガイと、それを覗き見てフヒフヒ言ってるキチガイは昔からかなりの数がおりまして。昔々、自作板のお前等の自作機のある部屋みせろよスレは私、常駐してました。過疎ってるけど今もまだあんのなー。まあ今回はデスク周りなんですけど。

続きを読む "( ゚Д゚) お前等もデスク周りをみせろよ"

[blog][markdown] うーんこの

markdown

慣れるまで、や、使い始めるまでは「なんかめんどくさいんじゃないのー?Web系のウェイウェイが騒いでるだけでさー?」ってイメージだったのだが、今ではメモするにも何するにしてもmarkdownで書いている。特に職場ではVScodeくらいしか自由に使える道具が無いので非常に有用だ。そうなってくるとこの当該クソブログもmarkdownで書きたくなるわけで。

続きを読む "[blog][markdown] うーんこの"

画面キャプチャツールをまた作ろうかなと

はじめに

史上最速でスクショがとれるワザ!「[Windows]+[Shift]+[S]」って知ってる?

こんなエントリがちょっと前にバズってました。私はSI時代、エビデンス(大爆笑)とかいうものを作る奴隷業に精を出していました。「目標をセンターに入れてクリック……目標をセンターに入れてクリック……」と死んだ目をしつつ Alt & PrintScreen → ペイントにペーストして保存。そんな想い出とともに、自身が使っているツールを思い出したのです。

CapImage2

カメラのアイコン

今考えると意味がわからないソフトウェア名なのですが、Shift & PrintScreen(など)で画面のビットマップコピーを取得すると同時に、指定ディレクトリにファイルを生成するツールです。Bitmap/PNGの画質、キーアサイン、出力ディレクトリの指定、くらいの項目は設定ファイルで変更できるようにしていた。ただ、activeなwindowではなく常に画面全体をキャプチャするので用途が限られていたのでした。

config_and_readme

よーし、これ改良してactiveなwindowを選択してキャプチャ出来るようにして、尚且つクリップボードのデータも取っちゃうぞ!などと意気揚々とプロジェクトディレクトリを開こうと思ったのですが、無いのです。VS2015なのか2013なのか思い出せませんがソリューションが。プロジェクトが。ソースコードが。

PS C:\> Get-ChildItem e:\ "capimage2.*" -Recurse

    ディレクトリ: E:\Application

Mode                LastWriteTime         Length Name                                                                                                                                         
----                -------------         ------ ----                                                                                                                                         
d-----       2014/10/18     15:40                CapImage2                                                                                                                                    

    ディレクトリ: E:\Application\CapImage2

Mode                LastWriteTime         Length Name                                                                                                                                         
----                -------------         ------ ----                                                                                                                                         
-a----       2015/01/13     22:31          20992 CapImage2.exe 

えー、Windowsの常駐ソフトウェアとか作り方微塵も覚えてないし、一番苦労したのは確かアイコン画像を自分で書いたんだよこれ!みたいな。

そこで

せっかくgolang勉強しようと思ってるし何作っていいかわからんしRaspberry Pi Zeroはなんか俺がやりたいと思っていることを尽く潰してくれやがるしってんで丁度いいかなと思い検索してみたのだが。golangとWindows GUIは超絶相性悪いというか、そんなもん作りたいやつが学ばないというかぶっちゃけ修羅の道なので断念した(なんかWindowsService作ってる人は何人かいたし海外だとわざわざgoからWin32API直叩きしてる人もいた……)。

.net coreでコンフィグや画面出力する部分はWebView2で作ることにした。WebView2の.net core GAまだー?

ラズパイをラジカセに

ラジカセじゃないんだけど音質的に

USBハブUSBマイクUSBスピーカーと購入。安く済ますためにRaspberry Pi Zeroを購入したというのにこの、なんだ、なんでもない。Zeroでなければ.net coreも動いたというのに……!まあいい機会なのでgolangを勉強するよ。

今日は息抜き & 購入したハードのテストを兼ねて、Raspberry Pi Zeroから音楽再生を試した。Youtubeを検索して一覧表示、選択して音声のみ再生というメソッド。古い情報(すでに更新されていないリポジトリのプレイヤーでドハマリしたり)が多かったので、速攻でキッティングできるようにメモ。

事前に

Raspberry Piに電源とUSBハブを接続。そのUSBハブにはUSBスピーカーとUSBスピーカーを接続。

再生デバイスの確認

dobusarai@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 0d8c:0016 C-Media Electronics, Inc.
Bus 001 Device 003: ID 0d8c:0103 C-Media Electronics, Inc. CM102-A+/102S+ Audio Controller
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
dobusarai@raspberrypi:~ $ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: Headphones [bcm2835 Headphones], デバイス 0: bcm2835 Headphones [bcm2835 Headphones]
  サブデバイス: 8/8
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3
  サブデバイス #4: subdevice #4
  サブデバイス #5: subdevice #5
  サブデバイス #6: subdevice #6
  サブデバイス #7: subdevice #7

私が購入したUSBスピーカーは、上記のカード0, デバイス0になる。default再生デバイスの確認や変更は下記が詳しい。

https://qiita.com/jumjamjohn/items/6b5d543f611f55abf254

適当なwavファイルでも拾ってきて、aplay hoge.wav で再生ができてれば問題ないはず。音量調整でalsamixerなどを使ったような気がするが、特に必要ないような気もする。異様に音量が高い、低いなどがあれば都度調べて調整。

pip3のインストール

使用するソフトウェアをインストールするために必要なので行う。

dobusarai@raspberrypi:~ $ sudo apt-get -y install python3-dev
dobusarai@raspberrypi:~ $ sudo apt-get -y install python3-pip

ソフトウェアのインストール

dobusarai@raspberrypi:~ $ pip3 install --user mps-youtube
dobusarai@raspberrypi:~ $ pip3 install --user youtube-dl

dobusarai@raspberrypi:~ $ sudo apt install mpv

PATH通す

~/.local/bin に上記の上2つはインストールされるのでPATHを通しておく。

Youtube Data API Keyの取得

defaultだと「Keyつかいまわしすぎ!」で、まずエラーになる。自身のgoogleアカウントでAPI KEYの取得が必要。下記あたりで取得方法を参照してください。念の為API KEYには制限なども設定しましたが、まあしなくても大丈夫でしょう、多分。気になる人は調べてやってください。

https://hi3103.net/notes/web/1271

起動・再生

dobusarai@raspberrypi:~ $ mpsyt set api_key <API_KEY>

初回実行のみ、api_keyを指定して実行。実行後になんかOK的なメッセージが出ます(書き留めるの忘れた)。現在は "The key, '' will now be used for API requests." こんな感じのメッセージ。

先程インストールしたmpvを再生プレイヤーに指定。

> set player mpv

今回はYouTubeのFirst Takeというチャネルにある、かぐや様二期の主題歌を再生します。


                                                                                                   _         _
                                                       _ __ ___  _ __  ___       _   _  ___  _   _| |_ _   _| |__   ___
                                                      | '_ ` _ \| '_ \/ __|_____| | | |/ _ \| | | | __| | | | '_ \ / _ \
                                                      | | | | | | |_) \__ \_____| |_| | (_) | |_| | |_| |_| | |_) |  __/
                                                      |_| |_| |_| .__/|___/      \__, |\___/ \__,_|\__|\__,_|_.__/ \___|
                                                                |_|              |___/ v0.2.8

Enter /search-term to search or [h]elp
>/the first take

"/"スラッシュに次いで検索ワードを入力。今回は"the first take"。検索結果がずらずら出てきたら通信成功。リストの左側にある番号を入力してEnter。おわり

続きを読む "ラズパイをラジカセに"