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プラスを+α