古いWordPressのMySQL5.7をさくらレンタルサーバーでWordmoveしようとすると、「default.rb:45:in ‘gsub!’: invalid byte sequence in UTF-8」が出るときの解決策

現象:
Docker MarinaDB11.3 → さくらレンタルサーバー MySQL5.7でSQL dumpできない。

解決策:
DockerのSQLをMySQL5.7で合わるしかない。
(MarinaDBのデータはphpMyAdminでエクスポートしてから取り込む)


Movefileのdatabase設定 charset: “utf8″で解決できなかった。

具体的にはデータベース内の特定の文字列がUTF-8化できないというエラーなので、特定して潰せるならMarinaDBでもいける。(SQL操作が必要)


かなり昔にWordpressをVagrantでローカル構築して作ったWebサイトを、最近dockerで再開発した。
最近までApple Sillicon MacのdockerでMySQL5.7を使っていたが、どうしてもRossetaで無理やり動作させているため注意マークがでるのが気になっていた。
それならとMarinaDBに切り替えて、他案件ではうまくいっていたのだが、古い案件で特定の文字コードが変換できないみたいなエラーが出た。

テストサイトのデータなのでそこまで時間かけたくなかったこともあって、力技で解決したという備忘録。
困り人の役に立てば幸い。

Contact Form 7 Multi-Step Formsプラグインを使用して、チェックボックスの空欄(null)を受け取り、メールで送付する方法(input hidden設定)

結論

チェックボックスと同じ名前で、hiddenを作る
hiddenはチェックボックスの前に配置(空白を無理やり挿入する)

タグの構造としては以下になる。例えばcheckboxの名前が checkbox_name の場合

[hidden checkbox_name]
[checkbox checkbox_name use_label_element "チェックボックス項目A" "チェックボックス項目B" "チェックボックス項目C"]

checkboxは何も選択していない場合ではnullを返す。Contact Form 7の機能である「nullを空白に変換」にContact Form 7 Multi-Step Formsが対応しておらず、メールテンプレートで呼び出された [checkbox_name] がそのままメールの文面に出力されてしまう。
そこでhiddenを前に設定し、値として空白を渡す。もしチェックボックスが選ばれた場合は、空白は上書きされるという寸法。(nullは出力出来ないけど、空白はデータとして扱えるため)

checkboxのnullを、 [hidden checkbox_name] で空白に事前設定するという対抗策。

When checkbox fields are left unchecked they appear as [field-name] in the email. How do I resolve this?

チェックボックスフィールドのチェックを外したままにしておくと、メールに[フィールド名]として表示されます。どうすれば解決できますか?

When checkboxes are not checked they aren’t submitted through the form so the last step of the form doesn’t know the unchecked checkbox field exists. To get around this issue add a hidden form tag like [hidden field-name] to the last step. This way the last step will either submit the previously set value or a blank value.

チェックボックスがチェックされていないとき、それらはフォームを通して送信されないので、フォームの最後のステップはチェックされていないチェックボックスフィールドの存在を知りません。この問題を回避するには、最後のステップに [hidden field-name] のような hidden フォームタグを追加します。こうすることで、最後のステップでは前回設定した値か空白の値が送信されます。

https://ja.wordpress.org/plugins/contact-form-7-multi-step-module/

地味に厄介でQ&Aに書いてある英文翻訳は解決策がよくわからなかったので備忘録メモ。
ボクも確認画面いるかー?派なのだけど、これ好きな人多いんだよな……。

困り人の役に立てば幸い。

XSERVERのMariaDBにWordmoveで接続してdumpしようとすると、Authentication failed for user (Net::SSH::AuthenticationFailed)が発生する

簡潔に結論。公開鍵形式に起因。
ed25519形式は認証できない。
RSA形式で再作成して再登録する。


XSERVERに登録したSSH公開鍵がed25519形式の場合、ssh接続は可能でも、データベース操作でdumpファイルを出力しようとするとSSHで認証ゴケする。マジで謎。
(ed25519形式でも、rsyncによるテーマファイルやプラグイン等のダウンロード・アップロードは可能。 wordmove push / pull -dだけ失敗する)

256 SHA256:####################### (ED25519). ← DB dumpのときにSSH認証エラー
4096 SHA256:****************************** (RSA) ← こちらはOK

さくらインターネットはいつもどおり上手くいくのに、Xserverだとできないのマジで謎だった。Docker / nginx / wordpree / wordmoveというニッチな環境でやってると類例がでなくて大変困る。

何回やってもエラーが発生するし、サーバー側のデータベース指定の箇所を、XSERVERがMySQL5.7からMariaDBに変更され、mysql***.xserver.jpからlocalhost指定になったのが原因なのでは?これ詰んだかなー?と試行錯誤した結果、SSHの鍵の種類だった。マージでうんこー。

困っている方のお役に立てば幸いです。(’A’

Macbookのカメラを物理的にオフにしたい

Macbookを購入してから気になるようになったことが2つある。
それは、ディスプレイについているカメラとマイクの存在だ。

アクセシビリティ設定でカメラの使用を許可しなければカメラは起動しないし、マイクも起動しない。そう説明されわかってたとしても、本当に?という気持ちが澱のように心に降り積もる。陰謀論者ではないが、迷惑メールでくるあの一文を見たときはWebカメラをもっていなかったので一笑に付していたが、Macbookのカメラという存在ができたことで可能性を0にしきれない。それがそこそこのストレスになった。

“Macbookのカメラを物理的にオフにしたい” の続きを読む

Macbook M3pro 36GB / 1TBで仕事をしてみた

正直ベンチマークのスコアとか実務でどのくらい使えるかの指標にならないから、早いんだろうなーと思いはすれども、購入の決め手にならない。
というわけで実際に仕事で使用した感想を書こうと思う。

Youtubeの比較レビュー、再生数稼ぎでほとんど参考にならない。
Lightroomで書き出しが何秒です!Fuuuuu!Cinebenchが爆速です!とかクソほどどうでもいい。と思ったので投稿。
そんなレビュー動画で稼いで新しいMacbook羨ましいだろぅ?されるのは、正直にコンテンツとしてゴミだと思う。
実務で使ってみましたって動画だけ見たいが、Youtubeで検索しても出てきづらいのは広告モデルとしてなんとなく破綻してる気がする。本当に価値のあるものが見つけづらい。
再生数が多いから価値があるってのは、評価として正しいとは思えない。
Amazonの桜レビューが失敗してるのだから、新しい評価基準が必要なんじゃないのかな。

Webサイトをデザインしながらローカル開発

Photoshop / illustrator(1GB未満のファイル)を使いながらデザインを制作し、Docker / nginxでWebサーバーを立ち上げ、webpackでWordpressとHTMLをwatchしながら、SassとJavascriptのコンパイル開発。
そんなよくある状況をMacbook M3pro 11core / 14gpu / 36GB / 1TBで動作させた。
ブラウザはChrome、Safariを同時起動しつつ、何故かSafariのレスポンシブデザインモードでiPhoneやiPadが選べなかったのでXcodeでデバイスシミュレーターを起動。iPhone15とiPhone SE 3rdGenを同時起動して確認。

結論

メモリ使用量は頭打ちするものの、高速な内蔵ディスクでスワップするのでシステムが重くなったりはしない。(レインボー回転はしない)
つまり実務で使用する上でまったくストレスはない。

2023/03/04追記

ちょっとした仕事でillustratorをガッツリ使うことしたら、ハブ経由で27インチに出してたのが問題なのか不明だが、画面表示が全然スムーズじゃなかったり、チラチラと表示がついたり消えたりしたり、微妙にひっかかるような重さがあったりとストレスのなく使うには厳しい感じがある。
お金があってストレスを感じたくない場合はやっぱりM3 MAXが安定な気がした。

  • Mac Studio M1 Max 24core / 16gpu / 64GB / 1TB
  • Mac Pro Xeon 5680X 12core / RX580 / 64GB / 1TB

比較対象として上記を所持しているが、Dockerの起動速度や実行速度、Adobe製品の使用感はM3の方が快適だ。illustratorでアピアランスを多様したような超絶重いベクターデータだけは、さすがにM1 Maxの方がストレスがない。(RAMの差)

もし実務として印刷物の制作があるのであれば、さすがにM3 Maxを買ったほうがいいだろう。65万を投資して96GBのRAMと1TB内蔵SSDで幸せになって欲しい。
ただボクにそんなお金があるなら、迷わず整備品でM2 Ultraの整備品を買う。

オチとしてはM1のMaxとM3 proなら処理能力はそこまで差がないというお話。
単純にAdobe製品はメモリバカ食いするので、食わせれれる物が沢山あればあるほどよいよね→Proは36GB頭打ちしてるよって話。
もしProで64GBあったらMAX買うメリットなくなるしね。
ただMAXで上位版にしか48GB / 64GB選べないのは、Apple様すぎる。
「それなら3万円上乗せして96GBにするだろ?(ニチャァ)」という歯茎を感じる。

あとXcodeのデバイスシミュレーターもサクサクだった。Xeonではガックガクな重さだったので、デバイスの最適化は強いというか、Appleがハードとソフトを自社で開発してる強みが出ている。流石に第三世代のAppleSiliconというべきなのかチューニングも完璧だ。

M3pro Macbookを買おうか悩んでる人の判断材料になれば幸い。

“Macbook M3pro 36GB / 1TBで仕事をしてみた” の続きを読む

webpack5のdevServerを設定すると、SCSSが書き出されない問題の解決設定

マージでハマったので備忘録

解決策

devServer: {
  static:path.resolve(__dirname, 'public_html/***/wp-content/themes/***/assets/dest'),
  hot: 'only',
  compress: true,
  port: 3000,
  https: true,
  proxy: {
    '*': {
      target: 'https://localhost:****', // nginxで稼働してるwordpressのアドレス
      secure: false,
      changeOrigin: true,
    },
  },
  devMiddleware: {
  	writeToDisk: true,
  }
}

devMiddlewareでwriteToDisk:trueで解決できた。
海の彼方にいる名も知らぬ友よ。
幾千の感謝を。

Docker / nginxでWordpressを立ち上げて開発しつつ、webpackでbrowserSyncしていたのだけど、browserSyncのバージョンがあがってしまい、browserSync-webpack-pluginが死んだ。
正直pluginだけの問題だからバージョン下げるってのも考えはしたけど、そういうのが嫌でgulpを投げ捨ててwebpackにしたので、なんとか解決した。

ニッチな製作していると突然死んでしまう。

Macbookのバッテリー充電最大量を80%で止めるアプリ「Battery」をインストールした話

去年発売されたiPhone 15には、バッテリーを長持ちさせるために満充電を100%から80%に抑制する機能が追加された。
その機能が搭載されたiPhoneよりも後に発売されたMacbookだから当然のようにその機能があると思っていたら、設定されているにも関わらず100%まで充電されてしまった。
(学習式だから普段バッテリーを外して使っていたのが災いしたのだろうか?)

そこで「Battery」というアプリケーションをインストールして、強制的に80%制限を行うことにした。ちなみにAppleでのMacbookのバッテリー交換費用はだいたい37,500円のようだ。
なるべく長持ちさせたいので初期段階で抑制することにしたという話。

導入の理由に加えると、バッテリー駆動だと消費電力の関係でスリープモードになりがちで、USB-HUB経由の外付けHDDやディスプレイがOFFになって復帰にちょっと時間がかかる。それが少し煩わしい感じがしたのが強い。
電源接続した状態でも充電が常に80%で止まってくれるなら助かる。

インストール方法は、いつもの brew install batteryでもいいし、dmgファイルでGUIインストールも、コマンドラインインストールも用意されているので好きな方法で簡単に導入できる。

インストール後はバッテリーアイコンが表示されるので、ON/OFFの設定が可能。
抑制するバッテリー量を変える場合は、ターミナルでコマンド入力を行う。(battery charge 90とかで)

ちなみにMacOSのバッテリー充電の最適化設定がどこにあるかわからなくて、探したら「設定」→「バッテリー」→「バッテリーの状態」の「( i )」アイコンをクリックで表示された。
一番下にある「オプション」に設定項目がなかったので、消えたのかと思った。

M3Pro Macbook Proの購入と拡張に悩んだ話

購入ボタンをおしたときは「いつ届くのかなー」と楽しみで、「発送されました」と表示されるまではワクワクしていたはずなのに、実際に目の前に届くと「買ってしまった……」と高額な買い物に後悔が生まれるのはなぜなのだろうか。
そして数日経つと「まぁいいか」となる。
人間の気持ちはそんなものだ。

“M3Pro Macbook Proの購入と拡張に悩んだ話” の続きを読む

WordPressでpictureタグのsrcsetはshortcodeが効かない

解決策ででてくるblogのタグが動かないのでお願いChatGPTで解決したので備忘録。

function generate_image_tag($atts) {
    $atts = shortcode_atts( array(
        'img' => '',
        'alt' => '',
        'webp' => true,
        'theme_url' => get_bloginfo('template_url'),
        'picture_class' => '',
    ), $atts );

    // File path details
    $file_info = pathinfo($atts['img']);
    $file_dir = $file_info['dirname'] != '.' ? $file_info['dirname'].'/' : '';
    $file_url = $file_dir . $file_info['filename'];

    $output = '<picture';

    // クラスが指定されていれば追加
    if (!empty($atts['picture_class'])) {
        $output .= ' class="' . esc_attr($atts['picture_class']) . '"';
    }

    $output .= '>';

    if (strtolower($file_info['extension']) === 'svg') {
        // If the file is an SVG
        $output .= '<source media="(min-width: 768px)" srcset="'.$atts['theme_url'].'/images/'.$file_url.'.svg" type="image/svg+xml">';
        $output .= '<source media="(max-width: 767px)" srcset="'.$atts['theme_url'].'/images/'.$file_url.'_mobile.svg" type="image/svg+xml">';
        $output .= '<img src="'.$atts['theme_url'].'/images/'.$file_url.'.svg" alt="'.esc_attr($atts['alt']).'">';
    } else {
        // For other image types (non-SVG)
        $use_webp = $atts['webp'] && in_array(strtolower($file_info['extension']), array('png', 'jpg'));

        // WebPが指定されている場合
        if ($use_webp) {
            $output .= '<source media="(min-width: 768px)" srcset="'.$atts['theme_url'].'/images/'.$file_url.'.webp" type="image/webp">';
            $output .= '<source media="(max-width: 767px)" srcset="'.$atts['theme_url'].'/images/'.$file_url.'_mobile.webp" type="image/webp">';
            $output .= '<img src="'.$atts['theme_url'].'/images/'.$file_url.'.'.$file_info['extension'].'" alt="'.esc_attr($atts['alt']).'">';
        } else {
            // WebPが指定されていない場合
            $output .= '<source media="(min-width: 768px)" srcset="'.$atts['theme_url'].'/images/'.$file_url.'.'.$file_info['extension'].'" type="image/'.$file_info['extension'].'">';
            $output .= '<source media="(max-width: 767px)" srcset="'.$atts['theme_url'].'/images/'.$file_url.'_mobile.'.$file_info['extension'].'" type="image/'.$file_info['extension'].'">';
            $output .= '<img src="'.$atts['theme_url'].'/images/'.$file_url.'.'.$file_info['extension'].'" alt="'.esc_attr($atts['alt']).'">';
        }
    }

    $output .= '</picture>';

    return $output;
}
add_shortcode('generate_image', 'generate_image_tag');

これで固定ページに以下のショートコードを挿入することで、SVGの時はSVGとして、jpg/pngでwebp用意している・していない時を切り替えることができる。

使い方は

[generate_image img="ディレクトリ+ファイル名" picture_class="pictureへのclassを入力(複数可)" alt="alt属性を入力" webp="true/false"]

img=””にファイル名を入力。拡張子がsvgの時は、webp=””は省略可能。
webp=””はファイル拡張子がpngまたはjpgの時、用意しているのであればtrue、用意していないときはfalseを設定。

迷い人の解決になれば。

YAMAHA NVR500でDHCP固定IPをNASに設定したい

備忘録がてらメモ。

Windowsの場合はtelnetが初期でインストールされているが、Macだとなかったのでインストールから。

$ brew install telnet

次にNVR500のIPにtelnetでアクセス。

$ telnet 192.168.***.***

ログインパスワードを聞かれるので入力。
DHCP情報なんかも見るコマンドを打ち込んでも文字化けしているのでよくわからない。
先に文字コードを変更しておく。

> administrator
Password: // 管理者のパスワードを入力
> console character ascii // 文字コード変更
> save // 設定を保存
Saving ... CONFIG0 Done .

現在のDHCP情報の確認は show status dhcp を入力する。
本題の固定IPの設定は以下の書式

> dhcp scope bind scope 1 192.168.***.*** NASのMacアドレス

もし間違っちゃったぜ!というときは dhcp scope unbind 1 192.168.***.*** と記載している情報が多いのだけど、ボクの環境では「パラメーターが整数ではありません」とエラーがでた。
そこで先達の知恵に感謝しつつ、以下で解決。

> no dhcp bind scope 1 192.168.***.***

知恵を残してくれた先達に感謝を。
ヤマハルーターnvr510でv6プラスを+α